FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: M_I_B am 26 Oktober 2016, 08:58:10

Titel: ... mehrere Events von Devices mit einem Ausdruck erfassen?
Beitrag von: M_I_B am 26 Oktober 2016, 08:58:10
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 ...
Titel: Antw:... mehrere Events von Devices mit einem Ausdruck erfassen?
Beitrag von: Ellert am 26 Oktober 2016, 12:27:00
Kann ich nicht nachvollziehen, bei mir funktioniert ["hz.*"], getestet mit
(["du.*"]) ({Log 1, "$EVENTS"})

Ergebnis
Zitat2016.10.26 12:21:13 1: x1
Titel: Antw:... mehrere Events von Devices mit einem Ausdruck erfassen?
Beitrag von: abc2006 am 26 Oktober 2016, 12:43:03
Den Unterschied, den ich sehe, sind die "" bei Ellert ..??

Grüße
Stephan
Titel: Antw:... mehrere Events von Devices mit einem Ausdruck erfassen?
Beitrag von: M_I_B am 26 Oktober 2016, 15:41:52
... 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 ...
Titel: Antw:... mehrere Events von Devices mit einem Ausdruck erfassen?
Beitrag von: abc2006 am 26 Oktober 2016, 15:56:02
gehts denn, wenn du *nur* "hz.*" verwendest? ohne das "or" ?


Grüße
Stephan
Titel: Antw:... mehrere Events von Devices mit einem Ausdruck erfassen?
Beitrag von: M_I_B am 26 Oktober 2016, 16:48:32
... 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 ...

Titel: Antw:... mehrere Events von Devices mit einem Ausdruck erfassen?
Beitrag von: abc2006 am 26 Oktober 2016, 17:04:50
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?
Titel: Antw:... mehrere Events von Devices mit einem Ausdruck erfassen?
Beitrag von: M_I_B am 26 Oktober 2016, 17:10:03
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...
Titel: Antw:... mehrere Events von Devices mit einem Ausdruck erfassen?
Beitrag von: abc2006 am 26 Oktober 2016, 17:18:09
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
Titel: Antw:... mehrere Events von Devices mit einem Ausdruck erfassen?
Beitrag 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
Titel: Antw:... mehrere Events von Devices mit einem Ausdruck erfassen?
Beitrag von: Damian am 26 Oktober 2016, 19:07:33
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

Titel: Antw:... mehrere Events von Devices mit einem Ausdruck erfassen?
Beitrag von: M_I_B am 27 Oktober 2016, 12:57:32
@ 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
Titel: Antw:... mehrere Events von Devices mit einem Ausdruck erfassen?
Beitrag von: abc2006 am 27 Oktober 2016, 13:40:34
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
Titel: Antw:... mehrere Events von Devices mit einem Ausdruck erfassen?
Beitrag von: M_I_B am 27 Oktober 2016, 13:54:12
... 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
Titel: Antw:... mehrere Events von Devices mit einem Ausdruck erfassen?
Beitrag von: abc2006 am 27 Oktober 2016, 14:08:42
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
Titel: Antw:... mehrere Events von Devices mit einem Ausdruck erfassen?
Beitrag von: M_I_B am 27 Oktober 2016, 14:50:22
... nett, das ich DAU auch mal was weiß, was andere nicht wissen ;D

Nun gut. So wie ich das sehe existiert hier wohl irgendwie ein Problem, wenn die Devices auf direkter Hardware/GPIO's basieren. Ich kann mir zwar nicht erklären, was da dann anders ist, aber da der besagte PERL- Fehler ausschließlich bei Abfragen von direkter Hardware auftaucht, ansonsten aber funktioniert, schrammt das DOIF da wohl kurz die berühmte Wand...

