Brauche Hilfe bei der Automatisierung von Rolläden (SOMFY)

Begonnen von Joker2002, 13 April 2015, 21:07:26

Vorheriges Thema - Nächstes Thema

Joker2002

Hallo liebe FHEM Comunity,

ich beschäftige mich erst seit einer kurzen Zeit mit FHEM daher bitte ich um Nachsicht :)

Ich habe es endlich geschafft FHEM auf einem Raspberry Pi2 in Verbindung mit einem CUL Stick V3.4 zum Laufen zu bringen. Nachdem ich die erste Hürde, die Rollläden von Somfy in FHEM einzubinden genommen habe, würde ich nun gerne eine Zeitschaltung zu realisieren. Ich hätte gerne, dass meine Rollläden mit dem Sonnenstand (dieser wird über das Weather/Wetter Modul realisiert) hoch bzw. runterfahren.
Ich habe mir dazu entsprechend das entsprechende ,,Heimautomatisierung-mit-fhem" PDF durchgelesen und meine Rollläden zu einer Gruppe namens ,,Somfy" zusammengeführt.
Anschließend wollte ich das Hochfahren der Rollläden definieren:
define somfy DOIF ([{sr()}]) (set somfy off, attr somfy wait {(600)} if ($we) {fhem("set rollo_OG_Z1, rollo_OG_Z2_tuer off at 09:00"})

bzw. das runterfahren der Rollos nach Sonnenuntergang mit Verzögerung von 10 Minuten realisieren:

define Somfy DOIF ([{ss()}]) (set Somfy on, attr Somfy wait {(600))})

Ich erhalte jedoch imer einer Fehlermeldung mit der ich so gar nichts anfangen kann.

Fehlermeldung:

Somfy DOIF: the at function "ss()" must return a timespec and not Undefined subroutine &main::ss called at (eval 566) line 1.
.: {ss()}

Könnt Ihr mir vielleicht weiterhelfen ?



Pfriemler

Von sr() und ss() höre ich das erste Mal ... liefert unpassendes Format für die DOIF-Zeitbestimmung.
Zum DOIF gibt's haufenweise Beispiele auch im ZUsammenhang mit Sonnenuntergang etc. in der deutschen commandref ...
set a,b off at xx:xx? Was ist das denn?
"somfy" ist eine structure oder was? eine andere Möglichkeit, mehrere Geräte mit einem Befehl zu steuern, kenne ich (bisher noch) nicht.
Ein attr xy group z dient nur zu Anzeigesortierzwecken ...
Wieso setzt Du die Verzögerung nach dem Schaltbefehl?
Abgesehen davon solltest Du Dein Anliegen konsequent DOIF-gemäß formulieren und umsetzen ... also alles in ein DOIF und alle möglichen Kombinationen in separaten DOELSEIFs ausformulieren, also
DOIF (Sonnenaufgang und kein Wochenende) (tue das)
DOELSEIF (Sonnenaufgang und Wochenende (tue das)
DOELSEIF (Sonnenuntergang)(tue das)
mit attr wait für die jeweiligen Zustände ...

Jm2c.

"Änd're nie in fhem.cfg, denn das tut hier allen weh!" *** Wheezy@Raspi(3), HMWLAN+HMUART, CUL868(SlowRF) für FHT+KS+FS20, miniCUL433, Rademacher DuoFern *** "... kaum macht man es richtig, funktioniert es ..."

Joker2002

Hallo Pfriemler,

vielen Dank für Deine schnelle Antwort. Wie gesagt, ich betrete mit FHEM Neuland und kenn mich mit der Materie noch nicht gut aus. Ich habe zwar schon viel gelesen, manches kann ich jedoch nicht nachvollziehen.
Ich werde mal schauen ob ich mit Deinem Rat eine brauchbare Automatisierung basteln kann :)

Danke

Pfriemler

#3
Dein Ansatz ist ja prinzipiell verständlich, halt nur von hinten durch die Brust ins Auge. Ich meinte ja nur: Wenn schon DOIF, dann doch richtig.
Ganz prinzipiell: Bevor Du Automatisierungen bastelst, versuche die Aktionen zuerst auf der Kommandozeile auszuführen. Führt denn "set somfy on" bzw. "set somfy off" bei Dir zu einer Aktion?
Falls Du nicht zuviele Rolläden hast, ist das Setzen mehrerer Rolläden mit einer "Gruppe" (also einer Structure) vielleicht overkill - schreibe sie einfach direkt in den Ausführungsteil hinein.
Für alle Fragen zum DOIF selbst bist Du im Unterforum "Automatisierung" besser aufgehoben.
Im Detail:
define somfy DOIF ([{sr()}]) (set somfy off, attr somfy wait {(600)} if ($we) {fhem("set rollo_OG_Z1, rollo_OG_Z2_tuer off at 09:00"})
a) Du verwendest als Namen für das DOIF einen Begriff, der offenbar ein Device oder eine Structure benennt (siehe "set somfy ...") Das ist der erste Fehler
b) das Attribut "wait" zum DOIF gibst Du einmalig auf der Kommandozeile bei der Definition ein, es hat in der Definition des DOIF nichts verloren.
    Ich würde aber vielmehr nicht den Zustandswechsel des DOIF verzögern, sondern den Trigger selbst
