DOIF reagiert seit update "komisch"

Begonnen von australien, 23 September 2020, 09:53:57

Vorheriges Thema - Nächstes Thema

australien

Hallo zusammen,

seit ich vor ca 2 Tagen ein update durchführte, werden die readings in sehr kurzen, unter einer Minute, Abständen dauernd ausgelesen und das cmd neu gesendet. Obwohl sich die readings nicht geändert haben!
Es ist auch kein attr do allway gesetzt.

Bei einem anderen DOIF ändert sich zwar das reading, aber es wird nichts ausgeführt.

Ich weiß, dass ich bei den betroffenen DOIF's nichts geändert habe und diese hatten bis jetzt klaglos funktioniert, darum die Verwunderung und Ratlosigkeit.

Das ist bei eine Rollosteuerung sehr unzufriedenstellen.

Gibt es da Änderungen im DOIF Modul?

Was für eine Datei kann ich aus einem Backup wiederherstellen, um die alte DOIF Version zu bekommen?

Danke
raspberry pi3
signalduino, Shelly1, Shelly2, Sonos, Unifi
Amazon Fire Tablet 7 | Noname Android Tablet 10"

Otto123

#1
Hi,

ich würde ja denken, es liegt nicht an DOIF sondern am Device welches DOIF triggert. Aber ohne list kann man nur raten.

Zum update: https://wiki.fhem.de/wiki/Update
Mit Hilfe von restoreDir bbzw. restore list siehst Du was aktualisiert wurde und kannst auch selektiv zurück sichern. Aber Vorsicht! CUL_HM z.B. benötigt in sich konsistente Versionsstände von mehreren Modulen!

Tipp: Der Eventmonitor kann Dir helfen, zu beobachten was zeitlich zusammenhängend passiert.

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

australien

das list sieht so aus:

Internals:
   DEF        (([{sunrise("REAL",-400,"06:35:00","07:00")}-13:30 |8] or [07:32 - 13:30|7])and [PV_WR:AC_Current3:d0]>[PV_trigger_south] and [W044_229:temperature]>=15 and [Wohnzimmer_Thermostat:temperature:d0] >=21 and ($month >= 3 && $month <= 9) and [jemand_da:state] eq "1")
(set alle_Rollo_gleichzeitig_S pos 90)

DOELSEIF
(([{sunrise("REAL",-400,"06:35:00","07:00")}-13:30 |8] or [07:31 - 13:30|7]) and [PV_WR:AC_Current3:d0]>[PV_trigger_south] and [W044_229:temperature]>=15 and [Wohnzimmer_Thermostat:temperature:d0] >=21 and ($month >= 3 && $month <= 9) and [jemand_da:state] eq "0")
(set alle_Rollo_gleichzeitig_S down)

