FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: dan1180 am 07 März 2023, 22:24:33

Titel: DOIF löst nur manuell aus
Beitrag von: dan1180 am 07 März 2023, 22:24:33
Hallo zusammen,

ich habe das Problem, dass ich zwei (fast) identische DOIFs habe, von denen eins tadellos funktioniert, das andere aber nicht.

Funktionierendes DOIF für die Heizkörperpumpe (dihzgctr):

([tmpsshkk:temperature] > 52 and ([myccu:HeizwasserHK] eq "true"))
     (set owswitch output hkp on)
DOELSEIF
([tmpsshkk:temperature] < 48 or ([myccu:HeizwasserHK] eq "false"))
     (set owswitch output hkp off)


DOIF für die Fußbodenheizungspumpe (difbhctr) funktioniert nicht:

([tmpsshkk:temperature] > 54 and ([myccu:HeizwasserFB] eq "true"))
     (set owswitch output fbp on)
DOELSEIF
([tmpsshkk:temperature] < 50 or ([myccu:HeizwasserFB] eq "false"))
     (set owswitch output fbp off)



Das kuriose für mich ist, dass die Fußbodenheizung korrekt schält, wenn ich sie mit
set difbhctr cmd01 ein-, btw. mit
set difbhctr cmd02 ausschalte.
Der automatische Wechsel des Status führt aber zu keiner Aktion.

Kann mir hier jemand weiterhelfen? Ich seh' wohl den Wald vor lauter Bäumen nicht...

Vielen Dank für jeden Hinweis!
Titel: Antw:DOIF löst nur manuell aus
Beitrag von: Damian am 07 März 2023, 22:28:12
Du musst ein list vom vermeintlich falschen Verhalten/Zustand des DOIF-Devices posten, dann kann man erst was dazu sagen.
Titel: Antw:DOIF löst nur manuell aus
Beitrag von: dan1180 am 07 März 2023, 22:38:42
Hallo Damian,

hier das List mit automatischem Statuswechsel:

Internals:
   DEF        ([tmpsshkk:temperature] > 54 and ([myccu:HeizwasserFB] eq "true"))
     (set owswitch output fbp on)
DOELSEIF
([tmpsshkk:temperature] < 50 or ([myccu:HeizwasserFB] eq "false"))
     (set owswitch output fbp off)
   FUUID      5dbc446b-f33f-5d70-f79c-627849b5cc7b16c7
   MODEL      FHEM
   NAME       difbhctr
   NOTIFYDEV  global,myccu,tmpsshkk
   NR         69
   NTFY_ORDER 50-difbhctr
   STATE      cmd_1
   TYPE       DOIF
   VERSION    26703 2022-11-14 16:43:41
   eventCount 131
   READINGS:
     2023-03-07 22:35:40   Device          myccu
     2023-03-07 22:35:40   cmd             1
     2023-03-07 22:35:40   cmd_event       myccu
     2023-03-07 22:35:40   cmd_nr          1
     2023-03-07 22:35:40   e_myccu_HeizwasserFB true
     2023-03-07 22:35:38   e_tmpsshkk_temperature 60.687
     2023-03-07 21:58:01   mode            enabled
     2023-03-07 22:35:40   state           cmd_1
   Regex:
     accu:
     collect:
     cond:
       myccu:
         0:
           HeizwasserFB ^myccu$:^HeizwasserFB:
         1:
           HeizwasserFB ^myccu$:^HeizwasserFB:
       tmpsshkk:
         0:
           temperature ^tmpsshkk$:^temperature:
         1:
           temperature ^tmpsshkk$:^temperature:
   attr:
     cmdState:
     wait:
     waitdel:
   condition:
     0          ::ReadingValDoIf($hash,'tmpsshkk','temperature') > 54 and (::ReadingValDoIf($hash,'myccu','HeizwasserFB') eq "true")
     1          ::ReadingValDoIf($hash,'tmpsshkk','temperature') < 50 or (::ReadingValDoIf($hash,'myccu','HeizwasserFB') eq "false")
   do:
     0:
       0          set owswitch output fbp on
     1:
       0          set owswitch output fbp off
     2:
   helper:
     NOTIFYDEV  global,myccu,tmpsshkk
     event      HeizwasserHK: true,Heizwasser: 60.7,HeizwasserFB: true
     globalinit 1
     last_timer 0
     sleeptimer -1
     timerdev   myccu
     timerevent HeizwasserHK: true,Heizwasser: 60.7,HeizwasserFB: true
     triggerDev myccu
     DOIF_eventa:
       cmd_nr: 1
       cmd: 1
       cmd_event: myccu
       cmd_1
     DOIF_eventas:
       cmd_nr: 1
       cmd: 1
       cmd_event: myccu
       state: cmd_1
     timerevents:
       HeizwasserHK: true
       Heizwasser: 60.7
       HeizwasserFB: true
     timereventsState:
       HeizwasserHK: true
       Heizwasser: 60.7
       HeizwasserFB: true
     triggerEvents:
       HeizwasserHK: true
       Heizwasser: 60.7
       HeizwasserFB: true
     triggerEventsState:
       HeizwasserHK: true
       Heizwasser: 60.7
       HeizwasserFB: true
   hmccu:
   internals:
   readings:
     all         tmpsshkk:temperature myccu:HeizwasserFB
   trigger:
   uiState:
   uiTable:
Attributes:
   do         always
   room       Heizung
   verbose    0


Und hier noch nach manuellem Wechsel über "set ... cmd1"

Internals:
   DEF        ([tmpsshkk:temperature] > 54 and ([myccu:HeizwasserFB] eq "true"))
     (set owswitch output fbp on)
DOELSEIF
([tmpsshkk:temperature] < 50 or ([myccu:HeizwasserFB] eq "false"))
     (set owswitch output fbp off)
   FUUID      5dbc446b-f33f-5d70-f79c-627849b5cc7b16c7
   MODEL      FHEM
   NAME       difbhctr
   NOTIFYDEV  global,myccu,tmpsshkk
   NR         69
   NTFY_ORDER 50-difbhctr
   STATE      cmd_1
   TYPE       DOIF
   VERSION    26703 2022-11-14 16:43:41
   eventCount 134
   READINGS:
     2023-03-07 22:37:38   Device          tmpsshkk
     2023-03-07 22:37:42   cmd             1
     2023-03-07 22:37:42   cmd_event       set_cmd_1
     2023-03-07 22:37:42   cmd_nr          1
     2023-03-07 22:35:40   e_myccu_HeizwasserFB true
     2023-03-07 22:37:38   e_tmpsshkk_temperature 60.625
     2023-03-07 21:58:01   mode            enabled
     2023-03-07 22:37:42   state           cmd_1
   Regex:
     accu:
     collect:
     cond:
       myccu:
         0:
           HeizwasserFB ^myccu$:^HeizwasserFB:
         1:
           HeizwasserFB ^myccu$:^HeizwasserFB:
       tmpsshkk:
         0:
           temperature ^tmpsshkk$:^temperature:
         1:
           temperature ^tmpsshkk$:^temperature:
   attr:
     cmdState:
     wait:
     waitdel:
   condition:
     0          ::ReadingValDoIf($hash,'tmpsshkk','temperature') > 54 and (::ReadingValDoIf($hash,'myccu','HeizwasserFB') eq "true")
     1          ::ReadingValDoIf($hash,'tmpsshkk','temperature') < 50 or (::ReadingValDoIf($hash,'myccu','HeizwasserFB') eq "false")
   do:
     0:
       0          set owswitch output fbp on
     1:
       0          set owswitch output fbp off
     2:
   helper:
     NOTIFYDEV  global,myccu,tmpsshkk
     event      T: 60.625,temperature: 60.625
     globalinit 1
     last_timer 0
     sleeptimer -1
     timerdev   tmpsshkk
     timerevent T: 60.625,temperature: 60.625
     triggerDev tmpsshkk
     timerevents:
       T: 60.625
       temperature: 60.625
     timereventsState:
       state: T: 60.625
       temperature: 60.625
     triggerEvents:
       T: 60.625
       temperature: 60.625
     triggerEventsState:
       state: T: 60.625
       temperature: 60.625
   hmccu:
   internals:
   readings:
     all         tmpsshkk:temperature myccu:HeizwasserFB
   trigger:
   uiState:
   uiTable:
Attributes:
   do         always
   room       Heizung
   verbose    0
Titel: Antw:DOIF löst nur manuell aus
Beitrag von: Damian am 07 März 2023, 22:53:20
Das ist kein vermeintlich falscher Zustand.

Mit:

Zitat2023-03-07 22:35:40   e_myccu_HeizwasserFB true
     2023-03-07 22:35:38   e_tmpsshkk_temperature 60.687
ist ja die erste Bedingung erfüllt und nicht die zweite.

Du musst zeigen, dass trotz wahrer zweiter Bedingung nicht in cmd2 geschaltet wurde.
Titel: Antw:DOIF löst nur manuell aus
Beitrag von: dan1180 am 07 März 2023, 23:00:02
Bei List 1 wurde nach erreichen der wahren Bedingung der Status auf cmd1 gewechselt aber der Befehl "set owswitch output fbp on" wurde nicht ausgeführt. Bei einem manuellen "set difbhctr cmd1" wird der Befehl dann ausgeführt (List2).

Die beiden Bedingungen, die du zitierst sind wahr, das DOIF wechselt den Zustand von cmd2 nach cmd1 (was es ja dann soll) aber der Set-Befehl wird nicht ausgeführt.
Titel: Antw:DOIF löst nur manuell aus
Beitrag von: Damian am 08 März 2023, 07:45:02
OK. Also nach:

2023-03-07 22:35:40   cmd             1

wurde der cmd1 ausgeführt. Damit sollte der Befehl um diese Zeit ausgeführt worden sein. Im List kann ich den korrekten Befehl für cmd1 sehen. Du kannst davor per Log3-Befehl die Ausführung loggen, um sicher zu gehen oder einen Test-Dummy schalten.


Ohne do always wird der cmd-Befehl nur einmal ausgeführt und dann erst wieder nachdem cmd2 ausgeführt worden ist.
Titel: Antw:DOIF löst nur manuell aus
Beitrag von: dan1180 am 08 März 2023, 12:56:36
Und genau da liegt mein Problem. Ich dachte zuerst meine Kommandozeile hätte einen Fehler. Wenn ich aber "Set difbhctr cmd1" eingebe, funktioniert alles  :o
Das "baugleiche" dihzgctr funktioniert vollautomatisch...

Das mit dem Test-Dummy versuche ich am Wochenende mal. Danke.