Hallo Leute,
ich habe ein DOIF Problem, das Ziel ist Fhem ungefähr alle 2 Tage neuzustarten, sobald keiner zu Hause ist.
Hintergrund: Die Sonos-Integration in Fhem hat ungefähr alle 2 Tage einen Bug und findet die Lautsprecher nicht mehr. 2021.08.12 15:24:51 5: SONOS0: Player: Sonos_Buero ~ Slaves: []
[/i]
Der Workaround ist jetzt, das ich über das Modul Systemmonitor schaue wie lange Fhem schon läuft und wenn die Zeit erreicht ist UND niemand zu Hause ist, soll ein Neustart durchgeführt werden.
Das funktioniert auch. Aber das Reading "fhemuptime" wird nach dem Neustart nicht sofort auf 0 gesetzt und damit befindet sich das System in einer endlos Schleife.
Wie könnte ich das lösen? Kann man Device nach dem Neustart sofort zum Update zwingen? Was sind eure Ideen?
Internals:
DEF ([06:30] and [Bewohner] eq "home" ) (set Master on)
DOELSEIF ([Bewohner] eq "home" and [Master] eq "off" ) (set Master on)
DOELSEIF ([Bewohner] eq "home" and [FritzBox:wlan] eq "off" and [Sleepmode] eq "off") (set FritzBox wlan on)
DOELSEIF ([Bewohner] eq "absent" and [Master] eq "on" ) (sleep 6 ;set Master off)
DOELSEIF ([Bewohner] eq "absent" and [sysmon:fhemuptime] > 172800 ) (set mybot message geplanter Neustart! ; sleep 90;shutdown restart)
DOELSEIF ([Bewohner] eq "absent" and [E3b.4:"^on$"] ) (set mybot message Vorsicht! Jemand befindet sich in der Wohnung! Obwohl von uns keiner da ist.)
DOELSE ()
FUUID 6102fb6a-f33f-aed9-a69d-8ff4270bcf2e32d8
MODEL FHEM
NAME Wohnung_AnAus
NOTIFYDEV FritzBox,sysmon,Bewohner,E3b.4,Sleepmode,Master,global
NR 1437
NTFY_ORDER 50-Wohnung_AnAus
STATE cmd_7
TYPE DOIF
VERSION 24755 2021-07-15 16:40:59
Helper:
DBLOG:
state:
logdb:
TIME 1628834614.90172
VALUE checkall
READINGS:
2021-08-13 09:52:49 Device Bewohner
2021-08-13 08:03:11 cmd 7
2021-08-13 08:03:11 cmd_event sysmon
2021-08-13 08:03:11 cmd_nr 7
2021-08-13 09:52:49 e_Bewohner_STATE home
2021-08-13 09:43:33 e_E3b.4_events off
2021-08-13 09:52:11 e_sysmon_fhemuptime 66713
2021-08-13 08:03:08 mode enabled
2021-08-13 08:03:11 state cmd_7
2021-08-13 08:03:08 timer_01_c01 14.08.2021 06:30:00
Danke.
Schau mal bei doif gibt es auch ein wait das könnte ich mir damit vorstellen
Zitat von: steffen83 am 13 August 2021, 10:12:49
Schau mal bei doif gibt es auch ein wait das könnte ich mir damit vorstellen
Danke Steffen, ja, das könnte funktionieren.
wait
0:0:0:0:60:0:0
ich probiere das mal aus, sobald keiner zu Hause ist. Danke
Das WAIT verzögert den Neustart,
Es gibt aber auch ein "waitsame" oder "repeatsame"
schau mal in die CRef vom DOIF, da findest es.
Zitat von: steffen83 am 13 August 2021, 10:12:49
Schau mal bei doif gibt es auch ein wait das könnte ich mir damit vorstellen
Danke für die Hinweise, ich hab bisher mit dem wait die besten Ergebnisse erzielt.
Erklärung aus der CommandRef:
waitDas Attribut verzögert die Befehlsausführung, nach wahr werden einer Bedingung.
Laufende Wait-Timer werden bei einem eingeleiteten Statuswechsel des DOIF abgebrochen, daher werden die zu verzögernden Befehle nicht mehr ausgeführt.
Das heißt, selbst nach dem ersten Neustart. Wird im DOIF die Bedingung zum Neustart "Wahr" allerdings verursacht das wait ein warten von 1 Minute und diese Zeit genügt, damit das Sysmon Device die "fhemuptime" aktualisiert hat. Wie oben beschrieben wird in diesem Fall des Statuswechsels der Befehl abgebrochen.
Zitat von: Frank_Huber am 13 August 2021, 10:59:43
Das WAIT verzögert den Neustart,
Es gibt aber auch ein "waitsame" oder "repeatsame"
schau mal in die CRef vom DOIF, da findest es.
Sowohl waitsame und repeatsame werden beim Neustart neu initalisiert und verhindern einen weiteren Neustart nicht.