Hauptmenü

Lauflicht mit FHEM

Begonnen von Dracolein, 02 September 2020, 08:47:09

Vorheriges Thema - Nächstes Thema

Dracolein

Hallo zusammen,

ich habe eine 4-flutige Esstischlampe, ausgestattet mit 4 Tradfri Ikea Birnchen, die jeweils als eigenes Device in FHEM integriert sind und seit Januar 2020 ihren Dienst als Gruppenverband zuverlässig verrichten.

Nun möchte ich zum Spaß, um Frau & Kinder zu erschrecken, gern diese 4 Devices nutzen, um ein Lauflicht mit FHEM zu realisieren. Damit meine ich, dass ich z.B. auf einen virtuellen Taster drücke, und dann Birne 1 von 0% auf 100% Helligkeit ansteigt, Birne 2 ebenfalls danach usw. Das Ganze soll primär erstmal funktionieren, sekundär auch noch cool aussehen, d.h. die optisch sichtbaren Helligkeitsübergänge sollten "smooth" wirken (z.B. beginnt Birne 2 bereits heller zu werden, während Birne 1 erst bei ~50% Helligkeit angelangt ist) ähnlich wie in den 80ern das rote Lauflicht bei K.I.T.T aus der Serie Knight Rider 8) Einziger Unterschied: das Lauflicht soll nicht hin und her wandern, sondern nach Zyklusende von Birne 4 wieder bei Birne 1 beginnen.

Leider habe ich überhaupt keine Idee, wie ich diese Ablaufkette realisieren soll und wäre um Ratschläge dankbar.
Erste eigene Gedanken:
- Dummy für das Ein-/ Ausschalten der Sequenz
- für jede Birne ein eigenes DOIF
-- DOIF1: Wenn Dummy=ON, Birne1 auf 100% Helligkeit setzen; Birne1 auf 0% wenn Birne2=ON
-- DOIF2: Wenn Dummy=ON, Wait=0,5 Sek, danach Birne2 auf 100% Helligkeit; Birne2 auf 0% wenn Birne3=ON
-- DOIF3: Wenn Dummy=ON, wait=1,0 Sek, danach Birne3 auf 100; Birne3 auf 0% wenn Birne 4=ON
-- DOIF4: Wenn Dummy=ON, wait=1,5 Sek, danach Birne4 auf 100; Birne4 auf 0% wenn Birne 1=ON
usw.

Raspberry Pi 4 mit FHEM; FTUI Dashboard auf Asus 15,6" VT168H Touchscreen; ZigBee mit ConBee2 USB-Stick; div. Shelly 2.5; integr. Gaszähler mit ESP8266 & ESPEasy;

yersinia

Lustige Idee, das würde auch in einem DOIF gehen - sogar in einem cmd. Pseudocode:
DOIF (DUMMY eq "on")
    (SET BIRNE1 100%)
    (SET BIRNE2 100%)
    (SET BIRNE1 0%, SET BIRNE3 100%)
    (SET BIRNE2 0%, SET BIRNE4 100%)
    (SET BIRNE4 0%)

Attribute:
wait 0,1,1,1,1:
do always

https://fhem.de/commandref_DE.html#DOIF_wait
viele Grüße, yersinia
----
FHEM 6.4 (SVN) on RPi 4B with RasPi OS Bookworm (perl 5.36.0) | FTUI
nanoCUL->2x868(1x ser2net)@tsculfw, 1x433@Sduino | MQTT2 | Tasmota | ESPEasy
VCCU->14xSEC-SCo, 7xCC-RT-DN, 5xLC-Bl1PBU-FM, 3xTC-IT-WM-W-EU, 1xPB-2-WM55, 1xLC-Sw1PBU-FM, 1xES-PMSw1-Pl

CBSnake

Hi,

Tradfri kann sowas halt nicht selbstständig sprich FHEM hat den Hut auf und gibt die Kommandos/Sequenzen vor und das kann schon zu ordentlich last führen, Tradfri ist da nicht das schnellste :-)

Du kannst das in ein DOIF packen, entweder mit Abfrage der vorherigen Lampe, dazu ist Tradfri aber vermutlich zu langsam oder halt hardcodiert in Sekunden.


([irgendwas zum starten z.b. [dummy_licht] eq "on")
(set lampe1 100%)

PS: ah ich sehe yersinia hatte ne ähnliche idee :-)
(set lampe2 100%)
(set lampe 1 0%)
(set lampe3 100%)
(set lampe2 0%)
(set lampe 4 100%)
(set lampe 3 0%)
(set Lampe 4 0%)



mit dem Attribut wait kannst du die verschiedenen (set lampe) "unterteilen" hier mal 2 Sekunden Abstand (0 für die erste lampe):

wait 0,2,2,2,2,2,2,2

mit repeatcmd kannst das ganze dann auch wiederholen solange dummy_licht auf on ist

Probiers mal aus, ich denke aber Tradfri wird sich da verschlucken :-)
FHEM auf Debian 10, HM-Wlan, JeeLink-Wlan, Wlanduino, ConBee, TP-Link Steckdose, GHoma Steckdosen, Shelly Steckdosen

Dracolein

#3
Moin zusammen,

danke für die Tips, ich habe mal etwas rumprobiert gestern abend:



Internals:
   DEF        ([Lauflichtschalter:state] eq "on") (set HUEDevice5 100%) (set HUEDevice6 100%) (set HUEDevice7 100%, set HUEDevice5 0%) (set HUEDevice8 100%, set HUEDevice6 0%) (set HUEDevice7 0%) (set HUEDevice8 0%)
   FUUID      5f4fc664-f33f-4dec-a473-15a60c61f9f018c2
   MODEL      FHEM
   NAME       doif_Lauflicht
   NOTIFYDEV  Lauflichtschalter,global
   NR         121
   NTFY_ORDER 50-doif_Lauflicht
   STATE      cmd_1
   TYPE       DOIF
   VERSION    22030 2020-05-25 14:10:16
   READINGS:
     2020-09-03 06:50:48   Device          Lauflichtschalter
     2020-09-03 06:50:46   cmd             1.6
     2020-09-03 06:50:46   cmd_event       Lauflichtschalter
     2020-09-03 06:50:46   cmd_nr          1
     2020-09-03 06:50:46   cmd_seqnr       6
     2020-09-03 06:50:48   e_Lauflichtschalter_state off
     2020-09-02 18:32:56   mode            enabled
     2020-09-03 06:50:46   state           cmd_1
     2020-09-03 06:50:46   wait_timer      no timer
   Regex:
     accu:
     cond:
       Lauflichtschalter:
         0:
           state      ^Lauflichtschalter$:^state:
   attr:
     cmdState:
     wait:
       0:
         0
         2
         2
         2
         2
         2
     waitdel:
   condition:
     0          ::ReadingValDoIf($hash,'Lauflichtschalter','state') eq "on"
   do:
     0:
       0          set HUEDevice5 100%
       1          set HUEDevice6 100%
       2          set HUEDevice7 100%, set HUEDevice5 0%
       3          set HUEDevice8 100%, set HUEDevice6 0%
       4          set HUEDevice7 0%
       5          set HUEDevice8 0%
     1:
   helper:
     DEVFILTER  ^global$|^Lauflichtschalter$
     NOTIFYDEV  global|Lauflichtschalter
     event      off
     globalinit 1
     last_timer 0
     sleepdevice Lauflichtschalter
     sleepsubtimer -1
     sleeptimer -1
     timerdev   Lauflichtschalter
     timerevent on
     triggerDev Lauflichtschalter
     timerevents:
       on
     timereventsState:
       state: on
     triggerEvents:
       off
     triggerEventsState:
       state: off
   internals:
   perlblock:
   readings:
     all         Lauflichtschalter:state
   trigger:
   uiState:
   uiTable:
Attributes:
   do         always
   room       Befehle
   wait       0,2,2,2,2,2


Die Birnchen werden der Reihe nach im Abstand von 2 Sekunden eingeschaltet und es wird versucht, diese auch wieder auszuschalten, ABER: Nach dem ersten Durchlauf stoppt die Sequenz und alle Birnen beinhalten in FHEM noch den Status Helligkeit=1%, ergo ist keine Lampe richtig aus gegangen.
Ich poste noch schnell den Event-Monitor Abschnitt und muss jetzt erstmal zur Arbeit :-)

Zitat
2020-09-03 06:54:07 DOIF doif_Lauflicht cmd_nr: 1
2020-09-03 06:54:07 DOIF doif_Lauflicht cmd_seqnr: 1
2020-09-03 06:54:07 DOIF doif_Lauflicht cmd: 1.1
2020-09-03 06:54:07 DOIF doif_Lauflicht cmd_event: Lauflichtschalter
2020-09-03 06:54:07 DOIF doif_Lauflicht cmd_1_1
2020-09-03 06:54:07 DOIF doif_Lauflicht wait_timer: 03.09.2020 06:54:09 cmd_1_2 Lauflichtschalter
2020-09-03 06:54:07 dummy Lauflichtschalter on
2020-09-03 06:54:07 HUEDevice HUEDevice5 bri: 100
2020-09-03 06:54:07 HUEDevice HUEDevice5 onoff: 1
2020-09-03 06:54:07 HUEDevice HUEDevice5 pct: 39
2020-09-03 06:54:07 HUEDevice HUEDevice5 dim37%
2020-09-03 06:54:07 HUEDevice HUEGroup2 any_on: 1
2020-09-03 06:54:07 HUEDevice HUEDevice5 bri: 2
2020-09-03 06:54:07 HUEDevice HUEDevice5 pct: 1
2020-09-03 06:54:07 HUEDevice HUEDevice5 dim06%
2020-09-03 06:54:08 HUEDevice HUEDevice5 bri: 100
2020-09-03 06:54:08 HUEDevice HUEDevice5 pct: 39
2020-09-03 06:54:08 HUEDevice HUEDevice5 dim37%
2020-09-03 06:54:09 DOIF doif_Lauflicht wait_timer: no timer
2020-09-03 06:54:09 DOIF doif_Lauflicht cmd_nr: 1
2020-09-03 06:54:09 DOIF doif_Lauflicht cmd_seqnr: 2
2020-09-03 06:54:09 DOIF doif_Lauflicht cmd: 1.2
2020-09-03 06:54:09 DOIF doif_Lauflicht cmd_event: Lauflichtschalter
2020-09-03 06:54:09 DOIF doif_Lauflicht cmd_1_2
2020-09-03 06:54:09 DOIF doif_Lauflicht wait_timer: 03.09.2020 06:54:11 cmd_1_3 Lauflichtschalter
2020-09-03 06:54:09 HUEDevice HUEDevice6 bri: 100
2020-09-03 06:54:09 HUEDevice HUEDevice6 onoff: 1
2020-09-03 06:54:09 HUEDevice HUEDevice6 pct: 39
2020-09-03 06:54:09 HUEDevice HUEDevice6 dim37%
2020-09-03 06:54:09 HUEDevice HUEDevice6 bri: 2
2020-09-03 06:54:09 HUEDevice HUEDevice6 pct: 1
2020-09-03 06:54:09 HUEDevice HUEDevice6 dim06%
2020-09-03 06:54:10 HUEDevice HUEDevice6 bri: 100
2020-09-03 06:54:10 HUEDevice HUEDevice6 pct: 39
2020-09-03 06:54:10 HUEDevice HUEDevice6 dim37%
2020-09-03 06:54:11 DOIF doif_Lauflicht wait_timer: no timer
2020-09-03 06:54:11 DOIF doif_Lauflicht cmd_nr: 1
2020-09-03 06:54:11 DOIF doif_Lauflicht cmd_seqnr: 3
2020-09-03 06:54:11 DOIF doif_Lauflicht cmd: 1.3
2020-09-03 06:54:11 DOIF doif_Lauflicht cmd_event: Lauflichtschalter
2020-09-03 06:54:11 DOIF doif_Lauflicht cmd_1_3
2020-09-03 06:54:11 DOIF doif_Lauflicht wait_timer: 03.09.2020 06:54:13 cmd_1_4 Lauflichtschalter
2020-09-03 06:54:11 HUEDevice HUEDevice5 bri: 0
2020-09-03 06:54:11 HUEDevice HUEDevice5 pct: 1
2020-09-03 06:54:11 HUEDevice HUEDevice5 dim06%
2020-09-03 06:54:11 HUEDevice HUEDevice7 bri: 100
2020-09-03 06:54:11 HUEDevice HUEDevice7 onoff: 1
2020-09-03 06:54:11 HUEDevice HUEDevice7 pct: 39
2020-09-03 06:54:11 HUEDevice HUEDevice7 dim37%
2020-09-03 06:54:11 HUEDevice HUEDevice7 bri: 2
2020-09-03 06:54:11 HUEDevice HUEDevice7 pct: 1
2020-09-03 06:54:11 HUEDevice HUEDevice7 dim06%
2020-09-03 06:54:11 HUEDevice HUEDevice5 bri: 1
2020-09-03 06:54:12 HUEDevice HUEDevice7 bri: 100
2020-09-03 06:54:12 HUEDevice HUEDevice7 pct: 39
2020-09-03 06:54:12 HUEDevice HUEDevice7 dim37%
2020-09-03 06:54:13 DOIF doif_Lauflicht wait_timer: no timer
2020-09-03 06:54:13 DOIF doif_Lauflicht cmd_nr: 1
2020-09-03 06:54:13 DOIF doif_Lauflicht cmd_seqnr: 4
2020-09-03 06:54:13 DOIF doif_Lauflicht cmd: 1.4
2020-09-03 06:54:13 DOIF doif_Lauflicht cmd_event: Lauflichtschalter
2020-09-03 06:54:13 DOIF doif_Lauflicht cmd_1_4
2020-09-03 06:54:13 DOIF doif_Lauflicht wait_timer: 03.09.2020 06:54:15 cmd_1_5 Lauflichtschalter
2020-09-03 06:54:13 HUEDevice HUEDevice6 bri: 0
2020-09-03 06:54:13 HUEDevice HUEDevice6 pct: 1
2020-09-03 06:54:13 HUEDevice HUEDevice6 dim06%
2020-09-03 06:54:13 HUEDevice HUEDevice8 bri: 100
2020-09-03 06:54:13 HUEDevice HUEDevice8 onoff: 1
2020-09-03 06:54:13 HUEDevice HUEDevice8 pct: 39
2020-09-03 06:54:13 HUEDevice HUEDevice8 dim37%
2020-09-03 06:54:13 HUEDevice HUEGroup2 all_on: 1
2020-09-03 06:54:13 HUEDevice HUEDevice8 bri: 2
2020-09-03 06:54:13 HUEDevice HUEDevice8 pct: 1
2020-09-03 06:54:13 HUEDevice HUEDevice8 dim06%
2020-09-03 06:54:13 HUEDevice HUEDevice6 bri: 1
2020-09-03 06:54:13 ESPEasy ESPEasy_ESP_Easy1_am2302_sensor presence: present
2020-09-03 06:54:13 ESPEasy ESPEasy_ESP_Easy1_am2302_sensor hum: 49.8 tem: 23.3
2020-09-03 06:54:14 HUEDevice HUEDevice8 bri: 100
2020-09-03 06:54:14 HUEDevice HUEDevice8 pct: 39
2020-09-03 06:54:14 HUEDevice HUEDevice8 dim37%
2020-09-03 06:54:15 DOIF doif_Lauflicht wait_timer: no timer
2020-09-03 06:54:15 DOIF doif_Lauflicht cmd_nr: 1
2020-09-03 06:54:15 DOIF doif_Lauflicht cmd_seqnr: 5
2020-09-03 06:54:15 DOIF doif_Lauflicht cmd: 1.5
2020-09-03 06:54:15 DOIF doif_Lauflicht cmd_event: Lauflichtschalter
2020-09-03 06:54:15 DOIF doif_Lauflicht cmd_1_5
2020-09-03 06:54:15 DOIF doif_Lauflicht wait_timer: 03.09.2020 06:54:17 cmd_1_6 Lauflichtschalter
2020-09-03 06:54:15 HUEDevice HUEDevice7 bri: 0
2020-09-03 06:54:15 HUEDevice HUEDevice7 pct: 1
2020-09-03 06:54:15 HUEDevice HUEDevice7 dim06%
2020-09-03 06:54:15 HUEDevice HUEDevice7 bri: 1
2020-09-03 06:54:17 DOIF doif_Lauflicht wait_timer: no timer
2020-09-03 06:54:17 DOIF doif_Lauflicht cmd_nr: 1
2020-09-03 06:54:17 DOIF doif_Lauflicht cmd_seqnr: 6
2020-09-03 06:54:17 DOIF doif_Lauflicht cmd: 1.6
2020-09-03 06:54:17 DOIF doif_Lauflicht cmd_event: Lauflichtschalter
2020-09-03 06:54:17 DOIF doif_Lauflicht cmd_1
2020-09-03 06:54:17 HUEDevice HUEDevice8 bri: 0
2020-09-03 06:54:17 HUEDevice HUEDevice8 pct: 1
2020-09-03 06:54:17 HUEDevice HUEDevice8 dim06%
2020-09-03 06:54:17 HUEDevice HUEDevice8 bri: 1
Raspberry Pi 4 mit FHEM; FTUI Dashboard auf Asus 15,6" VT168H Touchscreen; ZigBee mit ConBee2 USB-Stick; div. Shelly 2.5; integr. Gaszähler mit ESP8266 & ESPEasy;

CBSnake

Hi,

auf die schnelle:

Versuche es mal mit set off anstatt der 0%
Und ergänze das Doif noch um repeatcmd
FHEM auf Debian 10, HM-Wlan, JeeLink-Wlan, Wlanduino, ConBee, TP-Link Steckdose, GHoma Steckdosen, Shelly Steckdosen

Dracolein

#5
Hey das funktioniert, super.
Auch habe ich die Timings auf 0.5 Sekunden pro Befehl reduzieren können und die Lampen reagieren fein.

Einzig die Wiederholung des doif verstehe ich noch nicht so ganz. Mit dem Attribut repeatcmd =1 läuft die Sequenz endlos wie eine Schleife durch, aber scheinbar wird die Bedingung (Lauflichtschalter =on) nicht mehr abgefragt, da sich das doif nicht mehr stoppen lässt. Da muss ich mich nachher nochmal reindenken, wo meine Fehler sind.


edit:
Attribut do always gelöscht, jetz läufts.
Ich bastel noch etwas herum und werde Euch abends eine YT-Sequenz einstellen
Raspberry Pi 4 mit FHEM; FTUI Dashboard auf Asus 15,6" VT168H Touchscreen; ZigBee mit ConBee2 USB-Stick; div. Shelly 2.5; integr. Gaszähler mit ESP8266 & ESPEasy;

Dracolein

Guten Morgen, hier das optische Ergebnis bisher

https://youtu.be/ts2G_GSRSPA
Raspberry Pi 4 mit FHEM; FTUI Dashboard auf Asus 15,6" VT168H Touchscreen; ZigBee mit ConBee2 USB-Stick; div. Shelly 2.5; integr. Gaszähler mit ESP8266 & ESPEasy;

CBSnake

Moin,

sehr schön, welches Gateway etc nutzt du da?

FHEM auf Debian 10, HM-Wlan, JeeLink-Wlan, Wlanduino, ConBee, TP-Link Steckdose, GHoma Steckdosen, Shelly Steckdosen

Dracolein

#8
Bei mir läuft FHEM auf einem Raspberry Pi 4 mit einem ConBee II USB-Stick. Das ist mein einziges zigbee Gateway; ich hatte nie ein anderes. Damit läuft Tradfri, eine HUE-Lampe und diverse Aqara Sensoren

Ich habe die Timings auf 0,4 Sek runtersetzen können und weiterhin die Befehle auf
set HUEDevice6 pct 100
geändert. Letzteres bewirkt, dass jede Birne ganz kurz volle Helligkeit erreicht und der optische Effekt besser wirkt, als auf dem YT-Video (Stand: gestern abend).

Wo ich mich gedanklich schwer tue, ist, wie die Befehlsreihenfolge verändert werden müsste, damit nach Abschluss der Sequenz der Restart schneller geht.

Aktuell siehts so aus:

       0          set HUEDevice5 pct 100
       1          set HUEDevice6 pct 100
       2          set HUEDevice7 pct 100, set HUEDevice5 off
       3          set HUEDevice8 pct 100, set HUEDevice6 off
       4          set HUEDevice7 off
       5          set HUEDevice8 off


Theoretisch würde ich die letzte Zeile ändern wollen:
       5          set HUEDevice8 off, set HUEDevice5 pct 100
damit die erste Birne bereits wieder startet. Jedoch müsste ab dem zweiten Durchlauf die erste Befehlszeile ignoriert werden  ???

Zuviel Gehirnschmalz soll auch nicht hineinfliessen, es bleibt ein Spaß. Eventuell wäre dieser Effekt ganz nützlich als parallel optische Anzeige, wenn die Haustürklingel betätigt wurde (welche noch nicht smart ist bei mir)
Raspberry Pi 4 mit FHEM; FTUI Dashboard auf Asus 15,6" VT168H Touchscreen; ZigBee mit ConBee2 USB-Stick; div. Shelly 2.5; integr. Gaszähler mit ESP8266 & ESPEasy;

betateilchen

Sowas ähnliches habe ich in einem langen Flur gebaut, aber nicht, um Leute zu erschrecken, sondern um das Licht (einzelne Strahler) der Person die durch den Flur geht, folgen zu lassen. Es muss schließlich nicht über die gesamte Zeit der gesamte Flur beleuchtet sein. Dafür habe ich die Lampen in eine structure gepackt und entscheide am Anfang und Ende des Flurs mittels jeweils einem Bewegungsmelder die Laufrichtung.

