Hallo in die Runde,
ich benötige mal wieder eure Unterstützung.
Im Schlafzimmer habe ich zwei Sonos Symfonisk zu einem Stereo Paar kombiniert. Wenn wir morgens im Bett liegen schalten wir gern per App am Smartphone Musik an. Wenn wir dann das Schlafzimmer verlassen, möchten wir gern durch gedrückthalten der "off" Taste des Dimmer Switches (state 4003) nicht nur das Licht ausschalten, sondern auch die Musik insofern diese eingeschaltet ist. Dafür habe ich mir folgendes DOIF überlegt:
define di_Sonos_HueDimmer_SZ DOIF ([DG_SZ_Schalter:state:d] == 4003 and [Sonos_Schlafzimmer:transportState] eq "PLAYING")
(({Log 3, "Schlafzimmer Licht und Sonos: aus"}),(set Sonos_Schlafzimmer Pause))
Das funktioniert zwar, aber sobald ich nun per Sonos App die Musik im Schlafzimmer wieder einschalten möchte und der Hue Dimmer Switch sich weiterhin im "state 4003" befindet, greift sofort wieder das DOIF und schaltet die Musik ab. Wenn sich der Dimmer Switch in einem anderen state als 4003 befindet, wird das DOIF wie gewünscht nicht getriggert.
Was muss ich tun, damit das DOIF den Zeitstempel des state Readings des Dimmer Switches berücksichtigt?
Jedes Mal, wenn ich die "off" des Dimmer Switches betätige, wird auch der Zeitstempel des state Readings aktualisiert. Das DOIF soll also pro Zeitstempel immer genau einmal reagieren und nicht grundsätzlich.
Geht das irgendwie oder denke ich zu kompliziert und es gibt evtl. eine andere/einfachere/beseere Lösung?
Danke euch und Gruß Hoppel
Du musst nur statt einer Zustandsabfrage eine Ereignisabfrage angeben:
define di_Sonos_HueDimmer_SZ DOIF ([DG_SZ_Schalter:"4003"] and [Sonos_Schlafzimmer:transportState] eq "PLAYING")
(({Log 3, "Schlafzimmer Licht und Sonos: aus"}),(set Sonos_Schlafzimmer Pause))
Im Gegensatz zu einer triggernden Zustandsabfrage ist eine Ereignisabfrage nur zum Zeitpunkt des Triggers wahr und sonst nicht.
Edit: Alternativ kannst du beim Sonos den Trigger rausnehmen:
define di_Sonos_HueDimmer_SZ DOIF ([DG_SZ_Schalter:state:d] == 4003 and [?Sonos_Schlafzimmer:transportState] eq "PLAYING")
(({Log 3, "Schlafzimmer Licht und Sonos: aus"}),(set Sonos_Schlafzimmer Pause))
Coole Sache, Damian. Beides funktioniert, vorhin getestet. Welche Variante würdest du bevorzugen oder sind beide Lösung gleichwertig was den Ressourcenbedarf betrifft?
Auf jeden Fall habe ich gerade wieder etwas gelernt. Danke ;)
Gruß Hoppel
Zitat von: hoppel118 am 26 Februar 2020, 09:19:27
Coole Sache, Damian. Beides funktioniert, vorhin getestet. Welche Variante würdest du bevorzugen oder sind beide Lösung gleichwertig was den Ressourcenbedarf betrifft?
Auf jeden Fall habe ich gerade wieder etwas gelernt. Danke ;)
Gruß Hoppel
Beide Abfragen haben ihre Daseinsberechtigung.
Die zweite mit dem Fragezeichen ist besser (resourcenschonender), da das Modul nur auf DG_SZ_Schalter getriggert wird.
Du kannst natürlich auch beides kombinieren, was vielleicht die eleganteste Lösung wäre (vom Resourcen-Aufwand her vergleichbar mit der zweiten Variante)
define di_Sonos_HueDimmer_SZ DOIF ([DG_SZ_Schalter:"4003"] and [?Sonos_Schlafzimmer:transportState] eq "PLAYING")
(({Log 3, "Schlafzimmer Licht und Sonos: aus"}),(set Sonos_Schlafzimmer Pause))
Ok, perfekt! Hatte mich für die zweite Variante mit Fragezeichen entschieden. Dann werde ich nochmal die Kombination übernehmen.
Vielen, vielen Dank nochmal!
Gruß Hoppel
Hallo in die Runde,
ich brauche hier nochmal eure Unterstützung.
Umgesetzt werden soll folgendes:
- wenn ich werktags von 08 bis 19 Uhr anwesend bin und der Lichtschalter in meinem Büro eingeschaltet wird, soll auch der Sonos Lautsprecher eingeschaltet werden
- unabhängig von Uhrzeit, Tag und Anwesenheitsstatus soll der Sonos Lautsprecher immer abgeschaltet werden, wenn am Lichtschalter die Off-Taste betätigt wird (Lichtschalter-state kann dann 4001 oder 4002 sein)
Mein DOIF dazu sieht momentan wie folgt aus:
define di_rr_Hoppel_Sonos_HueDimmer_OnOff_Buero DOIF
([08:00-19:00|Mo Di Mi Do Fr] and [rr_Michael:presence] eq "present" and [OG_Buero_Schalter:state:d] =~ "100")
(({Log 3, "Michael im Home-Office, Büro Licht und Sonos: an"}),(set Sonos_Buero Play))
DOELSEIF ([OG_Buero_Schalter:state:d] =~ "400" and [?Sonos_Buero:transportState] eq "PLAYING")
(({Log 3, "Michael im Home-Office, Büro Licht und Sonos: aus"}),(set Sonos_Buero Pause))
Ich kann so den Sonos Lautsprecher mit dem Lichtschalter ein- und ausschalten.
Was funktioniert nicht?
Wenn ich den Sonos Lautsprecher direkt am Gerät einschalte, möchte ich trotzdem den Lichtschalter zum Ausschalten verwenden. Das funktioniert aber nicht.
Habe jetzt diverse Sachen ausprobiert. Wo liegt mein Fehler?
Viele Grüße Hoppel
Wenn der Schalter das einzige Steuerelement ist (und der Rest nur Bedingungen zu prüfen), dann triggere lieber auf den Events statt auf dem Status.
[OG_Buero_Schalter:"400"] oder [OG_Buero_Schalter:"400(1|2)"]
Siehe https://fhem.de/commandref_DE.html#DOIF_Ereignissteuerung_ueber_Auswertung_von_Events
Moin @amenomade
das funktioniert leider nicht.
Im Event Monitor passiert folgendes, wenn ich den Ausschalter am Hue-Dimmer betätige:
2020-10-08 09:17:45 HUEDevice OG_Buero_Schalter reachable: 1
2020-10-08 09:17:45 HUEDevice OG_Buero_Schalter batteryPercent: 79
2020-10-08 09:17:45 HUEDevice OG_Buero_Schalter 4002
2020-10-08 09:17:45 HUEDevice OG_Buero_Schalter battery: 79
Hier nochmal ein List vom DOIF:
Internals:
DEF ([08:00-19:00|Mo Di Mi Do Fr] and [rr_Hoppel:presence] eq "present" and [OG_Buero_Schalter:state:d] =~ "100")
(({Log 3, "Hoppel im Home-Office, Büro Licht und Sonos: an"}),(set Sonos_Buero Play))
DOELSEIF ([OG_Buero_Schalter:"400"] and [?Sonos_Buero:transportState] eq "PLAYING")
(({Log 3, "Hoppel im Home-Office, Büro Licht und Sonos: aus"}),(set Sonos_Buero Pause))
FUUID 5dd79685-f33f-5dcf-3497-e553a467847b665f
MODEL FHEM
NAME di_rr_Michael_Sonos_HueDimmer_OnOff_Buero
NOTIFYDEV global,rr_Michael,OG_Buero_Schalter
NR 494
NTFY_ORDER 50-di_rr_Michael_Sonos_HueDimmer_OnOff_Buero
STATE cmd_2
TYPE DOIF
VERSION 22834 2020-09-23 17:50:00
READINGS:
2020-10-08 09:17:48 Device OG_Buero_Schalter
2020-10-08 09:11:49 cmd 2
2020-10-08 09:11:49 cmd_event OG_Buero_Schalter
2020-10-08 09:11:49 cmd_nr 2
2020-10-08 09:17:48 e_OG_Buero_Schalter_events reachable: 1,batteryPercent: 79,4002,battery: 79
2020-10-08 09:17:48 e_OG_Buero_Schalter_state 4002
2020-10-08 08:42:54 e_rr_Michael_presence present
2020-10-08 02:03:51 mode enabled
2020-10-08 09:11:49 state cmd_2
2020-10-08 02:03:51 timer_01_c01 08.10.2020 08:00:00|MoDiMiDoFr
2020-10-08 02:03:51 timer_02_c01 08.10.2020 19:00:00|MoDiMiDoFr
Regex:
accu:
cond:
OG_Buero_Schalter:
0:
state ^OG_Buero_Schalter$:^state:
1:
&STATE ^OG_Buero_Schalter$
rr_Michael:
0:
presence ^rr_Michael$:^presence:
1:
attr:
cmdState:
wait:
waitdel:
condition:
0 ::DOIF_time($hash,0,1,$wday,$hms,"MoDiMiDoFr") and ::ReadingValDoIf($hash,'rr_Michael','presence') eq "present" and ::ReadingValDoIf($hash,'OG_Buero_Schalter','state','','d') =~ "100"
1 ::EventDoIf('OG_Buero_Schalter',$hash,'400',1) and ::ReadingValDoIf($hash,'Sonos_Buero','transportState') eq "PLAYING"
days:
0 MoDiMiDoFr
1 MoDiMiDoFr
do:
0:
0 ({Log 3, "Michael im Home-Office, Büro Licht und Sonos: an"}),(set Sonos_Buero Play)
1:
0 ({Log 3, "Michael im Home-Office, Büro Licht und Sonos: aus"}),(set Sonos_Buero Pause)
2:
helper:
DEVFILTER ^global$|^OG_Buero_Schalter$|^rr_Michael$
NOTIFYDEV global|OG_Buero_Schalter|rr_Michael
event 4002
globalinit 1
last_timer 2
sleeptimer -1
timerdev OG_Buero_Schalter
timerevent 4002
triggerDev OG_Buero_Schalter
timerevents:
reachable: 1
batteryPercent: 79
4002
battery: 79
timereventsState:
reachable: 1
batteryPercent: 79
state: 4002
battery: 79
triggerEvents:
reachable: 1
batteryPercent: 79
4002
battery: 79
triggerEventsState:
reachable: 1
batteryPercent: 79
state: 4002
battery: 79
internals:
interval:
0 -1
1 0
intervalfunc:
intervaltimer:
localtime:
0 1602136800
1 1602176400
readings:
all rr_Michael:presence OG_Buero_Schalter:state
realtime:
0 08:00:00
1 19:00:00
time:
0 08:00:00
1 19:00:00
timeCond:
0 0
1 0
timer:
0 0
1 0
timers:
0 0 1
trigger:
all OG_Buero_Schalter
triggertime:
1602176400:
localtime 1602176400
hash:
uiState:
uiTable:
Attributes:
devStateIcon cmd_1:control_standby@green .*:control_standby@grey
group DOIF inkl Homebridge Switch
room Obergeschoss->Büro,System->DOIF
Der Sonos Lautsprecher läuft weiter, wenn ich diesen vorher am Gerät selbst eingeschaltet habe und nun über die Aus-Taste ausschalten möchte. Wenn ich das Licht anschließend nochmal ein- und dann erneut ausschalte, funktioniert es immer.
Im Event werden weitere Dinge übermittelt. Liegt das evtl. daran oder sollte das trotzdem funktionieren?
Danke und Gruß Hoppel
Du brauchst noch ein do always, aber voher musst noch den anderen Zweig (Bedingung 1) genauso ändern
Perfekto!!!
Auf das "do always" hätte ich auch selber kommen können.
Mit dem Ratschlag auch die erste Bedingung anzupassen, hast du direkt noch ein weiteres Problem gelöst. Irgendwann bin ich nachts ins Bad, dort greift ein ähnliches DOIF, habe das Licht per Lichtschalter eingeschaltet und dann aber erst im Schlafzimmer mit der Hue App wieder ausgeschaltet. Als ich morgens ins Bad kam, lief Musik.
Das ist nun durch das Triggern auf Events auch gelöst. Der Vollständigkeit halber... Das DOIF in meinem Büro sieht nun wie folgt aus:
define di_rr_Michael_Sonos_HueDimmer_OnOff_Buero DOIF
([08:00-19:00|Mo Di Mi Do Fr] and [rr_Hoppel:presence] eq "present" and [OG_Buero_Schalter:"100"])
(({Log 3, "Hoppel im Home-Office, Büro Licht und Sonos: an"}),(set Sonos_Buero Play))
DOELSEIF ([OG_Buero_Schalter:"400"] and [?Sonos_Buero:transportState] eq "PLAYING")
(({Log 3, "Hoppel im Home-Office, Büro Licht und Sonos: aus"}),(set Sonos_Buero Pause))
attr di_rr_Michael_Sonos_HueDimmer_OnOff_Buero do always
Super, vielen Dank!
Gruß Hoppel
Moin,
jetzt muss ich mich doch nochmal melden.
Ich habe im Badezimmer und in der Küche dieselbe Konstellation, bestehend aus:
- Sonos One Gen2
- Hue Dimmer Switch
- beides über FHEM erreichbar, in beiden Fällen wird der Dimmer Switch dazu verwendet, neben dem Licht auch die Sonos ein- bzw. auszuschalten
Die DOIFs sehen exakt identisch aus. Das DOIF in der Küche schaltet den Sonos Player aber plötzlich nicht mehr aus (Pause).
Was habe ich bereits getan:
- Fhem neugestartet
- DOIF gelöscht und neu erstellt
- Sonos Device in FHEM gelöscht und neu angelegt (Witzigerweise ging es danach kurz wieder und nun aber wieder nicht mehr)
list DOIF KücheInternals:
DEF ([06:00-22:00] and [OG_Kueche_Schalter:"100"])
(({Log 3, "Küche Licht und Sonos: an"}),(set Sonos_Kueche Play))
DOELSEIF ([OG_Kueche_Schalter:"400"] and [?Sonos_Kueche:transportState] eq "PLAYING")
(({Log 3, "Küche Licht und Sonos: aus"}),(set Sonos_Kueche Pause))
FUUID 5f82efb6-f33f-5dcf-616d-a72df4e7c1484b3d
MODEL FHEM
NAME di_Sonos_HueDimmer_OnOff_Kueche
NOTIFYDEV global,OG_Kueche_Schalter
NR 595
NTFY_ORDER 50-di_Sonos_HueDimmer_OnOff_Kueche
STATE cmd_1
TYPE DOIF
VERSION 22913 2020-10-04 21:46:02
READINGS:
2020-10-11 15:07:39 Device OG_Kueche_Schalter
2020-10-11 15:07:39 cmd 1
2020-10-11 15:07:39 cmd_event OG_Kueche_Schalter
2020-10-11 15:07:39 cmd_nr 1
2020-10-11 15:07:39 e_OG_Kueche_Schalter_events 4002,battery: 100,reachable: 1,batteryPercent: 100
2020-10-11 15:07:12 mode enabled
2020-10-11 15:07:39 state cmd_1
2020-10-11 15:07:13 timer_01_c01 12.10.2020 06:00:00
2020-10-11 15:07:13 timer_02_c01 11.10.2020 22:00:00
Regex:
accu:
cond:
OG_Kueche_Schalter:
0:
&STATE ^OG_Kueche_Schalter$
1:
&STATE ^OG_Kueche_Schalter$
attr:
cmdState:
wait:
waitdel:
condition:
0 ::DOIF_time($hash,0,1,$wday,$hms) and ::EventDoIf('OG_Kueche_Schalter',$hash,'100',1)
1 ::EventDoIf('OG_Kueche_Schalter',$hash,'400',1) and ::ReadingValDoIf($hash,'Sonos_Kueche','transportState') eq "PLAYING"
days:
do:
0:
0 ({Log 3, "Küche Licht und Sonos: an"}),(set Sonos_Kueche Play)
1:
0 ({Log 3, "Küche Licht und Sonos: aus"}),(set Sonos_Kueche Pause)
2:
helper:
DEVFILTER ^global$|^OG_Kueche_Schalter$
NOTIFYDEV global|OG_Kueche_Schalter
event battery: 100
globalinit 1
last_timer 2
sleeptimer -1
timerdev OG_Kueche_Schalter
timerevent battery: 100
triggerDev OG_Kueche_Schalter
DOIF_eventa:
cmd_nr: 1
cmd: 1
cmd_event: OG_Kueche_Schalter
cmd_1
DOIF_eventas:
cmd_nr: 1
cmd: 1
cmd_event: OG_Kueche_Schalter
state: cmd_1
timerevents:
4002
battery: 100
reachable: 1
batteryPercent: 100
timereventsState:
state: 4002
battery: 100
reachable: 1
batteryPercent: 100
triggerEvents:
4002
battery: 100
reachable: 1
batteryPercent: 100
triggerEventsState:
state: 4002
battery: 100
reachable: 1
batteryPercent: 100
internals:
interval:
0 -1
1 0
intervalfunc:
localtime:
0 1602475200
1 1602446400
readings:
realtime:
0 06:00:00
1 22:00:00
time:
0 06:00:00
1 22:00:00
timeCond:
0 0
1 0
timer:
0 0
1 0
timers:
0 0 1
trigger:
all OG_Kueche_Schalter
triggertime:
1602446400:
localtime 1602446400
hash:
1602475200:
localtime 1602475200
hash:
uiState:
uiTable:
Attributes:
devStateIcon cmd_1:control_standby@green .*:control_standby@grey
do always
group DOIF inkl Homebridge Switch
room Obergeschoss->Küche,System->DOIF
list DOIF BadezimmerInternals:
DEF ([06:00-22:00] and [OG_Badezimmer_Schalter:"100"])
(({Log 3, "Badezimmer Licht und Sonos: an"}),(set Sonos_Badezimmer Play))
DOELSEIF ([OG_Badezimmer_Schalter:"400"] and [?Sonos_Badezimmer:transportState] eq "PLAYING")
(({Log 3, "Badezimmer Licht und Sonos: aus"}),(set Sonos_Badezimmer Pause))
FUUID 5ddbfc54-f33f-5dcf-43de-1d4fa3a514f0d597
MODEL FHEM
NAME di_Sonos_HueDimmer_OnOff_Badezimmer
NOTIFYDEV global,OG_Badezimmer_Schalter
NR 496
NTFY_ORDER 50-di_Sonos_HueDimmer_OnOff_Badezimmer
STATE cmd_2
TYPE DOIF
VERSION 22913 2020-10-04 21:46:02
READINGS:
2020-10-11 15:06:32 Device OG_Badezimmer_Schalter
2020-10-11 15:06:32 cmd 2
2020-10-11 15:06:32 cmd_event OG_Badezimmer_Schalter
2020-10-11 15:06:32 cmd_nr 2
2020-10-11 15:06:32 e_OG_Badezimmer_Schalter_events 4002,reachable: 1,battery: 77,batteryPercent: 77
2020-10-09 22:47:15 mode enabled
2020-10-11 15:06:32 state cmd_2
2020-10-11 14:38:01 timer_01_c01 12.10.2020 06:00:00
2020-10-11 14:38:01 timer_02_c01 11.10.2020 22:00:00
Regex:
accu:
cond:
OG_Badezimmer_Schalter:
0:
&STATE ^OG_Badezimmer_Schalter$
1:
&STATE ^OG_Badezimmer_Schalter$
attr:
cmdState:
wait:
waitdel:
condition:
0 ::DOIF_time($hash,0,1,$wday,$hms) and ::EventDoIf('OG_Badezimmer_Schalter',$hash,'100',1)
1 ::EventDoIf('OG_Badezimmer_Schalter',$hash,'400',1) and ::ReadingValDoIf($hash,'Sonos_Badezimmer','transportState') eq "PLAYING"
days:
do:
0:
0 ({Log 3, "Badezimmer Licht und Sonos: an"}),(set Sonos_Badezimmer Play)
1:
0 ({Log 3, "Badezimmer Licht und Sonos: aus"}),(set Sonos_Badezimmer Pause)
2:
helper:
DEVFILTER ^global$|^OG_Badezimmer_Schalter$
NOTIFYDEV global|OG_Badezimmer_Schalter
event 4002
globalinit 1
last_timer 2
sleeptimer -1
timerdev OG_Badezimmer_Schalter
timerevent 4002
triggerDev OG_Badezimmer_Schalter
timerevents:
4002
reachable: 1
battery: 77
batteryPercent: 77
timereventsState:
state: 4002
reachable: 1
battery: 77
batteryPercent: 77
triggerEvents:
4002
reachable: 1
battery: 77
batteryPercent: 77
triggerEventsState:
state: 4002
reachable: 1
battery: 77
batteryPercent: 77
internals:
interval:
0 -1
1 0
intervalfunc:
localtime:
0 1602475200
1 1602446400
perlblock:
readings:
realtime:
0 06:00:00
1 22:00:00
time:
0 06:00:00
1 22:00:00
timeCond:
0 0
1 0
timer:
0 0
1 0
timers:
0 0 1
trigger:
all OG_Badezimmer_Schalter
triggertime:
1602446400:
localtime 1602446400
hash:
1602475200:
localtime 1602475200
hash:
uiState:
uiTable:
Attributes:
devStateIcon cmd_1:control_standby@green .*:control_standby@grey
do always
group DOIF inkl Homebridge Switch
room Obergeschoss->Badezimmer,System->DOIF
Habt Ihr eine Ahnung, woran das liegen könnte? Wie kann ich das Problem eingrenzen?
Danke euch und Gruß Hoppel
Ich vermute, der matcht auch "battery: 100" als 100
Mach mal ein ^ vor den Zahlen:
[OG_Kueche_Schalter:"^100"]
Oh man, wenn ich dich nicht hätte. Da wäre ich nie drauf gekommen. ::)
Danke dir! Das war's! In diesem Sinne wünsche dir noch einen schönen Sonntag!
Gruß Hoppel