[Gelöst] Erweitertes Treppenhauslicht

Begonnen von FFHEM, 05 Dezember 2021, 11:19:45

Vorheriges Thema - Nächstes Thema

FFHEM

Guten Tag,
ich möchte meine Flurlichtschaltung für eine Lampe verändern, aber es gelingt mir nicht ganz bis zum letzten Punkt. Da ich jetzt schon über 3 Stunden experimentiere: kann mir jemand einen Tipp geben?

Ausgangslage:
1. Ein HM-Bewegungsmelder "PIRI2". Dieser liefert "motion" und nach 60 s "noMotion"
2. 1 Tageshelligkeitsdummy Werte: 0 (dunkel) 25 (dämmrig), 50 (fast hell), 100 hell. 0 und 25 sind die dunklen Werte.
Gewünscht ist:
1.  Morgens von 06:00 Uhr bis 10:00 Uhr soll, nur, wenn der PIR Bewegung (einmal reicht aus) erkannt hat, das Licht solange anbleiben, bis 10:00 Uhr erreicht ist oder die Helligkeit > 25 ist, danach Lampe aus. Wenn keine Bewegung in der Zeit erkannt wurde, bleibt das Licht die ganze Zeit aus.
2. Von 12:00 - 22:00 soll das Licht unabhängig vom PIR angehen, sobald die Helligkeit <= 25 ist. Um 22:00 Uhr soll die Lampe aus gehen.
3. Zu allen anderen Zeiten soll das Licht bei Bewegung für 5 Minuten angehen, wenn die Helligkeit <= 25 ist.

Das Problem mit diesem DOIF ist, dass er in den "anderen Zeiten" (Punkt 3 oben, cmd_3) nicht mehr automatisch ausgeht, wenn eine Bewegung entdeckt wurde.

EDIT: Zu beachten ist, dass die TestHelligkeit sich natürlich ändern kann, also wenn da steht <= 25, kann es sein, dass sie zwischen 0 und 25 wechselt, was zu keinem Statuswechsel führen darf.

(["PIRI2:^motion$"] and [TestHelligkeit] <= 25 and [06:00-10:00])
   (set TestST2:FILTER=STATE!=on on)
DOELSEIF ([12:00-22:00] and [TestHelligkeit] <= 25 )
   (set TestST2:FILTER=STATE!=on on)
DOELSEIF ([PIRI2:motion] and [TestHelligkeit] <= 25)   
   (set TestST2:FILTER=STATE!=on on)
DOELSE
   (set TestST2:FILTER=STATE!=off off)   ### wird durch wait verzögert



Internals:
   DEF        (["PIRI2:^motion$"] and [TestHelligkeit] <= 25 and [06:00-10:00])
   (set TestST2:FILTER=STATE!=on on)
DOELSEIF ([12:00-22:00] and [TestHelligkeit] <= 25 )
   (set TestST2:FILTER=STATE!=on on)
DOELSEIF ([PIRI2:motion] and [TestHelligkeit] <= 25)   
   (set TestST2:FILTER=STATE!=on on)