Funktioniert seit langem völlig zuverlässig.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Mitch

Lustige Idee!

@Dracolein: magst du mal deinen aktuellen Code posten?
FHEM im Proxmox Container

Dracolein

Zitat von: betateilchen am 04 September 2020, 09:02:28
Sowas ähnliches habe ich in einem langen Flur gebaut, aber nicht, um Leute zu erschrecken, sondern um das Licht (einzelne Strahler) der Person die durch den Flur geht, folgen zu lassen. Es muss schließlich nicht über die gesamte Zeit der gesamte Flur beleuchtet sein. Dafür habe ich die Lampen in eine structure gepackt und entscheide am Anfang und Ende des Flurs mittels jeweils einem Bewegungsmelder die Laufrichtung.

Funktioniert seit langem völlig zuverlässig.
Coole Idee vom Grundsatz.
Wenn die Person jedoch sich mitten im Flur umdreht, kannst du diesen Fall nicht abfangen, oder?

Die Idee eines Lauflichts kenne ich sonst nur von Treppenstufen, die nacheinander wellenförmig beleuchtet werden. Sowas finde ich auch mega, zumal ich endlos Treppenstufen hätte. Aber der Installationsaufwand ist mir viel zu groß.
Zitat von: Mitch am 04 September 2020, 10:23:11
Lustige Idee!

@Dracolein: magst du mal deinen aktuellen Code posten?

Dummy Lauflichtschalter:

Internals:
   FUUID      5f4fc600-f33f-4dec-6071-13aaea661b21f5bd
   NAME       Lauflichtschalter
   NR         120
   STATE      off
   TYPE       dummy
   READINGS:
     2020-09-04 07:34:43   state           off
Attributes:
   genericDeviceType switch
   room       Befehle,Homekit
   setList    on off
   webCmd     on:off


DOIF Lauflicht:

Internals:
   DEF        ([Lauflichtschalter:state] eq "on") (set HUEDevice5 pct 100) (set HUEDevice6 pct 100) (set HUEDevice7 pct 100, set HUEDevice5 off) (set HUEDevice8 pct 100, set HUEDevice6 off) (set HUEDevice7 off) (set HUEDevice8 off) DOELSEIF ([Lauflichtschalter:state] eq "off") (set HUEDevice5 off) (set HUEDevice6 off) (set HUEDevice7 off) (set HUEDevice8 off)
   FUUID      5f4fc664-f33f-4dec-a473-15a60c61f9f018c2
   MODEL      FHEM
   NAME       doif_Lauflicht
   NOTIFYDEV  Lauflichtschalter,global
   NR         121
   NTFY_ORDER 50-doif_Lauflicht
   STATE      cmd_2
   TYPE       DOIF
   VERSION    22030 2020-05-25 14:10:16
   READINGS:
     2020-09-04 07:34:43   Device          Lauflichtschalter
     2020-09-04 07:34:43   cmd             2.4
     2020-09-04 07:34:43   cmd_event       Lauflichtschalter
     2020-09-04 07:34:43   cmd_nr          2
     2020-09-04 07:34:43   cmd_seqnr       4
     2020-09-04 07:34:43   e_Lauflichtschalter_state off
     2020-09-04 07:33:18   mode            enabled
     2020-09-04 07:34:43   state           cmd_2
     2020-09-04 07:34:43   wait_timer      no timer
   Regex:
     accu:
     cond:
       Lauflichtschalter:
         0:
           state      ^Lauflichtschalter$:^state:
         1:
           state      ^Lauflichtschalter$:^state:
   attr:
     cmdState:
     repeatcmd:
       1
     wait:
       0:
         0
         0.4
         0.4
         0.4
         0.4
         0.4
     waitdel:
   condition:
     0          ::ReadingValDoIf($hash,'Lauflichtschalter','state') eq "on"
     1          ::ReadingValDoIf($hash,'Lauflichtschalter','state') eq "off"
   do:
     0:
       0          set HUEDevice5 pct 100
       1          set HUEDevice6 pct 100
       2          set HUEDevice7 pct 100, set HUEDevice5 off
       3          set HUEDevice8 pct 100, set HUEDevice6 off
       4          set HUEDevice7 off
       5          set HUEDevice8 off
     1:
       0          set HUEDevice5 off
       1          set HUEDevice6 off
       2          set HUEDevice7 off
       3          set HUEDevice8 off
     2:
   helper:
     DEVFILTER  ^global$|^Lauflichtschalter$
     NOTIFYDEV  global|Lauflichtschalter
     event      off
     globalinit 1
     last_timer 0
     sleepdevice Lauflichtschalter
     sleepsubtimer 3
     sleeptimer -1
     timerdev   Lauflichtschalter
     timerevent off
     triggerDev Lauflichtschalter
     DOIF_eventa:
       cmd_nr: 2
       cmd_seqnr: 4
       cmd_event: Lauflichtschalter
       cmd_2
     DOIF_eventas:
       cmd_nr: 2
       cmd_seqnr: 4
       cmd_event: Lauflichtschalter
       state: cmd_2
     timerevents:
       off
     timereventsState:
       state: off
     triggerEvents:
       off
     triggerEventsState:
       state: off
   internals:
   readings:
     all         Lauflichtschalter:state
   trigger:
   uiState:
   uiTable:
Attributes:
   repeatcmd  1
   room       Befehle
   wait       0,0.4,0.4,0.4,0.4,0.4
Raspberry Pi 4 mit FHEM; FTUI Dashboard auf Asus 15,6" VT168H Touchscreen; ZigBee mit ConBee2 USB-Stick; div. Shelly 2.5; integr. Gaszähler mit ESP8266 & ESPEasy;

betateilchen

Zitat von: Dracolein am 04 September 2020, 10:32:08
Coole Idee vom Grundsatz.
Wenn die Person jedoch sich mitten im Flur umdreht, kannst du diesen Fall nicht abfangen, oder?

Doch. Wenn nicht innerhalb einer bestimmten Zeit der zweite Bewegungsmelder auslöst, greift ein watchdog und schaltet sicherheitshalber die gesamte Beleuchtung ein.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Dracolein

Ich hätte noch eine weitere Frage, um diesem Mini-Projekt tatsächlich ein wenig Sinn zu verleihen:

Angenommen meine Haustürklingel schaltet diese DOIF-Lauflichtsequenz für eine eine Zeit t=10 Sekunden ein. So endet diese Sequenz immer damit, dass alle 4 Birnen am Ende abgeschaltet werden. Soweit so gut. Nun besteht die Möglichkeit, dass die Esstischlampe abends ganz normal eingeschaltet ist, während das besagte Event ausgelöst wird und die Lampe ihre Lauflichtsequenz beginnt, durchläuft und mit vollständig ausgeschalteter Lampe endet.

Wie schaffe ich es, dass die Lampe nach Ende der Lauflichtsequenz in ihren vorherigen Zustand zurückkehrt ?
Das Reading "pct" jeder Birne dient als Referenz zur Speicherung des jeweiligen Ist-Zustands (falls Lampe aus ist: pct=0, sonst pct=Dimmstufe in Prozent). Theoretisch müsste ich mein obiges DOIF verändern, dass besagtes HUEDevice-Reading zunächst irgendwo zwischengespeichert wird, danach die Lauflichtsequenz abgespult wird und zum Abschluss der Ursprungsstatus wieder hergestellt wird.

Nun habe ich mir aus diversen Beispielen folgende Puzzleteile zusammengebaut:

Istwerte auslesen und auf neuen Readings abspeichern:

(setreading HUEDevice5 last_pct [HUEDevice5:pct], setreading HUEDevice6 last_pct [HUEDevice6:pct], setreading HUEDevice7 last_pct [HUEDevice7:pct], setreading HUEDevice8 last_pct [HUEDevice8:pct])


Gespeicherte Werte wieder zurück übertragen auf alle 4 Birnen:

(set HUEDevice5 pct [HUEDevice5:last_pct], set HUEDevice6 pct [HUEDevice6:last_pct], set HUEDevice7 pct [HUEDevice7:last_pct], set HUEDevice8 pct [HUEDevice8:last_pct])

Wären diese Codeschnipsel korrekt und innerhalb eines DOIF nutzbar, oder muss ich mit{ReadingsVAL...} arbeiten?
Weiterhin kann ich diese Puzzleteile nicht einfach in obiges Doif einfügen, sondern muss das irgendwie verschachteln. Andernfalls würden bei jedem Sequenzdurchlauf die Readings gelesen & überschrieben werden. Hier scheitere ich derzeit noch gedanklich und hoffe auf Tips. Im Prinzip bräuchte ich ein Konstrukt

