FHEM Forum

FHEM => Automatisierung => Thema gestartet von: arestant am 08 August 2015, 21:27:09

Titel: Globale Variable $fhem_started beim neustart
Beitrag von: arestant am 08 August 2015, 21:27:09
Hallo Zusammen,

ich habe ein Problem, dass beim Neustart von FHEM ein Notify ausgelöst wird.
Ich möchte es gerne mit der Überprüfung der FHEM Laufzeit vermeiden.

In einem anderen Thread habe ich ein super Tip entdeckt: Globale Variable "$fhem_started".

Leider scheint es so, dass diese Variable zum benötigten Zeitpunkt noch nicht verfügbar ist.

"Use of uninitialized value $fhem_started in subtraction (-) at (eval 158) line 2."


define Notify_Kinderzimmertuer notify Tuerkontakt_Kinderzimmer {\
if ((ReadingsVal("Tuerkontakt_Kinderzimmer","state","closed") eq "open") && ((time - $fhem_started) > 60) &&(ReadingsVal("Ueberwachung_Kinderzimmer","state","off") eq "on")){\
#...
}


Gibt es hierfür eine elegante Lösung?

Vielen Dank!
Titel: Antw:Globale Variable $fhem_started beim neustart
Beitrag von: jensb am 08 August 2015, 21:39:09
Hallo arestant,

$fhem_started wird unmittelbar nach dem Notify global/INITIALIZED gesetzt, $init_done unmittelbar davor.

Wenn du dieses Notify einfach überspringen willst, könntest du auch in dein if  "(defined($fhem_started) && ..." einfügen, das sollte reichen um den Perl-Fehler zu vermeiden.

LG, Jens
Titel: Globale Variable $fhem_started beim neustart
Beitrag von: justme1968 am 08 August 2015, 22:10:56
dafür kann man auch direkt $init_done verwenden. das ist aber vermutlich der falsche ansatz und  die frage ist eigentlich warum das notify überhaupt triggert. kann es sein das deine regex nicht genau genug ist? in einem notify sollte auch $EVENT oder $EVTPART ausgewertet werden statt ReadingsVal zu verwenden um den zustand des auslösenden device zu bekommen. das ist effizienter.

zum testen bietet es sich an$EVENT zu loggen und zu schauen was wirklich passiert und wodurch das notify getriggert wird.

gruss
  andre
Titel: Antw:Globale Variable $fhem_started beim neustart
Beitrag von: jensb am 08 August 2015, 22:55:55
Hallo arestant,

zuerst zu prüfen, ob eine Variable definiert ist, die man nicht selbst initialisiert hat und mit der man arbeiten will, ist grundsätzlich eine gute Idee.

Falls du der Frage nach dem "Warum kommt das Event beim Neustart?" nachgehen willst, kannst du z.B. auch das Attribut "verbose" deines notify auf 5 setzen, dann werden die Notify-Trigger-Daten (u.a. EVENT) im FHEM-Log protokolliert.

LG, Jens

Titel: Antw:Globale Variable $fhem_started beim neustart
Beitrag von: arestant am 08 August 2015, 23:12:55
Hallo jensb,
hallo justme1968,

@Jens
das mit dem "if define" funktioniert sehr gut. Hatte es vor der Frage hier im Forum schon über Google gefunden und leider mit einem "Fehler eingebaut" so dass es nicht funktioniert hat.
Nach deinem Vorschlag habe ich es nochmal überprüft... läuft natürlich.

Der Andre hat mich aber zum Nachdenken gebracht. Ich ging vorher davon aus, dass mein getriggertes Event "state" ist.
Was natürlich nicht stimmte. Es war ein Trigger auf "ActionDetector".

Und wieder was gelernt.

Vielen Dank für eure schnelle Hilfe!

Viele Grüße
Paul