FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: stephanr am 06 März 2018, 22:38:19

Titel: [erledigt] Userreading Trigger RegEx
Beitrag von: stephanr am 06 März 2018, 22:38:19
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
Titel: Antw:Userreading Trigger RegEx
Beitrag von: KernSani am 06 März 2018, 22:47:58
Gib mal ein list deines devices... Was ist denn dblogstate für ein reading?
Titel: Antw:Userreading Trigger RegEx
Beitrag von: stephanr am 07 März 2018, 07:01:36
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","") }
Titel: Userreading Trigger RegEx
Beitrag 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...
Titel: Antw:Userreading Trigger RegEx
Beitrag von: stephanr am 07 März 2018, 08:43:09
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
Titel: Antw:Userreading Trigger RegEx
Beitrag von: nils_ am 07 März 2018, 10:52:30
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 :)
Titel: Antw:[erledigt] Userreading Trigger RegEx
Beitrag von: stephanr am 08 März 2018, 15:21:46
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.