... mehrere Events von Devices mit einem Ausdruck erfassen?

Begonnen von M_I_B, 26 Oktober 2016, 08:58:10

Vorheriges Thema - Nächstes Thema

M_I_B

Moin liebe Leute,

ich bin mal wieder zu blind  >:(

In einer DOIF möchte ich entweder alle 60 Sekunden oder aber bei Auftreten eines Events von einem der insg. 17 Devices einen Trigger haben.

([+60] or [hz.*] or [ww.*] or [HW.*]) (set l_temp | [hzsp:state] | [hzvl:state] | [hzrl:state] | [wwsp:state] | [wwsh:state] | [wwvl:state] | [wwrl:state] | [wwzv:state] | [wwzr:state] | [HWBR:state] | [HWHP:state] | [HWWP:state] | [HWZP:state] | [res:state] | [HWi1:state] | [HWi2:state] | [HWi3:state] |)

Also [hz.*] z.B. klappt ja nicht; das läuft auf einen "error: Wrong timespec hz.*: either HH:MM:SS or {perlcode}". Auch ["hz.*"] und ein paar andere Versuche generieren Fehler dieser Art oder auch direkt in Perl ala "PERL WARNING: ^* matches null string many times in regex; marked by <-- HERE in m/^* <-- HERE $/ at fhem.pl line 4142."

Frage ist also, wie ich einen Event in einem der mit "hz..." oder "hw..." oder was auch immer beginnenden Devices erfassen kann, ohne jedes Device explizit aufführen zu müssen. Ich bin mir sicher, das es irgendwie geht, aber irgendwie bin ich heuer zu dumpf, um drauf zu kommen ...

Ellert

Kann ich nicht nachvollziehen, bei mir funktioniert ["hz.*"], getestet mit
(["du.*"]) ({Log 1, "$EVENTS"})

Ergebnis
Zitat2016.10.26 12:21:13 1: x1

abc2006

Den Unterschied, den ich sehe, sind die "" bei Ellert ..??

Grüße
Stephan
FHEM nightly auf Intel Atom (lubuntu) mit VDSL 50000 ;-)
Nutze zur Zeit OneWire und KNX

M_I_B

#3
... na wenn das so ist, war ich ja schon fast richtig; nur noch die beiden dargestellten Versuche zusammenfügen ...

([+60] or ["hz.*"] or ["ww.*"] or ["HW.*"]) (set l_temp blablub ...)

... und so tun? Probiere ich gleich mal ... (tictoc...)

Nö. Sobald ich das wie o.a. eintrage, erhalte ich wieder den Perl- Fehler "PERL WARNING: ^* matches null string many times in regex; marked by <-- HERE in m/^* <-- HERE $/ at fhem.pl line 4142.". Allerdings sind nun die Fehler mit der "error: Wrong timespec hz.*: either HH:MM:SS or {perlcode}" weg, die ja direkt in der GUI beim DOIF angezeigt wurden.

BTW: der PERL- Fehler taucht nur ein mal auf, wenn FHEM komplett neu gestartet wird, nicht aber bei einem ReReadCFG ...

abc2006

gehts denn, wenn du *nur* "hz.*" verwendest? ohne das "or" ?


Grüße
Stephan
FHEM nightly auf Intel Atom (lubuntu) mit VDSL 50000 ;-)
Nutze zur Zeit OneWire und KNX

M_I_B

... gerade probiert ...
define l_set DOIF (["HW.*"]) (set l_temp blablub
... generiert ebenfalls beim Neustart des Systems den PERL- Fehler, aber nicht bei ReReadCFG und nicht im DOIF selber. Events werden von allem was mit HW... anfängt ausgelöst (HW = Hardware). Zumindest das ist ok und ja gewollt. Bleibt also die Frage, woher der PERL- Fehler kommt ...


abc2006

#6
Zeig mal bitte die attribute deiner HW.* devices. Ich suche gerade nach event*- Attributen, wie zb event-on-change oder event-on-update usw..
Zeile 4142 bezieht sich nämlich möglicherweise auf die feststellung von events..

Kannst du (davon unabhängig) mal ein device TEST anlegen (ohne attribute), und schauen, ob [TEST.*] funktioniert?

Stephan

Edit: ich kanns nicht nachstellen... bei mir geht bisher jede variante.. wann hast du das letzte update gemacht?
FHEM nightly auf Intel Atom (lubuntu) mit VDSL 50000 ;-)
Nutze zur Zeit OneWire und KNX

M_I_B

also die HW- Outputs sehen alle so aus (5 an der Zahl):
Internals:
   CFGFN      ./_HW/gpio_out.cfg
   DEF        16
   GPIO_Basedir /sys/class/gpio
   NAME       HWBR
   NR         39
   RPI_pin    16
   STATE      off
   TYPE       RPI_GPIO
   WiringPi_gpio /usr/local/bin/gpio
   Readings:
     2016-10-26 17:06:48   Pinlevel        low
     2016-10-26 17:06:53   state           off
   Fhem:
     interfaces switch
Attributes:
   alias      Öl- Brenner
   devStateIcon off:sani_boiler@gray on:sani_boiler@red
   direction  output
   group      Aktoren
   room       KG.Heizung
   sortby     1
   webCmd     :

Die HW- Inputs so (3 an der Zahl):
Internals:
   CFGFN      ./_HW/gpio_in.cfg
   DEF        17
   EXCEPT_FD  10
   GPIO_Basedir /sys/class/gpio
   NAME       HWi1
   NR         51
   RPI_pin    17
   STATE      off
   TYPE       RPI_GPIO
   WiringPi_gpio /usr/local/bin/gpio
   lasttrg    1477493210.57009
   Readings:
     2016-10-26 17:01:29   Dblclick        off
     2016-10-26 17:01:29   Longpress       off
     2016-10-26 17:08:55   Pinlevel        low
     2016-10-26 17:01:29   state           off
   Fhem:
     interfaces switch
Attributes:
   active_low yes
   alias      Brenner Betrieb
   devStateIcon off:sani_boiler@gray on:sani_boiler@red
   direction  input
   group      Rückmeldungen
   interrupt  both
   pud_resistor off
   room       KG.Heizung
   sortby     6
   toggletostate yes


Das mit dem TEST- device probiere ich gleich mal; bin gerade etwas busy...

abc2006

muss gleich los, fasse nochmal kurz meine Gedanken zusammen:

fhem aktuell?
Test-device probieren
Fehler tritt NUR an den HW-Devices auf? alle anderen funktionieren wie gewünscht?

Grüße
Stephan
FHEM nightly auf Intel Atom (lubuntu) mit VDSL 50000 ;-)
Nutze zur Zeit OneWire und KNX

M_I_B

zu 1: Ja, Update von gestern
zu 2: Kommt nachher
zu 3: Genau richtig. Alles andere verursachte nicht diesen Fehler

Damian

Zitat von: M_I_B am 26 Oktober 2016, 17:19:49
zu 1: Ja, Update von gestern
zu 2: Kommt nachher
zu 3: Genau richtig. Alles andere verursachte nicht diesen Fehler

was passiert bei:

define l_set DOIF (["^HW"]) (set l_temp blablub

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

M_I_B

@ Damian:  Habe ich gerade ausprobiert: Selbe Fehlermeldung

@ abc2006: Test- Device: Keine (!) Fehlermeldung

Zusätzlicher Test: Zwei "echte" HM- Devices, Event abgegriffen mit "define LUM_set DOIF (["HM2BB"]) ..." (heißen okkinol HM2BB1 und HM2BB2). Keine (!) Fehlermeldung

abc2006

Wäre jetzt auch meine nächste Frage gewesen, was passiert, wenn du die Devices vollständig auflistest, ohne regex.
["HM2BB"] reagiert tatsächlich auch auf Events von HM2BB2?

Nicht unmöglich ;-), irritiert mich aber...

grüße

Stephan
FHEM nightly auf Intel Atom (lubuntu) mit VDSL 50000 ;-)
Nutze zur Zeit OneWire und KNX

