Problem mit einer Automatisierung von Somfy Rollläden

Begonnen von Joker2002, 16 November 2015, 20:33:25

Vorheriges Thema - Nächstes Thema

Joker2002

Erst einmal danke für die zahlreichen Tipps.

Da ich mich noch zu den Anfängern in FHEM zähle muss ich meine Baustellen erst einmal Schritt für Schritt abbauen. Die "holiday" Möglichkeit habe ich auch schon mal grob über das WIKI überflogen jedoch noch nicht umgesetzt da hier weitere Fragen entstehen, die ich dann gerne in Ruhe angehen möchte, wenn die Automatisierung und andere Dinge über FHEM fehlerfrei laufen. Also muss ich erstmal bis zum Wochenende warten und dann die Fehlermeldung posten.  :)

Joker2002

Ich müsste nochmal Eure Hilfe in Anspruch nehmen.

Ich habe die Automatisierung soweit seit einigen Monaten am Laufen. Jetzt wollte ich diese um einen Punkt erweiteren. Ich hätte gerne, dass bei dem Anwesenheitsstatus "on" die Rollläden regulär mit Sonnenauf- bzw. Untergang hoch bzw. runterfahren und wenn der Statuts "off" aktiviert wurde alle Rolläden runterfahren und solange unten bleiben, bis der Status wieder auf "on" gestellt wurde.

Dies wollte ich mit folgedem Code realisieren:

((ReadingsVal("Anwesend ", "state", "") eq "on") and ([([LichtWetter:sr]+500)|$we]) (set rollo_alle_FensterTueren_speziell off) DOELSEIF ([([LichtWetter:sr]+1)|!$we]) ((set rollo_alle_Fenster,rollo_alle_Tueren off))) DOELSE (ReadingsVal("Anwesend ", "state", "") eq "off") ((set rollo_alle_Fenster,rollo_alle_Tueren on))

Leider erhalte ich einen error, den ich nicht verstehe. Dieser liest sich wie folgt:

perl error in condition: (ReadingsVal("Anwesend ", "state", "") eq "on") and (DOIF_time_once($hash,$hash->{timer}{0},$wday,"$we")) (set rollo_alle_FensterTueren_speziell off) DOELSEIF (DOIF_time_once($hash,$hash->{timer}{1},$wday,"!$we")) ((set rollo_alle_Fenster,rollo_alle_Tueren off)): syntax error at (eval 3004) line 1, near ") ("

Der Vollständigkeit halber hier mal ein List meiner Automatisierung:

Internals:
   DEF        ((ReadingsVal("Anwesend ", "state", "") eq "on") and ([([LichtWetter:sr]+500)|$we]) (set rollo_alle_FensterTueren_speziell off) DOELSEIF ([([LichtWetter:sr]+1)|!$we]) ((set rollo_alle_Fenster,rollo_alle_Tueren off))) DOELSE (ReadingsVal("Anwesend ", "state", "") eq "off") ((set rollo_alle_Fenster,rollo_alle_Tueren on))
   NAME       di_Rolladen_hoch
   NR         85
   NTFY_ORDER 50-di_Rolladen_hoch
   STATE      initialized
   TYPE       DOIF
   Readings:
     2015-12-02 08:18:02   error           perl error in condition: (ReadingsVal("Anwesend ", "state", "") eq "on") and (DOIF_time_once($hash,$hash->{timer}{0},$wday,"$we")) (set rollo_alle_FensterTueren_speziell off) DOELSEIF (DOIF_time_once($hash,$hash->{timer}{1},$wday,"!$we")) ((set rollo_alle_Fenster,rollo_alle_Tueren off)): syntax error at (eval 3004) line 1, near ") ("
     2015-12-01 19:26:18   state           initialized
     2015-12-02 22:59:55   timer_1_c1      03.12.2015 08:19:22|$we
     2015-12-02 22:59:55   timer_2_c1      03.12.2015 08:11:03|!$we
   Condition:
     0          (ReadingsVal("Anwesend ", "state", "") eq "on") and (DOIF_time_once($hash,$hash->{timer}{0},$wday,"$we")) (set rollo_alle_FensterTueren_speziell off) DOELSEIF (DOIF_time_once($hash,$hash->{timer}{1},$wday,"!$we")) ((set rollo_alle_Fenster,rollo_alle_Tueren off))
   Days:
     0          $we
     1          !$we
   Devices:
   Do:
     0:
       0
     1:
       0          ReadingsVal("Anwesend ", "state", "") eq "off"
       1          (set rollo_alle_Fenster,rollo_alle_Tueren on)
   Helper:
     globalinit 1
     last_timer 2
     sleeptimer -1
   Itimer:
     all         LichtWetter
   Realtime:
     0          08:19:22
     1          08:11:03
   State:
   Time:
     0          ([LichtWetter:sr]+500)
     1          ([LichtWetter:sr]+1)
   Timecond:
     0          0
     1          0
   Timer:
     0          0
     1          0
   Timerfunc:
   Timers:
     0           0  1
Attributes:
   do         always
   icon       fts_shutter_20
   room       Automatik


Ich hoffe wieder auf Eure Hilfe  :D

Danke

Ellert

