FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: KarlHeinz2000 am 29 November 2016, 17:21:54

Titel: cmdalias ... called recursively, skipping execution
Beitrag von: KarlHeinz2000 am 29 November 2016, 17:21:54
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.
Titel: Antw:cmdalias ... called recursively, skipping execution
Beitrag von: Benni am 29 November 2016, 17:35:58
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
Titel: Antw:cmdalias ... called recursively, skipping execution
Beitrag von: KarlHeinz2000 am 29 November 2016, 17:55:21
"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?
Titel: Antw:cmdalias ... called recursively, skipping execution
Beitrag von: Benni am 29 November 2016, 18:07:39
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 ;)

Titel: Antw:cmdalias ... called recursively, skipping execution
Beitrag von: KarlHeinz2000 am 29 November 2016, 19:14:46
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.
Titel: Antw:cmdalias ... called recursively, skipping execution
Beitrag von: Bootscreen am 14 Dezember 2016, 09:17:31
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?
Titel: Antw:cmdalias ... called recursively, skipping execution
Beitrag von: Benni am 14 Dezember 2016, 09:26:28
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.
Titel: Antw:cmdalias ... called recursively, skipping execution
Beitrag von: Bootscreen am 14 Dezember 2016, 09:37:10
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
Titel: Antw:cmdalias ... called recursively, skipping execution
Beitrag von: KarlHeinz2000 am 14 Dezember 2016, 09:45:29
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...
Titel: Antw:cmdalias ... called recursively, skipping execution
Beitrag von: Bootscreen am 14 Dezember 2016, 10:39:18
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"

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 ^^