*gelöst * Doif löst bei bestimmten Reading Inhalt nur 1 mal aus, sonst immer

Begonnen von Garbsen, 05 Januar 2017, 19:30:26

Vorheriges Thema - Nächstes Thema

Garbsen

Ich weiß, die Überschrift klingt seltsam, das Verhalten des DOIF aber auch und ich weiß wirklich nicht, wie ich es kurz beschreiben soll.

Ich habe ein DOIF, das bei Änderung eines eigenen Readings auslösen soll und den Inhalt des Readings an ein anderes Device weitergeben soll. (für Testzwecke hier ein dummy)

Das Reading kann Werte von 0 bis 4 annehmen. Nach Initalizierung reagiert das DOIF auf alle Readingänderungen, inclusive 0. danach aber nur noch auf Änderungen zu 1 - 4.

D.h. Z.B.: 1. Durchgang : Reading wird auf 0 gesetzt - Dummy wird auf 0 gesetzt
2. Durchgang: Reading wird auf 1 gesetzt - Dummy wird auf 1 gesetzt
3. Durchgang: Reading wird auf 0 gesetzt - Dummy ändert sich nicht
4. Durchgang: Reading wird auf 3 gesetzt - Dummy wird auf 3 gesetzt
5. Durchgang : Reding wird auf 0 gesetzt - Dummy ändert sich nicht

Dieses Verhalten ist unabhängig davon, ob nach Initialisierung das Reading erstmal auf 0moder einen anderen Wert gesetzt wird.

Wir gesagt, das Setzen auf 0 löst das DOIF exakt 1 mal aus, das Setzen des Readings auf andere Werte (1-4) löst das DOIF jedesmal aus.

Was übersehe ich?

Anbei ein List

Danke
K-H


Internals:
   CFGFN
   DEF        ([$SELF:Modus]) (set Test [$SELF:Modus])
   NAME       Test_Doif
   NR         6347
   NTFY_ORDER 50-Test_Doif
   STATE      cmd_1
   TYPE       DOIF
   Readings:
     2017-01-05 19:12:32   Device          Test_Doif
     2017-01-05 19:12:32   Modus           0
     2017-01-05 19:12:19   cmd             1
     2017-01-05 19:12:19   cmd_event       Test_Doif
     2017-01-05 19:12:19   cmd_nr          1
     2017-01-05 19:12:32   e_Test_Doif_Modus 0
     2017-01-05 19:12:19   state           cmd_1
   Condition:
     0          ReadingValDoIf($hash,'Test_Doif','Modus')
   Devices:
     0           Test_Doif
     all         Test_Doif
   Do:
     0:
       0          set Test [Test_Doif:Modus]
     1:
   Helper:
     event      Modus: 0,Device: Test_Doif,e_Test_Doif_Modus: 0
     globalinit 1
     last_timer 0
     sleeptimer -1
     timerdev   Test_Doif
     timerevent Modus: 3,Device: Test_Doif,e_Test_Doif_Modus: 3
     triggerDev Test_Doif
     timerevents:
       Modus: 3
       Device: Test_Doif
       e_Test_Doif_Modus: 3
       cmd_nr: 1
       cmd: 1
       cmd_event: Test_Doif
       cmd_1
     timereventsState:
       Modus: 3
       Device: Test_Doif
       e_Test_Doif_Modus: 3
       cmd_nr: 1
       cmd: 1
       cmd_event: Test_Doif
       cmd_1
     triggerEvents:
       Modus: 0
       Device: Test_Doif
       e_Test_Doif_Modus: 0
     triggerEventsState:
       Modus: 0
       Device: Test_Doif
       e_Test_Doif_Modus: 0
   Internals:
   Itimer:
   Readings:
     0           Test_Doif:Modus
     all         Test_Doif:Modus
   Regexp:
     0:
     All:
   State:
   Trigger:
Attributes:
   do         always
   readingList Modus
   room       DOIF_Labor
   selftrigger all
   setList    Modus:0,1,2,3,4
   userReadings Modus
   webCmd     Modus
FHEM und Homebridge auf Intel NUC, CUL 868 v 1.66, CUL466 V 1.66, SOMFY RTS Rolläden, HM-LC-Bl1PBU-FM, HM-LC-BL1-FM, HM-SEC-SC-2, HM-SEC-RHS, HM-WDS10-TH-O, HM-SEC-WDS-2, HM-Sen-LI-O, HM-CC-RT-DN, HM-LC-Sw1-Pl-DN-R1, HM-SCI-3-FM, HM-Sec-Sir-WM, HM-PB-2-WM55-2, HM-RC-8, HM-LC-SW1-PL2, Alpha2

Damian

[$SELF:Modus] ist ein Reading. Die Bedingung von DOIF ist gleichzeitig Perl und in Perl ist die Bedingung if ($variable) wahr,  wenn $variable (bei dir [$SELF:Modus])  ungleich Null ist.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Garbsen

Zitat von: Damian am 05 Januar 2017, 19:56:27
[$SELF:Modus] ist ein Reading. Die Bedingung von DOIF ist gleichzeitig Perl und in Perl ist die Bedingung if ($variable) wahr,  wenn $variable (bei dir [$SELF:Modus])  ungleich Null ist.

Klingt nachvollziehbar, gibt es eine (einfache) Lösung? Das Problem ist, dass ich auf den Wert 0 angewiesen bin. Bin leider in Perl nicht gerade fit
FHEM und Homebridge auf Intel NUC, CUL 868 v 1.66, CUL466 V 1.66, SOMFY RTS Rolläden, HM-LC-Bl1PBU-FM, HM-LC-BL1-FM, HM-SEC-SC-2, HM-SEC-RHS, HM-WDS10-TH-O, HM-SEC-WDS-2, HM-Sen-LI-O, HM-CC-RT-DN, HM-LC-Sw1-Pl-DN-R1, HM-SCI-3-FM, HM-Sec-Sir-WM, HM-PB-2-WM55-2, HM-RC-8, HM-LC-SW1-PL2, Alpha2

Garbsen

Habe selbst ein Lösung gefunden:
Ich habe beim Reading zusätzlich zu den Zahlen einen Text hinzugefügt, damit funktioniert der Trigger, im set Befehl habe ich dann mit :d die Zahl isoliert

Wenn jemand noch eine andere bessere Lösung kennt:gerne!

Internals:
   CFGFN
   DEF        ([$SELF:Modus])
(set Test [$SELF:Modus:d])
   NAME       Test_Doif1
   NR         8657
   NTFY_ORDER 50-Test_Doif1
   STATE      cmd_1
   TYPE       DOIF
   Readings:
     2017-01-05 20:34:20   Device          Test_Doif1
     2017-01-05 20:34:13   Eingabe         0
     2017-01-05 20:34:20   Modus           1=Tag
     2017-01-05 20:34:20   cmd             1
     2017-01-05 20:34:20   cmd_event       Test_Doif1
     2017-01-05 20:34:20   cmd_nr          1
     2017-01-05 20:34:20   e_Test_Doif1_Modus 1=Tag
     2017-01-05 20:34:20   state           cmd_1
   Condition:
     0          ReadingValDoIf($hash,'Test_Doif1','Modus')
   Devices:
     0           Test_Doif1
     all         Test_Doif1
   Do:
     0:
       0          set Test [Test_Doif1:Modus:d]
   Helper:
     event      Modus: 1=Tag,Device: Test_Doif1,e_Test_Doif1_Modus: 1=Tag
     globalinit 1
     last_timer 0
     sleeptimer -1
     timerdev   Test_Doif1
     timerevent Modus: 1=Tag,Device: Test_Doif1,e_Test_Doif1_Modus: 1=Tag
     triggerDev Test_Doif1
     timerevents:
       Modus: 1=Tag
       Device: Test_Doif1
       e_Test_Doif1_Modus: 1=Tag
       cmd_nr: 1
       cmd: 1
       cmd_event: Test_Doif1
       cmd_1
     timereventsState:
       Modus: 1=Tag
       Device: Test_Doif1
       e_Test_Doif1_Modus: 1=Tag
       cmd_nr: 1
       cmd: 1
       cmd_event: Test_Doif1
       cmd_1
     triggerEvents:
       Modus: 1=Tag
       Device: Test_Doif1
       e_Test_Doif1_Modus: 1=Tag
       cmd_nr: 1
       cmd: 1
       cmd_event: Test_Doif1
       cmd_1
     triggerEventsState:
       Modus: 1=Tag
       Device: Test_Doif1
       e_Test_Doif1_Modus: 1=Tag
       cmd_nr: 1
       cmd: 1
       cmd_event: Test_Doif1
       cmd_1
   Internals:
   Itimer:
   Readings:
     0           Test_Doif1:Modus
     all         Test_Doif1:Modus
   Regexp:
     0:
     All:
   State:
   Trigger:
Attributes:
   do         always
   readingList Modus
   room       DOIF_Labor
   selftrigger all
   setList    Modus:0=Auto,1=Tag,2=Nacht
   webCmd     Modus
FHEM und Homebridge auf Intel NUC, CUL 868 v 1.66, CUL466 V 1.66, SOMFY RTS Rolläden, HM-LC-Bl1PBU-FM, HM-LC-BL1-FM, HM-SEC-SC-2, HM-SEC-RHS, HM-WDS10-TH-O, HM-SEC-WDS-2, HM-Sen-LI-O, HM-CC-RT-DN, HM-LC-Sw1-Pl-DN-R1, HM-SCI-3-FM, HM-Sec-Sir-WM, HM-PB-2-WM55-2, HM-RC-8, HM-LC-SW1-PL2, Alpha2

Damian

Zitat von: Garbsen am 05 Januar 2017, 20:06:00
Klingt nachvollziehbar, gibt es eine (einfache) Lösung? Das Problem ist, dass ich auf den Wert 0 angewiesen bin. Bin leider in Perl nicht gerade fit

Ganz einfach, dann musst du nach Ereignissen und nicht nach Readings triggern:

[$SELF:"Modus"]
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF