Problem mit einer Automatisierung von Somfy Rollläden

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

Vorheriges Thema - Nächstes Thema

Joker2002

Hallo miteinander,

ich bräuchte mal wieder Hilfe aus der Community.
Ich habe seit dieser Woche ein Problem mit einer Automatisierung meiner Rollläden und zwar dahingehend, dass diese unter der Woche alle brav hochfahren, am Wochenende jedoch nicht.
FHEM weist auch keine Fehler auf und im Logfile ist ebenfalls nichts festzustellen.

Hier einmal mein Code:
define rollo_alle_Fenster structure room rollo_kue rollo_OG_Z1 rollo_OG_Z3 rollo_OG_Z5 rollo_OG_Z6 rollo_wz_1 rollo_wz_3

define rollo_alle_Tueren structure room rollo_OG_Z2_tuer rollo_OG_Z4_tuer rollo_wz_2_tuer

define rollo_alle_FensterTueren_speziell structure room rollo_kue,rollo_OG_Z3,rollo_OG_Z4_tuer,rollo_OG_Z5,rollo_OG_Z6,rollo_wz_2_tuer,rollo_wz_3, rollo_wz_1




define di_Rolladen_hoch DOIF ([([LichtWetter:sr]+1800)|8])  ((set rollo_alle_Fenster,rollo_alle_Tueren off)) DOELSEIF ([([LichtWetter:sr]+1800)|7])  ((set rollo_alle_FensterTueren_speziell off))

Bin echt über jede Hilfe dankbar :/

viegener

Ich habe jetzt Dein DOIF nicht überprüft, denn ich kenne die dahinterliegende Definition für Lichtwetter nicht.

Bezüglich Somfy-Rolläden ist aber bekannt, dass mehrere direkt hintereinanderausgeführte Befehle nicht gut funktionieren.
Beim nanocul führt es zu Abstürzen (suche mal nach nanocul und somfy)
Bei anderen werden Befehle verschluckt.

Warums das allerdings nur am Wochenende passiert kann ich Dir nicht erklären...
Mein Vorschlag wäre mal mit Pausen zwischen den Befehlen einzuführen, am einfachsten durch Setzen des Attributs async_delay an der Structure.

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

Ellert

Schaltet der Bedingungszweig für WE, wenn ja liegt es nicht am DOIF.

Lässt sich die WE Gruppe mit set ... off schalten?

Joker2002

Hallo,
zunächst mal danke für die Antworten.

Ich denke ich werde es mal mit dem Attribut der Zeitverzögerung probieren.

Der Bedieungszeweig für das Wochenende funktioniert, zumindest erhalte ich keine Fehlermeldung.
Die Gruppe lässt sich auch mit dem Befehl set..off normal schalten. Ich kann theoretisch auch alle Rollos mit dem set..on, set..off schalten; nur das Wochenende will eben nicht.

Wie gesagt, es lief ja auch einige Monate problemlos bis eben letzte Woche die Rollläden am Wochenende nicht mehr hochfuhren.

Ich werde wieder berichten wenn die Attribute gesetzt sind und das Wochenende verstrichen ist :)

Ellert

ZitatDer Bedieungszeweig für das Wochenende funktioniert, zumindest erhalte ich keine Fehlermeldung.

Keine Fehlermeldungen sind keine Garantie für die Ausführung des Bedingungszweiges. Wenn im Status des DOIF cmd_2 steht, dann wurde versucht die Befehle auszuführen.

Wenn Du nicht bis zum Wochenende warten möchtest, dann kannst Du mit holliday den aktuellen Tag als Wochenende setzen und testen.

Falls noch notwendig, mach ein list di_Rolladen_hoch für den Fehlerfall und poste das Listing..

Joker2002

So, das Wochenende ist rum und die Rollläden sind leider nicht hochgefahren, trotz variablen Einstellungen.

Im Log File ist keine Fehlermeldung zu ersehen. Im den Bedigungszweig des DOIFS steht cmd1.

Ich weiß wirklich nicht woran es liegt zumal es ja bis vor einer Woche noch problemlos funktioniert hatte.

Bin für weitere Tipps wie immer dankbar :/

Ellert

Wie wär's mit:
ZitatFalls noch notwendig, mach ein list di_Rolladen_hoch für den Fehlerfall und poste das Listing.

Jorge3711

#7
Zitat von: Joker2002 am 16 November 2015, 20:33:25

define di_Rolladen_hoch DOIF ([([LichtWetter:sr]+1800)|8])  ((set rollo_alle_Fenster,rollo_alle_Tueren off)) DOELSEIF ([([LichtWetter:sr]+1800)|7])  ((set rollo_alle_FensterTueren_speziell off))

Mir sind da ja eindeutig zu viele Runde Klammern. Zumindest im Set Bereich sind diese nicht nötig. Habe Dein DOIF nachgebaut und ich behaupte, dass "set rollo_alle_Fenster,rollo_alle_Tueren off" der Knackpunkt ist.

Mein TestDOIF sieht so aus:


define test_di DOIF
([([16:00]-1800)|8]) (set rolli_test,rolli_test2 on)


Und das hat eben gemeckert und nicht ausgeführt. Folgende Fehlermeldung steht bei mir übrigens im Reading "error" des DoIf und sollte bei Dir eigentlich ähnlich zu finden sein:

error
set rolli_test: no set value specified rolli_test2 on: Unknown command rolli_test2, try help.


D.h., probier mal


define di_Rolladen_hoch DOIF
   ([([LichtWetter:sr]+1800)|8])  (set rollo_alle_Fenster off, set rollo_alle_Tueren off)
DOELSEIF
   ([([LichtWetter:sr]+1800)|7])  (set rollo_alle_FensterTueren_speziell off)


In Deinem 2. Block, wird auch nur ein Structure angesprochen, weshalb dieses auch funktioniert.

Damian

Zitat von: Jorge3711 am 23 November 2015, 16:01:11
Mir sind da ja eindeutig zu viele Runde Klammern. Zumindest im Set Bereich sind diese nicht nötig. Habe Dein DOIF nachgebaut und ich behaupte, dass "set rollo_alle_Fenster,rollo_alle_Tueren off" der Knackpunkt ist.

Mein TestDOIF sieht so aus:


define test_di DOIF
([([16:00]-1800)|8]) (set rolli_test,rolli_test2 on)


Und das hat eben gemeckert und nicht ausgeführt. Folgende Fehlermeldung steht bei mir übrigens im Reading "error" des DoIf und sollte bei Dir eigentlich ähnlich zu finden sein:

error
set rolli_test: no set value specified rolli_test2 on: Unknown command rolli_test2, try help.


D.h., probier mal


define di_Rolladen_hoch DOIF
   ([([LichtWetter:sr]+1800)|8])  (set rollo_alle_Fenster off, set rollo_alle_Tueren off)
DOELSEIF
   ([([LichtWetter:sr]+1800)|7])  (set rollo_alle_FensterTueren_speziell off)


In Deinem 2. Block, wird auch nur ein Structure angesprochen, weshalb dieses auch funktioniert.

Beim DOIF gilt Komma als Trennzeichen daher sind die doppelten Klammern wichtig, damit der Ausdruck zusammen bleibt.

Die Alternative mit zwei kommagetrennten set-Befehlen geht auch, denn hier trennt das Komma die beiden set-Befehle.

Gruß

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

Jorge3711

Zitat von: Damian am 23 November 2015, 16:14:11
Beim DOIF gilt Komma als Trennzeichen daher sind die doppelten Klammern wichtig, damit der Ausdruck zusammen bleibt.

Die Alternative mit zwei kommagetrennten set-Befehlen geht auch, denn hier trennt das Komma die beiden set-Befehle.


Habe mein Test DOIF angepasst:

([([17:00]-1980)|8]) ((set rolli_test, rolli_test2 on))

Jetzt ist mein Dummy rolli_test aber nicht wie beabsichtigt eingeschaltet worden, sondern mit dem Status "rolli_test2 on" versehen worden. :) Nach noch einem Test herausgefunden, dass kein Leerzeichen in der Set-Anweisung vorkommen darf. Blöd wenn man das eben immer so gewohnt ist. Wieder was gelernt.

Sofern kein Tippfehler in den Devicenamen vorhanden ist, sollte dann ja aber das DOIF von Joker2002 funktionieren?!

Joker2002

So, wie gewünscht mal ein List von meinen di_Rolladen_hoch

Internals:
   DEF        ([([LichtWetter:sr]+500)|7]) ((set rollo_alle_FensterTueren_speziell off)) DOELSEIF ([([LichtWetter:sr]+1)|8]) ((set rollo_alle_Fenster,rollo_alle_Tueren off))
   NAME       di_Rolladen_hoch
   NR         85
   NTFY_ORDER 50-di_Rolladen_hoch
   STATE      cmd_2
   TYPE       DOIF
   Readings:
     2015-11-23 07:56:33   cmd_event       timer_2
     2015-11-23 07:56:33   cmd_nr          2
     2015-11-23 07:56:33   state           cmd_2
     2015-11-23 19:32:17   timer_1_c1      24.11.2015 08:04:52|7
     2015-11-23 19:32:17   timer_2_c2      24.11.2015 07:56:33|8
   Condition:
     0          DOIF_time_once($hash,$hash->{timer}{0},$wday,"7")
     1          DOIF_time_once($hash,$hash->{timer}{1},$wday,"8")
   Days:
     0          7
     1          8
   Devices:
   Do:
     0:
       0          (set rollo_alle_FensterTueren_speziell off)
     1:
       0          (set rollo_alle_Fenster,rollo_alle_Tueren off)
     2:
   Helper:
     globalinit 1
     last_timer 2
     sleeptimer -1
   Internals:
   Itimer:
     all         LichtWetter
   Readings:
   Realtime:
     0          08:04:52
     1          07:56:33
   State:
   Time:
     0          ([LichtWetter:sr]+500)
     1          ([LichtWetter:sr]+1)
   Timecond:
     0          0
     1          1
   Timer:
     0          0
     1          0
   Timerfunc:
   Timers:
     0           0
     1           1
Attributes:
   do         always
   icon       fts_shutter_20
   room       Automatik

Damian

Zitat von: Joker2002 am 23 November 2015, 19:35:49
So, wie gewünscht mal ein List von meinen di_Rolladen_hoch

Internals:
   DEF        ([([LichtWetter:sr]+500)|7]) ((set rollo_alle_FensterTueren_speziell off)) DOELSEIF ([([LichtWetter:sr]+1)|8]) ((set rollo_alle_Fenster,rollo_alle_Tueren off))
   NAME       di_Rolladen_hoch
   NR         85
   NTFY_ORDER 50-di_Rolladen_hoch
   STATE      cmd_2
   TYPE       DOIF
   Readings:
     2015-11-23 07:56:33   cmd_event       timer_2
     2015-11-23 07:56:33   cmd_nr          2
     2015-11-23 07:56:33   state           cmd_2
     2015-11-23 19:32:17   timer_1_c1      24.11.2015 08:04:52|7
     2015-11-23 19:32:17   timer_2_c2      24.11.2015 07:56:33|8
   Condition:
     0          DOIF_time_once($hash,$hash->{timer}{0},$wday,"7")
     1          DOIF_time_once($hash,$hash->{timer}{1},$wday,"8")
   Days:
     0          7
     1          8
   Devices:
   Do:
     0:
       0          (set rollo_alle_FensterTueren_speziell off)
     1:
       0          (set rollo_alle_Fenster,rollo_alle_Tueren off)
     2:
   Helper:
     globalinit 1
     last_timer 2
     sleeptimer -1
   Internals:
   Itimer:
     all         LichtWetter
   Readings:
   Realtime:
     0          08:04:52
     1          07:56:33
   State:
   Time:
     0          ([LichtWetter:sr]+500)
     1          ([LichtWetter:sr]+1)
   Timecond:
     0          0
     1          1
   Timer:
     0          0
     1          0
   Timerfunc:
   Timers:
     0           0
     1           1
Attributes:
   do         always
   icon       fts_shutter_20
   room       Automatik


Nur mal zur Info:

((set rollo_alle_FensterTueren_speziell off))

Diesen Ausdruck brauchst du nicht doppelt zu Klammern, da hier kein Komma im Ausdruck vorkommt.

Gruß

Damian

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

Ellert

@Joker2002:
Das ist kein Listing vom Fehlerfall.