M_I_B

#13
... ja, tatsächlich. Ich hatte vor längerer Zeit mal eine diesbezügliche Frage hier im Forum gestellt und bekam genau diesen Hint, um Events von mehreren Devices mit einem Schlag erfassen zu können, die alle mit den gleichen Namen beginnen.

Wenn ich das noch richtig im Kopf habe ist....

["HM2BB"] identisch mit [HM2BB1] or [HM2BB2] or [HM2BBx]
... resp sollte dann auch ...
["HW"] identisch sein mit [HWBR] or [HWHP] or [HWLP] or [HWZP] or [HWi1] or [HWi2] or [HWi3]


EDIT: Hier ein Beispiel, das es auch funktioniert. Die HM2BBx sind HM-Bewegungsmelder. Die Events sind von gerade eben...

Internals:
   CFGFN      /opt/fhem/_INC/00_Global_Sonne_real.cfg
   DEF        (["HM2BB"])
(set LUM W3 [LUM:W2], set LUM W2 [LUM:W1], set LUM W1 [LUM:W0], set LUM W0 {([HM2BB1:brightness]+[HM2BB2:brightness])/2})
(set LUM {(int((100*(([HM2BB1:brightness]+[HM2BB2:brightness])/2+0.5))/250))})
   NAME       LUM_set
   NR         890
   NTFY_ORDER 50-LUM_set
   STATE      cmd_1
   TYPE       DOIF
   Readings:
     2016-10-27 13:56:45   Device          HM2BB2
     2016-10-27 13:56:45   cmd             1.2
     2016-10-27 13:56:45   cmd_event       HM2BB2
     2016-10-27 13:56:45   cmd_nr          1
     2016-10-27 13:56:45   cmd_seqnr       2
     2016-10-27 13:56:45   matched_event_c1_1 motion: off,noMotion
     2016-10-27 13:56:45   state           cmd_1
     2016-10-27 13:54:05   timer_1_c1      27.10.2016 13:59:05
   Condition:
     0          EventDoIf('HM2BB',$hash,'',0)
   Devices:
   Do:
     0:
       0          set LUM W3 [LUM:W2], set LUM W2 [LUM:W1], set LUM W1 [LUM:W0], set LUM W0 {([HM2BB1:brightness]+[HM2BB2:brightness])/2}
       1          set LUM {(int((100*(([HM2BB1:brightness]+[HM2BB2:brightness])/2+0.5))/250))}
   Helper:
     event      motion: off,noMotion
     globalinit 1
     last_timer 0
     sleeptimer -1
     timerdev   HM2BB2
     timerevent motion: off,noMotion
     triggerDev HM2BB2
     timerevents:
       motion: off
       noMotion
     timereventsState:
       motion: off
       state: noMotion
     triggerEvents:
       motion: off
       noMotion
     triggerEventsState:
       motion: off
       state: noMotion
   Internals:
   Itimer:
   Readings:
   Regexp:
     0:
       0          HM2BB
     All:
       0          HM2BB
   State:
   Trigger:
Attributes:
   do         always

abc2006

Okay, also ist die gewünschte Funktion jetzt gegeben? Wundern tuts mich trotzdem...

lol: da stehts ja eigentlich sogar:

Zitat
Beispiele für Regex-Angaben:

["FS"] triggert auf alle Devices, die "FS" im Namen beinhalten
["^FS"] triggert auf alle Devices, die mit "FS" im Namen anfangen
["FS:temp"] triggert auf alle Devices, die "FS" im Namen und "temp" im Event beinhalten
([":^temp"]) triggert auf beliebige Devices, die im Event mit "temp" beginnen
(["^FS$:^temp$"] triggert auf Devices, die genau "FS" heißen und im Event genau "temp" vorkommt
[""] triggert auf alles


naja, hab ich auch was gelernt :-)

Grüße
Stephan
FHEM nightly auf Intel Atom (lubuntu) mit VDSL 50000 ;-)
Nutze zur Zeit OneWire und KNX