Hauptmenü

DOELSE mit regulärem Ausdruck

Begonnen von Muschelpuster, 02 Mai 2016, 08:53:59

Vorheriges Thema - Nächstes Thema

Muschelpuster

Hallo zusammen,

Ich habe in Bezug auf eine Frage hier mal was ausprobiert und bin gescheitert:define Test_1 dummy
attr Test_1 devStateIcon an:general_an:aus aus:general_aus:an
attr Test_1 room Test
define Test_2 dummy
attr Test_2 devStateIcon an:general_an:aus aus:general_aus:an
attr Test_2 room Test
define Test_3 dummy
attr Test_3 devStateIcon an:general_an:aus aus:general_aus:an
attr Test_3 room Test
define Test_4 dummy
attr Test_4 devStateIcon an:general_an:aus aus:general_aus:an
attr Test_4 room Test
define Ergebnis dummy
attr Ergebnis room Test
define di_Test DOIF (["^Test_"] eq "an") (set Ergebnis ein) DOELSE (set Ergebnis aus)
attr di_Test do always
attr di_Test room Test

Ich hätte jetzt erwartet, dass das Einschalten eines Dummy immer das Ergebnis auf ein setzt und wenn alle Dummys aus sind auch das DOELSE greift. Das geht aber nicht, stattdessen greift das DOELSE, wenn ich einen Dummy einschalte  :o

verwirrte Grüße
Niels

fhem @ ZBOX mit 1,6MHz Celeron, 4GB RAM & 120GB SSD mit Debian Bullseye # MiLight # Homematic via CCU3 # W&T WebIO # Rademacher DuoFern # ESPeasy # logdb@mysql # configdb@mysql # Shelly @ MQTT2 # go-eCharger mit PV-Überschussladung via DOIF

Per

Dann schau dir doch mal das List  von Ergebnis an. Oder häng es hier mit rein.

Muschelpuster

Na ja, dann doch lieber das list von di_Test  ;)
Hier mal nach Test_1 = an:
Internals:
   CFGFN
   DEF        (["^Test_"] eq "an") (set Ergebnis ein)
DOELSE
(set Ergebnis aus)
   NAME       di_Test
   NR         57737
   NTFY_ORDER 50-di_Test
   STATE      cmd_2
   TYPE       DOIF
   Readings:
     2016-05-02 09:21:01   Device          Test_1
     2016-05-02 09:21:01   cmd_event       Test_1
     2016-05-02 09:21:01   cmd_nr          2
     2016-05-02 09:21:01   matched_event_c1_1 an
     2016-05-02 09:21:01   state           cmd_2
   Condition:
     0          EventDoIf('^Test_',$hash,'',0) eq "an"
   Devices:
   Do:
     0:
       0          set Ergebnis ein
     1:
       0          set Ergebnis aus
   Helper:
     event      an
     globalinit 1
     last_timer 0
     sleeptimer -1
     timerdev   Test_1
     timerevent an
     triggerDev Test_1
     timerevents:
       an
     triggerEvents:
       an
   Internals:
   Itimer:
   Readings:
   Regexp:
     0:
       0          ^Test_
     All:
       0          ^Test_
   State:
   Trigger:
Attributes:
   do         always
   room       Test
Da verstehe ich nicht, warum der Status auf cmd_2 steht...

Und hier Test_1 wieder aus:Internals:
   CFGFN
   DEF        (["^Test_"] eq "an") (set Ergebnis ein)
DOELSE
(set Ergebnis aus)
   NAME       di_Test
   NR         57737
   NTFY_ORDER 50-di_Test
   STATE      cmd_2
   TYPE       DOIF
   Readings:
     2016-05-02 09:25:01   Device          Test_1
     2016-05-02 09:25:02   cmd_event       Test_1
     2016-05-02 09:25:02   cmd_nr          2
     2016-05-02 09:25:01   matched_event_c1_1 aus
     2016-05-02 09:25:02   state           cmd_2
   Condition:
     0          EventDoIf('^Test_',$hash,'',0) eq "an"
   Devices:
   Do:
     0:
       0          set Ergebnis ein
     1:
       0          set Ergebnis aus
   Helper:
     event      aus
     globalinit 1
     last_timer 0
     sleeptimer -1
     timerdev   Test_1
     timerevent aus
     triggerDev Test_1
     timerevents:
       aus
     triggerEvents:
       aus
   Internals:
   Itimer:
   Readings:
   Regexp:
     0:
       0          ^Test_
     All:
       0          ^Test_
   State:
   Trigger:
