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
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
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
nimm das attr readingXXRegOpt für den modifier.
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
zb im betreff vom start post "gelöst" hinzufügen.