[erledigt] Userreading Trigger RegEx

Begonnen von stephanr, 06 März 2018, 22:38:19

Vorheriges Thema - Nächstes Thema

stephanr

Moin,

warum funktioniert folgende RegEx (Trigger) im Userreading nicht, um bei einem Event mit dem Value "on (to vccu)" eine Aktualisierung des Userreadings auszulösen?
dblogstate:motion.*on \(to vccu\) { ReadingsVal("sz_bewegungsmelder_Motion","motion","") }

Laut https://regex101.com/ (pcre) matched ".*on \(to vccu\)" erfolgreich.

Danke

KernSani

Gib mal ein list deines devices... Was ist denn dblogstate für ein reading?
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

stephanr

dblogstate ist der Name des Userreadings. Getriggert werden soll es bei einem EVENT motion. Aber nur, wenn dieses den VALUE "on (to vccu)" hat. Später dann  auch bei "off". Aber ich scheitere ja schon bei der Einschränkung auf "on (to vccu)".


Internals:
   DEF        57CD3003
   NAME       sz_bewegungsmelder_Motion
   NOTIFYDEV  global
   NR         248
   NTFY_ORDER 50-sz_bewegungsmelder_Motion
   STATE      motion
   TYPE       CUL_HM
   chanNo     03
   device     sz_bewegungsmelder
   peerList   vccu_Btn10,sz_schrank_licht,
   Helper:
     DBLOG:
       brightness:
         myDbLog:
           TIME       1520402161.17645
           VALUE      15
       motion:
         myDbLog:
           TIME       1520402161.49598
           VALUE      on (to vccu)
   READINGS:
     2018-03-06 22:58:29   R-brightFilter  7
     2018-03-06 22:58:29   R-captInInterval off
     2018-03-06 17:49:31   R-evtFltrNum    1
     2018-03-06 17:49:31   R-evtFltrPeriod 1 s
     2018-03-03 21:51:11   R-ledOnTime     0 s
     2018-03-06 22:58:29   R-minInterval   240
     2018-03-03 21:51:11   R-sign          off
     2018-03-06 22:58:31   R-sz_schrank_licht_chn-01-peerNeedsBurst off
     2018-03-06 11:03:00   R-vccu_Btn10-peerNeedsBurst off
     2018-03-06 22:58:29   RegL_01.          01:12 02:74 08:00 22:00 30:03 00:00
     2018-03-06 22:58:31   RegL_04.sz_schrank_licht_chn-01   01:00 00:00
     2018-03-06 22:58:30   RegL_04.vccu_Btn10   01:00 00:00
     2018-03-07 06:56:01   brightness      15
     2018-03-06 22:10:02   dblogstate      off
     2018-03-07 06:56:01   motion          on (to vccu)
     2018-03-07 06:56:01   motionCount     174_next:240s
     2018-03-07 06:53:50   motionDuration  243
     2018-03-06 22:58:29   peerList        vccu_Btn10,sz_schrank_licht,
     2018-03-07 06:56:01   state           motion
     2018-03-07 06:56:01   trigger_cnt     174
   helper:
     cfgChkResult No regs found for:

sz_bewegungsmelder_Motion type:motionAndBtn -
list:peer register         :value
   1:      brightFilter     :7
   1:      captInInterval   :off
   1:      evtFltrNum       :4
   1:      evtFltrPeriod    :3 s
   1:      ledOnTime        :0 s
   1:      minInterval      :30
   1:      sign             :off
   4:sz_schrank_licht_chn-01 peerNeedsBurst   :off
   4:vccu_Btn10 peerNeedsBurst   :off
                       
                       

     moStart    1520402161.12886
     peerIDsRaw ,5F026601,3085960A,00000000
     regLst     ,1,4p
     tmplChg    0
     expert:
       def        1
       det        1
       raw        1
       tpl        1
     role:
       chn        1
     shadowReg:
     tmpl:
   nb:
     cnt        1
Attributes:
   DbLogInclude (brightness|motion|noMotion):3600
   alias      Schlafzimmer Bewegungsmelder
   devStateIcon motion:people_sensor@yellow noMotion:people_sensor
   event-min-interval .*:3600
   event-on-change-reading .*
   expert     251_anything
   model      HM-Sen-MDIR-WM55
   peerIDs    00000000,3085960A,5F026601,
   room       Schlafzimmer
   userReadings dblogstate:motion.*on \(to vccu\) { ReadingsVal("sz_bewegungsmelder_Motion","motion","") }

KernSani

#3
Da hatte ich irgendwie einen Knick in der Optik... Ersetze mal das Leerzeichen durch einen Punkt.

Edit: Die Leerzeichen, nicht das Leerzeichen;-)
Edit2: würde ein on.* nicht ausreichen?


Kurz, weil mobil...
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

stephanr

Zitat von: KernSani am 07 März 2018, 07:08:44
Da hatte ich irgendwie einen Knick in der Optik... Ersetze mal das Leerzeichen durch einen Punkt.

Edit: Die Leerzeichen, nicht das Leerzeichen;-)
Edit2: würde ein on.* nicht ausreichen?


Kurz, weil mobil...

Das Ersetzen der Leerzeichen durch einen . war der richtige Hinweis. Vielen Dank. Gibt es eine Erklärung, warum der RegEx Tester sich hier anders verhält als FHEM?

on.* wäre auch gegangen, aber ich will das Userreading nutzen, um bestimmte Events zu filtern. Ganz konkret bekomme ich zwei EVENTS mit den VALUES:

on (to vccu)
on (to sz_licht_schrank)

Da ich bei DBLOG nur auf das EVENT filtern kann und nicht auf den Wert VALUE, landen immer beide VALUES in der Datenbank. Für eine korrekte Plot Darstellung reicht mir aber ein VALUE on.*

Viele Grüße

nils_

Zitat von: stephanr am 07 März 2018, 08:43:09
Das Ersetzen der Leerzeichen durch einen . war der richtige Hinweis. Vielen Dank. Gibt es eine Erklärung, warum der RegEx Tester sich hier anders verhält als FHEM?
mit den punkten sollte das im regex-tester auch funzen.

aus der commandref
ZitatuserReadings
Komma getrennte Liste von benutzerdefinierten Readings. Jede Definition hat folgendes Format:
<reading>[:<trigger>] [<modifier>] { <perl code> }
fhem verwendet die leerzeichen dann auch noch um <reading>[:<trigger>] und [<modifier>] zu trennen. (bzw. wenn [<modifier>] nicht vorhanden ist die { für den perl code )


aber der "." hat dir ja geholfen :)
viele Wege in FHEM es gibt!

stephanr

Klar, der RegEx Tester funktioniert auch wenn die Punkte angegeben sind.  :)

Ok, ich nehme dann mal mit, dass man Leerzeichen in das RegEx mit einschließen muss, da Sie von FHEM ansonsten anders interpretiert werden. Muss man ja nur wissen, wenn man vorher in einem Tester die RegEx prüft.

Bin jetzt für mich bei folgendem Userreading gelandet:

dblogstate:motion.*(on.\(to.vccu\)|off) { if(ReadingsVal("kueche_bewegungsmelder_Motion","motion","") eq "on (to vccu)") {return 1} else {return 0} }

Bei Bewegung gibts für dblog eine "1" und ansonsten eine "0". Dies kann dann auch direkt im PLOT so verarbeitet werden.