Fehlerhafte Schaltung DOIF - DOELSEIF - DOELSE

Begonnen von gary822, 29 Januar 2019, 12:45:44

Vorheriges Thema - Nächstes Thema

gary822

Hallo an alle :)

Ich verzweifel langsam mit meiner DOIF Automatisierung.
Eventuell sehen die Profis hier im Board meinen Fehler.

Ich habe eine Abfrage in FHEM mit DOIF -> DOELSEIF -> DOELSE.
Solange die Bedingung im DOIF erfüllt ist funktioniert die Automatisierung ohne Probleme.
Wenn die Bedingung allerdings falsch ist springt die Automatisierung zwischen cmd_2 und cmd_3 obwohl er nur cmd_2 setzen sollte.
Sobald die Bedingung für cmd_3 gegeben ist, bleibt er auch auf cmd_3 er hat also nur ein Problem mit cmd_2.

Das interessante dabei ist, dass laut dem Log das Event "Handy_2" teilweise das Verhalten ausgelöst hat welches aber seit Tagen nicht mehr mit dem Netzwerk verbunden war.

Sollten Fragen aufkommen oder weitere Definitionen benötigt werden einfach schreiben :)
Ebenso sollte es Verbesserungsvorschläge in Schreibweise oder anderen Aspekten geben :)

Anbei die relevanten Definitionen:

Heizungssteuerung
DOIF (\
([05:30-23:30|Mo Di Mi Do]||[05:30-01:30|Fr]||[08:30-01:30|Sa So]) and \
([MAX_12b6a2:temperature]||[MAX_13cdaf:temperature] < 23) and \
[MAX_14242a]&&[MAX_1422ee] eq 'closed'||'closed (rf error)' and \
([Handy_1]||[Handy_2] eq 'present')) \
(set MAX_13cdaf&&MAX_12b6a2 desiredTemperature manual comfort) \
DOELSEIF (\
[MAX_14242a]&&[MAX_1422ee] eq 'closed'||'closed (rf error)' and \
([Handy_1]||[Handy_2] eq 'present')) \
(set MAX_13cdaf&&MAX_12b6a2 desiredTemperature manual 20.0) \
DOELSE \
(set MAX_13cdaf&&MAX_12b6a2 desiredTemperature manual eco)

Handy_1
defmod Handy_1 PRESENCE function {checkFritzMACpresent("FritzBox","xx:xx:xx:xx:xx:xx")} 15 60
Handy_2
defmod Handy_2 PRESENCE function {checkFritzMACpresent("FritzBox","xx:xx:xx:xx:xx:xx")} 15 60
MAX_14242a
defmod MAX_14242a MAX ShutterContact 14242a
MAX_1422ee
defmod MAX_1422ee MAX ShutterContact 1422ee
MAX_13cdaf
defmod MAX_13cdaf MAX HeatingThermostat 13cdaf
MAX_12b6a2
defmod MAX_12b6a2 MAX HeatingThermostat 12b6a2

Logauszug aus Heizungssteuerung
2019-01-28_13:18:21 Heizungssteuerung cmd_3
2019-01-28_13:18:25 Heizungssteuerung cmd_nr: 2
2019-01-28_13:18:25 Heizungssteuerung cmd: 2
2019-01-28_13:18:25 Heizungssteuerung cmd_event: MAX_14242a
2019-01-28_13:18:25 Heizungssteuerung cmd_2
2019-01-28_13:18:25 Heizungssteuerung cmd_nr: 3
2019-01-28_13:18:25 Heizungssteuerung cmd: 3
2019-01-28_13:18:25 Heizungssteuerung cmd_event: MAX_12b6a2
2019-01-28_13:18:25 Heizungssteuerung cmd_3
2019-01-28_13:18:29 Heizungssteuerung cmd_nr: 2
2019-01-28_13:18:29 Heizungssteuerung cmd: 2
2019-01-28_13:18:29 Heizungssteuerung cmd_event: MAX_14242a
2019-01-28_13:18:29 Heizungssteuerung cmd_2
2019-01-28_13:18:29 Heizungssteuerung cmd_nr: 3
2019-01-28_13:18:29 Heizungssteuerung cmd: 3
2019-01-28_13:18:29 Heizungssteuerung cmd_event: MAX_12b6a2
2019-01-28_13:18:29 Heizungssteuerung cmd_3
2019-01-28_13:18:30 Heizungssteuerung cmd_nr: 2
2019-01-28_13:18:30 Heizungssteuerung cmd: 2
2019-01-28_13:18:30 Heizungssteuerung cmd_event: Handy_2
2019-01-28_13:18:30 Heizungssteuerung cmd_2
2019-01-28_13:18:34 Heizungssteuerung cmd_nr: 3
2019-01-28_13:18:34 Heizungssteuerung cmd: 3
2019-01-28_13:18:34 Heizungssteuerung cmd_event: MAX_12b6a2
2019-01-28_13:18:34 Heizungssteuerung cmd_3
2019-01-28_13:18:37 Heizungssteuerung cmd_nr: 2
2019-01-28_13:18:37 Heizungssteuerung cmd: 2
2019-01-28_13:18:37 Heizungssteuerung cmd_event: MAX_14242a
2019-01-28_13:18:37 Heizungssteuerung cmd_2
2019-01-28_13:18:38 Heizungssteuerung cmd_nr: 3
2019-01-28_13:18:38 Heizungssteuerung cmd: 3
2019-01-28_13:18:38 Heizungssteuerung cmd_event: MAX_12b6a2
2019-01-28_13:18:38 Heizungssteuerung cmd_3
2019-01-28_13:18:41 Heizungssteuerung cmd_nr: 2
2019-01-28_13:18:41 Heizungssteuerung cmd: 2
2019-01-28_13:18:41 Heizungssteuerung cmd_event: MAX_14242a
2019-01-28_13:18:41 Heizungssteuerung cmd_2
2019-01-28_13:18:42 Heizungssteuerung cmd_nr: 3
2019-01-28_13:18:42 Heizungssteuerung cmd: 3
2019-01-28_13:18:42 Heizungssteuerung cmd_event: MAX_12b6a2
2019-01-28_13:18:42 Heizungssteuerung cmd_3
2019-01-28_13:18:45 Heizungssteuerung cmd_nr: 2
2019-01-28_13:18:45 Heizungssteuerung cmd: 2
2019-01-28_13:18:45 Heizungssteuerung cmd_event: MAX_14242a
2019-01-28_13:18:45 Heizungssteuerung cmd_2
2019-01-28_13:18:46 Heizungssteuerung cmd_nr: 3
2019-01-28_13:18:46 Heizungssteuerung cmd: 3
2019-01-28_13:18:46 Heizungssteuerung cmd_event: MAX_12b6a2
2019-01-28_13:18:46 Heizungssteuerung cmd_3
2019-01-28_13:18:47 Heizungssteuerung cmd_nr: 2
2019-01-28_13:18:47 Heizungssteuerung cmd: 2
2019-01-28_13:18:47 Heizungssteuerung cmd_event: Handy_2
2019-01-28_13:18:47 Heizungssteuerung cmd_2
2019-01-28_13:18:50 Heizungssteuerung cmd_nr: 3
2019-01-28_13:18:50 Heizungssteuerung cmd: 3
2019-01-28_13:18:50 Heizungssteuerung cmd_event: MAX_12b6a2
2019-01-28_13:18:50 Heizungssteuerung cmd_3
2019-01-28_13:18:51 Heizungssteuerung cmd_nr: 2
2019-01-28_13:18:51 Heizungssteuerung cmd: 2
2019-01-28_13:18:51 Heizungssteuerung cmd_event: Handy_1
2019-01-28_13:18:51 Heizungssteuerung cmd_2


VG
gary822

Otto123

#1
Hallo gary822,

sowas funktioniert nicht wie Du Die das vorstellst!?
([Handy_1]||[Handy_2] eq 'present')
Das musst du generell so machen, Du willst doch beide Handy jeweils auf present testen!?:
([Handy_1] eq 'present'||[Handy_2] eq 'present')

So wird das abgearbeitet: http://perldoc.perl.org/perlop.html#Operator-Precedence-and-Associativity
([Handy_2] eq 'present') oder [Handy_1] -> das ist nicht was Du willst. Der Ausdruck ist immer wahr, wenn Handy_1 nicht 0 enthält.

Ich meine damit alle Deine ähnlichen Ausdrücke! Also deine ganze Definition solltest Du korrigieren, dass  Du meinst, in Teilen funktioniert es, ist blanker Zufall!

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

gary822

#2
Hallo Otto123,

danke für dein Feedback.
Also würde eine funktionsfähige Konfig so aussehen:

DOIF (\
([05:30-23:30|Mo Di Mi Do]||[05:30-01:30|Fr]||[08:30-01:30|Sa So]) and \
[MAX_14649c:temperature] < 20 and \
([Handy_1] eq 'present'||[Handy_2] eq 'present'||[Handy_3] eq 'present'||[Handy_4] eq 'present')) \
(set MAX_14649c desiredTemperature manual comfort) \
DOELSEIF (\
([Handy_1] eq 'present'||[Handy_2] eq 'present'||[Handy_3] eq 'present'||[Handy_4] eq 'present')) \
(set MAX_14649c desiredTemperature manual 15.0) \
DOELSE \
(set MAX_14649c desiredTemperature manual eco)
?

Ja  nicht wundern ist ein anderes Zimmer mit ich gerade teste :)

VG
gary822

EDIT:

Also so funktioniert es auch nicht :/

2019-01-29_13:00:32 Heizungssteuerung_Flur cmd_2
2019-01-29_13:04:25 Heizungssteuerung_Flur cmd: 0
2019-01-29_13:04:25 Heizungssteuerung_Flur initialized
2019-01-29_13:04:25 Heizungssteuerung_Flur mode: enabled
2019-01-29_13:04:30 Heizungssteuerung_Flur cmd_nr: 1
2019-01-29_13:04:30 Heizungssteuerung_Flur cmd: 1
2019-01-29_13:04:30 Heizungssteuerung_Flur cmd_event: Heizungssteuerung_Flur
2019-01-29_13:04:30 Heizungssteuerung_Flur cmd_1
2019-01-29_13:06:18 Heizungssteuerung_Flur cmd: 0
2019-01-29_13:06:18 Heizungssteuerung_Flur initialized
2019-01-29_13:06:18 Heizungssteuerung_Flur mode: enabled
2019-01-29_13:06:19 Heizungssteuerung_Flur cmd_nr: 2
2019-01-29_13:06:19 Heizungssteuerung_Flur cmd: 2
2019-01-29_13:06:19 Heizungssteuerung_Flur cmd_event: Handy_2
2019-01-29_13:06:19 Heizungssteuerung_Flur cmd_2
2019-01-29_13:06:23 Heizungssteuerung_Flur checkall
2019-01-29_13:07:22 Heizungssteuerung_Flur cmd_nr: 3
2019-01-29_13:07:22 Heizungssteuerung_Flur cmd: 3
2019-01-29_13:07:22 Heizungssteuerung_Flur cmd_event: MAX_14649c
2019-01-29_13:07:22 Heizungssteuerung_Flur cmd_3
2019-01-29_13:07:34 Heizungssteuerung_Flur cmd_nr: 2
2019-01-29_13:07:34 Heizungssteuerung_Flur cmd: 2
2019-01-29_13:07:34 Heizungssteuerung_Flur cmd_event: Handy_2
2019-01-29_13:07:34 Heizungssteuerung_Flur cmd_2

Per

Mein signaturfähiger ;) Vorschlag: lagere die Present-Abfragen in ein DOIF_Reading aus. Bringt Übersicht und oftmals (hier eher nicht) ein kleines Performance Plus.
Und erleichtert die Fehlersuche, weil das Ergebnis dieser Abfrage schonmal separat getestet werden kann.

Nebenbei:
([05:30-23:30|Mo Di Mi Do]||[05:30-01:30|Fr]||[08:30-01:30|Sa So])
sollte auch so
([05:30-23:30|Mo Di Mi Do Fr]||[08:30-01:30|Fr Sa So])
gehen ;)

gary822

Hallo @Per,

danke für den Hinweis leider löst das mein Problem nicht :D

VG
gary822

Otto123

Hi gary822,

lagere die ganzen Handys doch in eine Structure aus, vor allem falls da noch zwei dazu kommen :)

Anhand von deinem Protokoll sehe ich nicht was funktioniert und was nicht. Ein list vom DOIF im jeweiligen Zustand ist meist sehr aussagefähig.

cmd_2 ist: mache 15 wenn einer da sind - war das so gewollt?
Die Bedingungen müssen eindeutig sein, ansonsten wird DOIF nicht eindeutig schalten. Ich denke bei dir ist Bedingung 1 und Bedingung 2 gleichzeitig wahr.

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

gary822

Hallo Otto123,

ich versuche mal meinen Hintergrund dazu etwas aufzudrieseln :D

cmd_1: (set MAX_14649c desiredTemperature manual comfort(18.5°))

  • Uhrzeit wahr
  • Temperatur unter 20°
  • eine Person anwesend

cmd_2: (set MAX_14649c desiredTemperature manual 15.0)

  • Uhrzeit falsch
  • Temperatur über 20°
  • eine Person anwesend

cmd_3: (set MAX_14649c desiredTemperature manual eco(5.0°))

  • Uhrzeit irrelevant
  • Temperatur irrelevant
  • keiner ist anwesend

Ich möchte also mit dem DOELSEIF erzielen, dass das Thermostat bei Anwesenheit einer Person auf minimal 15° herunterfährt, da die Motoren laut sind und der "lange" Weg unnötig Strom zieht.
Erst wenn keiner Anwesend ist sollen die Thermostate auf 5° herunterfahren.
Problem ist nun, dass sobald die Temperatur über die 20° geht er zuerst auf cmd_2 schaltet, dann auf cmd_3, dann auf cmd_2 usw.
Da dieses Verhalten aus dem Logfile ersichtlich ist dachte ich es wäre sinnvoll dies mit zu Posten.

Ich hoffe es ist etwas verständlich :D

VG
gary822

Otto123

Naja man sieht im Log
2019-01-29_13:06:18 Heizungssteuerung_Flur initialized
2019-01-29_13:06:18 Heizungssteuerung_Flur mode: enabled

er geht nach cmd_2