DOELSE
   (set TestST2:FILTER=STATE!=off off)   ### wird durch wait verzögert

   DOIFDEV    ^global$|^TestHelligkeit$|^PIRI2$|PIRI2
   FUUID      5c444ff2-f33f-26cd-d07c-934b5ef2ccffc82c
   MODEL      FHEM
   NAME       di_Licht_Flur
   NR         1136
   NTFY_ORDER 50-di_Licht_Flur
   STATE      wait_timer
   TYPE       DOIF
   VERSION    24905 2021-09-01 18:35:54
   READINGS:
     2021-12-05 10:40:47   Device          TestHelligkeit
     2021-12-05 10:40:45   cmd             3
     2021-12-05 10:40:45   cmd_event       TestHelligkeit
     2021-12-05 10:40:45   cmd_nr          3
     2021-12-05 10:40:47   e_TestHelligkeit_STATE 0
     2021-12-05 10:40:39   mode            enabled
     2021-12-05 10:40:45   state           cmd_3
     2021-12-05 10:40:39   timer_01_c01    06.12.2021 06:00:00
     2021-12-05 10:40:39   timer_02_c01    06.12.2021 10:00:00
     2021-12-05 10:40:39   timer_03_c02    05.12.2021 12:00:00
     2021-12-05 10:40:39   timer_04_c02    05.12.2021 22:00:00
   Regex:
     accu:
     collect:
     cond:
       :
         0:
           "PIRI2:^motion$" PIRI2:^motion$
       PIRI2:
         2:
           motion     ^PIRI2$:^motion:
       TestHelligkeit:
         0:
           &STATE     ^TestHelligkeit$
         1:
           &STATE     ^TestHelligkeit$
         2:
           &STATE     ^TestHelligkeit$
   attr:
     cmdState:
       0:
         ein
       1:
          aus
     wait:
       0:
         0
       1:
         0
       2:
         0
       3:
         60
     waitdel:
   condition:
     0          ::EventDoIf('PIRI2',$hash,'^motion$',0) and ::InternalDoIf($hash,'TestHelligkeit','STATE') <= 25 and ::DOIF_time($hash,0,1,$wday,$hms)
     1          ::DOIF_time($hash,2,3,$wday,$hms) and ::InternalDoIf($hash,'TestHelligkeit','STATE') <= 25
     2          ::ReadingValDoIf($hash,'PIRI2','motion') and ::InternalDoIf($hash,'TestHelligkeit','STATE') <= 25
   days:
   do:
     0:
       0          set TestST2:FILTER=STATE!=on on
     1:
       0          set TestST2:FILTER=STATE!=on on
     2:
       0          set TestST2:FILTER=STATE!=on on
     3:
       0          set TestST2:FILTER=STATE!=off off
   helper:
     DEVFILTER  ^global$|^TestHelligkeit$|^PIRI2$|PIRI2
     NOTIFYDEV  global|TestHelligkeit|PIRI2|.*PIRI2.*
     event      0
     globalinit 1
     last_timer 4
     sleeptimer -1
     timerdev   TestHelligkeit
     timerevent 0
     triggerDev TestHelligkeit
     timerevents:
       0
     timereventsState:
       state: 0
     triggerEvents:
       0
     triggerEventsState:
       state: 0
   internals:
     all         TestHelligkeit:STATE
   interval:
     0          -1
     1          0
     2          -1
     3          2
   intervalfunc:
   localtime:
     0          1638766800
     1          1638781200
     2          1638702000
     3          1638738000
   readings:
     all         PIRI2:motion
   realtime:
     0          06:00:00
     1          10:00:00
     2          12:00:00
     3          22:00:00
   time:
     0          06:00:00
     1          10:00:00
     2          12:00:00
     3          22:00:00
   timeCond:
     0          0
     1          0
     2          1
     3          1
   timer:
     0          0
     1          0
     2          0
     3          0
   timers:
     0           0  1
     1           2  3
   trigger:
   triggertime:
     1638702000:
       localtime  1638702000
       hash:
     1638738000:
       localtime  1638738000
       hash:
     1638766800:
       localtime  1638766800
       hash:
     1638781200:
       localtime  1638781200
       hash:
   uiState:
   uiTable:
Attributes:
   cmdState   ein | aus
   room       DOIF,Test
   stateFormat wait_timer
   wait       0:0:0:60


Testhelligkeit (Dummy):
Internals:
   FUUID      61ab2045-f33f-26cd-7707-c438f5656f4a4a84
   NAME       TestHelligkeit
   NR         1324
   STATE      0
   TYPE       dummy
   READINGS:
     2021-12-05 10:40:47   state           0
Attributes:
   room       Test
   setList    state:0,25,50,100
   webCmd     state
Raspberry Pi 4B, Homematic, Sonoff, Shelly, Worx, Arduino, ESP8266

Otto123

#1
Hi,

weil dieser Ausdruck immer wahr ist -> [PIRI2:motion] ;)

Tipp: es macht mMn keinen Sinn für gleiche Ausführungsteile unterschiedliche DOIF Zweige zu schreiben! Fass alle diese Bedingungen in einem Ausdruck zusammen.

