ich möchte in meinen DOIFs mit der Log3 Funktion, zum einen Meldungen ins fhem Log schreiben, aber auch gleich den Namen des Devices (z.B. DOIF_Bad_Licht_V1.1) mitgeben.
Dachte für die korrekte Verwendung kann man $name oder $hash als ersten Parameter mitgeben.
Mit
Log3 $name, 2, "Event für DOIF getriggert";
erhalte ich die Fehlermeldung
condition c01: Global symbol "$name" requires explicit package name (did you forget to declare "my $name"?), line 4.
Mit
Log3 $hash, 2, "Event für DOIF getriggert";
erhalte ich im Log folgende Ausgabe:
2023.03.06 19:03:13 2: Event für DOIF getriggert
Nur mit
Log3 $hash, 2, $hash->{NAME} . " Event für DOIF getriggert";
erhalte ich im Log den Namen des Devices:
2023.03.06 19:05:26 2: DOIF_Bad_Licht_V1.1 Event für DOIF getriggert
Wie kann ich den ersten Parameter so setzen, dass der Name des Devices automatisch ins Log mit ausgegeben wird?
siehe: https://wiki.fhem.de/wiki/DevelopmentModuleAPI#Log3
Der Name selbst wird wohl nicht ausgegeben, viel mehr ist der Name dazu da, um das passende Verbose-Attribut des Devices zu ermitteln.
Der Eigene Name des Devices ist im DOIF-Device im Platzhalter $SELF abgelegt, daher:
Log3 "$SELF", 2, "Event für DOIF getriggert";
Willst du den Namen im Log sehen, dann musst du angeben:
Log3 "$SELF", 2, "$SELF Event für DOIF getriggert";
Was mir persönlich überhaupt nicht gefällt, ist, dass Log3 als Perlfunktion in den Beispielen, warum auch immer, ohne Klammern angegeben wird - das ist zwar in Perl möglich, aber sonst nicht üblich.
Daher würde ich definieren:
Log3 ("$SELF", 2, "$SELF Event für DOIF getriggert");
Hallo Damian,
danke, habe es gleich ausprobiert, und es funktioniert.
Nehme mal an $SELF im Log3 Aufruf kann ich auch bei anderen Devices nutzen und nicht nur bei DOIFs?
Zitat von: ringidigiding am 06 März 2023, 20:17:06
Hallo Damian,
danke, habe es gleich ausprobiert, und es funktioniert.
Nehme mal an $SELF im Log3 Aufruf kann ich auch bei anderen Devices nutzen und nicht nur bei DOIFs?
Nicht unbedingt, es hängt vom Device ab, ob es $SELF kennt oder nicht