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.