Unterschiedliches Verhalten von Value bei Systemstart vs. manuellem Aufruf?

Begonnen von goethinger, 25 Februar 2014, 02:58:17

Vorheriges Thema - Nächstes Thema

goethinger

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

chris1284

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

betateilchen

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.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

chris1284

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

betateilchen

ja, stimmt.

Trotzdem bleibt einfach die falsche Reihenfolge die Ursache für das Problem.
Und ein notify auf global:INITIALIZED löst das Problem.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

goethinger


C_Herrmann

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
FHEM auf RPi, CUL868, FHT, UNIRoll, verschiedene FS20 Komponenten, IT, Zigbee zum Testen