FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: mr2017 am 15 Juni 2024, 10:10:19

Titel: Verwendung von $we in doif
Beitrag von: mr2017 am 15 Juni 2024, 10:10:19
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
Titel: Aw: Verwendung von $we in doif
Beitrag von: Damian am 15 Juni 2024, 23:11:30
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
Titel: Aw: Verwendung von $we in doif
Beitrag von: mr2017 am 16 Juni 2024, 08:16:23
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 ?!?
Titel: Aw: Verwendung von $we in doif
Beitrag von: Damian am 16 Juni 2024, 11:16:18
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])
Titel: Aw: Verwendung von $we in doif
Beitrag von: Otto123 am 16 Juni 2024, 12:36:46
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.
Titel: Aw: Verwendung von $we in doif
Beitrag von: Damian am 16 Juni 2024, 13:05:30
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.
Titel: Aw: Verwendung von $we in doif
Beitrag von: Otto123 am 16 Juni 2024, 13:46:55
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. :)
Titel: Aw: Verwendung von $we in doif
Beitrag von: mr2017 am 17 Juni 2024, 11:33:03
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])
)
Titel: Aw: Verwendung von $we in doif
Beitrag von: Damian am 17 Juni 2024, 11:51:06
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