Für den funktionierenden Fall sehen die Readings stimmig aus:
ZitatReadings:
     2015-11-23 07:56:33   cmd_event       timer_2
     2015-11-23 07:56:33   cmd_nr          2
     2015-11-23 07:56:33   state           cmd_2
     2015-11-23 19:32:17   timer_2_c2      24.11.2015 07:56:33|8

Joker2002

Nun ja, ein Listing vom Fehlerfall zu generieren ist schwierig da im log ja nichts steht und auch in der Automatik davon nichts zu erlesen ist

Ellert

Der Fehlerfall sollte nächsten Samstag 08:04:52|7 verfügbar sein, er wäre auch letztes Wochenende verfügbar gewesen.
Wenn das zu lange dauert, könntest Du mit holiday und holiday2we einen beliebigen Tag als Feiertag, Wochenende definieren und den Fehler z.B. morgen provozieren, und ein Listing erstellen.

Interressant wären auch die Stati mit Zeiten der Rolläden um 08:04:52|7, dann könntest Du sehen ob der set-Befehl auf die Geräte gewirkt hat.

Letztlich musst Du die Fragen klären:

Hat das DOIF richtig geschaltet?
Hat der set-Befehl die Gerätestati richtig gesetzt?
Wenn beides o.k. ist, liegt es nicht am DOIF oder dem set-Befehl.

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


Joker2002

diese Meldung erhalte ich dann...

