Hauptmenü

DOIF löst nur manuell aus

Begonnen von dan1180, 07 März 2023, 22:24:33

Vorheriges Thema - Nächstes Thema

dan1180

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)



  • Die Temperatur ist die Kesseltemperatur für den Heizkreis.
  • hkp und fbp sind die Ausgänge eines DS2408-Relais
  • HeizwasserXX sind Variablen aus meiner Raspberrymatic

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!
FHEM 6.2 auf RPi4B
Raspberrymatic 3.X auf RPI3B

1xDS2408 und 6xDS18B20 an GPIO über Modul RPI_1Wire
>50 Homematic-Geräte

Damian

Du musst ein list vom vermeintlich falschen Verhalten/Zustand des DOIF-Devices posten, dann kann man erst was dazu sagen.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

dan1180

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
FHEM 6.2 auf RPi4B
Raspberrymatic 3.X auf RPI3B

1xDS2408 und 6xDS18B20 an GPIO über Modul RPI_1Wire
>50 Homematic-Geräte

Damian

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.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

dan1180

#4
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.
FHEM 6.2 auf RPi4B
Raspberrymatic 3.X auf RPI3B

1xDS2408 und 6xDS18B20 an GPIO über Modul RPI_1Wire
>50 Homematic-Geräte

Damian

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.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

dan1180

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.

FHEM 6.2 auf RPi4B
Raspberrymatic 3.X auf RPI3B

1xDS2408 und 6xDS18B20 an GPIO über Modul RPI_1Wire
>50 Homematic-Geräte