(gelöst) Doif Rolladen at umgebaut

Begonnen von Intruder1956, 15 März 2016, 09:08:43

Vorheriges Thema - Nächstes Thema

Intruder1956

Guten Morgen,

ich hätte da mal ein Problem  ;) :)
Ich habe drei at´s die meine Rolladen steuern

#define Schlaf_Rollo_runter at *{sunset(-1500)} set Schlaf_Rollo down
#define Schlaf_Rollo_rauf at *{sunrise(2700,"07:30")} set Schlaf_Rollo up

Ich habe die Tage mit meiner Nachbarin gesprochen und Sie hat mich gebeten, ob es möglich wäre die Rolladen am Wochenende oder Feiertag etwas später hochzufahren.

Jetzt habe ich aus diesen drei at`s ein DOIF gebaut

define doRolladen DOIF ([{sunrise(2700,"07:30")}|8 and [08:30|7]-{sunset(-1500)}]) (set Bad_Rollo,WZ_RollGross,Schlaf_Rollo up)\
DOELSE (set Bad_Rollo,WZ_RollGross,Schlaf_Rollo down)
attr doRolladen do always

Das klappt aber nicht
2016.03.15 07:30:00 2: doRolladen: set Bad_Rollo: no set value specified
2016.03.15 07:30:00 2: doRolladen: WZ_RollGross: Unknown command WZ_RollGross, try help.
2016.03.15 07:30:00 2: doRolladen: Schlaf_Rollo up: Unknown command Schlaf_Rollo, try help.

Habe es auch schon so probiert
define doRolladen DOIF ([{sunrise(2700,"07:30")}|8 and [08:30|7]-{sunset(-1500)}]) (set Bad_Rollo up set WZ_RollGross up set Schlaf_Rollo up)\
DOELSE (set Bad_Rollo down set WZ_RollGross down set Schlaf_Rollo down)
attr doRolladen do always
2016.03.14 18:41:36 2: doRolladen: set Bad_Rollo down set WZ_RollGross down set Schlaf_Rollo down: no set value specified

Ich möchte, dass die Rolladen Mo.-Fr. nicht vor 7:30 hochgehen, am Sa., So. und Feiertage erst um 8:30
Ich habe holiday installiert
define Rheinland holiday
attr Rheinland room System

attr global holiday2we Rheinland



die Textdatei von Rheinland.holiday.txt

# Format für einzelne Tage: 1 MM-DD <Text>
1 01-01 Neujahr
1 01-06 Heilige Drei Koenige
1 05-01 Tag der Arbeit
1 08-15 Mariae Himmelfahrt 
1 10-03 Tag der deutschen Einheit
1 11-01 Allerheiligen
1 12-25 1. Weihnachtstag
1 12-26 2. Weihnachtstag 
# Osterbezogene Feiertage # Format: 2 <relative Tage von Ostern> <Text>
2 -2 Karfreitag
2  1 Ostermontag
2 39 Christi Himmelfahrt
2 50 Pfingsten
2 60 Fronleichnam
 
5 -1 Wed 11 23 Buss und Bettag

Kann mir jemand helfen mein DOIF zu vervollständigen ??
Ich denke, dass ich mit meinem DOIF nur die Arbeitstage und das WE abdecke.
Ich habe in dem 97 Seiten Tread irgendwo was mit mehreren Device gesehen, müsste ich aber jetzt noch mal 2-3 Stunden lesen und suchen.

Vielen Dank und Gruß
Werner
Zotac CI547 32GB RAM 500GB SSD,ESXI 6.5, VM-Fhem5.8, VM-ioBroker, Cul 868Mhz;Cul 433Mhz = Busware, LGW, HM-MOD-RPI-PCB, Uniroll, IT YCR-100 TMT2100,ITR-1500, LD382 mit Wifilight, ESA 2000 + SENSOR WZ SET,FS20 TFK, HM-Sec-SC, HM-CC-RT-DN,PCA301,

Per

Deine Klammersetzung verwirrt mich.
([{sunrise(2700,"07:30")}|8 and [08:30|7]-{sunset(-1500)}])

Behaupten wir mal, dass der DOELSEIF-Zweig geht und konzentrieren uns auf den Rest, oder?

Du willst, dass die Rollos arbeitstags von {sunrise(2700,"07:30")} bis {sunset(-1500)} und Sonn-/Feiertags von [08:30|7] bis {sunset(-1500)} oben sind.
Also ([{sunrise(2700,"07:30")}|8 -{sunset(-1500)}] or [08:30|7]-{sunset(-1500)}])
Alternativ (und leichter zu verstehen)
DOIF ([{sunrise(2700,"07:30")}|8] or [08:30|7]) (...hoch) DOELSIF ([{sunset(-1500)}]) (...runter)

Wobei ich die sunsetsunrise-Syntax einfach von dir übernommen habe, da kenne ich mich nicht aus.

Otto123

#2
Im DOIF musst Du sowas doppelt klammern
Zitat(set Bad_Rollo,WZ_RollGross,Schlaf_Rollo up)\
--> ((set Bad_Rollo,WZ_RollGross,Schlaf_Rollo up))\

Sonst erkennt er die Kommas nicht als Trenner!
ZitatDefinition
define <name> DOIF ⟨(<Bedingung>) ⟨⟨(⟨<Befehle>⟩)⟩ ⟨⟨⟨DOELSEIF (<Bedingung>) ⟨(⟨<Befehle>⟩)⟩⟩ ... ⟩⟨DOELSE ⟨(⟨<Befehle>⟩)⟩⟩⟩⟩⟩
Befehlstrennzeichen ist das Komma (<Befehl>, <Befehl>, ...)
Befehlssequenzen werden in runde Klammern gesetzt (<Befehlssequenz A>) (<Befehlssequenz B>) ...
Enthält ein Befehl Kommata, ist er zusätzlich in runde Klammern einzuschliessen (<Befehlsteil a>, <Befehlsteil b> ... )
Perl-Befehle {<Perl-Befehl>} sind in geschweifte Klammern einzuschliessen
Jede Berechnung {(<Berechnung>)⟨<Berechnung>⟩} in einem Befehl ist in geschweifte Klammern einzuschliessen und muss mit einer geöffneten runden Klammer beginnen.

ZitatIch habe in dem 97 Seiten Tread irgendwo was mit mehreren Device gesehen, müsste ich aber jetzt noch mal 2-3 Stunden lesen und suchen.

Es reicht die umfangreiche commandref zu lesen - da steht zumindest zum DOIF so gut wie alles drin!

Gruß Otto
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

Intruder1956

ich gehe mal davon aus, dass die Klammern stimmen  ;)
Internals:
   DEF        ([{sunrise(2700,"07:30")}|8 and [08:30|7]-{sunset(-1500)}]) (set Bad_Rollo,WZ_RollGross,Schlaf_Rollo up) DOELSE (set Bad_Rollo,WZ_RollGross,Schlaf_Rollo down)
   NAME       doRolladen
   NR         255
   NTFY_ORDER 50-doRolladen
   STATE      initialized
   TYPE       DOIF
   Readings:
     2016-03-15 09:00:03   state           initialized
     2016-03-15 09:00:03   timer_1_c1      16.03.2016 07:30:00
     2016-03-15 09:00:03   timer_2_c1      15.03.2016 18:43:15
   Condition:
     0          DOIF_time($hash,$hash->{realtime}{0},$hash->{realtime}{1},$wday,$hms,"")
   Days:
   Devices:
   Do:
     0:
       0          set Bad_Rollo,WZ_RollGross,Schlaf_Rollo up
     1:
       0          set Bad_Rollo,WZ_RollGross,Schlaf_Rollo down
   Helper:
     globalinit 1
     last_timer 2
     sleeptimer -1
   Interval:
     0          -1
     1          0
   Itimer:
   Localtime:
     0          1458109800
     1          1458063795
   Realtime:
     0          07:30:00
     1          18:43:15
   Regexp:
   State:
   Time:
     0          {sunrise(2700,"07:30")}
     1          {sunset(-1500)}
   Timecond:
     0          0
     1          0
   Timer:
     0          0
     1          0
   Timers:
     0           0  1
   Triggertime:
     1458063795:
       localtime  1458063795
       Hash:
     1458109800:
       localtime  1458109800
       Hash:
Attributes:
   do         always

Habe es in der Befehlsleiste eingetragen und im def dann probiert.
Es werden ja auch readings erzeugt nur das "set" nicht abgearbeitet.
Ich habe weder in Commandref, noch Anfänger PDF mehrere "set Device" gefunden um es richtig einzutragen
Zotac CI547 32GB RAM 500GB SSD,ESXI 6.5, VM-Fhem5.8, VM-ioBroker, Cul 868Mhz;Cul 433Mhz = Busware, LGW, HM-MOD-RPI-PCB, Uniroll, IT YCR-100 TMT2100,ITR-1500, LD382 mit Wifilight, ESA 2000 + SENSOR WZ SET,FS20 TFK, HM-Sec-SC, HM-CC-RT-DN,PCA301,

Otto123

Zitat von: Intruder1956 am 15 März 2016, 09:46:45

Es werden ja auch readings erzeugt nur das "set" nicht abgearbeitet.
Ich habe weder in Commandref, noch Anfänger PDF mehrere "set Device" gefunden um es richtig einzutragen
Siehe einen Post höher  8)
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

Intruder1956

danke Otto,
wir haben zeitgleich geschrieben  ;D
ist schon in der "def" geändert.
Passt denn mein DOIF jetzt auch für WE und Feiertage oder muss ich da noch zusätzlich was einfügen ??

Gruß Werner
Zotac CI547 32GB RAM 500GB SSD,ESXI 6.5, VM-Fhem5.8, VM-ioBroker, Cul 868Mhz;Cul 433Mhz = Busware, LGW, HM-MOD-RPI-PCB, Uniroll, IT YCR-100 TMT2100,ITR-1500, LD382 mit Wifilight, ESA 2000 + SENSOR WZ SET,FS20 TFK, HM-Sec-SC, HM-CC-RT-DN,PCA301,

CoolTux

Geht das überhaupt auf die Art? Kenne das eigentlich nur mittels Pipe die Angabe mehrerer Devices für ein set oder eben das set immer wiederholen


set Bad_Rollo|WZ_RollGross|Schlaf_Rollo up



set Bad_Rollo, set WZ_RollGross, set Schlaf_Rollo up

Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

CoolTux

Ok vergisst es, es geht. Ich hätte wohl mal erst probieren sollen und dann nicht schreiben    ;D


Sorry
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Otto123

#8
Hallo Werner
Das passt nicht:
([{sunrise(2700,"07:30")}|8 and [08:30|7]-{sunset(-1500)}])
Du willst das Wochenende und Arbeitstag zur gleichen Zeit war wird  :-X
So wird es von der Logik der Wochentage her. Ich sehe gerade da stimmen Klammern nicht! Und ich würde das runterfahren ändern.
([{sunrise(2700,"07:30")}|8] or [08:30|7])
Aus dem DOELSE ein DOELSEIF - ich finde das übersichtlicher
DOELSEIF ([{sunset(-1500)}]) (set Bad_Rollo,WZ_RollGross,Schlaf_Rollo down)

Die Zeiten habe ich jetzt nicht geprüft.

@coolTux Mein Favorit ist set Rollo.* auf  8) deswegen fangen meine Rolläden alle mit Rollo an
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

CoolTux

Zitat von: Otto123 am 15 März 2016, 10:14:58
@coolTux Mein Favorit ist set Rollo.* auf  8) deswegen fangen meine Rolläden alle mit Rollo an

Na gut das ist ja Regex wie man es kennt   ;D
Habe ich ja bei meinen Devices auch so. Fenster mit Fenster beginnend und Türen mit Türen und so. Und dann als Nachwort noch Kontakt damit man auch noch darauf Regexen kann   ;)

Aber das mit dem set device, device, device kannte ich echt noch nicht.


Grüße
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Otto123

Zitat von: CoolTux am 15 März 2016, 10:44:42
Aber das mit dem set device, device, device kannte ich echt noch nicht.
cool! das freut mich, Dir auch mal was zu zeigen. Und jetzt kommt unser Lieblingsspruch: Wo steht es   ;D ;D ;D
richtig - unterhalb von devspec  8)
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

CoolTux

 ;D ;D ;D
Ich danke Dir

gut bis jetzt brauchte ich es aber noch nicht, aber nun kann ich einige Dinge etwas einfacher machen. Zu mindest vom aussehen her. Nen Komma sieht netter aus wie ne Pipe   *lach*



Grüße
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Intruder1956

man bin ich froh, dass ich es ja gestern schon gelesen habe  ;)
mir fehlte ja nur eine Klammer und die gehört ja zu DOIF und nicht zu devspec  :)

nur weiß ich immer noch nicht wirklich ob ich ein "or" einsetzen muss für die Feiertage  8)
Zotac CI547 32GB RAM 500GB SSD,ESXI 6.5, VM-Fhem5.8, VM-ioBroker, Cul 868Mhz;Cul 433Mhz = Busware, LGW, HM-MOD-RPI-PCB, Uniroll, IT YCR-100 TMT2100,ITR-1500, LD382 mit Wifilight, ESA 2000 + SENSOR WZ SET,FS20 TFK, HM-Sec-SC, HM-CC-RT-DN,PCA301,

Per

Zitat von: Intruder1956 am 15 März 2016, 11:10:24
nur weiß ich immer noch nicht wirklich ob ich ein "or" einsetzen muss für die Feiertage  8)

Zitat von: Per am 15 März 2016, 09:31:28
Also ([{sunrise(2700,"07:30")}|8 -{sunset(-1500)}] or [08:30|7]-{sunset(-1500)}])
Alternativ (und leichter zu verstehen)
DOIF ([{sunrise(2700,"07:30")}|8] or [08:30|7]) (...hoch) DOELSIF ([{sunset(-1500)}]) (...runter)
Überlege mal, wann ein Tag Wochentag UND Wochenende gleichzeitig sein kann!

Jens_B

#14
Wäre das nicht auch einfach über weekdaytimer lösbar?
Genau dafür ist weekdaytimer ideal.

Ich bin hier mobil unterwegs kann das gerad nicht aus meinem fhem kopieren.

EDIT:

so könnte das zum Beispiel aussehen mit Weekdaytimer:
define ROLLLADEN_GAST_AUF_ZU_WT WeekdayTimer ROLLLADEN_GAST_TEST 8|07:30|auf  $we|08:30|auf Mo-So|{sunset_abs(-1800,"17:00","22:00")}|zu (Value("ZEITSTEUERUNG") eq "an")

Hier werden die Rollladen unter der Woche um 7.30 hochgefahren und am Wochenende und an Feiertagen um 8:30.
Runter gehts immer frühestens um 17 Uhr und spätestens um 22.00 bei Sonnenuntergang -1800 Sekunden.
Das Ganze geht natürlich auch morgens :
define ROLLLADEN_GAST_AUF_ZU_WT WeekdayTimer ROLLLADEN_GAST_TEST {sunset_abs(-1800,"17:00","22:00")}|07:30|auf  $we|08:30|auf Mo-So|{sunrise_abs(0,"07:30","10:00")}|zu (Value("ZEITSTEUERUNG") eq "an")

Jetzt werden die Rollladen zusätzlich morgens unter der Woche ab 7:30 - 10:00 bei Sonnenaufgang hochfahren. (also niemals vor 7:30). Am Wochenende und an Feiertagen (oder Urlaub, wenn mit in der Holiday eingetragen) fahren die Rollladen erst um 8:30 hoch.
(fest definiert)


Die Value Zeitsteuerung hinten fragt nur einen Dummy ab, wenn der auf aus steht ist der weekdaytimer deaktiviert. Das kann man inzwischen auch einfacher lösen, da man ja ein "disable" attribut für die definition setzen kann.

Damals, als ich das mir mal gebaut habe, gabs die Möglichkeit mw noch nicht so.

Gruß
Jens

PS: Ich finde DOIF auch schön, aber gerad hier für so eine einfache Rollladensteuerung bietet sich der Weekdaytimer mit der einfachen Syntax IMHO geradezu an.
RaspberryPi 4 (Raspian Buster)FHEM+Homebridge
HMLAN für Homematic
Z-Wave USB Stick
Shelly Devices
Fritz!Box 7590Ax