Hallo zusammen
Ich hoffe der Betreff ist verständlich.
Ziel: Mit einem DOIF eine structure anpassen. Es sollen nur eingeschaltete Devices in der structure sein, denn ich möchte nur die eingeschalteten Lampen dimmen mit einem Slider in Fhem
Das DOIF gibt folgenden Error aus:
delstruct test_structure : Usage: delstruct <structure_device> <devspec>
Das DOIF:
Internals:
DEF (["^LG_Garten_Hue_Licht_Calla:onoff"] eq "1") (addstruct test_structure $DEVICE) DOELSEIF (["^LG_Garten_Hue_Licht_Calla:onoff"] eq "0") (delstruct test_structure $DEVICE) DOELSE
FUUID 6259312c-f33f-abcc-3291-a4ed65bfe0b7d8bb
MODEL FHEM
NAME doif_test_structure
NOTIFYDEV .*(^LG_Garten_Hue_Licht_Calla).*,global
NR 301
NTFY_ORDER 50-doif_test_structure
STATE cmd_2
TYPE DOIF
VERSION 25946 2022-04-11 08:24:02
READINGS:
2022-04-15 12:21:14 cmd 2
2022-04-15 12:21:14 cmd_event doif_test_structure
2022-04-15 12:21:14 cmd_nr 2
2022-04-15 12:21:14 error delstruct test_structure : Usage: delstruct
2022-04-15 12:21:12 mode enabled
2022-04-15 12:21:14 state cmd_2
Regex:
accu:
collect:
cond:
:
0:
"^LG_Garten_Hue_Licht_Calla:onoff" ^LG_Garten_Hue_Licht_Calla:onoff
1:
"^LG_Garten_Hue_Licht_Calla:onoff" ^LG_Garten_Hue_Licht_Calla:onoff
attr:
cmdState:
wait:
waitdel:
condition:
0 ::EventDoIf('^LG_Garten_Hue_Licht_Calla',$hash,'onoff',0) eq "1"
1 ::EventDoIf('^LG_Garten_Hue_Licht_Calla',$hash,'onoff',0) eq "0"
do:
0:
0 addstruct test_structure $DEVICE
1:
0 delstruct test_structure $DEVICE
2:
0
helper:
NOTIFYDEV .*(^LG_Garten_Hue_Licht_Calla).*,global
globalinit 1
last_timer 0
sleeptimer -1
timerdev
timerevent
timerevents
timereventsState
triggerDev
DOIF_eventa:
cmd_nr: 2
cmd: 2
cmd_event: doif_test_structure
error: delstruct test_structure : Usage: delstruct
cmd_2
DOIF_eventas:
cmd_nr: 2
cmd: 2
cmd_event: doif_test_structure
error: delstruct test_structure : Usage: delstruct
state: cmd_2
hmccu:
uiState:
uiTable:
Attributes:
DbLogExclude .*
do always
group *
room 00_Test
sortby 99
Bei jedem ein und ausschalten der Lampe wird das Device erneut der structure hinzugefügt, aber nicht gelöscht. In Bedienung 2 wird das Device nicht übergeben.
Was mache ich falsch?
Liebe Grüsse und schöne Ostertage
Grundsätzlich hast du deine Bedingungen falsch formuliert: Ereignisabfragen können nur wahr oder unwahr sein, aber keine Inhalte von etwas liefern, daher solltest du deine Bedingungen auf Zustandsabfragen mit Trigger ändern:
([LG_Garten_Hue_Licht_Calla:onoff] eq "1") bzw. ([LG_Garten_Hue_Licht_Calla:onoff] eq "0")
Danke für deine Antwort
Die Lampen die ich steuern möchte heißen:
LG_Garten_Hue_Licht_Calla1
LG_Garten_Hue_Licht_Calla2
LG_Garten_Hue_Licht_Calla3
LG_Garten_Hue_Licht_Calla4
Also setzte ich die Bedingung so?
([LG_Garten_Hue_Licht_Calla.*:onoff] eq "1") bzw. ([LG_Garten_Hue_Licht_Calla.*:onoff] eq "0")
Zitat von: SirMarco am 15 April 2022, 12:42:34
Danke für deine Antwort
Die Lampen die ich steuern möchte heißen:
LG_Garten_Hue_Licht_Calla1
LG_Garten_Hue_Licht_Calla2
LG_Garten_Hue_Licht_Calla3
LG_Garten_Hue_Licht_Calla4
Also setzte ich die Bedingung so?
([LG_Garten_Hue_Licht_Calla.*:onoff] eq "1") bzw. ([LG_Garten_Hue_Licht_Calla.*:onoff] eq "0")
Abfragen eines Zustands (Readings) funktionieren nicht mit Regex, hier muss sowohl das Device als auch das Reading konkret angegeben sein.
Du kannst tatsächlich Events auswerten, wie du es vorher versucht hast, dazu musst du allerdings ein Defaultwert mit Komma setzen, siehe https://fhem.de/commandref_DE.html#DOIF_Ereignissteuerung_ueber_Auswertung_von_Events
Bin ich so auf dem richtigen Wege?
([":^LG_Garten_Hue_Licht_Calla",0] eq 1) (addstruct test_structure $DEVICE) DOELSEIF ([":^LG_Garten_Hue_Licht_Calla",0] eq 0 ) (delstruct test_structure $DEVICE) DOELSE
Zitat von: SirMarco am 15 April 2022, 13:00:45
Bin ich so auf dem richtigen Wege?
([":^LG_Garten_Hue_Licht_Calla",0] eq 1) (addstruct test_structure $DEVICE) DOELSEIF ([":^LG_Garten_Hue_Licht_Calla",0] eq 0 ) (delstruct test_structure $DEVICE) DOELSE
Hängt davon ab wie deine Events aussehen, vor dem Doppelpunkt muss schon die Regex für das Device stehen, hinter dem Doppelpunkt der Rest des Events, also Regex für das Reading
Oh Gott ist das kompliziert für mich.
Dachte ich kann das über das Reading lösen.
Eine "0" steht ebenfalls im event pct, also wird das so nicht funktionieren
2022-04-15 13:07:28 DOIF doif_test_structure_2 cmd_event: LG_Garten_Hue_Licht_Calla5
2022-04-15 13:07:28 HUEDevice LG_Garten_Hue_Licht_Calla5 onoff: 0
2022-04-15 13:07:28 HUEDevice LG_Garten_Hue_Licht_Calla5 pct: 0
2022-04-15 13:07:28 HUEDevice LG_Garten_Hue_Licht_Calla5 off
2022-04-15 13:07:29 DOIF doif_test_structure_2 cmd_event: LG_Garten_Hue_Licht_Calla6
2022-04-15 13:07:29 HUEDevice LG_Garten_Hue_Licht_Calla6 onoff: 0
2022-04-15 13:07:29 HUEDevice LG_Garten_Hue_Licht_Calla6 pct: 0
2022-04-15 13:07:29 HUEDevice LG_Garten_Hue_Licht_Calla6 off
ZitatHängt davon ab wie deine Events aussehen, vor dem Doppelpunkt muss schon die Regex für das Device stehen, hinter dem Doppelpunkt der Rest des Events, also Regex für das Reading
(["LG_Garten_Hue_Licht_Calla:onoff",0] eq 1) (addstruct test_structure $DEVICE) DOELSEIF (["LG_Garten_Hue_Licht_Calla:onoff",0] eq 0 ) (delstruct test_structure $DEVICE) DOELSE
Zitat von: SirMarco am 15 April 2022, 13:16:53
Oh Gott ist das kompliziert für mich.
Dachte ich kann das über das Reading lösen.
Eine "0" steht ebenfalls im event pct, also wird das so nicht funktionieren
2022-04-15 13:07:28 DOIF doif_test_structure_2 cmd_event: LG_Garten_Hue_Licht_Calla5
2022-04-15 13:07:28 HUEDevice LG_Garten_Hue_Licht_Calla5 onoff: 0
2022-04-15 13:07:28 HUEDevice LG_Garten_Hue_Licht_Calla5 pct: 0
2022-04-15 13:07:28 HUEDevice LG_Garten_Hue_Licht_Calla5 off
2022-04-15 13:07:29 DOIF doif_test_structure_2 cmd_event: LG_Garten_Hue_Licht_Calla6
2022-04-15 13:07:29 HUEDevice LG_Garten_Hue_Licht_Calla6 onoff: 0
2022-04-15 13:07:29 HUEDevice LG_Garten_Hue_Licht_Calla6 pct: 0
2022-04-15 13:07:29 HUEDevice LG_Garten_Hue_Licht_Calla6 off
(["LG_Garten_Hue_Licht_Calla:onoff",0] eq 1) (addstruct test_structure $DEVICE) DOELSEIF (["LG_Garten_Hue_Licht_Calla:onoff",0] eq 0 ) (delstruct test_structure $DEVICE) DOELSE
Natürlich kannst du das über das Reading lösen, dann musst du jedes Reading einzeln angeben.
eq wird beim Vergleichen von Zeichenketten benutzt, nicht bei Zahlen, daher:
(["^LG_Garten_Hue_Licht_Calla:^onoff",0] eq "1") (addstruct test_structure $DEVICE) DOELSEIF (["^LG_Garten_Hue_Licht_Calla:^onoff",0] eq "0" ) (delstruct test_structure $DEVICE)
Herzlichen Dank! :)
Grüsse
Statt die structure zu aktualisieren würde ich mit "Filter" arbeiten.