DOELSE (set alle_Rollo_gleichzeitig_S up)
   FUUID      5c42eaa6-f33f-fbda-2c50-e24b98a7a9a10f4f
   MODEL      FHEM
   NAME       alle_Rollo_S_Sonne
   NOTIFYDEV  jemand_da,PV_trigger_south,W044_229,PV_WR,global,Wohnzimmer_Thermostat
   NR         268
   NTFY_ORDER 50-alle_Rollo_S_Sonne
   STATE      up - 2020-09-23 09:58:20
   TYPE       DOIF
   VERSION    22781 2020-09-17 15:31:13
   READINGS:
     2020-09-23 10:04:20   Device          PV_WR
     2020-09-23 09:58:20   cmd             3
     2020-09-23 09:58:20   cmd_count       1
     2020-09-23 09:58:20   cmd_event       PV_WR
     2020-09-23 09:58:20   cmd_nr          3
     2020-09-23 10:04:20   e_PV_WR_AC_Current3 1328
     2020-09-23 10:01:21   e_W044_229_temperature 20.7
     2020-09-23 09:51:17   e_Wohnzimmer_Thermostat_temperature 24.9
     2020-09-23 09:21:16   e_jemand_da_state 1
     2020-09-23 09:48:03   mode            enabled
     2020-09-23 09:58:20   state           up
     2020-09-23 09:41:18   timer_01_c01    24.09.2020 06:42:20|8
     2020-09-23 09:41:18   timer_02_c01    23.09.2020 13:30:00|8
     2020-09-23 09:41:18   timer_03_c01    24.09.2020 07:32:00|7
     2020-09-23 09:41:18   timer_04_c01    23.09.2020 13:30:00|7
     2020-09-23 09:41:18   timer_05_c02    24.09.2020 06:42:20|8
     2020-09-23 09:41:18   timer_06_c02    23.09.2020 13:30:00|8
     2020-09-23 09:41:18   timer_07_c02    24.09.2020 07:31:00|7
     2020-09-23 09:41:18   timer_08_c02    23.09.2020 13:30:00|7
     2020-09-23 10:04:20   wait_timer      23.09.2020 10:09:20 cmd_3 PV_WR
   Regex:
     accu:
     cond:
       PV_WR:
         0:
           AC_Current3 ^PV_WR$:^AC_Current3:
         1:
           AC_Current3 ^PV_WR$:^AC_Current3:
       PV_trigger_south:
         0:
           &STATE     ^PV_trigger_south$
         1:
           &STATE     ^PV_trigger_south$
       W044_229:
         0:
           temperature ^W044_229$:^temperature:
         1:
           temperature ^W044_229$:^temperature:
       Wohnzimmer_Thermostat:
         0:
           temperature ^Wohnzimmer_Thermostat$:^temperature:
         1:
           temperature ^Wohnzimmer_Thermostat$:^temperature:
       jemand_da:
         0:
           state      ^jemand_da$:^state:
         1:
           state      ^jemand_da$:^state:
   attr:
     cmdState:
       0:
         down
       1:
         down
       2:
         up
     repeatsame:
       1
       1
       1
     wait:
       0:
         0
       1:
         0
       2:
         300
     waitdel:
   condition:
     0          (::DOIF_time($hash,0,1,$wday,$hms,"8") or ::DOIF_time($hash,2,3,$wday,$hms,"7"))and ::ReadingValDoIf($hash,'PV_WR','AC_Current3','','d0')>::InternalDoIf($hash,'PV_trigger_south','STATE') and ::ReadingValDoIf($hash,'W044_229','temperature')>=15 and ::ReadingValDoIf($hash,'Wohnzimmer_Thermostat','temperature','','d0') >=21 and ($month >= 3 && $month <= 9) and ::ReadingValDoIf($hash,'jemand_da','state') eq "1"
     1          (::DOIF_time($hash,4,5,$wday,$hms,"8") or ::DOIF_time($hash,6,7,$wday,$hms,"7")) and ::ReadingValDoIf($hash,'PV_WR','AC_Current3','','d0')>::InternalDoIf($hash,'PV_trigger_south','STATE') and ::ReadingValDoIf($hash,'W044_229','temperature')>=15 and ::ReadingValDoIf($hash,'Wohnzimmer_Thermostat','temperature','','d0') >=21 and ($month >= 3 && $month <= 9) and ::ReadingValDoIf($hash,'jemand_da','state') eq "0"
   days:
     0          8
     1          8
     2          7
     3          7
     4          8
     5          8
     6          7
     7          7
   do:
     0:
       0          set alle_Rollo_gleichzeitig_S pos 90
     1:
       0          set alle_Rollo_gleichzeitig_S down
     2:
       0          set alle_Rollo_gleichzeitig_S up
   helper:
     DEVFILTER  ^global$|^jemand_da$|^W044_229$|^Wohnzimmer_Thermostat$|^PV_trigger_south$|^PV_WR$
     NOTIFYDEV  global|jemand_da|W044_229|Wohnzimmer_Thermostat|PV_trigger_south|PV_WR
     event      AC_Current3: 1328
     globalinit 1
     last_timer 8
     sleepdevice PV_WR
     sleepsubtimer 0
     sleeptimer 2
     timerdev   PV_WR
     timerevent AC_Current3: 1328
     triggerDev PV_WR
     timerevents:
       AC_Current3: 1328
     timereventsState:
       AC_Current3: 1328
     triggerEvents:
       AC_Current3: 1328
     triggerEventsState:
       AC_Current3: 1328
   internals:
     all         PV_trigger_south:STATE
   interval:
     0          -1
     1          0
     2          -1
     3          2
     4          -1
     5          4
     6          -1
     7          6
   intervalfunc:
   localtime:
     0          1600922540
     1          1600860600
     2          1600925520
     3          1600860600
     4          1600922540
     5          1600860600
     6          1600925460
     7          1600860600
   perlblock:
   readings:
     all         PV_WR:AC_Current3 W044_229:temperature Wohnzimmer_Thermostat:temperature jemand_da:state
   realtime:
     0          06:42:20
     1          13:30:00
     2          07:32:00
     3          13:30:00
     4          06:42:20
     5          13:30:00
     6          07:31:00
     7          13:30:00
   time:
     0          {sunrise("REAL",-400,"06:35:00","07:00")}
     1          13:30:00
     2          07:32:00
     3          13:30:00
     4          {sunrise("REAL",-400,"06:35:00","07:00")}
     5          13:30:00
     6          07:31:00
     7          13:30:00
   timeCond:
     0          0
     1          0
     2          0
     3          0
     4          1
     5          1
     6          1
     7          1
   timer:
     0          0
     1          0
     2          0
     3          0
     4          0
     5          0
     6          0
     7          0
   timers:
     0           0  1  2  3
     1           4  5  6  7
   trigger:
   triggertime:
     1600860600:
       localtime  1600860600
       hash:
     1600922540:
       localtime  1600922540
       hash:
     1600925460:
       localtime  1600925460
       hash:
     1600925520:
       localtime  1600925520
       hash:
   uiState:
   uiTable:
Attributes:
   cmdState   down|down|up
   devStateIcon cmd_1:down:cmd_3 cmd_2:down:cmd_3 cmd_2|initialized:up:cmd_1
   repeatsame 1:1:1
   room       7.7.Rollo_all
   stateFormat {ReadingsVal('alle_Rollo_S_Sonne','state','')." - ".ReadingsTimestamp('alle_Rollo_S_Sonne','state','')}
   wait       0:0:300
   webCmd     down:down:up

raspberry pi3
signalduino, Shelly1, Shelly2, Sonos, Unifi
Amazon Fire Tablet 7 | Noname Android Tablet 10"

Otto123

#3
Das DOIF wird von allen zusätzlichen Dingen getriggert! Ich vermute dein DOIF ist eigentlich schon immer "Mist" und ein anderes Gerät liefert seit dem Update mehr Events!

Überlege Dir:

  • was eine Rollofahrt wirklich starten soll
  • und was nur abgefragt werden soll!
Vor die Elemente die nur abgefragt werden sollen setzt Du ein ?
Beispieldefine d_test DOIF ([Trigger] eq [?Abfrage])(mach was )
Näheres dazu steht in der Doku von DOIF

Beobachte alle Geräte deines DOIFs im Eventmonitor und mach Dir ein Bild was passiert und was passieren soll.

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

australien

Wieder was dazu gelehrnt!
Wäre das hier so also besser?

Internals:
   DEF        (([?{sunrise("REAL",-400,"06:35:00","07:00")}-13:30 |8] or [07:32 - 13:30|7])and [PV_WR:AC_Current3:d0]>[PV_trigger_south] and [W044_229:temperature]>=15 and [Wohnzimmer_Thermostat:temperature:d0] >=21 and (?$month >= 3 && $month <= 9) and [?jemand_da:state] eq "1")
(set alle_Rollo_gleichzeitig_S pos 90)

DOELSEIF
(([?{sunrise("REAL",-400,"06:35:00","07:00")}-13:30 |8] or [07:31 - 13:30|7]) and [PV_WR:AC_Current3:d0]>[PV_trigger_south] and [W044_229:temperature]>=15 and [Wohnzimmer_Thermostat:temperature:d0] >=21 and (?$month >= 3 && $month <= 9) and [?jemand_da:state] eq "0")
(set alle_Rollo_gleichzeitig_S down)


Somit wird nur mehr mit den Werten der PV, der Anwesenheit und der zwei Temperaturen getriggert, in einem bestimmten Zeitramen und Datum.
raspberry pi3
signalduino, Shelly1, Shelly2, Sonos, Unifi
Amazon Fire Tablet 7 | Noname Android Tablet 10"

Otto123

Bei den Variablen ($month) spielt das m.E keine Rolle, bzw. ist es falsch. Also nur die [] sind relevant.

Du musst halt wirklich schauen, wer jetzt Dein "Problem" verursacht. Und welcher Trigger wirklich relevant ist. Ich kann das so nicht sagen.
Ich hätte ja deinen Thermo im Wohnzimmer in Verdacht.
Beim Sonnenaufgang soll nicht getriggert werden?
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

australien

Bei Sonnenaufgang noch nicht, da ja hier sowieso die Rollo fahren.
Der Beschattungsmodus wird erst danach aktiv und mit dem month, stimmt, da kommt eine Fehlermeldung. Hab es hier wieder raus genommen.

Danke
raspberry pi3
signalduino, Shelly1, Shelly2, Sonos, Unifi
Amazon Fire Tablet 7 | Noname Android Tablet 10"