Wie kommst Du darauf
Zitat(ReadingsVal("Anwesend ", "state", "")
zu nutzen?

Siehe: http://fhem.de/commandref_DE.html#DOIF_Ereignissteuerung

Joker2002

#18
Den Hinweis in der Commandref habe ich gelsen und meinen Code entsprechend angepasst aber auch hier erhalte ich eine Fehlermeldung. Daher auch mein Gedanke mit den ReadingsVal, die ja leider auch nicht geklappt haben.

Hier mal der Code, wie ich ihn gemäß der Commandref bzgl. der Ereignissteuerung hatte:

(([Anwesend] eq "on") and ([([LichtWetter:sr]+500)|$we]) (set rollo_alle_FensterTueren_speziell off) DOELSEIF ([([LichtWetter:sr]+1)|!$we]) ((set rollo_alle_Fenster,rollo_alle_Tueren off))) DOELSEIF ([Anwesend] eq "off") ((set rollo_alle_Fenster,rollo_alle_Tueren on))


Ellert


Joker2002

Hm.. ich habe den Beitrag zur Ereignissteuerung nun ein paar Mal durchgelesen, weiß aber nicht richtig welchen Bereich Du genau meinst.

Meinst Du mit ein paar  Abschnitten diesen  "Ereignissteuerung über Auswertung von Events" ?

Ellert

Lies soweit bis Du die richtige Verwendung von $we herausgefunden hast.

Joker2002

Ok, Deine Tipps helfen mir als Anfänger nicht wirklich weiter sondern verwirren nur mehr.

Du beziehst Dich erst auf die Ereignissteuerung (siehe Verlinkung) und schreibst jetzt, dass es sich um ein Problem mit der Verwendung der Wochentage weiter unten handelt?!

Auch diese habe ich bereits berücksichtigt gehabt, in dem ich vorher in dem Code die Zahl 8 für Wochenende und 7 für Arbeitstage eingetragen hatte. Das brachte mich auch nicht weiter, denn vorher lief die Automatisierung mit meinem beschriebenen Code eine ganze Zeit ohne Probleme.

hier mal die Fehlermeldung die ich erhalte mit dem entsprechenden Wochentageintragungen:

perl error in condition: (EventDoIf('Anwesend',$hash->{helper}{triggerDev},$hash->{helper}{triggerEvents},'on')) and (DOIF_time_once($hash,$hash->{timer}{0},$wday,"7")) (set rollo_alle_FensterTueren_speziell off) DOELSEIF (DOIF_time_once($hash,$hash->{timer}{1},$wday,"8")) ((set rollo_alle_Fenster,rollo_alle_Tueren off)): syntax error at (eval 1273) line 1, near ") ("

Kann mir vielleicht jemand den Fehler in der Formel mal aufzeigen damit ich weiß wo ich genau ansetzen muss? Wäre echt dankbar

Hier mal der aktuelle Code:

(([Anwesend:?on]) and ([([LichtWetter:sr]+500)|7]) (set rollo_alle_FensterTueren_speziell off) DOELSEIF ([([LichtWetter:sr]+1)|8]) ((set rollo_alle_Fenster,rollo_alle_Tueren off))) DOELSEIF ([Anwesend:?off]) ((set rollo_alle_Fenster,rollo_alle_Tueren on))

Damian

Zähle mal die Klammern, dann wirst du feststellen, dass eine fehlt.:

(([Anwesend:?on]) and ([([LichtWetter:sr]+500)|7]))

Gruß

Damian
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

viegener

Aaaargh, Du warst schneller....

Generell würde ich solche Ausdrücke immer in einem Texteditor definieren, der fehlende KLammern nach Art auch anzeigt, sonst zählt man sich dumm und dusselig...

Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

Joker2002

Hallo danke für die schnelle Antwort. Ein klammerpriblem? Ok das hatte ich anhand der Fehlermeldung jetzt nicht vermutet. Werde es testen, danke :)

Damian

Zitat von: Joker2002 am 04 Dezember 2015, 19:03:24
Hallo danke für die schnelle Antwort. Ein klammerpriblem? Ok das hatte ich anhand der Fehlermeldung jetzt nicht vermutet. Werde es testen, danke :)

Du würdest weniger Fehler machen, wenn du die überflüssigen Klammern alle weglassen würdest:

([Anwesend:?on] and [([LichtWetter:sr]+500)|7]))

Gruß

Damian

Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Joker2002

Hm, irgendwie ist bei mir der Wurm drin.

Ich habe jetzt die Kommas hinzugefügt und am Code noch ein wenig geschrieben, da ich immer noch eine Fehlermeldung erhielt, wenn ich den Schalter "Anwesend" auf "off" geschaltet habe.

Nun habe ich das Phänomen, dass dieses DOIF ein Eigenleben entwickelt dass ich nicht nachvollziehen kann, denn bei der "Off" Stellung fahren die Rollläden alle einmal runter und dann wieder hoch, nicht aber so wie ich es gerne hätte, nämlich dass die Rollläden der Türen  geschlossen bleiben und nur die Fenster entsprechend beim Sonnenaufgang hochfahren.

Der Hinweis, die Kommas zu reduzieren werde ich versuchen zu beherzigen, nur muss ich mich in so eine Programmiersprache erst einmal hineindenken, denn ich bin kein IT'ler und eigene mir das Wissen eben nach und nach durch lesen und Erfahrung an.

Es wäre daher nett, wenn Ihr nochmal über meinen Code schauen könntet und mir vielleicht einen Hinweis gebt warum die Automatik sich so "merkwürdig" verhält.

Anbei mal der aktuelle Code

(([Anwesend:?on]) and ([([LichtWetter:sr]+500)|7])) (set rollo_alle_FensterTueren_speziell off) DOELSE (([Anwesend:?on]) and [([LichtWetter:sr]+1)|8])) ((set rollo_alle_Fenster,rollo_alle_Tueren off))) DOELSE (([Anwesend:?off])  and ([([LichtWetter:sr])) ((set rollo_alle_Tueren on,set rollo_alle_Fenster off))

Ellert


Joker2002