FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Amenophis86 am 16 Oktober 2016, 19:46:58

Titel: [gelöst - unbekannt wie :D] unknown attr Fehler bei Perl ausführung
Beitrag von: Amenophis86 am 16 Oktober 2016, 19:46:58
Wenn ich folgende Routine aus meiner 99 Utils ausführe:


sub Rollladen_Lautstaerke_TV ()
{
if (Value("Denon_AVR") eq "on")
  {
   my $lautstaerke_akt = ReadingsVal('Denon_AVR','volume','40');
   chop ($lautstaerke_akt);
   chop ($lautstaerke_akt);
   my $lautstaerke_neu = $lautstaerke_akt + 5;

   fhem("set Denon_AVR volume ".$lautstaerke_neu.";");
   fhem("define Denon_AVR.Rollladen at +00:00:40 set Denon_AVR volume ".$lautstaerke_akt.";");
  }
}


bekomme ich folgenden Fehler:
Denon_AVR.Rollladen: unknown attribute HMLAN1. Type 'attr Denon_AVR.Rollladen ?' for a detailed list.

Hier ein List des Denon:

Internals:
   CFGFN
   Clients    :DENON_AVR_ZONE:
   DEF        192.168.2.24
   DeviceName 192.168.2.24:23
   FD         35
   NAME       Denon_AVR
   NEXT_OPEN  1476636371.62174
   NR         448
   NTFY_ORDER 50-Denon.AVR
   PARTIAL
   STATE      opened
   TIMEOUT    3
   TYPE       DENON_AVR
   Readings:
     2016-10-16 18:45:17   allZoneStereo   off
     2016-10-16 18:45:17   autoStandby     off
     2016-10-16 18:45:17   bass            0 dB
     2016-10-16 18:45:17   cinemaEQ        off
     2016-10-16 18:45:17   currentAlbum    -
     2016-10-16 18:45:17   currentArtist   -
     2016-10-16 18:45:17   currentBitrate  -
     2016-10-16 18:45:17   currentMedia    -
     2016-10-16 18:45:17   currentPlaytime -
     2016-10-16 18:45:17   currentStation  -
     2016-10-16 18:45:17   currentTitle    -
     2016-10-16 18:45:17   digitalInput    auto
     2016-10-16 18:45:17   display         bright
     2016-10-16 18:45:17   dynamicCompression off
     2016-10-16 18:45:17   dynamicEQ       on
     2016-10-16 18:45:17   dynamicVolume   off
     2016-10-16 18:45:17   eco             off
     2016-10-16 18:45:16   input           Cbl/Sat
     2016-10-16 18:45:17   levelCenter     0 dB
     2016-10-16 18:45:17   levelFrontLeft  0 dB
     2016-10-16 18:45:17   levelFrontRight 0 dB
     2016-10-16 18:45:17   levelSourroundBackLeft 0 dB
     2016-10-16 18:45:17   levelSourroundBackRight 0 dB
     2016-10-16 18:45:17   levelSourroundLeft 0 dB
     2016-10-16 18:45:17   levelSourroundRight 0 dB
     2016-10-16 18:45:17   levelSubwoofer  0 dB
     2016-10-16 18:45:17   loudness        on
     2016-10-16 18:45:17   lowFrequencyEffects 0 dB
     2016-10-16 18:45:17   multEQ          reference
     2016-10-16 18:45:16   mute            off
     2016-10-16 18:45:17   playStatus      stopped
     2016-10-16 18:45:16   power           on
     2016-10-16 18:45:16   presence        present
     2016-10-16 18:45:17   setup           off
     2016-10-16 18:45:16   sleep           off
     2016-10-16 18:45:17   sound           Dolby PL2X C
     2016-10-16 18:45:16   state           on
     2016-10-16 18:45:17   stateAV         on
     2016-10-16 11:06:08   surroundMode    Auto
     2016-10-16 18:45:17   toneControl     off
     2016-10-16 18:45:17   treble          0 dB
     2016-10-16 18:45:17   tunerBand       FM
     2016-10-16 18:45:17   tunerFrequency  87.5 kHz
     2016-10-16 18:45:17   tunerMode       auto
     2016-10-16 18:45:17   tunerPreset     1
     2016-10-16 18:45:17   videoSelect     off
     2016-10-16 19:43:27   volume          48.5 %
     2016-10-16 19:43:27   volumeMax       98 %
     2016-10-16 19:43:27   volumeStraight  -31.5 dB
     2016-10-16 18:45:16   zone2           off
     2016-10-16 18:45:16   zoneMain        on
   Helper:
     INPUT      SAT/CBL
     PARTIAL
     USEDINPUT  Aux1,Aux2,Blu-Ray,Bluetooth,CD,Cbl/Sat,DVD,Favorites,Favorites_play,Flickr,Game,Mediaplayer,OnlineMusic,Phono,Server,TV,Tuner,Usb/iPod,Usb_play,iPod_play,iRadio,iRadio_play
     isPlaying  0
     nextConnectionCheck 1476639987.71346
Attributes:
   DbLogExclude .*
   cmdIcon    muteT:rc_MUTE
   devStateIcon on:rc_GREEN:off off:rc_STOP:on absent:rc_RED muted:rc_MUTE@green:muteT playing:rc_PLAY@green:pause paused:rc_PAUSE@green:play
   group      Medien
   room       S_Wohnraum
   stateFormat stateAV
   webCmd     volume:muteT:input:surroundMode


Das Modul habe ich aus folgendem Beitrag:
https://forum.fhem.de/index.php/topic,58452.0.html

Kann mir jemand sagen, wieso der Fehler kommt? Danach kann ich die Routine auch nicht mehr ausführen, bis ich sie neu geladen habe.
Titel: Antw:unknown attr Fehler bei Perl ausführung
Beitrag von: dev0 am 16 Oktober 2016, 21:00:03
Die Fehlermeldung passt nicht zur gezeigten sub. Reload der myUtils vergessen? 2 Subs mit identischen Namen?
Titel: Antw:unknown attr Fehler bei Perl ausführung
Beitrag von: Amenophis86 am 16 Oktober 2016, 21:08:42
Weil es nicht hat passt und ich den Fehler nicht finde, habe ich es ja hier gepostet :)

Keine doppelte Sub vorhanden und reload findet doch auch statt, wenn ich auf speichern klicke, oder?

Mich wundert es auch, aber kommt der Fehler immer dann, wenn ich die Sub ausführe und danach kann ich sie kein zweites Mal ausführen.
Titel: Antw:unknown attr Fehler bei Perl ausführung
Beitrag von: Amenophis86 am 16 Oktober 2016, 21:20:50
Es scheint an dieser Zeile zu liegen:


fhem("define Denon_AVR.Rollladen at +00:00:40 set Denon_AVR volume ".$lautstaerke_akt.";");


Kommentiere ich diese aus, tritt das Problem nicht auf.
Titel: Antw:unknown attr Fehler bei Perl ausführung
Beitrag von: justme1968 am 16 Oktober 2016, 22:08:25
die meldung wird nur dann ausgegeben wenn die CommandAttr verwendet wird. du kannst mal versuchen da an den anfang einen aufruf von stacktrace() einzubauen und im log zu schauen woher der aufruf genau kommt.

gruss
  andre

ps: vielleicht helfen dir die folgenden dinge auch weiter:

- die die addition wird schief gehen wenn es das reading volume nicht gibt. vom default 40 zwei mal etwas abgeschnitten bleibt nichts übrig
- statt ReadingsVal und die beiden chop wäre readingsNum besser
- das letze ; in den beiden fhem kommandos ist überflüssig
- statt string concatenation kannst du auch direkt variablen in einem "..." string verwenden.

die routine könnte also z.b. so aussehen:sub Rollladen_Lautstaerke_TV ()
{
if (Value("Denon_AVR") eq "on")
  {
   my $lautstaerke = ReadingsNum('Denon_AVR','volume','40');

   fhem("set Denon_AVR volume ".$lautstaerke+5);
   fhem("define Denon_AVR.Rollladen at +00:00:40 set Denon_AVR volume $lautstaerke");
  }
}


