FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Müller am 11 Juni 2020, 14:37:00

Titel: DOIF (über Umwege gelöst)
Beitrag von: Müller am 11 Juni 2020, 14:37:00
Hallo,
ich bin gerade dabei eine Schaltung für die Garage umzusetzen.
Mein Garagentorantrieb kennt kein rauf oder runter. Daher habe ich noch einen Sensor für den tatsächlichen Stand des Garagentor mit eingebaut.

Dazu kommt ein DOIF welche nur einen Pulse ausgibt wenn die Garage offen ist und man den Knopf (Garage Zu) für runter drückt (bzw. umgekehrt).

Nun habe ich folgendes Problem, wenn ich den Befehl "Garage zu" dirket bei dem eingerichteten Dummy gebe passt alles.
Wenn ich nun von einem Notify aus den Dummy auf "Garage zu" stelle reagiert das DOIF nicht darauf (der dummy ändert aber seinen Status wie gewünscht).

Hat jemand einen Tipp für mich ?
Titel: Antw:DOIF
Beitrag von: Müller am 11 Juni 2020, 16:34:38
ich probiere mal repeatsame repeatcmd um mein Problem zu umgehen.
Titel: Antw:DOIF
Beitrag von: Christoph Morrison am 11 Juni 2020, 17:04:54
Niemand kann dir helfen, wenn du uns keine list deiner Devices zeigst.
Titel: Antw:DOIF
Beitrag von: Müller am 11 Juni 2020, 19:17:48
ja, die Befürchtung habe ich auch.

OK hier meine List
1. Mein Dummy, hier möchte ich den Befehl Garage auf / zu auslösen
Um die Farbe der Icon zu ändern gibt "AUF" was aktiv sein soll und "auf" wäre die inaktive Form
Internals:
   FUUID      5edfbc1f-f33f-a4d3-8067-8e67efbd69d3434c
   NAME       Garage
   NR         318
   STATE      1:auf
2:zu

   STILLDONETIME 0
   TYPE       dummy
   READINGS:
     2020-06-11 17:31:51   on1             auf
     2020-06-11 17:31:37   on2             zu
     2020-06-11 17:31:43   state           OFF
Attributes:
   cmdIcon    Auf:control_arrow_up Zu:control_arrow_down
   devStateIcon 1.AUF:control_arrow_up@red 1.auf:control_arrow_up@gray:AUF 2.ZU:control_arrow_down@red 2.zu:control_arrow_down@grey:ZU
   group      Garage
   readingList on1 on2
   room       test
   setList    on1:auf,AUF on2:zu,ZU
   stateFormat 1:on1
2:on2


durch Set Garage "AUF" wird nun ein notify und eine DOIF gestartet
(das funktioniert auch wie gewünscht)

So hier nun das List für die "ZU" Funktion.