2019-01-29_13:06:19 Heizungssteuerung_Flur cmd_nr: 2
2019-01-29_13:06:19 Heizungssteuerung_Flur cmd: 2
2019-01-29_13:06:19 Heizungssteuerung_Flur cmd_event: Handy_2

Handy_2 liefert einen Event, er bleibt in cmd_2

2019-01-29_13:06:19 Heizungssteuerung_Flur cmd_2
2019-01-29_13:06:23 Heizungssteuerung_Flur checkall

Warum checkall? Das warst Du manuell? Er geht nach cmd_3 Warum?

2019-01-29_13:07:22 Heizungssteuerung_Flur cmd_nr: 3
2019-01-29_13:07:22 Heizungssteuerung_Flur cmd: 3
2019-01-29_13:07:22 Heizungssteuerung_Flur cmd_event: MAX_14649c

Der Tempfühler liefert einen event, er bleibt in cmd_3 weil offenbar alle anderen Bedingungen nicht stimmen.

2019-01-29_13:07:22 Heizungssteuerung_Flur cmd_3
2019-01-29_13:07:34 Heizungssteuerung_Flur cmd_nr: 2
2019-01-29_13:07:34 Heizungssteuerung_Flur cmd: 2
2019-01-29_13:07:34 Heizungssteuerung_Flur cmd_event: Handy_2

Handy_ 2 liefert einen Event, er geht nach cmd_2

2019-01-29_13:07:34 Heizungssteuerung_Flur cmd_2

Welche Zustände herrschen, welche Werte geliefert werden, siehst nur Du in (einem list). Im Protokoll sieht man nur was es macht, warum sieht man nicht.

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

gary822

Hallo Otto123,

ich habe jetzt mal ein "list Heizungssteuerung_Flur" durchgeführt.
Anbei der Output:


Internals:
   DEF        (
([05:30-23:30|Mo Di Mi Do Fr]||[08:30-01:30|Fr Sa So]) and
[MAX_14649c:temperature] < 18 and
([Handy_1] eq 'present'||[Handy_2] eq 'present'||[Handy_3] eq 'present'||[Handy_4] eq 'present'))
(set Flur cmd_1)
DOELSEIF (
([Handy_1] eq 'present'||[Handy_2] eq 'present'||[Handy_3] eq 'present'||[Handy_4] eq 'present'))
(set Flur cmd_2)
DOELSE
(set Flur cmd_3)
   FUUID      5c478861-f33f-20f6-0f36-6e1f26a6178dec95
   MODEL      FHEM
   NAME       Heizungssteuerung_Flur
   NR         69
   NTFY_ORDER 50-Heizungssteuerung_Flur
   STATE      cmd_2
   TYPE       DOIF
   READINGS:
     2019-01-29 14:48:38   Device          Handy_4
     2019-01-29 14:48:08   cmd             2
     2019-01-29 14:48:08   cmd_event       Handy_1
     2019-01-29 14:48:08   cmd_nr          2
     2019-01-29 14:48:38   e_Handy_1_STATE absent
     2019-01-29 14:47:57   e_Handy_3_STATE present
     2019-01-29 14:48:38   e_Handy_4_STATE absent
     2019-01-29 14:48:38   e_Handy_2_STATE absent
     2019-01-29 14:48:06   e_MAX_14649c_temperature 19.8
     2019-01-29 14:18:06   mode            enabled
     2019-01-29 14:48:08   state           cmd_2
     2019-01-29 14:18:06   timer_01_c01    30.01.2019 05:30:00|MoDiMiDoFr
     2019-01-29 14:18:06   timer_02_c01    29.01.2019 23:30:00|MoDiMiDoFr
     2019-01-29 14:18:06   timer_03_c01    30.01.2019 08:30:00|FrSaSo
     2019-01-29 14:18:06   timer_04_c01    30.01.2019 01:30:00|FrSaSo
   Regex:
   attr:
     cmdState:
     wait:
     waitdel:
   condition:
     0            (::DOIF_time($hash,0,1,$wday,$hms,"MoDiMiDoFr")||::DOIF_time($hash,2,3,$wday,$hms,"FrSaSo")) and  ::ReadingValDoIf($hash,'MAX_14649c','temperature') < 18 and  (::InternalDoIf($hash,'Handy_1','STATE') eq 'present'||::InternalDoIf($hash,'Handy_2','STATE') eq 'present'||::InternalDoIf($hash,'Handy_3','STATE') eq 'present'||::InternalDoIf($hash,'Handy_4','STATE') eq 'present')
     1            (::InternalDoIf($hash,'Handy_1','STATE') eq 'present'||::InternalDoIf($hash,'Handy_2','STATE') eq 'present'||::InternalDoIf($hash,'Handy_3','STATE') eq 'present'||::InternalDoIf($hash,'Handy_4','STATE') eq 'present')
   days:
     0          MoDiMiDoFr
     1          MoDiMiDoFr
     2          FrSaSo
     3          FrSaSo
   devices:
     0           MAX_14649c Handy_1 Handy_2 Handy_3 Handy_4
     1           Handy_1 Handy_2 Handy_3 Handy_4
     all         MAX_14649c Handy_1 Handy_2 Handy_3 Handy_4
   do:
     0:
       0          set Flur cmd_1
     1:
       0          set Flur cmd_2
     2:
       0          set Flur cmd_3
   helper:
     event      absent,presence: absent
     globalinit 1
     last_timer 4
     sleeptimer -1
     timerdev   Handy_4
     timerevent absent,presence: absent
     triggerDev Handy_4
     DOIF_eventas:
       cmd_nr: 2
       cmd: 2
       cmd_event: Handy_1
       state: cmd_2
     timerevents:
       absent
       presence: absent
     timereventsState:
       state: absent
       presence: absent
     triggerEvents:
       absent
       presence: absent
     triggerEventsState:
       state: absent
       presence: absent
   internals:
     0           Handy_1:STATE Handy_2:STATE Handy_3:STATE Handy_4:STATE
     1           Handy_1:STATE Handy_2:STATE Handy_3:STATE Handy_4:STATE
     all         Handy_1:STATE Handy_2:STATE Handy_3:STATE Handy_4:STATE
   interval:
     0          -1
     1          0
     2          -1
     3          2
   intervalfunc:
   itimer:
   localtime:
     0          1548822600
     1          1548801000
     2          1548833400
     3          1548808200
   readings:
     0           MAX_14649c:temperature
     all         MAX_14649c:temperature
   realtime:
     0          05:30:00
     1          23:30:00
     2          08:30:00
     3          01:30:00
   time:
     0          05:30:00
     1          23:30:00
     2          08:30:00
     3          01:30:00
   timeCond:
     0          0
     1          0
     2          0
     3          0
   timer:
     0          0
     1          0
     2          0
     3          0
   timers:
     0           0  1  2  3
   trigger:
   triggertime:
     1548801000:
       localtime  1548801000
       hash:
     1548808200:
       localtime  1548808200
       hash:
     1548822600:
       localtime  1548822600
       hash:
     1548833400:
       localtime  1548833400
       hash:
   uiState:
   uiTable:
Attributes:
   devStateIcon cmd_1:status_automatic@green:cmd_2 cmd_2:status_automatic@blue:cmd_3 cmd_3:status_automatic@red:cmd_1 initialized:status_automatic@orange:checkall
   group      Anwesenheit
   icon       status_automatic
   room       Flur
   setList    state:cmd_1,cmd_2,cmd_3,checkall
   verbose    1
   webCmd     state
   webCmdLabel Status


VG
Danny

Otto123

Naja, aber so ist doch alles schick? Du musst ein list machen, wenn es nicht stimmt.

Ich denke ja, es gibt temporäre Zustände die nicht stimmen, dein DOIF aber (unnötig) triggern und dann Vorgänge auslösen.
Deine "present Events" vom Handy erfolgen, obwohl sich kein Zustand ändert? Stichwort event-on-change-reading

Tipps zur presence:
Das ist die Alternative zu Deiner Oder Verknüpfung
define st_Handy structure bewohner Handy_1 Handy_2 Handy_3 Handy_4
attr st_Handy clientstate_behavior relative 
attr st_Handy clientstate_priority present|1 absent|0 
attr st_Handy event-on-change-reading state 
attr st_Handy room Status 

Nimm zum Testen einen Dummy den Du definiert schaltest, dann kannst Du die presence Effekte schnell ausschließen.

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

gary822

Hallo Otto123,

danke für dein Feedback.
Das list habe ich ausgeführt in dem Zeitraum als der Fehler auftrat.
Weiter unten nochmal ein list und ein Logauszug.

Das Problem ist, dass ich Plots definiert habe welche auf den Wert "present" gehen
Wenn ich jetzt event-on-change-reading state definiere funktionieren leider meine Plots nicht mehr.

# Created by FHEM/98_SVG.pm, 2019-01-24 23:02:47
set terminal png transparent size <SIZE> crop
set output '<OUT>.png'
set xdata time
set timefmt "%Y-%m-%d_%H:%M:%S"
set xlabel " "
set title 'Heizungssteuerung'
set ytics
set y2tics
set grid ytics y2tics
set ylabel ""
set y2label ""
set yrange [0:55]
set y2range [0:55]

#FileLog_MAX_146463 4:MAX_146463.temperature\x3a:/\d+/:
#FileLog_MAX_146463 3:MAX_146463.*:/\d+/:
#FileLog_MAX_146463 4:MAX_146463.mode\x3a::$fld[3]=~"manual"?50:55
#FileLog_MAX_1584e1 3:.*:0:$fld[2]&&$fld[2]=~"opened"?30:0
#FileLog_Handy_1 3:.*:0:$fld[2]&&$fld[2]=~"present"?45:40
#FileLog_Handy_2 3:.*:0:$fld[2]&&$fld[2]=~"present"?40:35

plot "<IN>" using 1:2 axes x1y2 title 'Temperaturverlaufi' ls l1fill lw 1 with lines,\
     "<IN>" using 1:2 axes x1y2 title 'gesetzte Temperatur' ls l0fill lw 1 with lines,\
     "<IN>" using 1:2 axes x1y1 title 'Mode' ls l0 lw 1 with lines,\
     "<IN>" using 1:2 axes x1y2 title 'Fenster' ls l1 lw 3 with points,\
     "<IN>" using 1:2 axes x1y2 title 'Anwesenheit 1' ls l3 lw 1 with lines,\
     "<IN>" using 1:2 axes x1y2 title 'Anwesenheit 2' ls l4 lw 1 with lines


Wenn es dahingehend natürlich eine bessere Lösung gibt bin ich da offen für Vorschläge.
Genau die gleiche Problematik trifft dann aber auch das Thermostat welches ja auch immer mal das Event auslöst.

2019-01-29_15:28:07 Heizungssteuerung_Flur cmd: 2
2019-01-29_15:28:07 Heizungssteuerung_Flur cmd_event: Handy_1
2019-01-29_15:28:07 Heizungssteuerung_Flur cmd_2
2019-01-29_15:28:15 Heizungssteuerung_Flur cmd_nr: 3
2019-01-29_15:28:15 Heizungssteuerung_Flur cmd: 3
2019-01-29_15:28:15 Heizungssteuerung_Flur cmd_event: MAX_14649c
2019-01-29_15:28:15 Heizungssteuerung_Flur cmd_3
2019-01-29_15:29:03 Heizungssteuerung_Flur cmd_nr: 2
2019-01-29_15:29:03 Heizungssteuerung_Flur cmd: 2
2019-01-29_15:29:03 Heizungssteuerung_Flur cmd_event: Handy_2
2019-01-29_15:29:03 Heizungssteuerung_Flur cmd_2
2019-01-29_15:29:15 Heizungssteuerung_Flur cmd_nr: 3
2019-01-29_15:29:15 Heizungssteuerung_Flur cmd: 3
2019-01-29_15:29:15 Heizungssteuerung_Flur cmd_event: MAX_14649c
2019-01-29_15:29:15 Heizungssteuerung_Flur cmd_3
2019-01-29_15:29:18 Heizungssteuerung_Flur cmd_nr: 2
2019-01-29_15:29:18 Heizungssteuerung_Flur cmd: 2
2019-01-29_15:29:18 Heizungssteuerung_Flur cmd_event: Handy_2
2019-01-29_15:29:18 Heizungssteuerung_Flur cmd_2
2019-01-29_15:30:03 Heizungssteuerung_Flur cmd_nr: 3
2019-01-29_15:30:03 Heizungssteuerung_Flur cmd: 3
2019-01-29_15:30:03 Heizungssteuerung_Flur cmd_event: MAX_14649c
2019-01-29_15:30:03 Heizungssteuerung_Flur cmd_3
2019-01-29_15:30:06 Heizungssteuerung_Flur cmd_nr: 2
2019-01-29_15:30:06 Heizungssteuerung_Flur cmd: 2
2019-01-29_15:30:06 Heizungssteuerung_Flur cmd_event: Handy_2
2019-01-29_15:30:06 Heizungssteuerung_Flur cmd_2
2019-01-29_15:30:35 Heizungssteuerung_Flur cmd_nr: 3
2019-01-29_15:30:35 Heizungssteuerung_Flur cmd: 3
2019-01-29_15:30:35 Heizungssteuerung_Flur cmd_event: MAX_14649c
2019-01-29_15:30:35 Heizungssteuerung_Flur cmd_3
2019-01-29_15:30:36 Heizungssteuerung_Flur cmd_nr: 2
2019-01-29_15:30:36 Heizungssteuerung_Flur cmd: 2
2019-01-29_15:30:36 Heizungssteuerung_Flur cmd_event: Handy_2
2019-01-29_15:30:36 Heizungssteuerung_Flur cmd_2
2019-01-29_15:30:38 Heizungssteuerung_Flur cmd_nr: 3
2019-01-29_15:30:38 Heizungssteuerung_Flur cmd: 3
2019-01-29_15:30:38 Heizungssteuerung_Flur cmd_event: MAX_14649c
2019-01-29_15:30:38 Heizungssteuerung_Flur cmd_3
2019-01-29_15:30:51 Heizungssteuerung_Flur cmd_nr: 2
2019-01-29_15:30:51 Heizungssteuerung_Flur cmd: 2
2019-01-29_15:30:51 Heizungssteuerung_Flur cmd_event: Handy_2
2019-01-29_15:30:51 Heizungssteuerung_Flur cmd_2
2019-01-29_15:30:55 Heizungssteuerung_Flur cmd_nr: 3
2019-01-29_15:30:55 Heizungssteuerung_Flur cmd: 3
2019-01-29_15:30:55 Heizungssteuerung_Flur cmd_event: MAX_14649c
2019-01-29_15:30:55 Heizungssteuerung_Flur cmd_3
2019-01-29_15:31:06 Heizungssteuerung_Flur cmd_nr: 2
2019-01-29_15:31:06 Heizungssteuerung_Flur cmd: 2
2019-01-29_15:31:06 Heizungssteuerung_Flur cmd_event: Handy_2
2019-01-29_15:31:06 Heizungssteuerung_Flur cmd_2
2019-01-29_15:31:56 Heizungssteuerung_Flur cmd_nr: 3
2019-01-29_15:31:56 Heizungssteuerung_Flur cmd: 3
2019-01-29_15:31:56 Heizungssteuerung_Flur cmd_event: MAX_14649c
2019-01-29_15:31:56 Heizungssteuerung_Flur cmd_3
2019-01-29_15:32:06 Heizungssteuerung_Flur cmd_nr: 2
2019-01-29_15:32:06 Heizungssteuerung_Flur cmd: 2
2019-01-29_15:32:06 Heizungssteuerung_Flur cmd_event: Handy_2
2019-01-29_15:32:06 Heizungssteuerung_Flur cmd_2




Internals:
   DEF        (
([05:30-23:30|Mo Di Mi Do Fr]||[08:30-01:30|Fr Sa So]) and
[MAX_14649c:temperature] < 18 and
([Handy_1] eq 'present'||[Handy_4] eq 'present'||[Handy_2] eq 'present'||[Handy_3] eq 'present'))
(set Flur cmd_1)
DOELSEIF (
([Handy_1] eq 'present'||[Handy_4] eq 'present'||[Handy_2] eq 'present'||[Handy_3] eq 'present'))
(set Flur cmd_2)
DOELSE
(set Flur cmd_3)
   FUUID      5c478861-f33f-20f6-0f36-6e1f26a6178dec95
   MODEL      FHEM
   NAME       Heizungssteuerung_Flur
   NR         69
   NTFY_ORDER 50-Heizungssteuerung_Flur
   STATE      cmd_2
   TYPE       DOIF
   READINGS:
     2019-01-29 15:32:37   Device          Handy_4
     2019-01-29 15:32:06   cmd             2
     2019-01-29 15:32:06   cmd_event       Handy_3
     2019-01-29 15:32:06   cmd_nr          2
     2019-01-29 15:32:37   e_Handy_1_STATE absent
     2019-01-29 15:32:07   e_Handy_2_STATE present
     2019-01-29 15:32:36   e_Handy_3_STATE absent
     2019-01-29 15:32:37   e_Handy_4_STATE absent
     2019-01-29 15:31:56   e_MAX_14649c_temperature 19.7
     2019-01-29 14:18:06   mode            enabled
     2019-01-29 15:32:06   state           cmd_2
     2019-01-29 14:18:06   timer_01_c01    30.01.2019 05:30:00|MoDiMiDoFr
     2019-01-29 14:18:06   timer_02_c01    29.01.2019 23:30:00|MoDiMiDoFr
     2019-01-29 14:18:06   timer_03_c01    30.01.2019 08:30:00|FrSaSo
     2019-01-29 14:18:06   timer_04_c01    30.01.2019 01:30:00|FrSaSo
   Regex:
   attr:
     cmdState:
     wait:
     waitdel:
   condition:
     0            (::DOIF_time($hash,0,1,$wday,$hms,"MoDiMiDoFr")||::DOIF_time($hash,2,3,$wday,$hms,"FrSaSo")) and  ::ReadingValDoIf($hash,'MAX_14649c','temperature') < 18 and  (::InternalDoIf($hash,'Handy_1','STATE') eq 'present'||::InternalDoIf($hash,'Handy_4','STATE') eq 'present'||::InternalDoIf($hash,'Handy_2','STATE') eq 'present'||::InternalDoIf($hash,'Handy_3','STATE') eq 'present')
     1            (::InternalDoIf($hash,'Handy_1','STATE') eq 'present'||::InternalDoIf($hash,'Handy_4','STATE') eq 'present'||::InternalDoIf($hash,'Handy_2','STATE') eq 'present'||::InternalDoIf($hash,'Handy_3','STATE') eq 'present')
   days:
     0          MoDiMiDoFr
     1          MoDiMiDoFr
     2          FrSaSo
     3          FrSaSo
   devices:
     0           MAX_14649c Handy_1 Handy_4 Handy_2 Handy_3
     1           Handy_1 Handy_4 Handy_2 Handy_3
     all         MAX_14649c Handy_1 Handy_4 Handy_2 Handy_3
   do:
     0:
       0          set Flur cmd_1
     1:
       0          set Flur cmd_2
     2:
       0          set Flur cmd_3
   helper:
     event      absent,presence: absent
     globalinit 1
     last_timer 4
     sleeptimer -1
     timerdev   Handy_4
     timerevent absent,presence: absent
     triggerDev Handy_4
     DOIF_eventas:
       cmd_nr: 2
       cmd: 2
       cmd_event: Handy_3
       state: cmd_2
     timerevents:
       absent
       presence: absent
     timereventsState:
       state: absent
       presence: absent
     triggerEvents:
       absent
       presence: absent
     triggerEventsState:
       state: absent
       presence: absent
   internals:
     0           Handy_1:STATE Handy_4:STATE Handy_2:STATE Handy_3:STATE
     1           Handy_1:STATE Handy_4:STATE Handy_2:STATE Handy_3:STATE
     all         Handy_1:STATE Handy_4:STATE Handy_2:STATE Handy_3:STATE
   interval:
     0          -1
     1          0
     2          -1
     3          2
   intervalfunc:
   itimer:
   localtime:
     0          1548822600
     1          1548801000
     2          1548833400
     3          1548808200
   readings:
     0           MAX_14649c:temperature
     all         MAX_14649c:temperature
   realtime:
     0          05:30:00
     1          23:30:00
     2          08:30:00
     3          01:30:00
   time:
     0          05:30:00
     1          23:30:00
     2          08:30:00
     3          01:30:00
   timeCond:
     0          0
     1          0
     2          0
     3          0
   timer:
     0          0
     1          0
     2          0
     3          0
   timers:
     0           0  1  2  3
   trigger:
   triggertime:
     1548801000:
       localtime  1548801000
       hash:
     1548808200:
       localtime  1548808200
       hash:
     1548822600:
       localtime  1548822600
       hash:
     1548833400:
       localtime  1548833400
       hash:
   uiState:
   uiTable:
Attributes:
   devStateIcon cmd_1:status_automatic@green:cmd_2 cmd_2:status_automatic@blue:cmd_3 cmd_3:status_automatic@red:cmd_1 initialized:status_automatic@orange:checkall
   group      Anwesenheit
   icon       status_automatic
   room       Flur
   setList    state:cmd_1,cmd_2,cmd_3,checkall
   verbose    1
   webCmd     state
   webCmdLabel Status

VG
gary822

Per

Vom List des DOIF passt es ja wieder: cmd2 ist ok.
Kannst du ein List machen, wenn cmd = 3 ist?

Kann es sein, dass du noch eine ältere DOIF-Version hast?
Versuch es mal mit
attr Heizungssteuerung_Flur checkReadingEvent 1

Otto123

#12
Zitat von: gary822 am 29 Januar 2019, 15:34:07
Das Problem ist, dass ich Plots definiert habe welche auf den Wert "present" gehen
Wenn ich jetzt event-on-change-reading state definiere funktionieren leider meine Plots nicht mehr.
Was hat die structure und das event-on-change-reading dort mit deinen Plots zu tun? Das ist ein Zusatz als Vereinfachung deines DOIFs und doch kein genereller Ersatz!

Wie sollte denn der Zustand deiner Meinung nach jetzt sein? Ich sehe es wie Per -> alles Ok
2019-01-29 15:32:07   e_Handy_2_STATE present

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

gary822

Hallo @all,

attr Heizungssteuerung_Flur checkReadingEvent 1
hat keine Änderung zufolge.

das Attribut "event-on-change-reading state" kann ich nicht verwenden, da sonst nur Einträge in meine Logfiles geschrieben werden sobald sich der Status des Handys ändert und aus diesem Grund meine Plots ewig nicht mit Daten versorgt werden.

Der Status der Handys ist korrekt. Ich habe nie gesagt das diese nicht stimmen allerdings sollte sich der nicht der Status des DOIFs im Sekundentakt ändern.
Der Zustand des DOIFs soll zum aktuellen Zeitpunkt "cmd_2" sein und sich erst wieder ändern wenn die Temperatur den Wert 18 von dem Thermostat unterschritten wird.
Aktuell ändert sich der Status des DOIFs im Sekundentakt von cmd_2 zu cmd_3 zu cmd_2 usw.

Ich halte mein Fhem immer aktuell aus diesem Grund gehe ich davon aus das die aktuellste Version von DOIF installiert ist.

Leider wird der Status "cmd_3" nur einen Bruchteil gehalten weshalb ein list eher nicht möglich ist.
Sollte es natürlich auf BS ebene ein File geben auf welches ich ein tail laufen lassen kann dann kann ich das machen.

VG
gary822

Per

Zitat von: gary822 am 29 Januar 2019, 16:10:18Leider wird der Status "cmd_3" nur einen Bruchteil gehalten weshalb ein list eher nicht möglich ist.
Dann häng mal ein vollständiges Eventlog dieser Zeit an. Vor allem das was vorher ablief.