Das sähe also z.B. so aus (gefundene Tippfehler darf man behalten):
define di_SomfyZeitsteuerung DOIF ([{sunrise(600)}|7] or [09:00|7])(set rollo_OG_Z1 off, set rollo_OG_Z2_tuer off)
schaltet 600s nach dem Sonnenaufgang und am Wochenende oder Feiertagen oder (also evtl. spätestens) um 9 Uhr an Wochenenden und Feiertagen rollo_OG_Z1 und ~Z2 "off", vermutlich ist das der Hochfahren-Befehl. |7 entspricht quasi "$we", |8 wäre das Gegenteil, also "!$we" - siehe commandref zum DOIF
Befehle zum Öffnen an Nicht-Wochenenden und zum Schließen fügst Du wie erwähnt mit DOELSEIF im gleichen DOIF an. Im Def-Editor kannst Du wunderbar mit Leerzeichen und Leerzeilen strukturieren, also etwa
([{sunrise(600)}|7] or [09:00|7])
    (set rollo_OG_Z1 off,
     set rollo_OG_Z2_tuer off)
DOELSEIF ([{sunset(600)}])
    (set rollo_OG_Z1 on,
     set rollo_OG_Z2_tuer on)   

usw. Viel Spaß - je lesbarer, umso mehr freust Du Dich später bei Änderungen!
BTW: Negative Sekundenangaben bei sunrise und sunset verschieben die Ausführung nach vorn, also vor.
"Änd're nie in fhem.cfg, denn das tut hier allen weh!" *** Wheezy@Raspi(3), HMWLAN+HMUART, CUL868(SlowRF) für FHT+KS+FS20, miniCUL433, Rademacher DuoFern *** "... kaum macht man es richtig, funktioniert es ..."

Joker2002

Vielen Dank für Deine Hilfe. Ich habe mich heute nochmal mit dem Thema "Automatisierung" auseinandergesetzt und das PDF und die Wiki gewählt. Herausgekommen ist hierbei folgende Struktur:

define di_Rollaeden_hoch DOIF ([[LichtWetter:sr_weather]|8])(set rollo_kue, rollo_OG_Z1, rollo_OG_Z2_tuer, rollo_OG_Z3, rollo_OG_Z4_tuer, rollo_OG_Z5, rollo_OG_Z6, rollo_wz_1, rollo_wz_2_tuer, rollo_wz_3 off) DOELSEIF ([09:00|60])(set rollo_OG_Z1, rollo_OG_Z2_tuer off)
attr di_Rollaeden_hoch wait 300



define di_Rollaeden_runter DOIF ([[LichtWetter:ss_weather]])(set rollo_kue, rollo_OG_Z1, rollo_OG_Z3, rollo_OG_Z5, rollo_OG_Z6, rollo_wz_1, rollo_wz_3 on)
attr di_Rollaeden_runter wait 600


define di_Rollaeden_Tuer_runter DOIF ([[LichtWetter:ss_weather]])(set rollo_OG_Z2_tuer, rollo_OG_Z2_tuer, rollo_OG_Z4_tuer, rollo_wz_2_tuer on)
attr di_Rollaeden_Tuer_runter wait 1200

FHEM hat die Angaben soweit auch ohne Fehler geschluckt nur fahren die Rollos irgendwie nicht runter. Was mache ich jetzt falsch ?? Das ist echt schwierig...

Pfriemler

Liefern deine Trigger Zeitpunkte? Oder Werte? In den Interna des Doifs werden die im voraus berechneten Triggerzeiten angezeigt.

geht nich Gips nich ...

"Änd're nie in fhem.cfg, denn das tut hier allen weh!" *** Wheezy@Raspi(3), HMWLAN+HMUART, CUL868(SlowRF) für FHT+KS+FS20, miniCUL433, Rademacher DuoFern *** "... kaum macht man es richtig, funktioniert es ..."

Pfriemler

Und wenn du mehrere Aktoren aufzählst, darf kein Leerzeichen stehen, zudem musst du Befehle mit Kommas zusätzlich klammern, weil DOIF sie an den Kommas sonst auseinander  reißt.  Und guck ins Log, da sind bestimmt Fehler gemeldet.

geht nich Gips nich ...

"Änd're nie in fhem.cfg, denn das tut hier allen weh!" *** Wheezy@Raspi(3), HMWLAN+HMUART, CUL868(SlowRF) für FHT+KS+FS20, miniCUL433, Rademacher DuoFern *** "... kaum macht man es richtig, funktioniert es ..."

Joker2002

besten Dank für Deine Hilfe,

ich habe den Fehler gefunden (denke ich zumindest), denn heute Morgen gingen (fast) alle Rollläden hoch.
Der Fehler liegt wahrscheinlich im Code denn so funktionierte es nicht:

(set rollo_kue, rollo_OG_Z1, rollo_OG_Z2_tuer, rollo_OG_Z3, rollo_OG_Z4_tuer, rollo_OG_Z5, rollo_OG_Z6, rollo_wz_1, rollo_wz_2_tuer, rollo_wz_3 off)

erst als ich jeden Aktor mit set.... off bzw. set...on benannt habe lief es :)

Ich werde die nächsten Tage mal beobachten ob FHEM auch weiterhin brav die Rollläden hoch und runter fährt, ansonsten melde ich mich nochmal. Vielen lieben Dank für Deine Hilfe :O)

Pfriemler

Wie ich ja bereits sagte: DOIF kloppt die Zeilen auseinander, weil Kommas eine Trennung darstellen

Aus
(set rollo_kue, rollo_OG_Z1, rollo_OG_Z2_tuer, rollo_OG_Z3, rollo_OG_Z4_tuer, rollo_OG_Z5, rollo_OG_Z6, rollo_wz_1, rollo_wz_2_tuer, rollo_wz_3 off)


sendet das DOIF also nacheinander diese Befehle an FHEM:
set rollo_kue
rollo_OG_Z1
rollo_OG_Z2_tuer
rollo_OG_Z3
...
rollo_wz_3 off

Das sind alles keine gültigen Befehle.

Mein Vorschlag wäre
((set rollo_kue,rollo_OG_Z1,rollo_OG_Z2_tuer,rollo_OG_Z3,rollo_OG_Z4_tuer,rollo_OG_Z5,rollo_OG_Z6,rollo_wz_1,rollo_wz_2_tuer,rollo_wz_3 off))

also ohne Leerzeichen in der Aufzählung und mit doppelten Klammern, damit DOIF den Inhalt als zusammenhängenden Befehl versteht.

Zitaterst als ich jeden Aktor mit set.... off bzw. set...on benannt habe lief es :)
Natürlich.
Und danke für's Danke. Sehe ich nämlich nicht immer als Reaktion ...
"Änd're nie in fhem.cfg, denn das tut hier allen weh!" *** Wheezy@Raspi(3), HMWLAN+HMUART, CUL868(SlowRF) für FHT+KS+FS20, miniCUL433, Rademacher DuoFern *** "... kaum macht man es richtig, funktioniert es ..."

Joker2002

Ah, jetzt weiß ich was Du damit meinst. Ok. Das werde ich berücksichtigen. Ich hatte den Feher mit set..off bzw. set.. on bemerkt nachdem im Log File entsprechende Meldungen zu sehen waren. Habe das jetzt so schön strukturiert wie Du es in Deinem Beispiel angegeben hattest (wusste bis dato nicht dass man die DOIFS auch entsprechend editieren kann). Aber ich lerne mit jedem DOIF dazu :)

Danke ! :)

Joker2002

#10
So, jetzt muss ich noch was fragen :)
Ich habe heute an einer Automatisation für die Sommertage gearbeitet. Ich hätte gerne, dass die Rollläden und die Markise auf eine bestimmte Position fahren, bzw. ausfahren wenn mein TCM Außensensor gegen 10.00 Uhr eine Temperatur von 26 Grad meldet. Gegen 19.00 Uhr soll die Markise jedoch wieder einfahren; egal wie warm es zu dieser Zeit noch ist. Hierzu habe ich mich an das Beispiel in der Wiki von FHEM gehalten und folgende Zeilen verfasst:

define di_Rollo_Sonne_Hinten DOIF ([[TCM_Aussen]] > T:26 and [10:00-[[LichtWetter:ss_weather]]]) ((set rollo_kue,rollo_OG_Z1,rollo_OG_Z2_tuer,rollo_OG_Z3,rollo_OG_Z4_tuer,rollo_OG_Z5,rollo_OG_Z6,rollo_wz_1,rollo_wz_2_tuer,rollo_wz_3 pos 50)) (set rollo_markise on) DOELSE ((set rollo_kue,rollo_OG_Z1,rollo_OG_Z2_tuer,rollo_OG_Z3,rollo_OG_Z4_tuer,rollo_OG_Z5,rollo_OG_Z6,rollo_wz_1,rollo_wz_2_tuer,rollo_wz_3, rollo_markise off)) [19:00-[[LichtWetter:ss_weather]]]) (set rollo_markise off)

Hier erhalte ich im Logfile folgende Fehlermeldung:
di_Rollo_Sonne_Hinten DOIF: Wrong timespec T: 18.7 H: 20: either HH:MM:SS or {perlcode}: [TCM_Aussen]

Was mag er an den Temperaturangaben nicht ?

Joker2002

ich sehe gerade im Logfile bezüglich der Rollos immer folgende Fehlermeldung:

2015.04.15 06:39:08 1: SOMFY_set: Error - drivetime and updatetime = 0
2015.04.15 06:39:08 2: SOMFY set rollo_kue off: sAA20000A000004
2015.04.15 06:39:08 1: SOMFY_set: Error - drivetime and updatetime = 0
2015.04.15 06:39:08 2: SOMFY set rollo_OG_Z1 off: sAC20000C000006
2015.04.15 06:39:08 1: SOMFY_set: Error - drivetime and updatetime = 0
2015.04.15 06:39:08 2: SOMFY set rollo_OG_Z2_tuer off: sAD20000D000007
2015.04.15 06:39:08 1: SOMFY_set: Error - drivetime and updatetime = 0
2015.04.15 06:39:08 2: SOMFY set rollo_OG_Z3 off: sAD20000D000008
2015.04.15 06:39:08 1: SOMFY_set: Error - drivetime and updatetime = 0
2015.04.15 06:39:08 2: SOMFY set rollo_OG_Z4_tuer off: sA0200010000009
2015.04.15 06:39:08 1: SOMFY_set: Error - drivetime and updatetime = 0
2015.04.15 06:39:08 2: SOMFY set rollo_OG_Z5 off: sA9200009000010
2015.04.15 06:39:08 2: di_Rollaeden_hoch: ser rollo_OG_Z6 off: Unknown command ser, try help.
2015.04.15 06:39:08 1: SOMFY_set: Error - drivetime and updatetime = 0
2015.04.15 06:39:08 2: SOMFY set rollo_wz_1 off: sAE20003E000001
2015.04.15 06:39:08 1: SOMFY_set: Error - drivetime and updatetime = 0
2015.04.15 06:39:08 2: SOMFY set rollo_wz_2_tuer off: sA3200013000002
2015.04.15 06:39:08 1: SOMFY_set: Error - drivetime and updatetime = 0
2015.04.15 06:39:08 2: SOMFY set rollo_wz_3 off: sAC20000C000003

was hat das zu bedeuten ?

Pfriemler

Zitat von: Joker2002 am 15 April 2015, 21:29:30
Was mag er an den Temperaturangaben nicht ?
Weil DOIF sie als Zeitangaben betrachtet? Wegen des Doppelpunkts?
Poste mal ein List vom Sensor, also "list TCM_Aussen" auf der Kommandozeile. Du wertest den State aus, der offenbar "T: 18.7 H: 20" heißt.
Wir müssen ein anderes reading finden.

Zitat2015.04.15 06:39:08 1: SOMFY_set: Error - drivetime and updatetime = 0
2015.04.15 06:39:08 2: SOMFY set rollo_kue off: sAA20000A000004
Keine Ahnung, weil ich SOMFY nicht kenne.

Jemand anderes?
"Änd're nie in fhem.cfg, denn das tut hier allen weh!" *** Wheezy@Raspi(3), HMWLAN+HMUART, CUL868(SlowRF) für FHT+KS+FS20, miniCUL433, Rademacher DuoFern *** "... kaum macht man es richtig, funktioniert es ..."

Puschel74

Zitat von: Pfriemler am 16 April 2015, 20:37:45
Keine Ahnung, weil ich SOMFY nicht kenne.

Jemand anderes?
z.B. der passende Beitrag zu SOMFY  ???
http://forum.fhem.de/index.php/topic,24158.0.html

@Joker: Deine Beiträge wären auch lesbarer wenn du die Tags benutzen könntest.
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

Pfriemler

"Änd're nie in fhem.cfg, denn das tut hier allen weh!" *** Wheezy@Raspi(3), HMWLAN+HMUART, CUL868(SlowRF) für FHT+KS+FS20, miniCUL433, Rademacher DuoFern *** "... kaum macht man es richtig, funktioniert es ..."