FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: goethinger am 25 Februar 2014, 02:58:17

Titel: Unterschiedliches Verhalten von Value bei Systemstart vs. manuellem Aufruf?
Beitrag von: goethinger am 25 Februar 2014, 02:58:17
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
Titel: Antw:Unterschiedliches Verhalten von Value bei Systemstart vs. manuellem Aufruf?
Beitrag von: chris1284 am 25 Februar 2014, 06:03:17
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
Titel: Antw:Unterschiedliches Verhalten von Value bei Systemstart vs. manuellem Aufruf?
Beitrag von: betateilchen am 25 Februar 2014, 09:34:47
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.
Titel: Antw:Unterschiedliches Verhalten von Value bei Systemstart vs. manuellem Aufruf?
Beitrag von: chris1284 am 25 Februar 2014, 10:17:46
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
Titel: Antw:Unterschiedliches Verhalten von Value bei Systemstart vs. manuellem Aufruf?
Beitrag von: betateilchen am 25 Februar 2014, 10:29:54
ja, stimmt.

Trotzdem bleibt einfach die falsche Reihenfolge die Ursache für das Problem.
Und ein notify auf global:INITIALIZED löst das Problem.
Titel: Antw:Unterschiedliches Verhalten von Value bei Systemstart vs. manuellem Aufruf?
Beitrag von: goethinger am 27 Februar 2014, 21:24:52
So isses. Notify auf global:INITIALIZED hat's gebracht.

Danke
Titel: Antw:Unterschiedliches Verhalten von Value bei Systemstart vs. manuellem Aufruf?
Beitrag von: C_Herrmann am 27 Februar 2014, 22:53:39
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