Lange Rede, kurzer Sinn: Da ansonsten die Sache funktioniert, soll mich die Fehlermeldung im Log nicht kümmern. Ich bin aber sehr wohl bereit, das mir möglich zur Klärung und ggf. Beseitigung beizutragen...
Titel: Antw:... mehrere Events von Devices mit einem Ausdruck erfassen?
Beitrag von: abc2006 am 27 Oktober 2016, 15:03:09
Du könntest ja nochmal probieren, ob ein dummy HWirgendwas den gleichen fehler produziert. Also obs am Namen liegt, oder am GPIO/Modul (ggf noch ein andersnamiges GPIO-Device definieren. Wenn du dann weisst, woher es kommt, schaust du in die MAINTAINER.txt und postest im entsprechenden Forum einen Link, dann kann sich derjenige das mal anschauen (und vielleicht auch eine Begründung liefern;)

Grüße
Stephan
Titel: Antw:... mehrere Events von Devices mit einem Ausdruck erfassen?
Beitrag von: M_I_B am 27 Oktober 2016, 15:18:21
... hatte ich ja schon gemacht mit verschiedenen Dummy's, vorhandenen und neu dafür angelegten Dummy's so wie mit vorhandenen "anderen" Devices ...
Es taucht tatsächlich nur bei Devices auf, die auf GPIO's zugreifen. Bei meiner Hauptinstanz kann ich das so nicht testen, aber auf dem Heizungs-PI ist das reproduzierbar
Titel: Antw:... mehrere Events von Devices mit einem Ausdruck erfassen?
Beitrag von: M_I_B am 28 Oktober 2016, 17:57:38
... jetzt wird es aber ganz schräg  >:(


define Bt_set DOIF (["HW"]) (set Bt | [HWBR:state] | [HWi1:state] | [HWi2:state] | [HWi3:state] |) DOELSE
#attr Bt_set do always
attr Bt_set verbose 4

define FileLog_Bt FileLog ./log/%Y-%m_BR-Test.log Bt
attr FileLog_Bt logtype text
attr FileLog_Bt room _Logdateien_


Varianten:
1.: Mit und ohne DOELSE -> Macht nie einen Unterschied
2.: Mit den Varianten ["HW"], ["HW:state"], ["^HW"], ["^HW:state"] -> Macht keinen Unterschied. Es wird NIE ein Event generiert
3.: Mit do always wird im halb- Sekunden - Takt ins Log geballert, egal ob ein Event da ist oder nicht

Nehme ich die weiter vorher beschriebene DOIF aus der Config, generiert diese Definition keinen PERL- Fehler (macht aber auch nicht was sie soll und hüllt sich in Schweigen).

Titel: Antw:... mehrere Events von Devices mit einem Ausdruck erfassen?
Beitrag von: Damian am 28 Oktober 2016, 19:06:09
Zitat von: M_I_B am 28 Oktober 2016, 17:57:38
... jetzt wird es aber ganz schräg  >:(


define Bt_set DOIF (["HW"]) (set Bt | [HWBR:state] | [HWi1:state] | [HWi2:state] | [HWi3:state] |) DOELSE
#attr Bt_set do always
attr Bt_set verbose 4

define FileLog_Bt FileLog ./log/%Y-%m_BR-Test.log Bt
attr FileLog_Bt logtype text
attr FileLog_Bt room _Logdateien_


Varianten:
1.: Mit und ohne DOELSE -> Macht nie einen Unterschied
2.: Mit den Varianten ["HW"], ["HW:state"], ["^HW"], ["^HW:state"] -> Macht keinen Unterschied. Es wird NIE ein Event generiert
3.: Mit do always wird im halb- Sekunden - Takt ins Log geballert, egal ob ein Event da ist oder nicht

Nehme ich die weiter vorher beschriebene DOIF aus der Config, generiert diese Definition keinen PERL- Fehler (macht aber auch nicht was sie soll und hüllt sich in Schweigen).

Zum Verständins:

1. ["HW"] ist ein Ereignistrigger, hier wenn irgendwo im Eventmonitor HW im Device erscheint wird getriggert.

2. [HW] ist der Inhalt des Status des Devices HW, also etwas ganz anders im Vergleich zu  Punkt 1.

3. ["HW:state"] wirst du normalerweise nicht im Eventmonitor sehen, da State dort nicht erscheint.

Gruß

Damian

Titel: Antw:... mehrere Events von Devices mit einem Ausdruck erfassen?
Beitrag von: M_I_B am 28 Oktober 2016, 20:30:52
... naja ebend, nich' nackend  8)

Wenn ich ["HW"] oder ["^HW"] sach', dann sollte doch bei jedem Ereignis von irgend einem Device, welches HW im Namen trägt resp. mit HW im Namen beginnt und seinen Zustand ändert (hier von on zu off oder umgekehrt) ein s.g. Ereignis statt finden und dem Ganzen den Startschubser geben... oder nicht?

... ich will ja nichts weiter, als einem Dummy die aktuellen Zustände aller Devices mit HWxy übergeben, wenn eines der mit HW- beginnenden Devices was zu sagen hat...
Titel: Antw:... mehrere Events von Devices mit einem Ausdruck erfassen?
Beitrag von: Damian am 28 Oktober 2016, 20:34:00
Zitat von: M_I_B am 28 Oktober 2016, 20:30:52
... naja ebend, nich' nackend  8)

Wenn ich ["HW"] oder ["^HW"] sach', dann sollte doch bei jedem Ereignis von irgend einem Device, welches HW im Namen trägt resp. mit HW im Namen beginnt und seinen Zustand ändert (hier von on zu off oder umgekehrt) ein s.g. Ereignis statt finden und dem Ganzen den Startschubser geben... oder nicht?

Nicht unbedingt. Das hängt davon ab,  wie die Definition bzw. die Attribute gesetzt sind. Insb. ohne do always wird ja nur nach Zustandswechsel (des DOIF-Moduls) geschaltet.
Titel: Antw:... mehrere Events von Devices mit einem Ausdruck erfassen?
Beitrag von: M_I_B am 28 Oktober 2016, 20:41:07
... puhhh ... der Winni  ::)

Also...
[HWBR] ist ein GPIO-out, welcher so definiert ist:
define HWBR RPI_GPIO 16
attr HWBR alias Öl- Brenner
attr HWBR devStateIcon off:sani_boiler@gray on:sani_boiler@orange
attr HWBR direction output
attr HWBR group Aktoren
attr HWBR room KG.Heizung
attr HWBR sortby 1
attr HWBR webCmd :


[HWix] sind ebenfalls GPIO-in, die bis auf den Index identisch so aussehen:
define HWi1 RPI_GPIO 17
attr HWi1 active_low yes
attr HWi1 alias Brenner Betrieb
attr HWi1 devStateIcon off:sani_boiler@gray on:sani_boiler@green
attr HWi1 direction input
attr HWi1 group Rückmeldungen
attr HWi1 interrupt both
attr HWi1 pud_resistor off
attr HWi1 room KG.Heizung
attr HWi1 sortby 6
attr HWi1 toggletostate yes


Wenn ich also manuell oder über ein DOIF HWBR on setze, dann ist das doch ein Ereignis, oder nicht? Und wenn HWi1 vom Brenner von off zu on gesetzt wird (Flamme erkannt), dann ist das doch auch ein Ereignis. Und in beiden Fällen wird doch auch ein Event ausgelöst, sonst könnte ich ja nicht drauf reagieren...

Was verstehe ich denn hier falsch? Mach ma' meinen Knoten aus'm Hirn raus bidde ...
Titel: Antw:... mehrere Events von Devices mit einem Ausdruck erfassen?
Beitrag von: Damian am 28 Oktober 2016, 20:56:02
Zitat von: M_I_B am 28 Oktober 2016, 20:41:07

Wenn ich also manuell oder über ein DOIF HWBR on setze, dann ist das doch ein Ereignis, oder nicht? Und wenn HWi1 vom Brenner von off zu on gesetzt wird (Flamme erkannt), dann ist das doch auch ein Ereignis. Und in beiden Fällen wird doch auch ein Event ausgelöst, sonst könnte ich ja nicht drauf reagieren...

Was verstehe ich denn hier falsch? Mach ma' meinen Knoten aus'm Hirn raus bidde ...

Poste doch einfach mal einen Auszug aus dem Eventmonitor, wo dein "HW" im Device zu erkennen ist und dann ein list vom betreffenden DOIF-Modul, dann kann ich ziemlich genau sagen, warum das Modul nicht das gemacht hat, was du erwartet hast.


Titel: Antw:... mehrere Events von Devices mit einem Ausdruck erfassen?
Beitrag von: M_I_B am 28 Oktober 2016, 21:03:00
... kein Problem:

...
2016-10-28 20:58:13.389 DOIF set_BRa cmd_event: HWBR
2016-10-28 20:58:13.410 RPI_GPIO HWBR on
2016-10-28 20:58:17.933 DOIF set_BRa cmd_event: HWBR
2016-10-28 20:58:17.945 RPI_GPIO HWBR off
2016-10-28 20:58:19.811 RPI_GPIO HWBR off
2016-10-28 20:58:19.828 DOIF HWBR_D cmd_nr: 4
2016-10-28 20:58:19.828 DOIF HWBR_D cmd: 4
2016-10-28 20:58:19.828 DOIF HWBR_D cmd_event: hzsp
2016-10-28 20:58:19.828 DOIF HWBR_D cmd_4
2016-10-28 20:58:19.928 RPI_GPIO HWBR off
2016-10-28 20:58:19.945 DOIF HWBR_D cmd_nr: 4
2016-10-28 20:58:19.945 DOIF HWBR_D cmd: 4
2016-10-28 20:58:19.945 DOIF HWBR_D cmd_event: hzsp
2016-10-28 20:58:19.945 DOIF HWBR_D cmd_4
...




Internals:
   CFGFN      ./_SW/erfassung.cfg
   DEF        (["HW"]) (set Bt | [HWBR:state] | [HWi1:state] | [HWi2:state] | [HWi3:state] |) DOELSE
   NAME       Bt_set
   NR         116
   NTFY_ORDER 50-Bt_set
   STATE      cmd_1
   TYPE       DOIF
   Readings:
     2016-10-28 21:01:39   Device          HWWP_on
     2016-10-28 14:38:00   cmd             1
     2016-10-28 14:38:00   cmd_event       HWWP_on
     2016-10-28 14:38:00   cmd_nr          1
     2016-10-28 21:01:39   matched_event_c1_1 cmd_nr: 4,cmd: 4,cmd_event: wwsp,cmd_4
     2016-10-28 14:38:00   state           cmd_1
   Condition:
     0          EventDoIf('HW',$hash,'',0)
   Devices:
   Do:
     0:
       0          set Bt | [HWBR:state] | [HWi1:state] | [HWi2:state] | [HWi3:state] |
     1:
       0
   Helper:
     event      cmd_nr: 4,cmd: 4,cmd_event: wwsp,cmd_4
     globalinit 1
     last_timer 0
     sleeptimer -1
     timerdev   HWWP_on
     timerevent cmd_nr: 4,cmd: 4,cmd_event: wwsp,cmd_4
     triggerDev HWWP_on
     timerevents:
       cmd_nr: 4
       cmd: 4
       cmd_event: wwsp
       cmd_4
     timereventsState:
       cmd_nr: 4
       cmd: 4
       cmd_event: wwsp
       state: cmd_4
     triggerEvents:
       cmd_nr: 4
       cmd: 4
       cmd_event: wwsp
       cmd_4
     triggerEventsState:
       cmd_nr: 4
       cmd: 4
       cmd_event: wwsp
       state: cmd_4
   Internals:
   Itimer:
   Readings:
   Regexp:
     0:
       0          HW
     All:
       0          HW
   State:
   Trigger:
Attributes:
   verbose    4
Titel: Antw:... mehrere Events von Devices mit einem Ausdruck erfassen?
Beitrag von: Damian am 28 Oktober 2016, 21:21:28
Zitat von: M_I_B am 28 Oktober 2016, 21:03:00
... kein Problem:

...
2016-10-28 20:58:13.389 DOIF set_BRa cmd_event: HWBR
2016-10-28 20:58:13.410 RPI_GPIO HWBR on
2016-10-28 20:58:17.933 DOIF set_BRa cmd_event: HWBR
2016-10-28 20:58:17.945 RPI_GPIO HWBR off
2016-10-28 20:58:19.811 RPI_GPIO HWBR off
2016-10-28 20:58:19.828 DOIF HWBR_D cmd_nr: 4
2016-10-28 20:58:19.828 DOIF HWBR_D cmd: 4
2016-10-28 20:58:19.828 DOIF HWBR_D cmd_event: hzsp
2016-10-28 20:58:19.828 DOIF HWBR_D cmd_4
2016-10-28 20:58:19.928 RPI_GPIO HWBR off
2016-10-28 20:58:19.945 DOIF HWBR_D cmd_nr: 4
2016-10-28 20:58:19.945 DOIF HWBR_D cmd: 4
2016-10-28 20:58:19.945 DOIF HWBR_D cmd_event: hzsp
2016-10-28 20:58:19.945 DOIF HWBR_D cmd_4
...




Internals:
   CFGFN      ./_SW/erfassung.cfg
   DEF        (["HW"]) (set Bt | [HWBR:state] | [HWi1:state] | [HWi2:state] | [HWi3:state] |) DOELSE
   NAME       Bt_set
   NR         116
   NTFY_ORDER 50-Bt_set
   STATE      cmd_1
   TYPE       DOIF
   Readings:
     2016-10-28 21:01:39   Device          HWWP_on
     2016-10-28 14:38:00   cmd             1
     2016-10-28 14:38:00   cmd_event       HWWP_on
     2016-10-28 14:38:00   cmd_nr          1
     2016-10-28 21:01:39   matched_event_c1_1 cmd_nr: 4,cmd: 4,cmd_event: wwsp,cmd_4
     2016-10-28 14:38:00   state           cmd_1
   Condition:
     0          EventDoIf('HW',$hash,'',0)
   Devices:
   Do:
     0:
       0          set Bt | [HWBR:state] | [HWi1:state] | [HWi2:state] | [HWi3:state] |
     1:
       0
   Helper:
     event      cmd_nr: 4,cmd: 4,cmd_event: wwsp,cmd_4
     globalinit 1
     last_timer 0
     sleeptimer -1
     timerdev   HWWP_on
     timerevent cmd_nr: 4,cmd: 4,cmd_event: wwsp,cmd_4
     triggerDev HWWP_on
     timerevents:
       cmd_nr: 4
       cmd: 4
       cmd_event: wwsp
       cmd_4
     timereventsState:
       cmd_nr: 4
       cmd: 4
       cmd_event: wwsp
       state: cmd_4
     triggerEvents:
       cmd_nr: 4
       cmd: 4
       cmd_event: wwsp
       cmd_4
     triggerEventsState:
       cmd_nr: 4
       cmd: 4
       cmd_event: wwsp
       state: cmd_4
   Internals:
   Itimer:
   Readings:
   Regexp:
     0:
       0          HW
     All:
       0          HW
   State:
   Trigger:
Attributes:
   verbose    4


Dein DOIF-Modul Bt_set tut natürlich nichts, weil es ja schon seit 2016-10-28 14:38:00  im  Zustand  cmd_1 steht. Das Modul arbeitet mit Zuständen und schaltet ohne do always nur nach Zustandswechsel, wie bereits geschrieben (das steht aber ausführlich in der Commandref zu DOIF).

Wenn do always einschaltest, dann wird das vermutlich deswegen zu einem "Feuerwerk" bei dir kommen, da du ja die anderen DOIF auch mit HW im Namen definiert hast und dann triggern sich die Dinger gegenseitig.






Titel: Antw:... mehrere Events von Devices mit einem Ausdruck erfassen?
Beitrag von: M_I_B am 28 Oktober 2016, 21:28:53
... ähhhh ... da muss ich mal intensiv drüber nachdenken ::)

ZitatZustandswechsel, wie bereits geschrieben
Vermutlich liegt da mein Verständnisproblem? Ist der Wechsel von z.B. HWBR von off zu on denn kein Zustandwechsel? Oder wie ist das gemeint?
Titel: Antw:... mehrere Events von Devices mit einem Ausdruck erfassen?
Beitrag von: Damian am 28 Oktober 2016, 21:38:25
Zitat von: M_I_B am 28 Oktober 2016, 21:28:53
... ähhhh ... da muss ich mal intensiv drüber nachdenken ::)
Vermutlich liegt da mein Verständnisproblem? Ist der Wechsel von z.B. HWBR von off zu on denn kein Zustandwechsel? Oder wie ist das gemeint?

Nein. Hier geht es um den eigenen Zustand des DOIF-Moduls. Das Modul führt die Befehle von cmd_1 nur dann aus, wenn es die nicht zuvor schon ausgeführt hat. Bei dir müsste also zunächst der DOELSE-Fall kommen (cmd_2) damit das Modul die Befehle von cmd_1 wieder ausführt. Allerdings wirst du mit der Definition ["HW"] niemals den DOELSE-Fall erreichen können.

Vermutlich ist also in deinem Vorhaben das do always erforderlich, aber dann musst du drauf achten, dass du keine Kettenreaktion auslöst (einen Loop)

DOIF1 -> DOIF2-> DOIF1 -> DOIF2 -> usw.


Titel: Antw:... mehrere Events von Devices mit einem Ausdruck erfassen?
Beitrag von: M_I_B am 28 Oktober 2016, 22:06:48
... AHHHH ... Jetzt hab ich das kapiert! Menno, ich werde echt älter ::) Habe ich schon mal erwähnt, das Altwerden echt schei.. ist?!

Ok, dann baue ich das mal um und eliminiere alles, was irgendwie eine Loop bauen könnte... Ich werde berichten, was geworden ist, und dann kommen wir wieder auf den PERL- Fehler zurück ;)

Vielen Dank für deine Geduld!
Titel: Antw:... mehrere Events von Devices mit einem Ausdruck erfassen?
Beitrag von: Damian am 28 Oktober 2016, 22:41:08
Zitat von: M_I_B am 28 Oktober 2016, 22:06:48
... AHHHH ... Jetzt hab ich das kapiert! Menno, ich werde echt älter ::) Habe ich schon mal erwähnt, das Altwerden echt schei.. ist?!

Ok, dann baue ich das mal um und eliminiere alles, was irgendwie eine Loop bauen könnte... Ich werde berichten, was geworden ist, und dann kommen wir wieder auf den PERL- Fehler zurück ;)

Vielen Dank für deine Geduld!

Ich denke der Fehler kommt durch diese Loops, denn die Fehlermeldung besagte es ja.