oder mit sleep statt at:sub Rollladen_Lautstaerke_TV ()
{
if (Value("Denon_AVR") eq "on")
  {
   my $lautstaerke = ReadingsNum('Denon_AVR','volume','40');

   fhem("set Denon_AVR volume ".($lautstaerke+5).";sleep 40;set Denon_AVR volume $lautstaerke" );
  }
}
Titel: Antw:unknown attr Fehler bei Perl ausführung
Beitrag von: franky08 am 16 Oktober 2016, 22:10:40
@Andre
Zitatstring verenden

das hat meine Laune deutlich aufgeheitert  ;)

VG
Frank
Titel: Antw:unknown attr Fehler bei Perl ausführung
Beitrag von: justme1968 am 16 Oktober 2016, 22:11:39
 :P
Titel: Antw:unknown attr Fehler bei Perl ausführung
Beitrag von: franky08 am 16 Oktober 2016, 22:15:45
Dann lies mal den Thread: https://forum.fhem.de/index.php/topic,59017.0.html

da sind so manche nützliche Strings am "verenden" oder werden nicht wahrgenommen usw. ....  ::)

ZitatEinzige Möglichkeit das zu unterbinden: Privates FHEM Forum mit vorherigem Einstellungstest ! Vielleicht sollte man mal eine demokratische Abstimmung vornehmen ?

VG
Frank
Titel: Antw:unknown attr Fehler bei Perl ausführung
Beitrag von: Amenophis86 am 16 Oktober 2016, 22:23:49
Zitat von: justme1968 am 16 Oktober 2016, 22:08:25
die meldung wird nur dann ausgegeben wenn die CommandAttr verwendet wird. du kannst mal versuchen da an den anfang einen aufruf von stacktrace() einzubauen und im log zu schauen woher der aufruf genau kommt.
Muss ich mal schauen, was du damit meinst. Habe ich noch nicht ganz verstanden

Zitat


die routine könnte also z.b. so aussehen:
[code]sub Rollladen_Lautstaerke_TV ()
{
if (Value("Denon_AVR") eq "on")
  {
   my $lautstaerke = ReadingsNum('Denon_AVR','volume','40');

   fhem("set Denon_AVR volume ".$lautstaerke+5);
   fhem("define Denon_AVR.Rollladen at +00:00:40 set Denon_AVR volume $lautstaerke");
  }
}


Hatte nicht ganz geklappt, da der "$lautstaerke+5" nicht verarbeiten konnte, aber nicht schlimm, konnte ich umgehen. Der Attr Fehler kommt jedoch weiterhin.

Zitat
oder mit sleep statt at:

sub Rollladen_Lautstaerke_TV ()
{
if (Value("Denon_AVR") eq "on")
  {
   my $lautstaerke = ReadingsNum('Denon_AVR','volume','40');

   fhem("set Denon_AVR volume ".($lautstaerke+5).";sleep 40;set Denon_AVR volume $lautstaerke" );
  }
}

Die zweite Möglichkeit klappt und wirft den Fehler nicht aus. Ich frage mich, wie er auf das CommandAttr kommt? Liegt es vielleicht an einem Fehler im Modul??
Titel: Antw:unknown attr Fehler bei Perl ausführung
Beitrag von: Amenophis86 am 16 Oktober 2016, 22:33:49
Hier die Antwort, wenn ich es so aufrufe:

sub Rollladen_Lautstaerke_TV ()
{
if (Value("Denon_AVR") eq "on")
  {
   my $lautstaerke_akt = ReadingsNum('Denon_AVR','volume','40');
   my $lautstaerke_neu = $lautstaerke_akt+1;
   
   fhem("set Denon_AVR volume ".$lautstaerke_neu);
   stacktrace();
   fhem("define Denon_AVR.Zurueck at +00:00:10 set Denon_AVR volume ".$lautstaerke_akt);
   stacktrace();
  }
}