di_Rolladen_hoch DOIF: expected DOELSEIF or DOELSE: ) ((set rollo_alle_Fenster,rollo_alle_Tueren off))) DOELSEIF (([Anwesend:?off]) and ([([LichtWetter:sr])) ((set rollo_alle_Tueren on,set rollo_alle_Fenster off))

Ellert

Verwendest Du einen Editor mit Klammerprüfung, wie hier empfohlen? Welchen? Wenn nicht, siehe hier: http://forum.fhem.de/index.php/topic,45373.msg371668.html#msg371668

Du könntest Deine Code-Postings gerne ein wenig strukturieren, das macht es Antwortenden leichter und Du bekommst selbst auch einen guten Überblick.

Etwa so:
(([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))


Und, beherzige doch bitte die bereits gegebenen Hinweise:http://forum.fhem.de/index.php/topic,44176.msg363845.html#msg363845

Joker2002

Danke für den Hinweis, ich wusste nicht, dass man in FHEM einen entepsrechenden Editor hat. Werde es ausprobieren.


Joker2002

So, habe den Rest der Woche dazu genutzt um meine Automatik nochmal zu überarbeiten und Fehler zu vermeiden, in dem ich die Kommas überprüft habe.
Dabei habe ich den Threat von Ellert beachtet und mal, gemäß dem Link

http://forum.fhem.de/index.php/topic,45373.msg371668.html#msg371668

die Funktionen:

attr WEB JavaScripts codemirror/fhem_codemirror.js
attr WEB codemirrorParam { "lineWrapping":true }


eingefügt, mit dem Ergebnis, dass es bei mir nichts gebracht hat, denn eine Kommaüberprüfung gab seitens des Editors in FHEM nicht.

Mittlerweile habe ich wie geschrieben meine Automatik aufgeräumt und folgendermaßen überarbeitet:

(([Anwesend] eq "on") and ([[LichtWetter:sr]|7])) (set rollo_alle_FensterTueren_speziell off)
DOELSEIF
(([Anwesend] eq "on") and ([09:00|7])) (set rollo_OG_Z1 off;;set rollo_OG_Z2_tuer off)
DOELSEIF
(([Anwesend] eq "on") and ([[LichtWetter:sr]|8])) (set rollo_alle_Fenster off;;set rollo_alle_Tueren off)
DOELSEIF
(([Anwesend] eq "off")  and ([LichtWetter:sr])) (set rollo_alle_Tueren on;;set rollo_alle_Fenster off)
DOELSEIF
([LichtWetter:ss]) (set rollo_alle_Fenster on)
DOELSEIF
([LichtWetter:ss]) (set rollo_alle_Tueren on)
DOELSEIF
(([LichtWetter:ss]) and ( $month <= 5 || $month >= 8 )) (set rollo_alle_Fenster pos 80)
DOELSEIF
(([LichtWetter:ss]) and ( $month <= 5 || $month >= 8 )) (set rollo_wz_2_tuer,rollo_OG_Z4_tuer pos 80;;set rollo_wz_2_tuer on)
DOELSEIF
(([LichtWetter:ss]) ( $month <= 10 || $month >= 9 )) (set rollo_alle_Fenster on)
DOELSEIF
(([LichtWetter:ss]) and ( $month <= 10 || $month >= 9 )) (set rollo_alle_Tueren on)


Nun erhalte ich in den States der Internals immer die Meldung

CMD_5

Kann mir jemand sagen was das bedeutet ? In der Commandref und hier im Forum konnte ich dazu nichts finden :/

Ellert

Zitat... denn eine Kommaüberprüfung gab seitens des Editors in FHEM nicht.
... und wird es wohl auch nicht geben.
ZitatKann mir jemand sagen was das bedeutet ?
Die Befehle des 5. Bedingungszweiges wurden abgearbeitet (cmd mnemonisch für command/Befehl).

Joker2002

..ich meinte natürlich die erwähnte Klammerprüfung.

Es ist für mich nur derzeit noch nicht verständlich warum die Rollläden ab Sonnenaufgang hoch und runterfahren solagen diese Automatik aktiv ist.

Ich finde den Fehler einfach nicht. Kann vielleicht einer von Euch nochmal über den oben genannten Code schauen und mir sagen woran es liegt ?

Jorge3711

Zitat von: Joker2002 am 15 Dezember 2015, 09:13:57
..ich meinte natürlich die erwähnte Klammerprüfung.

Es ist für mich nur derzeit noch nicht verständlich warum die Rollläden ab Sonnenaufgang hoch und runterfahren solagen diese Automatik aktiv ist.

Ich finde den Fehler einfach nicht. Kann vielleicht einer von Euch nochmal über den oben genannten Code schauen und mir sagen woran es liegt ?

Dein DOIF Konstrukt ist etwas verwirrend. Mit Deiner 3. und 4. DOIF-Anweisung sagst Du, dass bei Sonnenuntergang die Rollläden der Fenster und Türen auf gehen sollen. Die 5. und 6. DOIF-Anweisung sagt dann aber wiederum, dass bei Sonnenuntergang die Fensterrollläden auf 80 % fahren sollen, abhängig von aktuellen Monat. Die 5. und 6. DOIF-Anweisung ziehen aber nur von August bis Mai.

Deine letzten beiden DOIF-Anweisung verstehe ich auch nicht wirklich. Die sollen nur September/Oktober gelten und dann alle Rollos auf?

Verwirrt mich etwas sehr das alles. Ich glaube Du denktst zu kompliziert bei dem Ganzen.

Du nutzt doch das Twighlight Modul, warum dann nicht einfach eine Rollladensteuerung abhängig der Sonnenuntergangszeiten umsetzen, statt dieser Monatsausnahmengeschichte? Meine Rollladensteuerung mit Twighlight sieht z.B. so aus:


DOELSEIF
([Sonnenstand:ss] ge "18:00:00" and [{twilight("Sonnenstand","ss_civil","16:00","22:00")}])
  (set structure_rollladen_alle 20)
DOELSEIF
  ([Sonnenstand:ss] le "18:00:00" and [{twilight("Sonnenstand","ss_civil","16:00","22:00")}])
  (set structure_rollladen_alle off)
DOELSEIF
  ([06:00|8])
  (set flur_rollladen 30)
DOELSEIF
  ([{twilight("Sonnenstand","sr","04:30","08:30")}])
  (set bad_rollladen on, set ez_rollladen on, set structure_wz_rollladen on, set flur_rollladen on, set structure_kueche_rollladen 40)
DOELSEIF
  ([08:00|8])
  (set structure_kueche_rollladen on)
DOELSEIF
  ([09:00|7])
  (set structure_kueche_rollladen on)


Die 1. DOIF-Anweisung fährt die Rollläden bei Sonnenuntergang auf 80%, wenn der Sonnenuntergang nach 18 Uhr ist.
Die 2. DOIF-Anweisung fährt die Rollläden bei Sonnenuntergang auf 100% (ganz zu), wenn der Sonnenuntergang vor 18 Uhr ist.
Die 3. DOIF-Anweisung fährt den Rollladen an der Terrasse Werktags um 6 Uhr etwas hoch, damit ich sehe ob die Katze vor der Tür steht und rein will :)
Die 4. DOIF-Anweisung fährt bei Sonnenaufgang die Rollläden hoch, außer in der Küche, hier nur etwas hoch (Sichtschutz zum Nachbarn)
Die 5. DOIF-Anweisung fährt die Rollläden werktags in der Küche um 8 Uhr dann ganz hoch.
Die 6. DOIF-Anweisung fährt die Rollläden am Wochenende in der Küche um 9 Uhr dann ganz hoch.

Mein DOIF ist sicherlich auch nicht der Weisheit letzter Schluß aber kann vielleicht als Anregung dienen. Vielleicht kannst Du mit diesem Input deine Rollladensteuerung vereinfachen/funktional(er) gestalten.

Viele Grüße
Carsten

Ellert

#37
Zitat..ich meinte natürlich die erwähnte Klammerprüfung.
Es gibt keine Klammerprüfung, die sich nach dem Drücken von "modify_..." mit einem Popup meldet und Dir sagt wo Du eine Klammer vergessen hast.

Jedoch, wenn Du im Editor eine Klammer öffnest, dann wird gleichzeitig eine Geschlossene erzeugt und der Cursor steht zwischen Beiden. Diese Eigenschaft reduziert die Wahrscheinlichkeit, dass eine geschlossene Klammer fehlt.
Ausserdem wird, wenn der Cursor neben einer Klammer steht, die dazu gehörende Gegenklammer auch mit einem Rahmen markiert.
Ein zusatzliches Merkmal des Editors ist es, eine Klammer am Cursor, bei fehlender Gegenklammer, rot zu markieren.

Um die Klammerprüfung zu nutzen, fährst du den gesamten Text mit dem Cursor ab und achtest auf die markierten Klammerpaare und die rot markierten Einzelklammern. Eine logische Klammerprüfung gibt es nicht, da die Absicht der Klammersetzung nicht bekannt ist.

Wenn Du das beschriebene Verhalten nicht beobachten kannst, könnte es an den Browsereinstellungen liegen oder an einem nicht aktuellen FHEM.

ZitatIch habe die Automatisierung soweit seit einigen Monaten am Laufen.
Es ist immer eine Gute Idee, eine funktionierende Steuerung in kleinen Schritten zu erweitern, dann können Fehler leichter eingegrenzt werden.
Daher würde ich vorschlagen, wir entwickeln die "seit einigen Monaten laufende Automatisierung" weiter, dazu müsstest das funktionierende
DOIF einmal posten.

Ist es richtig, dass es noch um diesen
ZitatJetzt 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.
Erweiterungswunsch geht?

Damu

Hallo

Habe eine Frage zum ersten Beitrag:

[quote define rollo_alle_Fenster structure room rollo_kue rollo_OG_Z1 rollo_OG_Z3 rollo_OG_Z5 rollo_OG_Z6 rollo_wz_1 rollo_wz_3

define rollo_alle_Tueren structure room rollo_OG_Z2_tuer rollo_OG_Z4_tuer rollo_wz_2_tuer

define rollo_alle_FensterTueren_speziell structure room rollo_kue,rollo_OG_Z3,rollo_OG_Z4_tuer,rollo_OG_Z5,rollo_OG_Z6,rollo_wz_2_tuer,rollo_wz_3, rollo_wz_1 quote]

Habe keine Strukture gemacht bei mir

Die Trennung ist doch ohne Komma?

Zitatdefine rollo_alle_Fenster structure room rollo_kue rollo_OG_Z1 rollo_OG_Z3 rollo_OG_Z5 rollo_OG_Z6 rollo_wz_1 rollo_wz_3

define rollo_alle_Tueren structure room rollo_OG_Z2_tuer rollo_OG_Z4_tuer rollo_wz_2_tuer

define rollo_alle_FensterTueren_speziell structure room rollo_kue rollo_OG_Z3 rollo_OG_Z4_tuer rollo_OG_Z5 rollo_OG_Z6 rollo_wz_2_tuer rollo_wz_3 rollo_wz_1

oder geht beides?