( (["PIRI2:^motion$"] and [TestHelligkeit] <= 25 and [06:00-10:00]) or ([12:00-22:00] and [TestHelligkeit] <= 25 ) or ([PIRI2:motion] eq 'on' and [TestHelligkeit] <= 25) )

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

FFHEM

Hallo Otto,
bist wieder der Retter in der Not  ;D ;D

Zu meiner Ehrenrettung: die mehrfachen Ausführungsteile waren zum Schluss nur noch eine Notlösung.
Mein Problem war, dass ich mich nicht getraut hatte, in einer Bedingung ein und den gleichen Trigger in unterschiedlicher Art und Weise zu verwenden.
Nämlich "PIRI2:^motion$"] und [PIRI2:motion] =~ "on".
Ich musste bei mir nur noch =~ "on" schreiben, da bei mir das
e_PIRI2_motion on (to VCCU) noch mit (to VCCU) verziert war.

Vielen Dank!
Gruß,
Friedhelm
Raspberry Pi 4B, Homematic, Sonoff, Shelly, Worx, Arduino, ESP8266

Otto123

Hallo Friedhelm,

Du liegst glaube ich falsch das hier ist der Event: ["PIRI2:^motion$"]
das hier ist die Abfrage eines Readings [PIRI2:motion]
ich nahm vorhin an, das Reading wechselt von off nach on, aber Du hast Recht. Bei genauer Betrachtung, sind die Readings des motion Sensors inkonsistent, aber da können wir beide nichts dafür ;)

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

FFHEM

Hallo Otto,
ich hab mich leider zu früh gefreut. Es ist doch ein bisschen komplizierter:
Heute morgen (ca. 08:00 Uhr) ging das Licht zwar bei Bewegung an, aber nach der wait-Time wieder aus.
Zwischen 06:00 und 12:00 soll das Licht aber durch eine einzige Bewegung angehen und anbleiben, bis die Helligkeit nicht mehr 0 oder 25, sondern >= 50 oder es nach 12:00 Uhr ist.

M. M. nach wird durch die Bedingung:
([PIRI2:motion] =~ 'on' and [TestHelligkeit] <= 25)
das Licht nach 60 s (PIRI2-Zeit, dann 'noMotion') -> DOELSE-Zweig + 10 s (wait-Parameter) wieder ausgeschaltet, da ein 'off' kommt  -> Lampe aus.

Wie kann ich die Zeile formulieren?

Hier der aktuelle Stand:
( (["PIRI2:^motion$"] and [TestHelligkeit] <= 25 and [06:00-12:00])
or
([13:00-22:00] and [TestHelligkeit] <= 25 )
or
([PIRI2:motion] =~ 'on' and [TestHelligkeit] <= 25) )

  (set TestST2:FILTER=STATE!=on on)
   
DOELSE
   (set TestST2:FILTER=STATE!=off off)   ### wird durch wait verzögert


Und in Gänze:
Internals:
   CFGFN     
   DEF        ( (["PIRI2:^motion$"] and [TestHelligkeit] <= 25 and [06:00-12:00])
or
([13:00-22:00] and [TestHelligkeit] <= 25 )
or
([PIRI2:motion] =~ 'on' and [TestHelligkeit] <= 25) )

  (set TestST2:FILTER=STATE!=on on)
   
DOELSE
   (set TestST2:FILTER=STATE!=off off)   ### wird durch wait verzögert
   DOIFDEV    ^global$|^PIRI2$|^TestHelligkeit$|PIRI2
   FUUID      61addcb9-f33f-26cd-1202-bfbb63b12bfb00a9
   MODEL      FHEM
   NAME       di_Licht_FlurTEST
   NR         46482
   NTFY_ORDER 50-di_Licht_FlurTEST
   STATE       aus
   TYPE       DOIF
   VERSION    24905 2021-09-01 18:35:54
   READINGS:
     2021-12-06 11:24:54   Device          PIRI2
     2021-12-06 11:25:04   cmd             2
     2021-12-06 11:25:04   cmd_event       PIRI2
     2021-12-06 11:25:04   cmd_nr          2
     2021-12-06 11:24:54   e_PIRI2_motion  off
     2021-12-06 11:23:41   mode            enabled
     2021-12-06 11:25:04   state            aus
     2021-12-06 11:23:42   timer_01_c01    07.12.2021 06:00:00
     2021-12-06 11:23:42   timer_02_c01    06.12.2021 12:00:00
     2021-12-06 11:23:42   timer_03_c01    06.12.2021 13:00:00
     2021-12-06 11:23:42   timer_04_c01    06.12.2021 22:00:00
     2021-12-06 11:25:04   wait_timer      no timer
   Regex:
     accu:
     collect:
     cond:
       :
         0:
           "PIRI2:^motion$" PIRI2:^motion$
       PIRI2:
         0:
           motion     ^PIRI2$:^motion:
       TestHelligkeit:
         0:
           &STATE     ^TestHelligkeit$
   attr:
     cmdState:
       0:
         ein
       1:
          aus
     wait:
       0:
         0
       1:
         10
     waitdel:
   condition:
     0           (::EventDoIf('PIRI2',$hash,'^motion$',0) and ::InternalDoIf($hash,'TestHelligkeit','STATE') <= 25 and ::DOIF_time($hash,0,1,$wday,$hms)) or (::DOIF_time($hash,2,3,$wday,$hms) and ::InternalDoIf($hash,'TestHelligkeit','STATE') <= 25 ) or (::ReadingValDoIf($hash,'PIRI2','motion') =~ 'on' and ::InternalDoIf($hash,'TestHelligkeit','STATE') <= 25)
   days:
   do:
     0:
       0          set TestST2:FILTER=STATE!=on on
     1:
       0          set TestST2:FILTER=STATE!=off off
   helper:
     DEVFILTER  ^global$|^PIRI2$|^TestHelligkeit$|PIRI2
     NOTIFYDEV  global|PIRI2|TestHelligkeit|.*PIRI2.*
     event      motion: off,motionDuration: 62,noMotion
     globalinit 1
     last_timer 4
     sleepdevice PIRI2
     sleepsubtimer -1
     sleeptimer -1
     timerdev   PIRI2
     timerevent motion: off,motionDuration: 62,noMotion
     triggerDev PIRI2
     timerevents:
       motion: off
       motionDuration: 62
       noMotion
     timereventsState:
       motion: off
       motionDuration: 62
       state: noMotion
     triggerEvents:
       motion: off
       motionDuration: 62
       noMotion
     triggerEventsState:
       motion: off
       motionDuration: 62
       state: noMotion
   internals:
     all         TestHelligkeit:STATE
   interval:
     0          -1
     1          0
     2          -1
     3          2
   intervalfunc:
   localtime:
     0          1638853200
     1          1638788400
     2          1638792000
     3          1638824400
   readings:
     all         PIRI2:motion
   realtime:
     0          06:00:00
     1          12:00:00
     2          13:00:00
     3          22:00:00
   time:
     0          06:00:00
     1          12:00:00
     2          13:00:00
     3          22:00: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:
     1638788400:
       localtime  1638788400
       hash:
     1638792000:
       localtime  1638792000
       hash:
     1638824400:
       localtime  1638824400
       hash:
     1638853200:
       localtime  1638853200
       hash:
   uiState:
   uiTable:
Attributes:
   cmdState   ein | aus
   room       Test
   wait       0:10
Raspberry Pi 4B, Homematic, Sonoff, Shelly, Worx, Arduino, ESP8266

Damian

Das Event "motion on (to VCCU)", auf das du triggern willst,

kannst du so angeben:

[PIRI2:"^motion on"] and ...

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

FFHEM

Hallo Damian,
das funktioniert auch nicht, dann geht die Lampe morgens bei Bewegung an, aber bereits nach gut 10 s (wait) wieder aus. cmd_1, dann sofort cmd_2.

1.  Morgens (von 06:00 Uhr bis 12:00 Uhr) soll, nur, wenn der PIR-Melder Bewegung (einmal reicht aus) erkannt hat, das Licht solange anbleiben, bis 12:00 Uhr erreicht ist oder die Helligkeit > 25 ist, danach Lampe aus. Wenn keine Bewegung in der Zeit erkannt wurde, bleibt das Licht die ganze Zeit aus. Einmal Bewegung -> Lampe bleibt an!
2. Von 12:00 - 22:00 soll das Licht unabhängig vom PIR angehen, sobald die Helligkeit <= 25 ist. Um 22:00 Uhr soll die Lampe aus gehen.
3. Zu allen anderen Zeiten - also i. d. R. nachts - soll das Licht bei Bewegung für 5 Minuten angehen, wenn die Helligkeit <= 25 ist.

Der Fall 3. ist hier der schwierige für mich, der "passt" nicht in das DOIF, da er die anderen Bedingung stört. Evtl. dafür ein 2. DOIF?

Vielen Dank!

Raspberry Pi 4B, Homematic, Sonoff, Shelly, Worx, Arduino, ESP8266

Damian

Zitat von: FFHEM am 06 Dezember 2021, 17:30:06
Hallo Damian,
das funktioniert auch nicht, dann geht die Lampe morgens bei Bewegung an, aber bereits nach gut 10 s (wait) wieder aus. cmd_1, dann sofort cmd_2.

1.  Morgens (von 06:00 Uhr bis 12:00 Uhr) soll, nur, wenn der PIR-Melder Bewegung (einmal reicht aus) erkannt hat, das Licht solange anbleiben, bis 12:00 Uhr erreicht ist oder die Helligkeit > 25 ist, danach Lampe aus. Wenn keine Bewegung in der Zeit erkannt wurde, bleibt das Licht die ganze Zeit aus. Einmal Bewegung -> Lampe bleibt an!
2. Von 12:00 - 22:00 soll das Licht unabhängig vom PIR angehen, sobald die Helligkeit <= 25 ist. Um 22:00 Uhr soll die Lampe aus gehen.
3. Zu allen anderen Zeiten - also i. d. R. nachts - soll das Licht bei Bewegung für 5 Minuten angehen, wenn die Helligkeit <= 25 ist.

Der Fall 3. ist hier der schwierige für mich, der "passt" nicht in das DOIF, da er die anderen Bedingung stört. Evtl. dafür ein 2. DOIF?

Vielen Dank!

Dann brauchst du für den 1. Fall ein eignes DOIF für einmal Bewegung zwischen 6 und 12 Uhr.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

FFHEM

Zitat von: Damian am 06 Dezember 2021, 18:38:01
Dann brauchst du für den 1. Fall ein eignes DOIF für einmal Bewegung zwischen 6 und 12 Uhr.
Hallo Damian,
Danke für Deine Einschätzung!
Gruß,
Friedhelm
Raspberry Pi 4B, Homematic, Sonoff, Shelly, Worx, Arduino, ESP8266

xenos1984

Ich würde das ganze mit einem DOIF mit zwei Zweigen im Perl-Modus lösen. Mir ist nicht klar, wann die Lampe morgens ausgehen soll (zuerst hieß es 10:00, dann 12:00), daher die Angaben in Klammern. Logisch sähe das so aus:

Zweig 1 löst aus, wenn entweder 1. zwischen 22:00 und 10:00 (oder 12:00?) der Bewegungsmelder auslöst und Helligkeit <= 25 ist; 2. zwischen 12:00 und 22:00, wenn die Helligkeit <= 25 ist. Dieser Zweig schaltet die Lampe ein. Wenn es zwischen 22:00 und 6:00 ist, setzt er einen 5-Minuten-Timer mit set_Exec, um die Lampe auszuschalten.

Zweig 2 löst aus, wenn entweder 1. die Helligkeit 25 überschreitet, 2. es 10:00 (oder 12:00?) ist. Dieser Zweig schaltet die Lampe aus.

Damian

Zitat von: xenos1984 am 06 Dezember 2021, 19:10:39
Ich würde das ganze mit einem DOIF mit zwei Zweigen im Perl-Modus lösen. Mir ist nicht klar, wann die Lampe morgens ausgehen soll (zuerst hieß es 10:00, dann 12:00), daher die Angaben in Klammern. Logisch sähe das so aus:

Zweig 1 löst aus, wenn entweder 1. zwischen 22:00 und 10:00 (oder 12:00?) der Bewegungsmelder auslöst und Helligkeit <= 25 ist; 2. zwischen 12:00 und 22:00, wenn die Helligkeit <= 25 ist. Dieser Zweig schaltet die Lampe ein. Wenn es zwischen 22:00 und 6:00 ist, setzt er einen 5-Minuten-Timer mit set_Exec, um die Lampe auszuschalten.

Zweig 2 löst aus, wenn entweder 1. die Helligkeit 25 überschreitet, 2. es 10:00 (oder 12:00?) ist. Dieser Zweig schaltet die Lampe aus.

Beim DOIF-Perl muss man sich wohl drum kümmern, dein Einschaltbefehl nicht zu wiederholen, gerade dann, wenn man ständig vom Helligkeitssensor getriggert wird.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

xenos1984

Zitat von: Damian am 06 Dezember 2021, 19:15:07
Beim DOIF-Perl muss man sich wohl drum kümmern, dein Einschaltbefehl nicht zu wiederholen, gerade dann, wenn man ständig vom Helligkeitssensor getriggert wird.

Das stimmt natürlich. Ich würde es wie in diesem Beispiel machen und in der sub zusätzlich prüfen, ob die Lampe schon im gewünschten Zustand ist.

Im DOIF-Modus sollte es doch ansonsten auch gehen... Nur die Bedingung, nach 5 Minuten auszuschalten, müsste man geschickt einbauen.

FFHEM

#12
Zitat von: xenos1984 am 06 Dezember 2021, 19:10:39
Ich würde das ganze mit einem DOIF mit zwei Zweigen im Perl-Modus lösen. Mir ist nicht klar, wann die Lampe morgens ausgehen soll (zuerst hieß es 10:00, dann 12:00), daher die Angaben in Klammern. Logisch sähe das so aus:

Zweig 1 löst aus, wenn entweder 1. zwischen 22:00 und 10:00 (oder 12:00?) der Bewegungsmelder auslöst und Helligkeit <= 25 ist; 2. zwischen 12:00 und 22:00, wenn die Helligkeit <= 25 ist. Dieser Zweig schaltet die Lampe ein. Wenn es zwischen 22:00 und 6:00 ist, setzt er einen 5-Minuten-Timer mit set_Exec, um die Lampe auszuschalten.

Zweig 2 löst aus, wenn entweder 1. die Helligkeit 25 überschreitet, 2. es 10:00 (oder 12:00?) ist. Dieser Zweig schaltet die Lampe aus.
Hallo xenos1984, danke für die Idee! Habe das jetzt mal realisiert, Test folgt, aber der Kurztest war schon vielversprechend.
Einfach nach Deiner Anleitung runterprogrammiert (die Zeiten 10:00 bzw. 12:00 waren nebensächlich, Testdaten).
Werde berichten!

So läuft es zum Test:
EDIT:  Der echte PIR-Melder, keine TestHelligkeit, "Helligkeit" zusammengefasst, Zeiten und Kommentare
{ ### Einschalten
  if
  ([Helligkeit] <= 25 and
     ( (["PIRI1:^motion$"] and [[Rolladen_Flur_runter]-09:30]) or
         ([12:00-[Rolladen_Flur_runter]]))
  )
  {
fhem_set ("ST2:FILTER=STATE!=on on");
     #### Nachts nach Zeit ausschalten
if ([[Rolladen_Flur_runter]-06:00])
{set_Exec("off_timer",300,'fhem_set("ST2 off")');}
  }
  ### Ausschalten
  if ([Helligkeit] > 25 or [09:30])
  {
  fhem_set ("ST2:FILTER=STATE!=off off");
  }
}
Raspberry Pi 4B, Homematic, Sonoff, Shelly, Worx, Arduino, ESP8266

FFHEM

Nach einem Tag und einer Nacht kann ich sagen: Die oben angegebene Lösung funktioniert bestens!
Deshalb vielen Dank an Otto, Damian und xenos1984!

Gruß,
Friedhelm
Raspberry Pi 4B, Homematic, Sonoff, Shelly, Worx, Arduino, ESP8266