Hier ist der Code aus der 99_MyUtils.pm:
sub startzeit($$$)
{
my ($weckzeit, $anfang, $ende) = @_;
if ($weckzeit lt $anfang or $weckzeit gt $ende) {
return $anfang;
} else {
return $weckzeit;
}
}
Aufgerufen wird die Funktion so:
{startzeit(Value("wakeUp_dummy"),"09:31","23:01")}
Der wakeUp_dummy hat den Wert 10:00
Funktionieren soll es so:
Wenn die Weckzeit geringer ist, als 9:31 Uhr, dann soll erst um 9:31 Uhr geschalten werden.
Liegt die Weckzeit nach 9:31 Uhr, dann soll die Weckzeit (10 Uhr) genommen werden.
So wie ich das beobachte, funktioniert das aber leider nicht. Es schaltet immer um 9:31Uhr.
Ich glaube, ich habe auch hier den "Fehler" gefunden. Vielleicht weis jemand eine Lösung!
Also den Code von oben setze ich in einem DOIF ein.
define feuchtigkeit DOIF ([sz_Waesche_trocknen] eq "off" and [{startzeit(Value("wakeUp_dummy"),"09:32","23:02")}-23:03] and [Anwesend] eq "off" and (([ba_Temperatur:humidity]+[fu_Temperatur:humidity]+[sz_Temperatur:humidity]+[wz_Temperatur:humidity])/4)>58 and [licht_an_dummy] eq "off") (set Feuchtigkeit_dummy feucht,set 49XXX send Die Luftfeuchtigkeit liegt über 57%! Der Entfeuchter wird eingeschaltet!)
(set Luftentfeuchter_betreibsart Wäschetrocknung)
Da ja das DOIF nach dem Ausführen direkt die Uhrzeit für den nächsten Tag setzt, werden Änderungen am wakeUp_dummy nicht ins DOIF übernommen. Wie bekomme ich das denn geregelt?
Der Vollständigkeit halber hier nun die funktionierende Variante:
In die Sub kommt das hier:
sub startzeit()
{
my $startzeit_1 = "09:30";
my $endzeit = "20:00";
my $weckzeit = ReadingsVal("wakeUp_dummy", "state", 0);
if ($weckzeit lt $startzeit_1 or $weckzeit gt $endzeit) {
fhem "set startzeit_dummy $startzeit_1";
} else {
fhem "set startzeit_dummy $weckzeit";
}
}
Dann barucht es noch den dummy startzeit_dummy, auf den die "erechnete" Zeit geschrieben wird.
Im DOIF kommt dann der startzeit_dummy zum Einsatz:
define feuchtigkeit DOIF ([sz_Waesche_trocknen] eq "off" and [startzeit_dummy]-23:03] and [Anwesend] eq "off" and (([ba_Temperatur:humidity]+[fu_Temperatur:humidity]+[sz_Temperatur:humidity]+[wz_Temperatur:humidity])/4)>58 and [licht_an_dummy] eq "off") (set Feuchtigkeit_dummy feucht,set 49XXX send Die Luftfeuchtigkeit liegt über 57%! Der Entfeuchter wird eingeschaltet!)
(set Luftentfeuchter_betreibsart Wäschetrocknung)
Die Sub {startzeit()} lasse ich Nachts um 1 Uhr laufen. diese aktualisiert dann die Zeit im startzeit_dummy.