Attributes:
   do         always
   room       Test
OK, funktionieren wird das wohl eh nicht, weil der Trigger nun das DOELSE unabhängig vom Status der anderen Test_-Dummys fordert, aber warum Teil 1 nicht geht...

ahnungslose Grüße
Niels
fhem @ ZBOX mit 1,6MHz Celeron, 4GB RAM & 120GB SSD mit Debian Bullseye # MiLight # Homematic via CCU3 # W&T WebIO # Rademacher DuoFern # ESPeasy # logdb@mysql # configdb@mysql # Shelly @ MQTT2 # go-eCharger mit PV-Überschussladung via DOIF

Damian

Zitat von: Muschelpuster am 02 Mai 2016, 09:28:16
Na ja, dann doch lieber das list von di_Test  ;)
Hier mal nach Test_1 = an:
Internals:
   CFGFN
   DEF        (["^Test_"] eq "an") (set Ergebnis ein)
DOELSE
(set Ergebnis aus)
   NAME       di_Test
   NR         57737
   NTFY_ORDER 50-di_Test
   STATE      cmd_2
   TYPE       DOIF
   Readings:
     2016-05-02 09:21:01   Device          Test_1
     2016-05-02 09:21:01   cmd_event       Test_1
     2016-05-02 09:21:01   cmd_nr          2
     2016-05-02 09:21:01   matched_event_c1_1 an
     2016-05-02 09:21:01   state           cmd_2
   Condition:
     0          EventDoIf('^Test_',$hash,'',0) eq "an"
   Devices:
   Do:
     0:
       0          set Ergebnis ein
     1:
       0          set Ergebnis aus
   Helper:
     event      an
     globalinit 1
     last_timer 0
     sleeptimer -1
     timerdev   Test_1
     timerevent an
     triggerDev Test_1
     timerevents:
       an
     triggerEvents:
       an
   Internals:
   Itimer:
   Readings:
   Regexp:
     0:
       0          ^Test_
     All:
       0          ^Test_
   State:
   Trigger:
Attributes:
   do         always
   room       Test
Da verstehe ich nicht, warum der Status auf cmd_2 steht...

Und hier Test_1 wieder aus:Internals:
   CFGFN
   DEF        (["^Test_"] eq "an") (set Ergebnis ein)
DOELSE
(set Ergebnis aus)
   NAME       di_Test
   NR         57737
   NTFY_ORDER 50-di_Test
   STATE      cmd_2
   TYPE       DOIF
   Readings:
     2016-05-02 09:25:01   Device          Test_1
     2016-05-02 09:25:02   cmd_event       Test_1
     2016-05-02 09:25:02   cmd_nr          2
     2016-05-02 09:25:01   matched_event_c1_1 aus
     2016-05-02 09:25:02   state           cmd_2
   Condition:
     0          EventDoIf('^Test_',$hash,'',0) eq "an"
   Devices:
   Do:
     0:
       0          set Ergebnis ein
     1:
       0          set Ergebnis aus
   Helper:
     event      aus
     globalinit 1
     last_timer 0
     sleeptimer -1
     timerdev   Test_1
     timerevent aus
     triggerDev Test_1
     timerevents:
       aus
     triggerEvents:
       aus
   Internals:
   Itimer:
   Readings:
   Regexp:
     0:
       0          ^Test_
     All:
       0          ^Test_
   State:
   Trigger:
Attributes:
   do         always
   room       Test
OK, funktionieren wird das wohl eh nicht, weil der Trigger nun das DOELSE unabhängig vom Status der anderen Test_-Dummys fordert, aber warum Teil 1 nicht geht...

ahnungslose Grüße
Niels

Angaben der Form ["..."] stellen eine Ereignisabfrage dar und die kann nur wahr (zum Zeitpunkt der Triggerung) oder nicht wahr sein.

Daher immer nur  (["^Test_"]) (set ...) angeben.

Gruß

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

Muschelpuster

Danke, das macht ja auch irgendwie Sinn - ansonsten wäre ja auch immer die Frage, ob es sich hier um eine UND- oder eine ODER-Verknüpfung handeln würde.

verstandene Grüße
Niels
fhem @ ZBOX mit 1,6MHz Celeron, 4GB RAM & 120GB SSD mit Debian Bullseye # MiLight # Homematic via CCU3 # W&T WebIO # Rademacher DuoFern # ESPeasy # logdb@mysql # configdb@mysql # Shelly @ MQTT2 # go-eCharger mit PV-Überschussladung via DOIF