[gelöst] Reading Regex mit Modifier bzw. flag

Begonnen von elektrikpe2, 23 Januar 2018, 16:37:34

Vorheriges Thema - Nächstes Thema

elektrikpe2

Hallo,

habe dank des Forums schon eine Menge gelernt. Bin seit Weihnachten dabei mit FHEM und einem Raspberry ein kleines Smarthome aufzubauen. Bisher habe ich mit JBMedia und einem LM-Air meine "Baumarkt" Aktoren gesteuert. Das möchte ich auch für die 433 mhz Aktoren beibehalten, wobei ich die per HTTP-Request aus FHME steuere. Daneben habe ich eine Lupsec Alarmanlage, wo ich die Sensorzustände mit Aktion-Url an FHEM mitteile. An der LUPUSEC habe ich aber auch noch Thermostate dran. Die Temperaturen will ich mittels HTTPMOD und entsprechendem regexe auslesen. Dank des Thread
Zitathttps://forum.fhem.de/index.php/topic,61988.0.html
(bow, wie fügt man den so einen Thread ein) bin ich soweit, die Daten auslesen zu können. Mein Problem liegt nun darin, dass ich beim Testen des Regex immer dann die gewünschten 4 Werte bekomme, wenn ich auf den Testseiten Modifier (wird auch mal flag genannt) g anwende. Wie kann ich das denn jetzt in FHEM abbilden. Also jeweils den ersten Wert bekomme ich mit meinen Anweisungen. Hier mal exemplarisch mein Aufbau define OG_Temperaturen HTTPMOD http://user:password@192.xxx.xxx.38/action/deviceListGet 60

attr OG_Temperaturen userattr reading01Name reading01Regex reading02Name reading02Regex
attr OG_Temperaturen reading01Name IstTemp
attr OG_Temperaturen reading01Regex DEGREE\}\t([^ }]*)
attr OG_Temperaturen reading02Name SollTemp
attr OG_Temperaturen reading02Regex SETPOINT\}\t([^ "]*)


{"area": 1, "zone": 25, "type": 79, "type_f": "{D_TYPE_79}", "name": "HeizMT",  "cond": "", "cond_ok": "1", "battery": "", "battery_ok": "1",  "tamper": "", "tamper_ok": "1", "bypass": "{WEB_MSG_NO}", "rssi": "{WEB_MSG_STRONG} 9",  "resp_mode": [0,0,0,0,0,0], "ammeter": "0", "ver": "TRV_00.00.03.02TC",  "hue": "-1", "sat": "-1",  "status": "{WEB_MSG_TS_DEGREE} 23.5 {WEB_MSG_TRV_MANUAL} {WEB_MSG_TRV_SETPOINT} 22.0", "sid": "ZS:8e9501", "su": 1, "alarm_status": "", "status_ex": "0"},

{"area": 1, "zone": 27, "type": 79, "type_f": "{D_TYPE_79}", "name": "HeizBadFenster",  "cond": "", "cond_ok": "1", "battery": "", "battery_ok": "1",  "tamper": "", "tamper_ok": "1", "bypass": "{WEB_MSG_NO}", "rssi": "{WEB_MSG_STRONG} 9",  "resp_mode": [0,0,0,0,0,0], "ammeter": "0", "ver": "TRV_00.00.03.02TC",  "hue": "-1", "sat": "-1",  "status": "{WEB_MSG_TS_DEGREE} 22.0 {WEB_MSG_TRV_AUTO} {WEB_MSG_TRV_SETPOINT} 23.0", "sid": "ZS:57df01", "su": 1, "alarm_status": "", "status_ex": "0"}


Bin dankbar für jede Hilfe.

VG Peter

elektrikpe2

Hallo, ich schon wieder. Habe im Forum gefunden, wo der Modifier hingestellt wird.attr OG_Temperaturen reading01Regex (?g)DEGREE\}\t([^ }]*). Leider bekomme ich aber trotzdem nicht, wie bei allen Online-Regexe Tester die 4 erwarteten Werte. Ich habe den regexe jetzt mal aufgebrochen und ein zusätzliches Unterscheidungsmerkmal herangezogen, um dann den Wert eines bestimmten Thermostates zu erhalten attr OG_Temperaturen reading01Regex (?s)(HeizBadFenster)+.*({WEB_MSG_TS_DEGREE)\}\t([^ }]*). In diesem Fall brauche ich den modifier "s". Ergebnis: READINGS:
     2018-01-23 23:09:27   IstTemp-1       HeizBadFenster
     2018-01-23 23:09:27   IstTemp-2       DEGREE
     2018-01-23 23:09:27   IstTemp-3       24.25
Leider ist IstTemp-3 aber nicht der Wert, der zu HeizBadFenster gehört sondern immer der Wert des letzten Thermostates (zufällig auch Ende der Device-Liste s. Beispiel:
{"area": 1, "zone": 27, "type": 79, "type_f": "{D_TYPE_79}", "name": "HeizBadFenster",
"cond": "", "cond_ok": "1", "battery": "", "battery_ok": "1",
"tamper": "", "tamper_ok": "1", "bypass": 0, "rssi": "{WEB_MSG_STRONG} 9",
"resp_mode": [0,0,0,0,0,0], "ammeter": "0", "ver": "TRV_00.00.03.02TC",
"hue": "-1", "sat": "-1", "bypass_tamper": 0,
"status": "{WEB_MSG_TS_DEGREE} [color=red]23.75 [/color]{WEB_MSG_TRV_AUTO} {WEB_MSG_TRV_SETPOINT} 23.0", "sid": "ZS:57df01", "su": 1, "alarm_status": "", "status_ex": "0"},
{"area": 1, "zone": 25, "type": 79, "type_f": "{D_TYPE_79}", "name": "HeizMT",
"cond": "", "cond_ok": "1", "battery": "", "battery_ok": "1",
"tamper": "", "tamper_ok": "1", "bypass": 0, "rssi": "{WEB_MSG_STRONG} 9",
"resp_mode": [0,0,0,0,0,0], "ammeter": "0", "ver": "TRV_00.00.03.02TC",
"hue": "-1", "sat": "-1", "bypass_tamper": 0,
"status": "{WEB_MSG_TS_DEGREE} [color=green]24.25[/color] {WEB_MSG_TRV_MANUAL} {WEB_MSG_TRV_SETPOINT} 22.0", "sid": "ZS:8e9501", "su": 1, "alarm_status": "", "status_ex": "0"}


Jetzt lautet wohl eher die Hilfestellung meinen Regexe zu debuggen. Bitte.

VG Peter

elektrikpe2

Noch ein kleiner Nachtrag:

Modifier "g" ergibt folgenden Fehler in der LOG
OG_Temperaturen: set attr reading02Regex (?sg)SETPOINT\}\t([^ "]*) created warning: Useless (?g) - use /g modifier in regex; marked by <-- HERE in m/(?sg <-- HERE )SETPOINT\}\t([^ "]*)/ at ./FHEM/98_HTTPMOD.pm line 483 Daher nicht das gewünschte Ergebnis. Mit Fehlermeldung kann ich leider nix anfangen

VG Peter

frank

#3
nimm das attr readingXXRegOpt für den modifier.
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html

elektrikpe2

#4
Hallo, auf das Forum ist wirklich Verlass, hat funktioniert. Vielen Dank. Hatte schon einen neuen regex konstruiert. Aber egal, so lernt man ja

Für Anfänger wie mich hier die Syntax:

attr OG_Temperaturen reading01Name IstTemp
attr OG_Temperaturen reading01RegOpt g
attr OG_Temperaturen reading01Regex DEGREE}([^ }]*)
attr OG_Temperaturen reading02Name SollTemp
attr OG_Temperaturen reading02RegOpt g
attr OG_Temperaturen reading02Regex SETPOINT}([^ "]*)


Die Readings: 2018-01-24 14:57:40   IstTemp-1        22.5
     2018-01-24 14:57:40   IstTemp-2        22.25
     2018-01-24 14:57:40   IstTemp-3        19.25
     2018-01-24 14:57:40   IstTemp-4        22.75


Wie geht das mit "Thema gelöst" ?

VG Peter

frank

zb im betreff vom start post "gelöst"  hinzufügen.
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html