Verwendung von $we in doif

Begonnen von mr2017, 15 Juni 2024, 10:10:19

Vorheriges Thema - Nächstes Thema

mr2017

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

Damian

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
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

mr2017

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 ?!?

Damian

#3
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])
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Otto123

#4
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.
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Damian

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.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Otto123

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. :)
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

mr2017

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])
)

Damian

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
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF