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
Gib mal ein list deines devices... Was ist denn dblogstate für ein reading?
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","") }
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...
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
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 :)
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.