Hauptmenü

DOIF und Setreadings

Begonnen von Rheingold, 08 Februar 2022, 14:17:31

Vorheriges Thema - Nächstes Thema

Rheingold

Hallo zusammen, ich brauche etwas Denkhilfe 😁

Für meine Rolläden habe ich ein DOIF, welches diese Abends herunter fährt. Zudem habe ich ein dummy der quasi als Ein-/Ausschalter für die Zeitschaltuhr bzw. den Automatismus dient. Auf einer Weboberfläche gebe ich die Zeit an, wann die Rolläden das nächste Mal fahren wird (reading "Zeit" vom dummy "Zeitschaltuhr_Rolladen_Abends").

define di_Rolladen_Abend DOIF ([{sunset("HORIZON=-6",0,"12:00","23:00")}] and [Zeitschaltuhr_Rolladen_Abends] eq "on") (\
IF ([Fenster_Buero] eq "closed") (set Rolladen_Buero close),\
IF ([Fenster_Balkon] eq "closed") (set Rolladen_Wohnzimmer_Zusammen close),\
sleep 5,\
{fhem "setreading Zeitschaltuhr_Rolladen_Abends Zeit ".substr ReadingsVal("di_Rolladen_Abend", "timer_01_c01", ""), 11, 5}\
)
attr di_Rolladen_Abend do always


Mein Problem ist, dass beim DOIF das setzen der Zeit (aus dem Reading "timer_01_c01") in dem dummy "Zeitschaltuhr_Rolladen_Abends" immer der Wert vom heutigen Lauf verwendet wird und nicht der für den morgigen Lauf. Heißt, wenn der Rolladen heute um 18:08 runter fährt, wird die "18:08" via setreading in den Dummy geschrieben... obwohl der Rolladen morgen dann z.B. erst um 18:10 fährt.
Ist das Doif gelaufen und ich lade die Seite neu, dann steht im Reading "timer_01_c01" die richtige Zeit für die nächste Ausführung (z.B. "09.02.2022 18:10:01").

Meine Vermutung ist, dass FHEM hin geht, die Befehle ausführt und dazu die Werte verwendet die beim Start der Aktion galten. Da hilft wohl auch kein sleep.

Wie kann ich das Problem lösen? 🤔
Fhem auf Raspi 3; Jeelink mit 6x TX29DTH; CUL433 mit 9x RCS 1000 N und Somfy-Steuerung; CUL868; MAX-Cube + Thermostate; Philips Hue & Ikea Tradfri; Google Home Assistant; FTUI für Tablet und SmartPhone via Reverse-Proxy

betateilchen

Das sieht ja gruslig aus... Warum machst Du das nicht einfach mit einem wiederholenden at?

Den Sinn des readings timer_01_c01 habe ich noch nicht verstanden.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Rheingold

timer_01_c01 scheint das Resultat von [{sunset("HORIZON=-6",0,"12:00","23:00")}] zu sein. Das ist jedenfalls die Uhrzeit, wann das Doif das nächste ausgeführt wird.
Wie kann man die Logik zum Schließen der Rolläden bei geschlossenen Fenstern (also die ersten drei Zeilen) in einem "at" schöner umsetzen?
Fhem auf Raspi 3; Jeelink mit 6x TX29DTH; CUL433 mit 9x RCS 1000 N und Somfy-Steuerung; CUL868; MAX-Cube + Thermostate; Philips Hue & Ikea Tradfri; Google Home Assistant; FTUI für Tablet und SmartPhone via Reverse-Proxy

Damian

Die Timerangaben der Art timer_01_c01 haben nur einen informativen Charakter, sie können nicht per setreading sinnvoll gesetzt werden. Wenn du Zeitvorgaben haben willst, die man von außen verändern kann, dann schau dir indirekte Timer beim DOIF an, hier wird die Zeit aus einem Reading übernommen.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

rabehd

Zitatbeim DOIF das setzen der Zeit (aus dem Reading "timer_01_c01") ... immer der Wert vom heutigen Lauf
Fast richtig, es ist der nächste Lauf.

Du möchtest (in einem Dummy das Ergebnis) von [{sunset("HORIZON=-6",0,"12:00","23:00")}] für morgen haben, dann musst Du das auch berechnen.
Auch funktionierende Lösungen kann man hinterfragen.

Rheingold

Zitat von: rabehd am 08 Februar 2022, 17:12:29
Du möchtest (in einem Dummy das Ergebnis) von [] für morgen haben, dann musst Du das auch berechnen.
Danke. Das hier wäre dann die richtige Lösung:

{fhem "setreading Zeitschaltuhr_Rolladen_Abends Zeit ".substr sunset("HORIZON=-6",0,"12:00","23:00"), 0, 5}


Vielen Dank! :)
Fhem auf Raspi 3; Jeelink mit 6x TX29DTH; CUL433 mit 9x RCS 1000 N und Somfy-Steuerung; CUL868; MAX-Cube + Thermostate; Philips Hue & Ikea Tradfri; Google Home Assistant; FTUI für Tablet und SmartPhone via Reverse-Proxy