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

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

Vorheriges Thema - Nächstes Thema

Pfriemler

Zitat von: Joker2002 am 30 April 2015, 21:39:33
Am Wochenende fahren nicht alle Rolläden mit dem Sonntenaufgang hoch. Hier habe ich ja den Code "DOELSEIF ([09:00|60]) ((set rollo_OG_Z1,rollo_OG_Z2_tuer off))" eingefügt damit mein Schlafzimmer bis 09.00 Uhr verdunkelt bleibt. Das klappt prinzipiell auch, wenn ich manuell eben immer den Vorgang in der DOIF speichere...
Nein, bei Sonnenaufgang fahren alle Rollos hoch, jeden Tag, da es keine Wochentagsbeschränkung gibt und diese Bedingung jeden Tag zutrifft. Nur Samstags und Sonntags fahren um 9 Uhr die spezifizierten Rollos, insbesondere wenn nicht zuvor die Sonne aufgegangen ist und sie ohnehin deswegen schon oben sind.

Tipp für den Umbau: Nimm 7 für Wochenende und Holiday, und 8 für alles was NICHT 7 ist.
"Ä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

Ok, werde ich einbauen, danke. Ich habe nochmal im commandref nachgeschaut und nach einer do always Option geschaut. Habe diese jetzt per Atribute eingefügt. Ein "initialized" bekomme ich dennoch nicht.... muss ich noch irgendetwas spezielles beachten ?

Pfriemler

Bei einer Neudefinition des DOIFs bekommst Du zumindest bei groben Fehlern immer eine Fehlermeldung, wenn die Spez nicht stimmt (DOIF versucht bspw. immer den ersten Timer sofort zu berechnen und gibt detallierte Fehlermeldungen wenn das nicht klappt). Du prüfst den richtig berechneten Timer im entsprechenden Reading "timer_...". War die Definition erfolgreich, erhältst du "initialzed" bis zur ersten Ausführung. Danach wechselt der Status (wenn man ihn nicht schöner definiert hat, was eine weitere Schönheit des Moduls ausmacht) auf "cmd_x", wobei die Zahl den Zustand benennt, der nach den Bedingungen zuletzt eintraf. Das ist völlig normal so.
Ob der Ausführungsteil eines DOIF-Zweiges ausgeführt wird, wenn die Bedingung erneut zutrifft, regelt "do always". Bei Deinem DOIF sollte also in der Regel "cmd_1" als Status stehen und das DOIF jeden Tag ausgeführt werden.
Was Du sonst noch beachten musst: Du brauchst eine auf Deine Bedürfnisse zugeschnittene Steuerung der Rolläden. Ich z.B. würde mich bedanken, wenn ich werktags durch ein sofortiges Öffnen eines Dutzend Rollos im Haus geweckt würde, weil zu erwarten ist, dass das Ereignis auch mal vor meinem Aufstehzeitpunkt eintritt. Aber das ist eine ganz persönliche Entscheidung, und Du wirst im Laufe der Wochen feststellen, dass noch viel mehr Automatisierung nicht so leicht wirklich komfortabel zu gestalten ist.

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,

ich bräuchte nochmal Eure Hilfe.

Ich habe noch Fehler in meiner Automatisierung, mit denen ich einfach nicht zurecht komme, bzw. den Fehler nicht finde...

Ich habe meine Rolladenprogrammierung für die Rolläden zum hochfahren durch folgenden Code realisieren wollen. Dabei sollen die Rolläden zum Sonnenaufgang, aber nicht vor 06:45 Uhr bzw. spätestens um 09:00 Uhr hochfahren.

So sieht also der Code aus:

define di_Rolladen_hoch at *{twilight("myTL","sr_weather","06:45","09:30")}} ((set rollo_kue,rollo_OG_Z1,rollo_OG_Z3,rollo_OG_Z5,rollo_OG_Z6,rollo_wz_1,rollo_wz_3,rollo_OG_Z2_tuer,rollo_OG_Z4_tuer,rollo_wz_2_tuer off)) or ([09:00|7] ((set rollo_OG_Z1,rollo_OG_Z2_tuer off)))

Hier erhlate ich immer den Fehler:

di_Rolladen_hoch: Unknown command (set, try help.


Was mache ich falsch. Ich habe schon nach der Fehlermeldung gegoogelt aber irgendwie komme ich nicht weiter :(


Das Herunterfahren der Rollläden zum Sonnenuntergang nach dem Twilight Plugin klappt indess ganz gut, nur habe ich auch hier noch ein kleines Problem: Ich möchte gerne, dass die Rollläden der Türen 10 Minuten später herunterfahren als die Fensterrollläden. Ich habe es also als erstes mit "attr wait 600" probiert und danach mit dem Codeschnipsel ([+00:10]) gemäß der Commandref versucht.
Beides brachte leider nicht den gewünschten Erfolg. Habt ihr vielleicht noch einen Tipp für mich ?

Pfriemler

Dein zitierter Code ist eine nette Mischung aus at (was deine Definition, anders als es der Name di_ vermuten lässt, nun mal ist) und DOIF ...
Wieso zwei }?
Was macht das or und die Timespec "or ([09:00|7]" inmitten des Ausführungsteils?
Räum den Ausführungsteil also mal auf.
Sollen immer noch am Wochenende nur die zwei Rollos aufgehen? Dann kannst Du das mit einem IF oder if lösen. Eine abweichende Zeitangabe klappt so aber nicht.

Zitat... Rollläden der Türen 10 Minuten später herunterfahren als die Fensterrollläden...
"attr wait 600" ... Codeschnipsel ([+00:10]) ... Beides brachte leider nicht den gewünschten Erfolg.
Sehe ich beides nicht als zielführend an.
attr wait verzögert einen sonst sofort eingetretenen Zustandswechsel, wenn Du Fenster und Tür im gleichen DOIF quasi zur gleichen Zeit triggern lässt aber in getrennte Zweige packst. Das empfiehlt sich schon jetzt nicht. Besser ist, den Türrolladenzeitpunkt separat neu mit Zeitoffset in einen eigenen Zweig zu setzen, so dass es einen eigenen (abweichenden) Timer ggü. den Fensterrolläden gibt.
[+00:10] als Timespec in DOIF löst m.W. eine Aktion alle zehn Minuten aus und ist kein Offset.

ZitatHabt ihr vielleicht noch einen Tipp für mich ?
Ohne konkreten Code keinen generellen zum Problem.

twilight nutze ich nicht, stattdessen sunrise und sunset. So genau brauche ich es nicht. Aber dort kann man sehr bequem einen offset als Argument hinterlegen. Geht mit twilight mglw. ähnlich. Alternativ könntest Du sicher, auch wenn das nicht genau 10 Minuten ausmachen, einfach einen anderen twilight-Spec verwenden, bei dem es dann halt noch ein bisschen mehr dunkel ist.
"Ä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 Engelsgeduld und verzeihe, dass ich noch so banale Fragen habe. Um FHEM jedoch zu verstehen lese ich in den Foren und in der Commandref viel und versuche danach dann das zu stricken was ich gerne hätte, mit bisher nur mäßigen Erfolg, aber ich lerne mit jeder Verbesserung :)

Was den Code zum Öffnen angeht hast Du recht, da muss ich aufräumen, das habe ich getan und werde diesen Code

define at_Rolladen_hoch at *{twilight("myTL","sr_weather","06:45","09:30")} ((set rollo_kue,rollo_OG_Z1,rollo_OG_Z3,rollo_OG_Z5,rollo_OG_Z6,rollo_wz_1,rollo_wz_3,rollo_OG_Z2_tuer,rollo_OG_Z4_tuer,rollo_wz_2_tuer off)) if ([09:00|7] ((set rollo_OG_Z1,rollo_OG_Z2_tuer off)))

heute Abend mal in FHEM einfügen.

Den anderen Code zum Schließen habe ich bereits in zwei Automatismen aufgeteilt (einen für die Fenster und einen für die Tür). Ich habe es auch schon mit Sunrise und Sunset probiert, brachte mir nur leider nicht den Erfolg. Ich werde den Code heute Abend mal posten.


Pfriemler

Toll, Browser zickt, Antwort futsch.

Nochmal (ich habe der Übersicht mal die ganze Schalterschlange verkürzt)
define at_Rolladen_hoch at *{twilight("myTL","sr_weather","06:45","09:30")} ((set ...rollo_wz_2_tuer off)) if ([09:00|7] ((set rollo_OG_Z1,rollo_OG_Z2_tuer off)))

1. Wozu hier Doppelklammern?
2. Unterscheide IF (das Modul von Damian) und if (Perl)
3. KANN so nicht gehen, Timespec im IF?

Also wenn ich mal unterstelle, dass anscheinend werktags die Rolläden lichtgesteuert, frühestens 6:45, spätestens 9:30 fahren sollen und am Wochenende um 9 nur zwei von denen:

define at_Rolladen_hochMOFR at *{twilight("myTL","sr_weather","06:45","09:30")} IF ({!$we}] (set .......rollo_wz_2_tuer off))
define at_Rolladen_hochSASO at *09:00 IF ({$we}] set rollo_OG_Z1,rollo_OG_Z2_tuer off

Bin aber nicht sicher, ob die Abfrage mit $we so richtig ist

Aber hatten wir nicht schon mal ein DOIF dafür?

Wer Fehler findet, darf sie behalten  :D
"Ä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

So, habe jetzt mal Deinen verbesserten Code in FHEM eingebaut. Ich bin sehr gespannt ob die Rollläden morgen entsprechend hochfahren. Danke schon  mal für die Hilfe  ;D

Ich denke die doppelte Klammer ist einfach ein Tippfehler. Ich hatte den Code händisch erstellt und eingefügt.

Das mit dem "IF" und "if" wusste ich bis dato auch noch nicht, wieder was dazu gelernt :)

Wir hatten schon mal für die Rollladensteuerung eine DIOF gemacht, das ist richtig, ich habe es aber wieder verworfen weil ich nicht wollte dass im Sommer die Rollläden schon um 05:42 Uhr hochfahren. Daher habe ich mich umgesehen noch der Möglichkeit eine Zeit zu definieren in der die Rollos hochfahren sollten...

Was das Runterfahren der Rollläden betrifft:
Ich habe für die Fenster folgende Codes:

([[LichtWetter:ss_weather]]) ((set rollo_kue,rollo_OG_Z1,rollo_OG_Z3,rollo_OG_Z6,rollo_wz_1,rollo_wz_3 on))

und für die Tür diesen hier angewandt:

([[LichtWetter:ss_weather]]) ([+00:10]) ((set rollo_kue,rollo_OG_Z1,rollo_OG_Z3,rollo_OG_Z6,rollo_wz_1,rollo_wz_3 on))

die Türen fahren jedoch immer zeitgleich mit den Fenstern runter. Sie sollen jedoch 10 Minuten später runterfahren. Irgendwie bekomme ich es nicht hin. In der Commandref hierzu habe ich eben nur die Möglichkeit mit dem attr 600 bzw. dem ([+00:10]) gefunden..

Pfriemler

'n Ahmd,

Im DOIF müssen die doppelten Klammern natürlich sein - einmal um die Befehlskette zu umschließen, zweitens um die , in der Device-Aufzählung zu maskieren, damit DOIF die nicht auseinanderreißt (Komma ist dort Befehlstrennzeichen).

([[LichtWetter:ss_weather]]) ([+00:10]) ((set rollo_kue,rollo_OG_Z1,rollo_OG_Z3,rollo_OG_Z6,rollo_wz_1,rollo_wz_3 on))

Mich wundert dass da überhaupt was passiert.  Probier als Bedingung doch mal ein Zeitoffset, sprich eine Sekundenanzahl als Operation also z.B. so: (die Klammern um die Rechenoperation ([LichtWetter:ss_weather]+600) nicht vergessen, (oder?))

([([LichtWetter:ss_weather]+600)]) ((set rollo_kue,rollo_OG_Z1,rollo_OG_Z3,rollo_OG_Z6,rollo_wz_1,rollo_wz_3 on))

Und ob das klappt mit meinem Code - wie gesagt, ich bin unsicher wegen des $we. Ich sehe gerade, wieder zu Hause, dass ich noch viele Perl-ifs einsetze:

define RolloOGWeHoch_Mo_Fr at *08:10 { if (!($we)) { fhem("set RolloOGWe Oeffnen"); } }

Das funktioniert. { eröffnet die Perl-Ebene nach der Zeitangabe des at. $we muss wohl vor der Negierung geklammert sein. Die zweite { öffnet den Ausführungsbereich des perl-if, aus Perl heraus werden FHEM-Befehle mit fhem(" ") aufrufen (verwirrend, aber ich setze von FHEM aus einen Perl-Befehl ab, von dem aus ich wieder einen FHEM-Befehl aufrufe, aber das ist richtig so), ";" als Abschluss des Befehls wie bei Perl Pflicht (bei Eingabe in der Kommandozeile von FHEM eine, in der fhem.cfg stehen dann automatisch und richtigerweise 2, und die zwei } schließen die Klammerebenen.
Und da ich kein Somfy nutze, sondern einen Dummy setze, bei dessen Änderung ein DOIF Impulse an den von mir umgepfriemelten (!) Antrieb schickt, heißt's bei mir nicht "set ... on" aber das nur am Rande.
"Ä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

so, voller Spannung den heutigen Morgen abgewartet und.....

... es fuhr leider nicht hoch. Ich erhielt folgende Fehlermeldung:

IF: rightbracket without left bracket: ] (set rollo.....off)

so wie ich das sehe fehlt in der Formel noch eine entsprechende Klammer nach dem IF... muss ich diese nach der ( und vor dem { setzen ?


define at_Rolladen_hochMOFR at *{twilight("myTL","sr_weather","06:45","09:30")} IF ({!$we}] (set .......rollo_wz_2_tuer off))

Pfriemler

#40
ja Mist ... nein, die ] durch ) ersetzen. sh... ich probiers heute mal aus.
Die Punkte haste aber schön gemacht...,
Vom 7Zöller via Tapatalk
"Ä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

So, heute Morgen neuer Versuch, leider (noch) ohne Erfolg :(

Code war folgender:
define at_Rolladen_hochMOFR at *{twilight("myTL","sr_weather","06:45","09:30")} IF ({!$we}) (set .......rollo_wz_2_tuer off))

Jetzt bekomme ich einen anderen Fehler:

IF: expected ELSE: )


Pfriemler

Also Klammerdurchzählen solltest Du schon selbst machen - für mich ist hinten eine runde ) zuviel an einer Stelle, an der IF sonst ein (optionales) ELSE erwarten würde. Das war auch in Deinem vorigen Zitat schon falsch, aber da ging's ja um das $we.
Probier doch mal den Ausführungsteil durch ein Notify mit einem Dummy aus - dann musst Du nicht immer einen Tag warten und wir kommen schneller zu Ergebnissen.
"Ä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

Fragen zu IF oder DOIF sollten besser unter Automatisierung gestellt werden.
Warum?
Weil Damian dort eher liest.
Klammerzählen wird aber auch dort niemandem abgenomen - zählen sollte jeder selbst können.
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.

Joker2002

#44
So, neue Runde :)

Ich war das Wochenende nicht da, so dass ich nicht berichten konnte. Habe die Ausführungsteil überprüft und Klammern gezählt (wobei ich das von selbst getan hätte, wenn ich gewusst hätte was FHEM mir da erzählt  ;))

So, ich bekomme mit diesem Code eine neue Fehlermeldung, die mir leider ebenfalls nichts sagt :(

*{twilight("myTL","sr_weather","06:25","09:30")} IF ({!$we}) (set ...,rollo_wz_2_tuer off)

Das ist die dazugehörige Fehlermeldung...

Zitat2015.05.26 06:25:00 1: PERL WARNING: Odd number of elements in anonymous hash at (eval 2787) line 1.
2015.05.26 06:25:00 3: eval: {if({!$we}){fhem('set rollo_kue,rollo_OG_Z1,rollo_OG_Z3,rollo_OG_Z5,rollo_OG_Z6,rollo_wz_1,rollo_wz_3,rollo_OG_Z2_tuer,rollo_OG_Z4_tuer,rollo_wz_2_tuer off')}}