gelöst:Funktioniert der Code mit Uhrzeiten?

Begonnen von Toto1973, 10 Oktober 2015, 11:34:01

Vorheriges Thema - Nächstes Thema

Toto1973

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.
Raspberry PI2, Rademacher DuoFern Stick, CUL, 2 x SCC,  JeeLink 868 Mhz, JeeLink 433 Mhz, 3x Magic UFO LED WiFi Controller, 4x MAX BC-RT-TRX-CyG, 2x MAX Fensterkontakt, 5x Rademacher Gurtwickler, 6x TX29DTH-it, 2x TX25-it als Helligkeitssensor, 1X HM-ES-PM, 6x Sonoff, 7x G-Homa, PIR-1000

Toto1973

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?
Raspberry PI2, Rademacher DuoFern Stick, CUL, 2 x SCC,  JeeLink 868 Mhz, JeeLink 433 Mhz, 3x Magic UFO LED WiFi Controller, 4x MAX BC-RT-TRX-CyG, 2x MAX Fensterkontakt, 5x Rademacher Gurtwickler, 6x TX29DTH-it, 2x TX25-it als Helligkeitssensor, 1X HM-ES-PM, 6x Sonoff, 7x G-Homa, PIR-1000

Toto1973

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.
Raspberry PI2, Rademacher DuoFern Stick, CUL, 2 x SCC,  JeeLink 868 Mhz, JeeLink 433 Mhz, 3x Magic UFO LED WiFi Controller, 4x MAX BC-RT-TRX-CyG, 2x MAX Fensterkontakt, 5x Rademacher Gurtwickler, 6x TX29DTH-it, 2x TX25-it als Helligkeitssensor, 1X HM-ES-PM, 6x Sonoff, 7x G-Homa, PIR-1000