[Gelöst] DOIF $DEVICE delstruct Fehler

Begonnen von SirMarco, 15 April 2022, 12:31:37

Vorheriges Thema - Nächstes Thema

SirMarco

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

Damian

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")


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

SirMarco

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")

Damian

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
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

SirMarco

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

Damian

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
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

SirMarco

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

Damian

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)
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

SirMarco


Per

Statt die structure zu aktualisieren würde ich mit "Filter" arbeiten.