FHEM Forum

FHEM => Automatisierung => Thema gestartet von: honkmasta am 09 Juni 2017, 19:56:26

Titel: Random Timer in Verbindung mit Twilight, EIN-Schaltzeit nach AUS-Schaltzeit
Beitrag von: honkmasta am 09 Juni 2017, 19:56:26
Hallo zusammen,

ich habe eine Verständnisfrage zum Thema RandomTimer in Verbindung mit Twilight:

Ich habe ca. 20 RandomTimer die für eine Anwesenheitssimulation über KNX Licht und weiteres schalten.
Funktioniert grundsätzlich wunderbar und ohne Probleme wenn der RandomTimer mit fixen Zeiten arbeitet:
*{"21:24:00"} HM.PowerMeter.Plug.Schlafzimmer.Switch *{"22:47:00"} 978

Ebenso funktioniert wie gewünscht der RandomTimer mit Twilight und einem Abschaltzeitpunkt am nächsten Tag: 
*{twilight("myTwilight","ss_weather","00:00:01","23:59:59")} KNX.Erdgeschoss.Flur.Decke.Licht *{"01:27:00"} 300

Problematisch wird es wenn ich das Licht mit Twilight frühestens zum Sonnenuntergang einschalten will und
spätestens zu einem fix definierten Zeitpunkt ausschalten will (weil Schlafenszeit für die Kinder), wobei die beiden Zeitpunkte sich überschneiden können.
*{twilight("myTwilight","ss_weather","00:00:01","23:59:59")} KNX.Obergeschoss.Kinderschlafzimmer.Switch *{"19:08:00"} 1771
Dieser Code funktioniert einwandfrei solange der Sunset vor 19:08 liegt. Findet der Sonnenuntergang nach 19:08
statt wird die Anweisung als Einschalten zum Sunset (z.B. 19:30) und zum Ausschalten für 19:08 aber des folgenden Tages interpretiert. Dies ist aber nicht in meinem Sinne. Wünschenswert wäre das dann die Anweisung ignoriert wird und das Licht gar nicht eingeschaltet wird.

Gibt es eine Möglichkeit im RandomTimer einen Flag o.ä. zu setzen dass ein Timer mit Einschaltzeitpunkt der rein Uhrzeitbasierend (ohne Beachtung der Tage) nach dem Ausschaltzeitpunkt liegt ignoriert wird? In der Art:
if ((tEin > tAus) && (doNotExtendOverNoon)) then this.disabled = true

Momentan helfe ich mir mit der disabledCondition, was aber ein riesiger Schreibaufwand ist bei dieser Anzahl von Timern und nicht immer sauber funktioniert.
((Value("isHausAutomatik") eq "off") or (Value("isWochenende") eq "on") or (comptimegt(twilight("myTwilight","ss_weather","00:00:01","23:59:59"),"19:08:00")))
Im April sind immer wieder komische "Fehlschaltungen" über Nacht aufgetreten obwohl die disabledCondition das unterdrücken sollte.

Gibt es eine versteckte Option im Randomtimer oder habe ich anderweitig etwas übersehen?
Für einen Tip in die richtige Richtung wäre ich sehr dankbar.

Gruss StefanGeorg
Titel: Antw:Random Timer in Verbindung mit Twilight, EIN-Schaltzeit nach AUS-Schaltzeit
Beitrag von: Dietmar63 am 09 Juni 2017, 22:07:33
Gibt es eine Möglichkeit im RandomTimer einen Flag o.ä. zu setzen dass ein Timer mit Einschaltzeitpunkt der rein Uhrzeitbasierend (ohne Beachtung der Tage) nach dem Ausschaltzeitpunkt liegt ignoriert wird? In der Art:
Code: [Auswählen]

if ((tEin > tAus) && (doNotExtendOverNoon)) then this.disabled = true

gibt es leider im Moment nicht
Titel: Antw:Random Timer in Verbindung mit Twilight, EIN-Schaltzeit nach AUS-Schaltzeit
Beitrag von: honkmasta am 10 Juni 2017, 02:02:55
Hallo Dietmar, Danke für die schnelle Antwort.

Ist die Problemstellung nachvollziehbar?

Könnte eine Funktion in dieser Art von Dir implementiert werden? Eventuell stehen Andere vor einem ähnlichen Problem.

Ich habe mich auch schonmal durch den Code vom RandomTimer gewühlt, wollte aber erstmal nachfragen wie der aktuelle Stand zum Modul ist.

Danke und Gruß


Gesendet von iPhone mit Tapatalk
Titel: Antw:Random Timer in Verbindung mit Twilight, EIN-Schaltzeit nach AUS-Schaltzeit
Beitrag von: Dietmar63 am 10 Juni 2017, 13:37:28
Vielleicht ist das ganz einfach.
Ich schaue nachher mal nach ob ich mit meiner Vermutung richtig liege.
Titel: Antw:Random Timer in Verbindung mit Twilight, EIN-Schaltzeit nach AUS-Schaltzeit
Beitrag von: Dietmar63 am 10 Juni 2017, 14:52:52
kannst du den Code selbst verändern?
wenn ja dann mal folgende Zeile 389 auskommentieren und das Modul reloaden.

So:
   if ($hash->{helper}{startTime} > $stopTime) {
      #$stopTime  = RandomTimer_addDays($stopTime, 1);
   }

Dann bleibt der stoptimer immer am gleichen Tag und der RT sollte nicht ausgeführt werden.
Titel: Antw:Random Timer in Verbindung mit Twilight, EIN-Schaltzeit nach AUS-Schaltzeit
Beitrag von: honkmasta am 10 Juni 2017, 21:10:20
Danke - Das ist genau der Eingriffspunkt.

Mit einem Auskommentieren funktionieren dann aber RandomTimer in der Art "Einschalten um 22:00, Ausschalten um 01:00 des Folgetages" nicht mehr.
Idealerweise könnte man die Abfrage noch mit einem zusätzlichen Attribut wie im ersten Beitrag vorgeschlagen versehen.

Danke und Gruß



Gesendet von iPhone mit Tapatalk
Titel: Antw:Random Timer in Verbindung mit Twilight, EIN-Schaltzeit nach AUS-Schaltzeit
Beitrag von: Dietmar63 am 10 Juni 2017, 21:57:31
Ich wollte nur dass du es vielleicht ausprobierst, ob es so geht.
Natürlich  würde ich dann noch ein Attribut spendieren, dass heißen könnte forceStopTimerSameDay- oder so.

kannst du es ausprobieren?
Titel: Antw:Random Timer in Verbindung mit Twilight, EIN-Schaltzeit nach AUS-Schaltzeit
Beitrag von: honkmasta am 10 Juni 2017, 22:07:24
Super. Die Kommentierung Ist eingearbeitet. Ich gebe morgen Bescheid was das Protokoll sagt und was die Lampe gemacht hat.

Gruß


Gesendet von iPhone mit Tapatalk
Titel: Antw:Random Timer in Verbindung mit Twilight, EIN-Schaltzeit nach AUS-Schaltzeit
Beitrag von: Dietmar63 am 10 Juni 2017, 22:43:18
Du kannst heute(kurz nach Mitternacht) schon an den Readings die neue starttime stoptime sehen. Die stoptimes sollten dann nicht auf den Folgetag weisen.
Titel: Antw:Random Timer in Verbindung mit Twilight, EIN-Schaltzeit nach AUS-Schaltzeit
Beitrag von: honkmasta am 11 Juni 2017, 00:21:27
Moin,

mit folgender Definition (eigentlich eine Schaltung über Mitternacht)
*{twilight("myTwilight","ss_weather","00:00:01","23:59:59")} KNX.Erdgeschoss.Flur.Decke.Licht *{"01:27:00"} 300
und o.a. kommentierter Passage wird die Stopzeit auf den gleichen Tag gesetzt.
Startzeit 2017-06-11 20:37:54 2017-06-11 00:05:30
Stoppzeit 2017-06-11 01:27:00 2017-06-11 00:05:30


Gruß
Titel: Antw:Random Timer in Verbindung mit Twilight, EIN-Schaltzeit nach AUS-Schaltzeit
Beitrag von: Dietmar63 am 11 Juni 2017, 09:56:40
Dann hoffen wir mal, dass heute nicht geschaltet wird.
Ich denke es wird klappen.

Wenn es klappt, werde ich es so einbauen: forceStoptimeSameDay

   if (!AttrVal($hash->{NAME}, "forceStoptimeSameDay", 0)) {
      if ($hash->{helper}{startTime} > $stopTime) {
         $stopTime  = RandomTimer_addDays($stopTime, 1);
      }
   }


Titel: Antw:Random Timer in Verbindung mit Twilight, EIN-Schaltzeit nach AUS-Schaltzeit
Beitrag von: honkmasta am 12 Juni 2017, 22:18:39
Hallo,

kurzes Statusupdate:
Ich hatte zwei RandomTimer angesetzt. Keiner von beiden hat geschaltet.
--> Das Auskommentieren hat funktioniert.


Gruß
Titel: Antw:Random Timer in Verbindung mit Twilight, EIN-Schaltzeit nach AUS-Schaltzeit
Beitrag von: Dietmar63 am 12 Juni 2017, 23:31:39
ok, dann gebe ich bei Gelegenheit das Programm frei - bin mit Linux umgezogen und muss zum ersten mal vom neuen Notebook einchecken.
Titel: Antw:Random Timer in Verbindung mit Twilight, EIN-Schaltzeit nach AUS-Schaltzeit
Beitrag von: honkmasta am 14 Juni 2017, 23:46:27
Super! Vielen Dank im Voraus. Gruß


Gesendet von iPhone mit Tapatalk
Titel: Antw:Random Timer in Verbindung mit Twilight, EIN-Schaltzeit nach AUS-Schaltzeit
Beitrag von: Dietmar63 am 18 Juni 2017, 21:49:48
eingecheckt
Titel: Antw:Random Timer in Verbindung mit Twilight, EIN-Schaltzeit nach AUS-Schaltzeit
Beitrag von: honkmasta am 19 Juni 2017, 21:25:52
Attribut gefunden, TestTimer umgebaut.
Prüfung wird jetzt ein paar Tage dauern da ich unterwegs bin.

Danke und Gruß
Titel: Antw:Random Timer in Verbindung mit Twilight, EIN-Schaltzeit nach AUS-Schaltzeit
Beitrag von: honkmasta am 22 Juni 2017, 18:50:51
Hallo,

ich kann Erfolg für die neue Funktion im RandomTimer verbuchen  ;D

Ohne das Attibut "forceStoptimeSameDay" wird der Timer ausgeführt, d.h. mit Verschiebung
des Abschaltzeitpunktes auf den nächsten Tag:

2017.06.19 21:50:45 3: [rt.TestLampe.Abends] starting RandomTimer on TestLampe: 21:06:15(19) - 19:30:00(20)
2017.06.20 19:38:51 3: [rt.TestLampe.Abends] ending   RandomTimer on TestLampe: 21:06:15(19) - 19:30:00(20)


Mit dem Attibut "forceStoptimeSameDay=1" wird der Timer ignoriert. Perfekt.

Jetzt geht es an das Aktualisieren der ganzen echten Timer ...


Besten Dank für die schnelle Implementierung der Funktion!

Gruß