[gelöst] Homematic Devices und aggregierte Werte

Begonnen von holle75, 17 März 2021, 14:03:00

Vorheriges Thema - Nächstes Thema

holle75

Hallo Ihr, ein DOIF welches meines Dafürhaltens früher funktionierte, tut nicht mehr das was es soll.

defmod BeregnungDOIF_PumpeCisterna DOIF ([#"^BEREGNUNG_SCHALTER_":state:"^on$"] ne "0" or [?$SELF:manu] eq "on") \
(set PozzoHauptOben_PUMPE_Cisterna on) \
DOELSEIF  (["^PozzoHauptOben_PUMPE_Cisterna$:^off$"] and [?$SELF:cmd] ne "4" and [?$SELF:cmd] ne "5.2") \
(set $SELF manu off) \
DOELSEIF  (["^PozzoHauptOben_PUMPE_Cisterna$:^on$"] and [?$SELF:cmd] ne "1" and [?$SELF:cmd] ne "5.1") \
(set $SELF manu on) \
DOELSEIF ([#"^BEREGNUNG_SCHALTER_":state:"^on$"] eq "0") \
(set PozzoHauptOben_PUMPE_Cisterna off) \
DOELSEIF ([05:30] and [?AnwesenheitHaupt:statStateDaypresent] eq "00:00:00" and [?PozzoHauptOben_PUMPE_Cisterna] eq "off") \
(set PozzoHauptOben_PUMPE_Cisterna on) \
(set PozzoHauptOben_PUMPE_Cisterna off) \
DOELSEIF ([17:30] and [?$SELF:cmd] eq "5.2") \
()
attr BeregnungDOIF_PumpeCisterna readingList manu
attr BeregnungDOIF_PumpeCisterna wait 0:0:0:0:0,10:0


Das DOIF schaltet bei Beregnung die Brunnenpumpe an und danach wieder aus. Um zu vermeiden, dass sie auch ausschaltet, wenn man sie manuell eingeschaltet hatte, gibt es eine Variable "manu" die den Zustand der Pumpe "speichert" und nach der Beregnung wieder herstellt. cmd_5 verhindert bei längerer Abwesenheit ein verrockern der Pumpe. cmd_6 ist dazu da, durch Zustandwechsel cmd_5 täglich auszuführen.

Davon ausgehend, dass "manu" auf "off" steht .... Problem ist, dass ein BEREGNUNG_SCHALTER "on" das DOIF in cmd_1 halten sollte. Aber das DOIF geht nach Ausführung von cmd_1 direkt in cmd_3 (was ein "manu" on nach sich zieht und die Grundidee ad absurdum führt).

Durch "[?$SELF:cmd] ne "1"" in cmd_3 sollte dies verhindert sein. Das interessiert das DOIF aber nicht (aber hat es früher, meine ich, mal). Warum?

"manu" on oder min ein Beregner läuft sollten das DOIF immer in cmd_1 halten.

Danke und Grüße!
H.

holle75

#1
Mann Mann, also, das ganze Ding mit allen angehängten Devices im Testsystem nachgebaut. Läuft wie eine Eins.

Der einzige Unterschied ist, dass alle BEREGNUNG_SCHALTER_ Devices im Testsystem Dummies sind und keine Homematic Schalter.

Dunkel erinnere ich mich an die, bis anhin mir immer noch unverständlichen und sich widersprechenden, Zwischenstati "set_off", "working: on", etc im state bei Homematic Devices.

Denke mal, das ist auch das, was dieses DOIF jetzt neuerdings wuschig macht. ABER, wie man sieht wurde schon damals der Versuch unternommen, dies möglichst zu kompensieren. Was hat sich da, falls, verändert?

und wie müßte es richtig sein, um nur den definitiven Event "on" und "off" im state zu filtern?

Damian

Also im DOIF hat sich an der Stelle nicht geändert.

mit der Angabe:

^on$

wird auf jeden Fall set_on ausgeschlossen.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

holle75

#3
... aus dieser Homematic Geschichte soll man schlau werden. Ich habe mal einen Homematic Schalter bemüht, der nicht wirklich Mechanik in Aktion bringt:

ist on, man schaltet aus
2021-03-17 21:23:57 HM485 ZirkusOben_STECKDOSE_Aussen set_off
2021-03-17 21:23:57 HM485 ZirkusOben_STECKDOSE_Aussen off
2021-03-17 21:23:57 HM485 ZirkusOben_STECKDOSE_Aussen working: off


ist off, man schaltet an

2021-03-17 21:24:11 HM485 ZirkusOben_STECKDOSE_Aussen set_on
2021-03-17 21:24:11 HM485 ZirkusOben_STECKDOSE_Aussen on
2021-03-17 21:24:11 HM485 ZirkusOben_STECKDOSE_Aussen working: off


logisch ist das nicht, oder? was soll das working: off beim einschalten?

und ich denke, dies könnte das Problem sein. Aber wie muß ich die Syntax wählen, damit wirklich nur das passende "on" oder "off" (bei vielen aggregierten Devices) gefunden wird? Mit state liege ich da doch nicht ganz falsch.

Damian

[#"^ZirkusOben_STECKDOSE_":state:$_ eq "on"]

sollte nur den Status "on" zählen
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

holle75

#5
Danke Damian.

PS: ich weiß jetzt, warum es früher immer ging und jetzt nicht mehr.

Früher wurden immer mindestens 2 Beregner gleichzeitig gefahren, da gab es dann immer laut status mindestens einen Aktiven, auch wenn der andere gerade Zorres im state stehen hatte. Jetzt läuft zum Teil nur ein Beregner und dadurch wurde kurz in cmd_4 gewechselt, was dann wieder cmd_3 ermöglichte. Zur Info

holle75

... doch noch nicht gelöst. Das DOIF zum besseren Verständnis noch etwas umgebaut, der Effekt ist der selbe.

defmod BeregnungDOIF_PumpeCisterna DOIF ([#"^BEREGNUNG_SCHALTER_":state:$_ eq "on"] ne "0" or [?$SELF:manu] eq "on") \
(set PozzoHauptOben_PUMPE_Cisterna on) \
DOELSEIF ([#"^BEREGNUNG_SCHALTER_":state:$_ eq "on"] eq "0") \
(set PozzoHauptOben_PUMPE_Cisterna off) \
DOELSEIF  (["^PozzoHauptOben_PUMPE_Cisterna$:^on$"] and [?$SELF:cmd] ne "1" and [?$SELF:cmd] ne "5") \
(set $SELF manu on) \
DOELSEIF  (["^PozzoHauptOben_PUMPE_Cisterna$:^off$"] and [?$SELF:cmd] ne "2" and [?$SELF:cmd] ne "5") \
(set $SELF manu off) \
DOELSEIF ([05:30] and [?AnwesenheitHaupt:statStateDaypresent] eq "00:00:00" and [?PozzoHauptOben_PUMPE_Cisterna] eq "off") \
(set PozzoHauptOben_PUMPE_Cisterna on-for-timer 10) \
DOELSEIF ([17:30] and [?$SELF:cmd] eq "5") \
()
attr BeregnungDOIF_PumpeCisterna readingList manu
attr BeregnungDOIF_PumpeCisterna room System


Im Event Monitor stellt sich das so dar

2021-03-19 14:37:10 DOIF BeregnungDOIF_PumpeCisterna cmd_nr: 2
2021-03-19 14:37:10 DOIF BeregnungDOIF_PumpeCisterna cmd: 2
2021-03-19 14:37:10 DOIF BeregnungDOIF_PumpeCisterna cmd_event: BEREGNUNG_SCHALTER_Zitronen_12_7_MEQ0064131_14
2021-03-19 14:37:10 DOIF BeregnungDOIF_PumpeCisterna cmd_2
2021-03-19 14:37:10 HM485 BEREGNUNG_SCHALTER_Zitronen_12_7_MEQ0064131_14 set_on
2021-03-19 14:37:10 DOIF BeregnungDOIF_PumpeCisterna cmd_nr: 1
2021-03-19 14:37:10 DOIF BeregnungDOIF_PumpeCisterna cmd: 1
2021-03-19 14:37:10 DOIF BeregnungDOIF_PumpeCisterna cmd_event: BEREGNUNG_SCHALTER_Zitronen_12_7_MEQ0064131_14
2021-03-19 14:37:10 DOIF BeregnungDOIF_PumpeCisterna cmd_1
2021-03-19 14:37:10 HM485 BEREGNUNG_SCHALTER_Zitronen_12_7_MEQ0064131_14 working: off
2021-03-19 14:37:10 HM485 BEREGNUNG_SCHALTER_Zitronen_12_7_MEQ0064131_14 on
2021-03-19 14:37:10 DOIF BeregnungDOIF_PumpeCisterna manu: off
2021-03-19 14:37:10 DOIF BeregnungDOIF_PumpeCisterna cmd_nr: 4
2021-03-19 14:37:10 DOIF BeregnungDOIF_PumpeCisterna cmd: 4
2021-03-19 14:37:10 DOIF BeregnungDOIF_PumpeCisterna cmd_event: PozzoHauptOben_PUMPE_Cisterna
2021-03-19 14:37:10 DOIF BeregnungDOIF_PumpeCisterna cmd_4
2021-03-19 14:37:10 DOIF BeregnungDOIF_PumpeCisterna manu: on
2021-03-19 14:37:10 DOIF BeregnungDOIF_PumpeCisterna cmd_nr: 3
2021-03-19 14:37:10 DOIF BeregnungDOIF_PumpeCisterna cmd: 3
2021-03-19 14:37:10 DOIF BeregnungDOIF_PumpeCisterna cmd_event: PozzoHauptOben_PUMPE_Cisterna
2021-03-19 14:37:10 DOIF BeregnungDOIF_PumpeCisterna cmd_3


list vom DOIF
Internals:
   DEF        ([#"^BEREGNUNG_SCHALTER_":state:$_ eq "on"] ne "0" or [?$SELF:manu] eq "on")
(set PozzoHauptOben_PUMPE_Cisterna on)
DOELSEIF ([#"^BEREGNUNG_SCHALTER_":state:$_ eq "on"] eq "0")
(set PozzoHauptOben_PUMPE_Cisterna off)
DOELSEIF  (["^PozzoHauptOben_PUMPE_Cisterna$:^on$"] and [?$SELF:cmd] ne "1" and [?$SELF:cmd] ne "5")
(set $SELF manu on)
DOELSEIF  (["^PozzoHauptOben_PUMPE_Cisterna$:^off$"] and [?$SELF:cmd] ne "2" and [?$SELF:cmd] ne "5")
(set $SELF manu off)
DOELSEIF ([05:30] and [?AnwesenheitHaupt:statStateDaypresent] eq "00:00:00" and [?PozzoHauptOben_PUMPE_Cisterna] eq "off")
(set PozzoHauptOben_PUMPE_Cisterna on-for-timer 10)
DOELSEIF ([17:30] and [?$SELF:cmd] eq "5")
()
   FUUID      5c86875d-f33f-6bb4-4d74-e765a0dcecfc52bc
   MODEL      FHEM
   NAME       BeregnungDOIF_PumpeCisterna
   NOTIFYDEV  global,BEREGNUNG_SCHALTER_.*,PozzoHauptOben_PUMPE_Cisterna
   NR         801
   NTFY_ORDER 50-BeregnungDOIF_PumpeCisterna
   STATE      cmd_1
   TYPE       DOIF
   VERSION    23466 2021-01-03 17:14:46
   READINGS:
     2021-03-19 14:38:45   Device          PozzoHauptOben_PUMPE_Cisterna
     2021-03-19 14:38:45   cmd             1
     2021-03-19 14:38:45   cmd_event       BEREGNUNG_SCHALTER_Zitronen_12_7_MEQ0064131_14
     2021-03-19 14:38:45   cmd_nr          1
     2021-03-19 14:38:45   e_PozzoHauptOben_PUMPE_Cisterna_STATE on
     2021-03-19 14:37:10   manu            on
     2021-03-18 18:14:23   mode            enabled
     2021-03-19 14:38:45   state           cmd_1
     2021-03-19 05:30:00   timer_01_c05    20.03.2021 05:30:00
     2021-03-18 18:14:23   timer_02_c06    19.03.2021 17:30:00
     2021-03-18 18:52:03   wait_timer      no timer
   Regex:
     accu:
     cond:
       :
         0:
           "^BEREGNUNG_SCHALTER_" ^BEREGNUNG_SCHALTER_
         1:
           "^BEREGNUNG_SCHALTER_" ^BEREGNUNG_SCHALTER_
         2:
           "^PozzoHauptOben_PUMPE_Cisterna$:^on$" ^PozzoHauptOben_PUMPE_Cisterna$:^on$
         3:
           "^PozzoHauptOben_PUMPE_Cisterna$:^off$" ^PozzoHauptOben_PUMPE_Cisterna$:^off$
         4:
         5:
   attr:
     cmdState:
     wait:
     waitdel:
   condition:
     0          ::AggregateDoIf($hash,'#','^BEREGNUNG_SCHALTER_','state','$_ eq "on"') ne "0" or ::ReadingValDoIf($hash,'BeregnungDOIF_PumpeCisterna','manu') eq "on"
     1          ::AggregateDoIf($hash,'#','^BEREGNUNG_SCHALTER_','state','$_ eq "on"') eq "0"
     2          ::EventDoIf('^PozzoHauptOben_PUMPE_Cisterna$',$hash,'^on$',0) and ::ReadingValDoIf($hash,'BeregnungDOIF_PumpeCisterna','cmd') ne "1" and ::ReadingValDoIf($hash,'BeregnungDOIF_PumpeCisterna','cmd') ne "5"
     3          ::EventDoIf('^PozzoHauptOben_PUMPE_Cisterna$',$hash,'^off$',0) and ::ReadingValDoIf($hash,'BeregnungDOIF_PumpeCisterna','cmd') ne "2" and ::ReadingValDoIf($hash,'BeregnungDOIF_PumpeCisterna','cmd') ne "5"
     4          ::DOIF_time_once($hash,0,$wday) and ::ReadingValDoIf($hash,'AnwesenheitHaupt','statStateDaypresent') eq "00:00:00" and ::InternalDoIf($hash,'PozzoHauptOben_PUMPE_Cisterna','STATE') eq "off"
     5          ::DOIF_time_once($hash,1,$wday) and ::ReadingValDoIf($hash,'BeregnungDOIF_PumpeCisterna','cmd') eq "5"
   days:
   do:
     0:
       0          set PozzoHauptOben_PUMPE_Cisterna on
     1:
       0          set PozzoHauptOben_PUMPE_Cisterna off
     2:
       0          set BeregnungDOIF_PumpeCisterna manu on
     3:
       0          set BeregnungDOIF_PumpeCisterna manu off
     4:
       0          set PozzoHauptOben_PUMPE_Cisterna on-for-timer 10
     5:
       0         
     6:
   helper:
     DEVFILTER  ^global$|^BEREGNUNG_SCHALTER_|^PozzoHauptOben_PUMPE_Cisterna$
     NOTIFYDEV  global|BEREGNUNG_SCHALTER_.*|PozzoHauptOben_PUMPE_Cisterna
     event      on
     globalinit 1
     last_timer 2
     sleeptimer -1
     timerdev   BEREGNUNG_SCHALTER_Zitronen_12_7_MEQ0064131_14
     timerevent working: off,off
     triggerDev PozzoHauptOben_PUMPE_Cisterna
     timerevents:
       working: off
       off
     timereventsState:
       working: off
       state: off
     triggerEvents:
       on
       working: off
     triggerEventsState:
       state: on
       working: off
   internals:
     all         PozzoHauptOben_PUMPE_Cisterna:STATE
   interval:
   intervalfunc:
   localtime:
     0          1616214600
     1          1616171400
   readings:
   realtime:
     0          05:30:00
     1          17:30:00
   time:
     0          05:30:00
     1          17:30:00
   timeCond:
     0          4
     1          5
   timer:
     0          0
     1          0
   timers:
     4           0
     5           1
   trigger:
   triggertime:
     1616171400:
       localtime  1616171400
       hash:
     1616214600:
       localtime  1616214600
       hash:
   uiState:
   uiTable:
Attributes:
   devStateIcon disabled:general_aus@red:initialize initialize:general_an@yellow:disable initialized:general_an@yellow:disable cmd_1:general_an@green:disable cmd_2:general_an@yellow:disable cmd_3:general_an@green:disable cmd_4:general_an@yellow:disable cmd_5:general_an@blue:disable cmd_6:general_an@blue:disable
   group      Beregnung
   readingList manu
   room       System


ich verstehe nicht, was genau cmd_4 (mit Homematic Schaltern) ermöglicht, was dann wieder cmd_3 ermöglicht. Wie beschrieben läuft es mit BEREGNUNG_SCHALTER_ als Dummies ohne Probleme.

holle75

#7
Oh neee, alle Interpretationen von mir in den Beiträgen vorab waren nur ein Teil des Problems. PozzoHauptOben_PUMPE_Cisterna ist ja auch ein Homematic device. Da gibt es ja auch die Zwischenstati. Warum es früher lief und jetzt nicht mehr ??? .... wahrscheinlich Einbildung oder jetzt den speziellen Fall nie gehabt.

mmh, wie müßte die Syntax für PozzoHauptOben_PUMPE_Cisterna sein damit nur state on/off gefangen wird?

so
["^PozzoHauptOben_PUMPE_Cisterna$:^off$"]

nimmt er scheinbar auch das working: off mit.

Ich probiere es mal so

defmod BeregnungDOIF_PumpeCisterna DOIF ([#"^BEREGNUNG_SCHALTER_":state:$_ eq "on"] ne "0" or [?$SELF:manu] eq "on") \
(set PozzoHauptOben_PUMPE_Cisterna on) \
DOELSEIF ([#"^BEREGNUNG_SCHALTER_":state:$_ eq "on"] eq "0") \
(set PozzoHauptOben_PUMPE_Cisterna off) \
DOELSEIF  ([PozzoHauptOben_PUMPE_Cisterna:state] eq "on" and [?$SELF:cmd] ne "1" and [?$SELF:cmd] ne "5") \
(set $SELF manu on) \
DOELSEIF  ([PozzoHauptOben_PUMPE_Cisterna:state] eq "off" and [?$SELF:cmd] ne "2" and [?$SELF:cmd] ne "5") \
(set $SELF manu off) \
DOELSEIF ([05:30] and [?AnwesenheitHaupt:statStateDaypresent] eq "00:00:00" and [?PozzoHauptOben_PUMPE_Cisterna] eq "off") \
(set PozzoHauptOben_PUMPE_Cisterna on-for-timer 10) \
DOELSEIF ([17:30] and [?$SELF:cmd] eq "5") \
()


im state das set_on set_off sollte ignoriert werden und das working: on/off auch. Ob ich auf den event oder den state prüfe sollte hier keine Rolle spielen.

Sany

Moin,

du hast da sehr viele Vermutungen beschrieben, fhem und Computer machen ja eher logische Dinge. Und wenns nicht klappt, dann doch meistens weil man was falsches zum verarbeiten geliefert hat..... kennst du ja alles.
Ich kann nicht sagen, was sich bei Homematic genau geändert hat, weshalb das DOIF nun nicht mehr läuft, es gab aber vor einigen Wochen (weiß nicht mehr genau) doch diverse Umbauten.
Du vermutest, Dein DOIF wird von seltsamen Vorgängen der Homematic-devices "falsch" ausgeführt. Daher solltest Du da mal Schritt für Schritt dran gehen.
Mach mal den Event-Monitor auf und schreibe mit, was die verschiedenen Devices alles so von sich geben. Von der Zirkus_Oben Steckdose hast Du das ja in Auszügen schon gemacht. Mach es etwas ausführlicher: also den Schalter (was ist das übrigens genau für einer?) einschalten, eine Weile warten, ausschalten, Weile warten, on-for-timer senden, Weile warten etc. was da halt alles so sein kann (ein Weilchen warten nur, damit man bei den Ausgaben besser erkennen kann, was (zeitlich) zusammengehört) . Dein DOIF kannst Du ja solange auf disabled stellen, damit es nicht irgendwas auslöst.
Diese Ausgaben analysierst Du: welche Readings ändern sich wann und sind somit als Trigger nutzbar. Sind da noch andere Readings, die sich ändern, die Du aber gar nicht brauchst, dann mittels event-on-change-reading nur die durchlassen, die gebraucht werden (aber auch an die denken, die evtl. ganz woanders gebraucht werden).
Da Du im DOIF die Schalter aggregierst könntest Du mal ein test-DOIF schreiben und z.B. ein DOIF_reading anlegen mit der Aggregatsfunktion. Dann die Schalter mal ein/ausschalten um zu sehen, dass da auch das richtige rauskommt, also 0 für alles aus und x für beliebig viele an.
Uns abschliessend möchte ich Dich ermuntern, mal DOIF-Perl anzusehen. Du bist dort selbst verantwortlich den state des DOIF zu setzen, von alleine passiert das nicht. Und die bist sehr frei Readings und/oder Variablen zu nutzen, um irgendwelche Zustände zwischenzuspeichern und ggf. abzufragen. Außerdem kannst Du wunderbar die Bedingungen ineinander zu verschachteln, was im DOIF-fhem so nicht geht.

Aber zeig erst mal ein paar Event-monitor Auszüge der Schalter.

Zitatmmh, wie müßte die Syntax für PozzoHauptOben_PUMPE_Cisterna sein damit nur state on/off gefangen wird?
Im Eventmonitor die entsprechende Zeile vollständig markieren und dann [Create/Modify Device] klicken, dort dann DOIF auswählen. Ein OK brauchts nicht, da würde gleich ein neues Device angelegt, einfach die Zeile kopieren und dann den Vorgang abbrechen.

Viele Erfolg!
fhem als LXC auf Proxmox auf einem minix Z100 , weitere LXC mit ZigBee2MQTT, MariaDB und Grafana. Homematic, FS20, mySensors, MQTT2, Tasmota, Shelly, Z-Wave  ....

holle75

#9
Moinsen Sany und danke für deinen langen Beitrag.

Im Prinzip habe ich alle deine Vorschläge durch. Das Problem ist (wahrscheinlich) das working: off wenn man homematic switches anschaltet.
Wie geschrieben funktioniert ein Testaufbau (bisher in allen hier zelebrierten Varianten) mit Dummies reibungslos.

Das Schalten eines Homematic Switches gibt dir

Zitat von: holle75 am 17 März 2021, 21:37:03
... aus dieser Homematic Geschichte soll man schlau werden. Ich habe mal einen Homematic Schalter bemüht, der nicht wirklich Mechanik in Aktion bringt:

ist on, man schaltet aus
2021-03-17 21:23:57 HM485 ZirkusOben_STECKDOSE_Aussen set_off
2021-03-17 21:23:57 HM485 ZirkusOben_STECKDOSE_Aussen off
2021-03-17 21:23:57 HM485 ZirkusOben_STECKDOSE_Aussen working: off


ist off, man schaltet an

2021-03-17 21:24:11 HM485 ZirkusOben_STECKDOSE_Aussen set_on
2021-03-17 21:24:11 HM485 ZirkusOben_STECKDOSE_Aussen on
2021-03-17 21:24:11 HM485 ZirkusOben_STECKDOSE_Aussen working: off



im Event-Monitor

Das mit dem Markieren im Event-Monitor ergibt fast die selbe syntax wie die von mir anfänglich genutzte (aber hey, nice, was gelernt. Danke!)
([PozzoHauptOben_PUMPE_Cisterna:"^on$"])

das hier fängt meines Erachtens alle Events von PozzoHauptOben_PUMPE_Cisterna mit on drin, also auch working: on oder dann im anderen Zweig das off, welches mir das DOIF durcheinanderbringt.

aber ja, sie ist leicht anders, werde ich probieren.

Das hier  ist ein (fehlerhafter) Durchlauf

Zitat von: holle75 am 19 März 2021, 14:49:01

Im Event Monitor stellt sich das so dar

2021-03-19 14:37:10 DOIF BeregnungDOIF_PumpeCisterna cmd_nr: 2
2021-03-19 14:37:10 DOIF BeregnungDOIF_PumpeCisterna cmd: 2
2021-03-19 14:37:10 DOIF BeregnungDOIF_PumpeCisterna cmd_event: BEREGNUNG_SCHALTER_Zitronen_12_7_MEQ0064131_14
2021-03-19 14:37:10 DOIF BeregnungDOIF_PumpeCisterna cmd_2
2021-03-19 14:37:10 HM485 BEREGNUNG_SCHALTER_Zitronen_12_7_MEQ0064131_14 set_on
2021-03-19 14:37:10 DOIF BeregnungDOIF_PumpeCisterna cmd_nr: 1
2021-03-19 14:37:10 DOIF BeregnungDOIF_PumpeCisterna cmd: 1
2021-03-19 14:37:10 DOIF BeregnungDOIF_PumpeCisterna cmd_event: BEREGNUNG_SCHALTER_Zitronen_12_7_MEQ0064131_14
2021-03-19 14:37:10 DOIF BeregnungDOIF_PumpeCisterna cmd_1
2021-03-19 14:37:10 HM485 BEREGNUNG_SCHALTER_Zitronen_12_7_MEQ0064131_14 working: off
2021-03-19 14:37:10 HM485 BEREGNUNG_SCHALTER_Zitronen_12_7_MEQ0064131_14 on
2021-03-19 14:37:10 DOIF BeregnungDOIF_PumpeCisterna manu: off
2021-03-19 14:37:10 DOIF BeregnungDOIF_PumpeCisterna cmd_nr: 4
2021-03-19 14:37:10 DOIF BeregnungDOIF_PumpeCisterna cmd: 4
2021-03-19 14:37:10 DOIF BeregnungDOIF_PumpeCisterna cmd_event: PozzoHauptOben_PUMPE_Cisterna
2021-03-19 14:37:10 DOIF BeregnungDOIF_PumpeCisterna cmd_4
2021-03-19 14:37:10 DOIF BeregnungDOIF_PumpeCisterna manu: on
2021-03-19 14:37:10 DOIF BeregnungDOIF_PumpeCisterna cmd_nr: 3
2021-03-19 14:37:10 DOIF BeregnungDOIF_PumpeCisterna cmd: 3
2021-03-19 14:37:10 DOIF BeregnungDOIF_PumpeCisterna cmd_event: PozzoHauptOben_PUMPE_Cisterna
2021-03-19 14:37:10 DOIF BeregnungDOIF_PumpeCisterna cmd_3




Glaube woher meine Stochern im Trüben kam ist, dass ich vergaß, dass der PozzoHauptOben_PUMPE_Cisterna Switch auch Homematic ist und nur für die aggregierten BEREGNUNG_SCHALTER_ den Fehler gesucht habe. Da es in einem sehr unüblichen Fall (die Pumpe ist aus, was sie selten ist, und die Beregnung läuft an, was sie normalerweise tut wenn die Pumpe sowieso an ist) jetzt die Probleme hat, kann es sein, dass es noch nie funktioniert hat und ich es nur nicht bemerkt habe.

Perl-DOIF ist sicherlich mächtig, aber wie du siehst, fällt mir schon der Standard schwer, ohne mich noch zusätzlich mit der Perl-Syntax rumzuschlagen  ;)

Die eigentliche Frage bleibt:

Zitat von: holle75 am 20 März 2021, 13:19:02
mmh, wie müßte die Syntax für PozzoHauptOben_PUMPE_Cisterna sein damit nur state on/off gefangen wird?
(dies für die Variante wo nach Events getriggert wird)

Danke und Grüße
H.

Damian

mit:

([PozzoHauptOben_PUMPE_Cisterna:"^on$"])

triggern Events, die nur "on" beinhalten.

Der Teil in Anführungszeichen wird gegen alles was hinter dem Device kommt geprüft.

Also würde "set_on" nicht triggern und auch nicht "working: on"

Unabhängig davon befinden sich alle drei Angaben offenbar innerhalb eines Event-Blocks (gleiche Uhrzeit), damit wird das DOIF-Modul nur einmal geweckt und nicht drei mal.

Zum Testen kann man sich immer Mini-DOIFs bauen, die nur eine Triggeranweisung haben. Damit kann man schnell erkennen, wie oft und wann etwas triggert oder eben nicht triggert.

Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Sany

aus der cref:
(["^FS$:^temp$"] triggert auf Devices, die genau "FS" heißen und im Event genau "temp" vorkommt

ich finde den Event-Teil unglücklich beschrieben, denn ich denke der gesamte Event muss genau "temp" heißen.
Im Eventmonitor siehst Du z.B.
2021-03-17 21:23:57 HM485 ZirkusOben_STECKDOSE_Aussen on
2021-03-17 21:23:57 HM485 ZirkusOben_STECKDOSE_Aussen working: on


nach der o.g. Regel würde ich sagen:
["^ZirkusOben_STECKDOSE_Aussen$:^on$"] kann eigentlich nur auf "state" triggern, denn working kommt ja im Event nicht vor.
Ich habe ein Homematic-Schaltsteckdose, dort ist event-on-change-reading auf "state" gesetzt. Die liefert:
2021-03-19_23:46:47 Steckdose_StehlampeTV set_off noArg
2021-03-19_23:46:47 Steckdose_StehlampeTV off
2021-03-20_17:24:03 Steckdose_StehlampeTV set_on noArg
2021-03-20_17:24:03 Steckdose_StehlampeTV on

Ein Trigger, wie oben beschrieben, arbeitet korrekt. Ich habe allerdings in keinem einzigen Homematic bzw. in meinem gesamten System kein "working".
Nochmal die Frage: was ist das für ein Schalter?
und setz bei den Schaltern mal event-on-change-reading state und beobachte dann.
Wie schon beschrieben, die event-on- Attribute können auch Dinge ausblenden, die Du woanders brauchst.

Sehe gerade, Damian hat es auch noch mal eindeutig geschrieben, was ich eben getestet habe.

Gruß
fhem als LXC auf Proxmox auf einem minix Z100 , weitere LXC mit ZigBee2MQTT, MariaDB und Grafana. Homematic, FS20, mySensors, MQTT2, Tasmota, Shelly, Z-Wave  ....

holle75

#12
Danke Damian, allerdings bin ich dann hiermit komplett lost.

Wenn es als Testdoif mit Dummies funktioniert und die Event-Syntax den einzigen Unterschied zu Homematic Schaltern, das "working: on/off" und "set_on/off" richtigerweise ignoriert ....

Ich probiere morgen (die Beregnung läuft nur einmal am Tag und ich muß es ja mit den echten Schaltern probieren)  im Hauptsystem die Variante mit der Abfrage nach state und nicht event.

Zitat von: Damian am 20 März 2021, 18:54:50
Unabhängig davon befinden sich alle drei Angaben offenbar innerhalb eines Event-Blocks (gleiche Uhrzeit), damit wird das DOIF-Modul nur einmal geweckt und nicht drei mal.

das ist ja das Problem. Irgend ein (Zwischen-) Event mit "off" von BeregnungDOIF_PumpeCisterna triggert cmd_4 was wiederum cmd_3 möglich macht, obwohl das DOIF eigentlich in cmd_1 stehen sollte wenn ein oder mehrere BEREGNUNG_SCHALTER_ on sind

Das bei der "alten" Variante mit Trigger per event:
defmod BeregnungDOIF_PumpeCisterna DOIF ([#"^BEREGNUNG_SCHALTER_":state:$_ eq "on"] ne "0" or [?$SELF:manu] eq "on") \
(set PozzoHauptOben_PUMPE_Cisterna on) \
DOELSEIF ([#"^BEREGNUNG_SCHALTER_":state:$_ eq "on"] eq "0") \
(set PozzoHauptOben_PUMPE_Cisterna off) \
DOELSEIF  (["^PozzoHauptOben_PUMPE_Cisterna$:^on$"] and [?$SELF:cmd] ne "1" and [?$SELF:cmd] ne "5") \
(set $SELF manu on) \
DOELSEIF  (["^PozzoHauptOben_PUMPE_Cisterna$:^off$"] and [?$SELF:cmd] ne "2" and [?$SELF:cmd] ne "5") \
(set $SELF manu off) \
DOELSEIF ([05:30] and [?AnwesenheitHaupt:statStateDaypresent] eq "00:00:00" and [?PozzoHauptOben_PUMPE_Cisterna] eq "off") \
(set PozzoHauptOben_PUMPE_Cisterna on-for-timer 10) \
DOELSEIF ([17:30] and [?$SELF:cmd] eq "5") \
()
attr BeregnungDOIF_PumpeCisterna readingList manu
attr BeregnungDOIF_PumpeCisterna room System


und ich such den Übeltäter der für BeregnungDOIF_PumpeCisterna das "off" generiert. Da fällt mir nur das working: off wenn man einen Homematic Schalter anschaltet auf. Dieses off gibt es beim Dummy Testaufbau nicht und es funktioniert.


holle75

Sany, sorry das hat sich gerade überschnitten.

Das sind HM-Wired 12-7 Schalter.

Die Idee mit event-on-change-reading alles außer state zu filtern ist gut. Aber sollte, wenn das RegEx für state richtig ist irrelevant sein?


holle75

... vielleicht sollte ich mal Thorsten der das HM-Wired Modul geschrieben hat fragen, was das working: xxx ist, wenn Sany das bei seinen HM Devices nicht hat.
Bei mir ist alles was HM ist wired, ich kenn es nur so.