WENN Lauflichtschalter=on DANN werte zwischenspeichern, Sequenz endlos abspielen
WENN Lauflichtschalter=off DANN sequenz beenden, werte zurückspeichern
WENN Haustürklingel=on DANN werte zwischenspeichern, Sequenz für 10 Sekunden abspielen, danach Werte zurückspeichern

Geht das alles in einem einzigen DOIF ?
Raspberry Pi 4 mit FHEM; FTUI Dashboard auf Asus 15,6" VT168H Touchscreen; ZigBee mit ConBee2 USB-Stick; div. Shelly 2.5; integr. Gaszähler mit ESP8266 & ESPEasy;

Damian

Zitat von: Dracolein am 04 September 2020, 12:11:57
Ich hätte noch eine weitere Frage, um diesem Mini-Projekt tatsächlich ein wenig Sinn zu verleihen:

Angenommen meine Haustürklingel schaltet diese DOIF-Lauflichtsequenz für eine eine Zeit t=10 Sekunden ein. So endet diese Sequenz immer damit, dass alle 4 Birnen am Ende abgeschaltet werden. Soweit so gut. Nun besteht die Möglichkeit, dass die Esstischlampe abends ganz normal eingeschaltet ist, während das besagte Event ausgelöst wird und die Lampe ihre Lauflichtsequenz beginnt, durchläuft und mit vollständig ausgeschalteter Lampe endet.

Wie schaffe ich es, dass die Lampe nach Ende der Lauflichtsequenz in ihren vorherigen Zustand zurückkehrt ?
Das Reading "pct" jeder Birne dient als Referenz zur Speicherung des jeweiligen Ist-Zustands (falls Lampe aus ist: pct=0, sonst pct=Dimmstufe in Prozent). Theoretisch müsste ich mein obiges DOIF verändern, dass besagtes HUEDevice-Reading zunächst irgendwo zwischengespeichert wird, danach die Lauflichtsequenz abgespult wird und zum Abschluss der Ursprungsstatus wieder hergestellt wird.

Nun habe ich mir aus diversen Beispielen folgende Puzzleteile zusammengebaut:

Istwerte auslesen und auf neuen Readings abspeichern:

(setreading HUEDevice5 last_pct [HUEDevice5:pct], setreading HUEDevice6 last_pct [HUEDevice6:pct], setreading HUEDevice7 last_pct [HUEDevice7:pct], setreading HUEDevice8 last_pct [HUEDevice8:pct])


Gespeicherte Werte wieder zurück übertragen auf alle 4 Birnen:

(set HUEDevice5 pct [HUEDevice5:last_pct], set HUEDevice6 pct [HUEDevice6:last_pct], set HUEDevice7 pct [HUEDevice7:last_pct], set HUEDevice8 pct [HUEDevice8:last_pct])

Wären diese Codeschnipsel korrekt und innerhalb eines DOIF nutzbar, oder muss ich mit{ReadingsVAL...} arbeiten?
Weiterhin kann ich diese Puzzleteile nicht einfach in obiges Doif einfügen, sondern muss das irgendwie verschachteln. Andernfalls würden bei jedem Sequenzdurchlauf die Readings gelesen & überschrieben werden. Hier scheitere ich derzeit noch gedanklich und hoffe auf Tips. Im Prinzip bräuchte ich ein Konstrukt

WENN Lauflichtschalter=on DANN werte zwischenspeichern, Sequenz endlos abspielen
WENN Lauflichtschalter=off DANN sequenz beenden, werte zurückspeichern
WENN Haustürklingel=on DANN werte zwischenspeichern, Sequenz für 10 Sekunden abspielen, danach Werte zurückspeichern

Geht das alles in einem einzigen DOIF ?

Im Prinzip geht vieles, allerdings bist du im DOIF-FHEM-Modus auf eine flache Hierarchie der Form if ... elseif ... elseif ... beschränkt. Irgendwann musst du mehr tricksen als programmieren, damit es funktioniert.

Wenn die Sache komplexer wird, dann musst du die Aufgabe auf mehrere Module verteilen oder im DOIF-Perl-Modus programmieren. Dort kannst du innerhalb eines Moduls beliebige Komplexität unterbringen, allerdings musst du dir etwas Perl und das Konzept des DOIF-Perl-Modus mit Perlblöcken, Variablen, Timern usw. erst einmal klar machen.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF