[gelöst - unbekannt wie :D] unknown attr Fehler bei Perl ausführung

Begonnen von Amenophis86, 16 Oktober 2016, 19:46:58

Vorheriges Thema - Nächstes Thema

Amenophis86

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.
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...

dev0

Die Fehlermeldung passt nicht zur gezeigten sub. Reload der myUtils vergessen? 2 Subs mit identischen Namen?

Amenophis86

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.
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...

Amenophis86

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.
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...

justme1968

#4
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" );
  }
}
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

franky08

@Andre
Zitatstring verenden

das hat meine Laune deutlich aufgeheitert  ;)

VG
Frank
Debian Bookworm auf HUNSN / Debian Bullseye auf 2.ter HUNSN F2F an 2x RaspiB
mit FHEM aktuell
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu, raspmatic_rpi3, HMIP-HCU1

justme1968

hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

franky08

#7
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
Debian Bookworm auf HUNSN / Debian Bullseye auf 2.ter HUNSN F2F an 2x RaspiB
mit FHEM aktuell
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu, raspmatic_rpi3, HMIP-HCU1

Amenophis86

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??
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...

Amenophis86

#9
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.
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...

justme1968

nein. nicht in deinen code. sondern direkt in CommandAttr in fhem.pl. z.b. zeile 2482
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Amenophis86

Ah ok, dann baue ich es mal in die Zeile ein und schaue was passiert. Danke
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...

Amenophis86

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?
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...

justme1968

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
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Amenophis86

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
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...