Hallo,
hab seit kurzem die Fehlermeldung im Log. Es funktioniert aber noch alles.
cmdalias ca_WZ_Roll_1_ab called recursively, skipping execution
Die DEF dazu:
set WZ_Roll_1_TX AB AS set 433MHz_ArduinoDev RollotubeCode 5111111633333314126333333124152412414312524124141415241433331252414333141633331414316333314122254141433312541414331415241243141252412431241
Woran liegt das? Es hat etwa 1,5 Jahre ohne die Fehlermeldung funktioniert.
Das sind doch 2 unterschiedliche devices:
Das eine ist das cmdalias, das heißt anscheinend ca_WZ_Roll_1_ab
und das andere heißt WZ_Roll_1_TX
Das Problem scheint aber bei ca_WZ_Roll_1_ab zu liegen.
Gib mal ein list von dem cmdalias-device
list ca_WZ_Roll_1_ab
"ca_WZ_Roll_1_ab" soll der Name des cmdalias sein und "set WZ_Roll_1_TX ab" das Kommando auf das dann "set 433MHz_ArduinoDev RollotubeCode 5111111633333314126333333124152412414312524124141415241433331252414333141633331414316333314122254141433312541414331415241243141252412431241" gemapped werden soll.
Internals:
ALIAS set
DEF set WZ_Roll_1_TX AB AS set 433MHz_ArduinoDev RollotubeCode 5111111633333314126333333124152412414312524124141415241433331252414333141633331414316333314122254141433312541414331415241243141252412431241
NAME ca_WZ_Roll_1_ab
NEWCMD set 433MHz_ArduinoDev RollotubeCode 5111111633333314126333333124152412414312524124141415241433331252414333141633331414316333314122254141433312541414331415241243141252412431241
NR 548
PARAM WZ_Roll_1_TX AB
STATE defined
TYPE cmdalias
Attributes:
comment 51111116333333141263333331241524124143125241241414152414333312524143331416333314143163333141222541414333125414143314152412431412524124312412111111633333314126333333124152412414312524124141415241433331252414333141633331414316333314122254141433312541414331415241243141252412431241
room Rollladen
Hab ich den cmdalias falsch verstanden?
Zitat von: KarlHeinz2000 am 29 November 2016, 17:55:21
Internals:
ALIAS set
Dein cmdalias hört auf das Kommando set, sprich du hast jetzt ein neues set-Kommando definiert, also immer wenn set aufgerufen wird, wird in wirklichkeit dein cmdalias aufgerufen.
Du hast da beim define wohl was verdaddelt.
der define müsste wahrscheinlich so lauten:
define ca_WZ_Roll_1_ab cmdalias WZ_Roll_1_TX_ab AS set 433MHz_ArduinoDev RollotubeCode 5111111633333314126333333124152412414312524124141415241433331252414333141633331414316333314122254141433312541414331415241243141252412431241
Dann kannst du es mittels
WZ_Roll_1_TX_ab
aufrufen.
Btw.: Funktioniert haben kann das bisher noch nie ;)
Problem gelöst. Danke.
Es war wie von Benni geschrieben die DEF von cmdalias. Da hatte ich was durcheinander gebracht...
Funktioniert hat es aber dennoch die ganze Zeit. Die Rollladen sind ja auf und zu gegangen, und eine andere Möglichkeit gibt es nicht.
Ich muss mich hier mal einklinken da ich da imo das selbe "Problem" habe.
Zitat von: Benni am 29 November 2016, 18:07:39
Dein cmdalias hört auf das Kommando set, sprich du hast jetzt ein neues set-Kommando definiert, also immer wenn set aufgerufen wird, wird in wirklichkeit dein cmdalias aufgerufen.
....
Btw.: Funktioniert haben kann das bisher noch nie ;)
@Benni: doch das Funktioniert. So steht es z.B. auch im Wiki: https://wiki.fhem.de/wiki/Cmdalias
Man definiert ja nicht das Set Kommando neu sondern nur das Set-Kommando mit den entsprechenden Parametern, in KarlHeinz2000 Fall also "set WZ_Roll_1_TX AB".
Zitat
Einbindung in Fhem
define <name> cmdalias <cmd> [parameter] AS newcommand..."
autocreate
Schnelles (de)aktivieren der autocreate Funktion:
define c_autocreate_off cmdalias set autocreate off AS attr autocreate disable 1
define c_autocreate_on cmdalias set autocreate on AS attr autocreate disable 0
da wird ja z.B. nicht bei jedem set, autocreate disable geändert.
der define stimmt also, woher aber kommt das called recursivly?
Zitat von: Bootscreen am 14 Dezember 2016, 09:17:31
@Benni: doch das Funktioniert. So steht es z.B. auch im Wiki: https://wiki.fhem.de/wiki/Cmdalias
Nein, so wie er es gemacht hatte nicht, denn sein List hat deutlich was anderes gezeigt!
Guggst du hier:
Zitat von: KarlHeinz2000 am 29 November 2016, 17:55:21
Internals:
...
ALIAS set
...
Und das dürfte bei dir schätzungsweise genau so aussehen.
Dann stimmt aber das Wiki nicht. Denn nach dem Wiki ist sein List genau richtig:
Zitat von: KarlHeinz2000 am 29 November 2016, 17:55:21
Internals:
ALIAS set
PARAM WZ_Roll_1_TX AB
wenn ich das zweite Beispiel aus dem Wiki nehme, in dem jedes set Lamp um ein Log eintrag erweitert wird sieht es genauso aus:
Internals:
ALIAS set
CFGFN
DEF set lamp .* AS { Log 1, "$EVENT"; fhem("set $EVENT") }
NAME s2
NEWCMD { Log 1, "$EVENT"; fhem("set $EVENT") }
NR 33567
PARAM lamp .*
STATE defined
TYPE cmdalias
Attributes:
Und so ist es auch laut commandref richtig:
Zitatparameter is optional and is a regexp which must match the command entered. If it matches, then the specified newcommand will be executed
demnach wird der neue Command nur ausgeführt wenn ALIAS + PARAM übereinstimmen
Ich hatte mich damals am wiki orientiert. Es hat ja auch ohne Probleme funktioniert. Seit Oktober(?) hatte ich nun Einträge im log und bin aufmerksam geworden. In dieser Zeit gab es auch eine Änderung in der .pm bzgl. o.g. Fehlers. Leider blicke ich diese Änderung inhaltlich nicht :-[ . Hardwerker...
Ok, ich hab mich jetzt mal versucht durch den Code zu wurschteln und ich glaube, @Benni, wir hatten beide Recht.
das ganze läuft so ab:
Beispiel: define <name> cmdalias set LAMPE1 on AS set LAMPE2 on
ALIAS ist "set"
PARAM ist "LAMPE1 on"
- der cmdalias wird bei jedem Command mit ALIAS aufgerufen, im Beispiel also set
- dann wird geprüft ob die PARAM des cmdalias mit denen des Commands übereinstimmen
- Falls Ja wird der neue Befehl ausgeführt, im Beispiel also set LAMPE2 on
- Da hier wieder ein set Befehl ist wird diese ganze Prozedur wieder angestartet und um hier einer Endlosschleife vor zu beugen wird diese zweite Prozedur "abgebrochen". Dies war auch bissher schon so, am 2. Oktober hat Rudi nur einen Log Eintrag hinzugefügt um dem User dies auch mitzuteilen.
- Falls Nein wird der nächste cmdalias geprüft
Im Grunde kann man die Meldung also ignorieren (oder mit Verbose 2 deaktivieren, andere Log Meldung gibt das Modul eh nicht aus) wenn neuer und alter Command zwar mit dem selbem Grundbefehl starten (z.B. set) aber mit unterschiedlichen parametern enden.
Oder irre ich mich da? Vielleicht kann ansonsten @rudolfkoenig uns aufklären ^^