2016.10.16 22:32:32 3: stacktrace:
2016.10.16 22:32:32 3:     main::Rollladen_Lautstaerke_TV      called by (eval 53413) (1)
2016.10.16 22:32:32 3:     (eval)                              called by fhem.pl (1006)
2016.10.16 22:32:32 3:     main::AnalyzePerlCommand            called by fhem.pl (1025)
2016.10.16 22:32:32 3:     main::AnalyzeCommand                called by fhem.pl (954)
2016.10.16 22:32:32 3:     main::AnalyzeCommandChain           called by ./FHEM/01_FHEMWEB.pm (2258)
2016.10.16 22:32:32 3:     main::FW_fC                         called by ./FHEM/01_FHEMWEB.pm (764)
2016.10.16 22:32:32 3:     main::FW_answerCall                 called by ./FHEM/01_FHEMWEB.pm (455)
2016.10.16 22:32:32 3:     main::FW_Read                       called by fhem.pl (3221)
2016.10.16 22:32:32 3:     main::CallFn                        called by fhem.pl (671)
2016.10.16 22:32:33 3: Denon_AVR.Zurueck: unknown attribute HMLAN1. Type 'attr Denon_AVR.Zurueck ?' for a detailed list.
2016.10.16 22:32:33 3: stacktrace:
2016.10.16 22:32:33 3:     main::Rollladen_Lautstaerke_TV      called by (eval 53413) (1)
2016.10.16 22:32:33 3:     (eval)                              called by fhem.pl (1006)
2016.10.16 22:32:33 3:     main::AnalyzePerlCommand            called by fhem.pl (1025)
2016.10.16 22:32:33 3:     main::AnalyzeCommand                called by fhem.pl (954)
2016.10.16 22:32:33 3:     main::AnalyzeCommandChain           called by ./FHEM/01_FHEMWEB.pm (2258)
2016.10.16 22:32:33 3:     main::FW_fC                         called by ./FHEM/01_FHEMWEB.pm (764)
2016.10.16 22:32:33 3:     main::FW_answerCall                 called by ./FHEM/01_FHEMWEB.pm (455)
2016.10.16 22:32:33 3:     main::FW_Read                       called by fhem.pl (3221)
2016.10.16 22:32:33 3:     main::CallFn                        called by fhem.pl (671)


Allerdings sagt mir das Ganze leider nichts.

Edit:
Wenn ich stacktrace in global auf 1 setze, dann sehe ich nicht mehr. Warum habe ich jetzt auch verstanden, da es ja kein PEARL WARNING ist. Leider bin ich mit meinem geringen Latein am Ende um zu erkennen, wer den Attr Command startet.
Titel: Antw:unknown attr Fehler bei Perl ausführung
Beitrag von: justme1968 am 16 Oktober 2016, 22:36:46
nein. nicht in deinen code. sondern direkt in CommandAttr in fhem.pl. z.b. zeile 2482
Titel: Antw:unknown attr Fehler bei Perl ausführung
Beitrag von: Amenophis86 am 16 Oktober 2016, 22:40:36
Ah ok, dann baue ich es mal in die Zeile ein und schaue was passiert. Danke
Titel: Antw:unknown attr Fehler bei Perl ausführung
Beitrag von: Amenophis86 am 16 Oktober 2016, 22:51:48
Habe es jetzt Mal in der Zeile eingefügt, FHEM neugestartet, das Log bereinigt :D und die Sub ausgeführt. Das Ergebnis sieht nun wie folgt aus:

2016.10.16 22:50:40 3:     main::CommandAttr                   called by fhem.pl (1084)
2016.10.16 22:50:40 3:     main::AnalyzeCommand                called by fhem.pl (954)
2016.10.16 22:50:40 3:     main::AnalyzeCommandChain           called by ./FHEM/91_notify.pm (102)
2016.10.16 22:50:40 3:     main::notify_Exec                   called by fhem.pl (3222)
2016.10.16 22:50:40 3:     main::CallFn                        called by fhem.pl (3144)
2016.10.16 22:50:40 3:     main::DoTrigger                     called by fhem.pl (1800)
2016.10.16 22:50:40 3:     main::CommandDefine                 called by fhem.pl (1084)
2016.10.16 22:50:40 3:     main::AnalyzeCommand                called by fhem.pl (954)
2016.10.16 22:50:40 3:     main::AnalyzeCommandChain           called by fhem.pl (3234)
2016.10.16 22:50:40 3:     main::fhem                          called by ./FHEM/99_myUtils.pm (500)
2016.10.16 22:50:40 3:     main::Rollladen_Lautstaerke_TV      called by (eval 680) (1)
2016.10.16 22:50:40 3:     (eval)                              called by fhem.pl (1006)
2016.10.16 22:50:40 3:     main::AnalyzePerlCommand            called by fhem.pl (1025)
2016.10.16 22:50:40 3:     main::AnalyzeCommand                called by fhem.pl (954)
2016.10.16 22:50:40 3:     main::AnalyzeCommandChain           called by ./FHEM/01_FHEMWEB.pm (2258)
2016.10.16 22:50:40 3:     main::FW_fC                         called by ./FHEM/01_FHEMWEB.pm (764)
2016.10.16 22:50:40 3:     main::FW_answerCall                 called by ./FHEM/01_FHEMWEB.pm (455)
2016.10.16 22:50:40 3:     main::FW_Read                       called by fhem.pl (3222)
2016.10.16 22:50:40 3:     main::CallFn                        called by fhem.pl (671)


Hilft das weiter?
Titel: Antw:unknown attr Fehler bei Perl ausführung
Beitrag von: justme1968 am 16 Oktober 2016, 22:55:40
beim aufruf von Rollladen_Lautstaerke_TV wird durch den fhem aufruf in zeile 500 deiner 99_myUtils.pm das define aufgerufen und dieses triggert ein notify das dann seinerseits CommandAttr aufruft.

mit global verbose 5 solltest du sehen können welches notify das ist.

gruss
  andre
Titel: Antw:unknown attr Fehler bei Perl ausführung
Beitrag von: Amenophis86 am 16 Oktober 2016, 23:09:21
Ich bin begeistert, was du alles siehst.

Das einzige notify, welches auf ein define hört und mir bekannt ist, wäre dieses hier:


notify DbLog.Exclude.Automatisch global:DEFINED.* attr $EVTPART1 DbLogExclude .*


Aber dieses hat ja eigentlich nix mit HMLAN1 zu tun, welches er setzen will. Außer das $EVTPART1 zieht sich irgendwo das HMLAN1 her.

Im Log habe ich mit Verbose 5 folgendes zum Ausführen der Sub gefunden, hoffe das ist der richtige Auszug. Wird natürlich mit verbose 5 sehr schnell unübersichtlich:

2016.10.16 23:02:37 5: Cmd: >{Rollladen_Lautstaerke_TV ()}<
2016.10.16 23:02:37 5: Cmd: >set Denon_AVR volume 50<
2016.10.16 23:02:37 5: DENON_AVR Denon_AVR: called SetVolume.
2016.10.16 23:02:37 4: DENON_AVR Denon_AVR: SimpleWrite MV500 <volume>.
2016.10.16 23:02:37 5: SW: 4d563530300d
2016.10.16 23:02:37 5: Cmd: >define Denon_AVR.Zurueck at +00:00:10 set Denon_AVR volume 49<
2016.10.16 23:02:37 5: Triggering Denon_AVR.Zurueck (1 changes)
2016.10.16 23:02:37 5: Starting notify loop for Denon_AVR.Zurueck, first event Next: 23:02:47
2016.10.16 23:02:37 5: Notify from Device: Denon_AVR.Zurueck recieved
2016.10.16 23:02:37 5: Triggering global (1 changes)
2016.10.16 23:02:37 5: Starting notify loop for global, first event DEFINED Denon_AVR.Zurueck
2016.10.16 23:02:37 5: Triggering DbLog.Exclude.Automatisch
2016.10.16 23:02:37 4: DbLog.Exclude.Automatisch exec attr $EVTPART1 DbLogExclude .*
2016.10.16 23:02:37 5: Cmd: >attr $EVTPART1 DbLogExclude .*<
2016.10.16 23:02:37 5: Triggering global (2 changes)
2016.10.16 23:02:38 5: Notify from Device: global recieved
2016.10.16 23:02:38 5: DENON_AVR Denon_AVR: read.
2016.10.16 23:02:38 4: DENON_AVR Denon_AVR: parsing <MV50> to <volume/volumeStraight 50/-30>.
2016.10.16 23:02:38 4: DENON_AVR Denon_AVR: parsing <MVMAX 98> to <volumeMax 98>.
2016.10.16 23:02:38 5: Triggering Denon_AVR (3 changes)
2016.10.16 23:02:38 5: Starting notify loop for Denon_AVR, first event volumeStraight: -30 dB
2016.10.16 23:02:38 5: Triggering Denon_AVR (3 changes)
2016.10.16 23:02:38 5: Notify from Device: Denon_AVR recieved
2016.10.16 23:02:38 5: Triggering Denon_AVR (3 changes)
2016.10.16 23:02:38 4: WEB_192.168.2.10_51232 GET /fhem?fw_id=409; BUFLEN:0
2016.10.16 23:02:38 4: name: /fhem?fw_id=409 / RL:1380 / text/html; charset=UTF-8 / Content-Encoding: gzip
Titel: Antw:unknown attr Fehler bei Perl ausführung
Beitrag von: justme1968 am 16 Oktober 2016, 23:13:25
deaktivere das noitify und schau ob die meldung weg ist.

wenn nicht suchen wir weiter.
Titel: Antw:unknown attr Fehler bei Perl ausführung
Beitrag von: Amenophis86 am 16 Oktober 2016, 23:14:00
ich schätze du meinst deaktivieren, oder?
Titel: Antw:unknown attr Fehler bei Perl ausführung
Beitrag von: justme1968 am 16 Oktober 2016, 23:20:00
steht doch da :)
Titel: Antw:unknown attr Fehler bei Perl ausführung
Beitrag von: Amenophis86 am 16 Oktober 2016, 23:23:45
Zitat von: justme1968 am 16 Oktober 2016, 23:20:00
steht doch da :)
;)

Ähm, ich habe jetzt überhaupt keine Ahnung, wieso es geht bzw. der Fehler nicht mehr kommt. Ich wollte gerade das notify deaktivieren, hatte aber vorher die Sub nochmal gestartet um zu testen, ob der Fehler nach dem restart von FHEM (stacktrace raus genommen) wieder kommt. Er kam nicht. Jetzt habe ich sie ganze 5 mal gestartet und jedes mal funktionierte sie ohne Fehler. Also ich hab kein Plan warum. Solange er nicht wieder kommt, soll es mir recht sein, wobei ich schon gerne gewusst hätte, wo der Fehler lag.

Ich danke dir erst Mal für deine Mühe und Geduld. Sollte er wieder erscheinen, werde ich erst das notify deaktivieren. Sollte er dann immer noch kommen, melde ich mich wieder.
Titel: Antw:unknown attr Fehler bei Perl ausführung
Beitrag von: Amenophis86 am 16 Oktober 2016, 23:27:20
Ah, ich weiß wieso der Fehler nicht kommt. Ich hatte die alte Version mit sleep eingebaut und trozt speichern und reload der myutils mit der version ohne sleep, hat er sie nicht geändert. Kein Wunder, dass der Fehler nicht kommt.

Edit:
Es bleibt dabei. Auch mit der "fehlerhaften" Sub wird der Fehler nicht mehr ausgeworfen. Wie gesagt, ich habe keine Ahnung wieso, aber es ist so. Sollte sich etwas ändern, dann melde ich mich. Danke :)