DOIF hat nur 2 cmd aber es sind 4 vorhanden... und wait will nicht so recht..

Begonnen von misux, 07 April 2018, 21:10:41

Vorheriges Thema - Nächstes Thema

misux

Hi!

Leider bekomme ich ein eigentlich einfaches DOIF nicht hin...

Kann mir bitte jemand helfen wo mein Problem ist? Es gibt nur 2 cmd auswahlmöglichkeiten und die 30sek wait funktionieren auch irgendwie nicht... Wenn Tor open ist bekomme ich nur die message tor geöffnet aber kein Bild...... wenn es wieder zu ist dann die geschlossen message...

Führe ich im DOIF cmd 1 set manuell aus dann klappt alles reibungslos...

Hier die Def:
([SENSOR_1_Tor:"open"] and [?Haus] eq "present")
(get CAMHof image)
(set Telegram message TOR geöffnet!!!)
(set Telegram sendPhoto /opt/fhem/www/snapshots/CAMHof_snapshot.jpg)
DOELSEIF
([SENSOR_1_Tor:"closed"] and [?Haus] eq "present") (set Telegram message TOR geschlossen)



List:
Internals:
   DEF        ([SENSOR_1_Tor:"open"] and [?Haus] eq "present")
(get CAMHof image)
(set Telegram message TOR geöffnet!!!)
(set Telegram sendPhoto /opt/fhem/www/snapshots/CAMHof_snapshot.jpg)
DOELSEIF
([SENSOR_1_Tor:"closed"] and [?Haus] eq "present") (set Telegram message TOR geschlossen)
   MODEL      FHEM
   NAME       DOIFTor
   NR         43
   NTFY_ORDER 50-DOIFTor
   STATE      cmd_2
   TYPE       DOIF
   READINGS:
     2018-04-07 21:03:21   cmd             2
     2018-04-07 21:03:21   cmd_event       set_cmd_2
     2018-04-07 21:03:21   cmd_nr          2
     2018-04-07 21:01:29   mode            enabled
     2018-04-07 21:03:21   state           cmd_2
   Regex:
   condition:
     0          EventDoIf('SENSOR_1_Tor',$hash,'open',1) and InternalDoIf($hash,'Haus','STATE') eq "present"
     1          EventDoIf('SENSOR_1_Tor',$hash,'closed',1) and InternalDoIf($hash,'Haus','STATE') eq "present"
   devices:
     0           SENSOR_1_Tor
     1           SENSOR_1_Tor
     all         SENSOR_1_Tor
   do:
     0:
       0          get CAMHof image
       1          set Telegram message TOR geöffnet!!!
       2          set Telegram sendPhoto /opt/fhem/www/snapshots/CAMHof_snapshot.jpg
     1:
       0          set Telegram message TOR geschlossen
     2:
   helper:
     DOIF_Readings_events
     DOIF_eventas
     globalinit 1
     last_timer 0
     sleeptimer -1
     triggerDev
   internals:
     0           Haus:STATE
     1           Haus:STATE
     all         Haus:STATE
   itimer:
   readings:
   trigger:
     all         SENSOR_1_Tor
   uiState:
   uiTable:
Attributes:
   devStateIcon cmd_2:fts_window_1w@green cmd_1:fts_window_1w_open@red
   room       2 DOIF
   wait       0,0,30:0

misux

Hmm... hab den wait timer raus genommen... nun gehts... komisch...

Hatte den Timer vor gahebt auf eine Sekunde zu setzen um Fhem und ddem System zeit zu geben die Bilder zu speichern und dann zu senden... aber das klappt irgendwie nicht offenbar :-\

Per

Du hast nur 2 cmd, den ersten aber unterteilt. Diese einzelnen Steps kannst du nicht einzeln aufrufen.

Wenn dein SENSOR_1_Tor öfter Meldungen schickt, kann es sein, dass dein Wait unterwandert wird.
Mein Vorschlag: stell auf
[SENSOR_1_Tor] eq "open"
um und ergänze
attr DOIFTor checkReadingEvent 1
Dann wieder melden ;).

misux

okay, hab ich gemacht... und versucht es nachzuvollziehen.

Fakt ist: sobald cmd_2 (closed) vor dem versenden des Bildes kommt wird das Bild nicht mehr gesendet... Hmmm... irgendwie ist da der Wurm drin...

rabehd

ZitatFakt ist: sobald cmd_2 (closed) vor dem versenden des Bildes kommt wird das Bild nicht mehr gesendet...
Das ist korrekt.
Auch funktionierende Lösungen kann man hinterfragen.

Per

Zitat von: misux am 10 April 2018, 17:59:42irgendwie ist da der Wurm drin...
Nein, das Verhalten ist für ein DOIF korrekt. Wenn dein closed immer in rund 30 Sek. folgt, setzt doch einfach die Zeit runter.

Oder prüf, ob die 30 Sekunden (state eq "cmd_1") um sind, ansonsten sendest du das Bild sofort.
Oder du erstellst ein at, das wird immer ausgeführt, egal was DOIF macht.

Nebenbei kannst du cmd, welche zur gleichen Zeit (wait 0) ausgeführt werden, in einer Klammer zusammenfassen. Senkt die Systemlast etwas.