FHEM Forum

FHEM => Codeschnipsel => Thema gestartet von: Toto1973 am 10 Oktober 2015, 11:34:01

Titel: gelöst:Funktioniert der Code mit Uhrzeiten?
Beitrag von: Toto1973 am 10 Oktober 2015, 11:34:01
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.
Titel: Antw:Funktioniert der Code mit Uhrzeiten?
Beitrag von: Toto1973 am 10 Oktober 2015, 12:50:50
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?
Titel: Antw:Funktioniert der Code mit Uhrzeiten?
Beitrag von: Toto1973 am 11 Oktober 2015, 16:36:26
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.