Hallo,
ich habe eine LED Statusanzeige und möchte diese bei Systemstart mit einem Call nach 99_myUtils.pm initialisieren.
in fhem.cfg steht dann nur
{Init_LED16}
in 99_myUtils.pm steht:
sub Init_LED16
{
fhem("set CUL_HM_HM_OU_LED16_1D44EF_Led_.* led off");
Log 1, "Haustuer ".(Value("Haustuer"));
if (Value("Haustuer") eq "closed") {fhem("set CUL_HM_HM_OU_LED16_1D44EF_Led_01 led green")} else {fhem("set CUL_HM_HM_OU_LED16_1D44EF_Led_01 led red")};
Log 1, "Terrassentuer ".(Value("Terrassentuer"));
if (Value("Terrassentuer") eq "closed") {fhem("set CUL_HM_HM_OU_LED16_1D44EF_Led_02 led green")} else {fhem("set CUL_HM_HM_OU_LED16_1D44EF_Led_02 led red")};
}
Funktioniert leider nicht.
Im Log steht:
2014.02.25 02:31:35 1: Haustuer ???
2014.02.25 02:31:35 2: CUL_HM set CUL_HM_HM_OU_LED16_1D44EF_Led_01 led red
2014.02.25 02:31:35 1: Terrassentuer ???
2014.02.25 02:31:35 2: CUL_HM set CUL_HM_HM_OU_LED16_1D44EF_Led_02 led red
Hat Value nicht funktioniert? Weder im Log Statement noch in der If-Abfrage?
Wenn ich die Funktion anschließend in der Eingabezeile des Webfrontends eingebe, dann passiert folgendes:
2014.02.25 02:33:49 1: Haustuer closed
2014.02.25 02:33:49 2: CUL_HM set CUL_HM_HM_OU_LED16_1D44EF_Led_01 led green
2014.02.25 02:33:49 1: Terrassentuer closed
2014.02.25 02:33:49 2: CUL_HM set CUL_HM_HM_OU_LED16_1D44EF_Led_02 led green
Jetzt hat es funktioniert!!! Die gleiche Funktion! Was ist das Problem?
Danke
evtl liegts an der reihenfolge? wenn
ZitatCUL_HM_HM_OU_LED16_1D44EF_Led
erst nach
ZitatInit_LED16
geladen wird könnte ich mir vorstellen das dein script nicht greift. Später jedoch manuell da
ZitatCUL_HM_HM_OU_LED16_1D44EF_Led
dann auch geladen ist. Evtl.
ZitatInit_LED16
mal ans ende der fhem.cfg packen oder evtl. per at etwas zeitverzögert ausführen
Das funktioniert deshalb nicht, weil die 99_myUtils erst aufgerufen wird, nachdem die fhem.cfg ausgeführt wurde. Zu dem Zeitpunkt ist aber Deine Funktion einfach noch nicht bekannt. Genau aus diesem Grund macht es eigentlich wenig Sinn, perl-Code in die fhem.cfg zu packen.
Du solltest einfach ein notify anlegen, das auf global:INITIALIZED triggert und das Initialisieren darin abhandeln. global:INITIALIZED als event bedeutet, dass fhem fertig ist mit dem Starten und alle benötigten Module geladen sind.
Sicher?
Zitat von: betateilchen am 25 Februar 2014, 09:34:47
Zu dem Zeitpunkt ist aber Deine Funktion einfach noch nicht bekannt.
Sicher ? Laut log sehr wohl da er folgende Zeilen aus genau der Funktion ,die nach deiner Auslegung nicht bekannt ist, ja ins LOG schreibt ( nur ohne Werte da wohl das Device noch nicht da ist). Müsste nicht ehr nichts im Log stehen oder eine Fehlermeldung das er Init_LED16 nicht kennt?
Zitat
2014.02.25 02:31:35 1: Haustuer ?? ?
2014.02.25 02:31:35 1: Terrassentuer ?? ?
genau so wird auch das "set" der "nicht bekannten Funktion" ausgeführt ->
Zitat2014.02.25 02:31:35 2: CUL_HM set CUL_HM_HM_OU_LED16_1D44EF_Led_01 led red
Dürfte ja auch nicht ausgeführt werden wenn er 99_myUtils noch nicht kennt
ja, stimmt.
Trotzdem bleibt einfach die falsche Reihenfolge die Ursache für das Problem.
Und ein notify auf global:INITIALIZED löst das Problem.
So isses. Notify auf global:INITIALIZED hat's gebracht.
Danke
Hallo,
vermutlich ist das HM-Gerät nach dem Systemstart noch nicht (fertig) initialisiert, wenn Deine Routine aufgerufen wird. Der Status ist unklar und es wird die else-Anweisung ausgeführt. Der Befehl geht dann aber ins Leere.
Gruß,
Christian