Hallo zusammen,
ich würde gerne $we verwenden um meine Rolläden an Wochenenden und Feiertagen am Morgen später nach oben fahren zu lassen. Daneben gibt es einen generellen Offset auf den Sonnenauf- und untergang den ich gelegentlich je nach Jahreszeit anpasse. Dazu habe ich Folgendes doif gebaut:
([$SELF:Automatik_Morgen] eq "on" and ([{sunrise([$SELF:Offset_Morgen]*3600+$we*7200)}]))
(set Rolladen_EG up)
DOELSEIF
([$SELF:Automatik_Abend] eq "on" and ([{sunset([$SELF:Offset_Abend]*3600)}]))
(set Rolladen_EG down)
Das doif funktioniert ohne den Teil "+$we*7200" einwandfrei, die Wochenend-Abfrage funktioniert aber nicht. Denke mal das liegt an der Verwendung globaler Variablen in doif die ich nicht ganz durchstiegen habe.
Wo könnte der Fehler liegen?
VG
Michael
Schau dir mal die Definition von sunrise genauer an: https://wiki.fhem.de/wiki/SUNRISE_EL
Dort kannst du als ersten Parameter die offset-Sekundenzahl angeben.
Auf der anderen Seite beherrscht DOIF die Wochentagsteuerung: https://fhem.de/commandref_DE.html#DOIF_Wochentagsteuerung
Hallo Damian,
die Offset-Berechnung ist ja schon der Parameter von sunrise().
Die Wochentagssteuerungvon doif hilft hier nicht viel, ich will ja am WE die Rolläden trotzdem hochfahren, nur später.
Die Idee ist $we auszuwerten (0 oder 1) mit dem WE-Offset in Sekunden zu multiplizieren und dann zum gesamten Offset zu addieren.
Ich glaube aber dass in meiner Syntax $we so nicht ausgewertet wird ?!?
In der Berechnung der Zeiten im DOIF ist die Variable $we offenbar nicht bekannt.
Im DOIF kannst du es auch so lösen:
([{sunrise(7200)}|WE] or [{sunrise()}|AT])
Zitat von: mr2017 am 15 Juni 2024, 10:10:19Das doif funktioniert ohne den Teil "+$we*7200" einwandfrei, die Wochenend-Abfrage funktioniert aber nicht. Denke mal das liegt an der Verwendung globaler Variablen in doif die ich nicht ganz durchstiegen habe.
Zitat von: Damian am 16 Juni 2024, 11:16:18In der Berechnung der Zeiten im DOIF ist die Variable $we offenbar nicht bekannt.
Bist Du sicher? Diese Definition liefert zumindest heute am WE die richtige Zeit:
defmod d_test DOIF ([{sunset($we*3600)}]) (set Lampe1 on)
attr d_test room Test
Der Fehler ist eher ein logischer: der Timer wird erzeugt zu einem Moment an dem $we noch den falschen Wert enthält?! Freitag wird der Timer für Samstag erzeugt, Sonntag wird der Timer für Montag erzeugt?
sunrise() ermittelt doch den nächsten Termin, sprich nach dem Sonnenaufgang wird der Zeitpunkt für morgen ermittelt.
ja, du hast Recht, $we ist beim Parameter bekannt, man kann im DOIF auch außerhalb der Funktionen bei Zeitangabe noch etwas drauf addieren und dort war $we nicht bekannt, das hatte ich getestet.
Allerdings funktioniert die Berechnung des nächsten Zeitpunktes mit $we ja ohnehin nicht korrekt, daher besser die vorgesehene Lösung im DOIF nehmen.
Naja der Ansatz von Michael wird immer problematisch, egal mit welchem Tool. Es ist wahrscheinlich besser die gewünschten Zeitpunkte zu berechnen und in der Entscheidungslogik zu prüfen ob WE ist oder nicht. Genau das macht DOIF ja mit dem Vorschlag von Damian. :)
Vielen Dank für Euer Feedback, ich denke ich werde den Ansatz von Damian mal testen.
Eine Frage dazu noch: Ich teste ja auch ob die Rolladen-Automatik überhaupt greifen soll (über das Reading Automatik_Morgen). Nur wenn Automatik_Morgen auf "on" steht soll überhaupt etwas passieren.
Wäre das dann die richtige Verküfung der Logik-Abfragen? :
(
[$SELF:Automatik_Morgen] eq "on" and ([{sunrise(7200)}|WE] or [{sunrise()}|AT])
)
Zitat von: mr2017 am 17 Juni 2024, 11:33:03Vielen Dank für Euer Feedback, ich denke ich werde den Ansatz von Damian mal testen.
Eine Frage dazu noch: Ich teste ja auch ob die Rolladen-Automatik überhaupt greifen soll (über das Reading Automatik_Morgen). Nur wenn Automatik_Morgen auf "on" steht soll überhaupt etwas passieren.
Wäre das dann die richtige Verküfung der Logik-Abfragen? :
(
[$SELF:Automatik_Morgen] eq "on" and ([{sunrise(7200)}|WE] or [{sunrise()}|AT])
)
ja