Das Notify ist eigentlich nur für die "schöne Darstellung des Icons mit Farbe.
Internals:
   DEF        Garage:ZU|aktion {fhem("
define tmp_time1 at +00:00:00 set Garage on2 ZU ;
define tmp_time2 at +00:00:30 set Garage on2 zu ;
define tmp_time3 at +00:00:31 set Garage zu ;
")}
   FUUID      5edfecea-f33f-a4d3-f005-a1525eb2f79f8cb4
   NAME       garageZU
   NR         319
   NTFY_ORDER 50-garageZU
   REGEXP     Garage:ZU|aktion
   STATE      active
   TYPE       notify
   READINGS:
     2020-06-11 18:50:30   state           active
Attributes:
   group      Garage
   room       System,test


Hier das DOIF mit welchem ich rum kämpfe:
Hierzu noch der Hintergrund:
Die Garage steht halb offen und soll geschlossen werden
Bei einmal drücken könnte die Garage ganz hoch gefahren werden, daher soll nach einer Zeitverzögerung nochmals geprüft werden ob die Garage noch auf ist und ggf nochmals ein Impuls an den Garagenmotor gesendet werden.

Internals:
   DEF        (([MQTT2_DVES_330D6C:POWER3] eq "on") and
([Garage:on2] eq "ZU"))
(set MQTT2_DVES_330D6C ON)
(set MQTT2_DVES_330D6C OFF)
   FUUID      5edff0e8-f33f-a4d3-10fc-56ad83345aec4828
   MODEL      FHEM
   NAME       garageDOIFzu
   NOTIFYDEV  MQTT2_DVES_330D6C,global,Garage
   NR         321
   NTFY_ORDER 50-garageDOIFzu
   STATE      cmd_1
   TYPE       DOIF
   VERSION    20672 2019-12-06 21:05:57
   READINGS:
     2020-06-11 19:06:02   Device          Garage
     2020-06-11 19:05:40   cmd             1.2
     2020-06-11 19:05:38   cmd_count       2
     2020-06-11 19:05:40   cmd_event       Garage
     2020-06-11 19:05:40   cmd_nr          1
     2020-06-11 19:05:40   cmd_seqnr       2
     2020-06-11 19:06:02   e_Garage_on2    zu
     2020-06-11 19:04:45   mode            enabled
     2020-06-11 19:05:40   state           cmd_1
     2020-06-11 19:05:45   wait_timer      no timer
   Regex:
     accu:
     cond:
       Garage:
         0:
           on2        ^Garage$:^on2:
       MQTT2_DVES_330D6C:
         0:
           POWER3     ^MQTT2_DVES_330D6C$:^POWER3:
   attr:
     cmdState:
     repeatcmd:
       5
     repeatsame:
       2
     wait:
       0:
         0
         1
     waitdel:
   condition:
     0          (::ReadingValDoIf($hash,'MQTT2_DVES_330D6C','POWER3') eq "on") and  (::ReadingValDoIf($hash,'Garage','on2') eq "ZU")
   do:
     0:
       0          set MQTT2_DVES_330D6C ON
       1          set MQTT2_DVES_330D6C OFF
     1:
   helper:
     DEVFILTER  ^global$|^MQTT2_DVES_330D6C$|^Garage$
     NOTIFYDEV  global|MQTT2_DVES_330D6C|Garage
     event      on2: zu
     globalinit 1
     last_timer 0
     sleepdevice Garage
     sleepsubtimer -1
     sleeptimer -1
     timerdev   Garage
     timerevent on2: ZU
     triggerDev Garage
     timerevents:
       on2: ZU
     timereventsState:
       on2: ZU
     triggerEvents:
       on2: zu
     triggerEventsState:
       on2: zu
   internals:
   readings:
     all         MQTT2_DVES_330D6C:POWER3 Garage:on2
   trigger:
   uiState:
   uiTable:
Attributes:
   group      Garage
   repeatcmd  5
   repeatsame 2
   room       test
   wait       0,1


Titel: Antw:DOIF
Beitrag von: Müller am 11 Juni 2020, 20:22:31
irgendwie funktioniert das zweite Signal noch nicht. Ohne die Attribute funktioniert das DOIF

Zitat:
"Das Modul merkt sich den zuletzt ausgeführten Ausführungszweig und wiederholt diesen standardmäßig nicht. Ein Ausführungszweig wird erst dann wieder ausgeführt, wenn zwischenzeitlich ein anderer Ausführungszweig ausgeführt wurde, also ein Statuswechsel des DOIF-Moduls stattgefunden hat."

Dies möchte ich umgehen. Wenn keine Änderung eintrat, soll das cmd nochmals ausgeführt werden.
Titel: Antw:DOIF
Beitrag von: Müller am 11 Juni 2020, 20:44:37
Ich habe mein Problem gelöst.

Ich lasse über das notify den Befehl "Garage Zu" zweimal zeitversetzt ausführen und um eine Endlosschleife zu vermeiden tut sich das notify am Anfang selbst inaktivieren und aktiviert sich erst wieder am Ende

DOIF
Internals:
   DEF        (([MQTT2_DVES_330D6C:POWER3] eq "on") and
([Garage:on2] eq "ZU"))
(set MQTT2_DVES_330D6C ON)
(set MQTT2_DVES_330D6C OFF)
   FUUID      5edff0e8-f33f-a4d3-10fc-56ad83345aec4828
   MODEL      FHEM
   NAME       garageDOIFzu
   NOTIFYDEV  MQTT2_DVES_330D6C,global,Garage
   NR         321
   NTFY_ORDER 50-garageDOIFzu
   STATE      cmd_2
   TYPE       DOIF
   VERSION    20672 2019-12-06 21:05:57
   READINGS:
     2020-06-11 20:42:42   Device          Garage
     2020-06-11 20:42:42   cmd             2
     2020-06-11 20:42:42   cmd_event       Garage
     2020-06-11 20:42:42   cmd_nr          2
     2020-06-11 20:42:42   e_Garage_on2    zu
     2020-06-11 20:38:44   e_MQTT2_DVES_330D6C_POWER3 on
     2020-06-11 19:04:45   mode            enabled
     2020-06-11 20:42:42   state           cmd_2
     2020-06-11 20:42:33   wait_timer      no timer
   Regex:
     accu:
     cond:
       Garage:
         0:
           on2        ^Garage$:^on2:
       MQTT2_DVES_330D6C:
         0:
           POWER3     ^MQTT2_DVES_330D6C$:^POWER3:
   attr:
     cmdState:
     cmdpause:
     repeatcmd:
     repeatsame:
     wait:
       0:
         0
         1
     waitdel:
   condition:
     0          (::ReadingValDoIf($hash,'MQTT2_DVES_330D6C','POWER3') eq "on") and  (::ReadingValDoIf($hash,'Garage','on2') eq "ZU")
   do:
     0:
       0          set MQTT2_DVES_330D6C ON
       1          set MQTT2_DVES_330D6C OFF
     1:
   helper:
     DEVFILTER  ^global$|^MQTT2_DVES_330D6C$|^Garage$
     NOTIFYDEV  global|MQTT2_DVES_330D6C|Garage
     event      on2: zu
     globalinit 1
     last_timer 0
     sleepdevice Garage
     sleepsubtimer -1
     sleeptimer -1
     timerdev   Garage
     timerevent on2: zu
     triggerDev Garage
     DOIF_eventa:
       cmd_nr: 2
       cmd: 2
       cmd_event: Garage
       cmd_2
     DOIF_eventas:
       cmd_nr: 2
       cmd: 2
       cmd_event: Garage
       state: cmd_2
     timerevents:
       on2: zu
     timereventsState:
       on2: zu
     triggerEvents:
       on2: zu
     triggerEventsState:
       on2: zu
   internals:
   readings:
     all         MQTT2_DVES_330D6C:POWER3 Garage:on2
   trigger:
   uiState:
   uiTable:
Attributes:
   group      Garage
   room       test
   wait       0,1


Und das notify dazu
Internals:
   DEF        Garage:ZU|aktion {fhem("
define tmp_time1 at +00:00:00 set Garage on2 ZU ;
define tmp_time2 at +00:00:00 set garageZU inactive ;
define tmp_time3 at +00:00:05 set Garage OFF ;
define tmp_time4 at +00:00:10 set Garage on2 zu ;
define tmp_time5 at +00:00:20 set Garage on2 ZU ;
define tmp_time6 at +00:00:25 set Garage OFF ;
define tmp_time7 at +00:00:30 set Garage on2 zu ;
define tmp_time8 at +00:00:31 set garageZU active ;
")}
   FUUID      5edfecea-f33f-a4d3-f005-a1525eb2f79f8cb4
   NAME       garageZU
   NR         319
   NTFY_ORDER 50-garageZU
   REGEXP     Garage:ZU|aktion
   STATE      active
   TRIGGERTIME 1591900932.39929
   TYPE       notify
   READINGS:
     2020-06-11 20:42:43   state           active
Attributes:
   group      Garage
   room       System,test

Titel: Antw:DOIF (über Umwege gelöst)
Beitrag von: Gisbert am 11 Juni 2020, 20:53:41
Hallo Müller,

ich habe Thread zugegebenermaßen nur grob überflogen, aber mir ist nicht klar, welche Ziele du verfolgst. Ich gehe davon aus, dass dein Rollladentor eine Einknopfbedienung kennt, d.h. bei jedem Bedienen wechselt der Zustand von z.B. Hoch auf Stop auf Runter auf Stop usw.

Ich habe auch ein solches Rollladentor. Durch Sensoren weiß ich, wann das Tor komplett geschlossen und wann es komplett offen ist, dazwischen ist es entweder in Fahrt oder es wurde angehalten. Das funktioniert alles sehr schön, und ich kenne die jeweiligen Zuständes des Tors und kann darauf triggern, z.B. wenn es abends/nachts noch aufsteht - dann bekomme ich Meldungen.

Ich möchte aber ganz dringend davor warnen, das Garagentor automatisch von irgendwelchen Bedingungen in Fahrt zu setzen. Es gibt zuviele Gefahren- oder Fehlerquellen, z.B. Auto steht halb in und halb vor der Garage, weil z.B. daran gearbeitet wird. Oder das Garagentor ist auf, aber die Heckklappe des Kombis ist auch auf, aber beim Runterfahren des Tors kollidiert der Schlepphaken mit der Heckklappe, usw.

Während ich geschrieben habe, kommt dein letzter Beitrag mit deiner Lösung rein.
Mein Rat: das Garagentor ohne Aufsicht nicht in Fahrt setzen.

Viele Grüße Gisbert
Titel: Antw:DOIF (über Umwege gelöst)
Beitrag von: Müller am 11 Juni 2020, 21:42:03
Danke für deinen Hinweis. Ich werde dies beherzigen.