FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: is2late am 27 Dezember 2021, 15:17:40

Titel: Regex zuordnen/formatieren und interpretieren
Beitrag von: is2late am 27 Dezember 2021, 15:17:40
Hallo,

folgendes nachweihnachtliches - für mich nicht lösbares  - Problem:

Via HTTPMOD hole ich eine Liste mit den Zuständen meiner Lupusec-Sensoren und lese sie mit Regex aus:

defmod Lupusecstat HTTPMOD http://xxx:xxx/action/deviceListGet 21600
attr Lupusecstat reading01Name LupusBattStat
attr Lupusecstat reading01RegOpt g
attr Lupusecstat reading01Regex battery_ok": \"([^,]*)"
attr Lupusecstat reading02Name LupusName
attr Lupusecstat reading02RegOpt g
attr Lupusecstat reading02Regex name": \"([^,]*)"


Das funktioniert. Das Reading sieht dann allerdings aus wie in der Anlage, dh Klarname (zB CO-Melder Tresorraum) und Zustand ("1" für i.O.) sind getrennt.

Meine Fragen dazu:

a) Kann man es hinbekommen, dass Klarname und Zustand nebeneinander stehen, also zB "CO-Melder Tresorraum 1"?
Auf das Aktualisierungsdatum kann ich gut verzichten.
b) Wie kann man die "1" durch zB "OK" bzw. die "0" durch "nOK" ersetzen?

Jemand eine Idee/einen Tipp?

Vielen Dank,
Ingo

PS: Die Liste sieht aus wie folgt (Ausschnitt):
{"area": 1, "zone": 27, "type": 13, "type_f": "{D_TYPE_13}", "name": "CO-Melder Tresorraum",
"tag": "",
"cond": "", "cond_ok": "1", "battery": "", "battery_ok": "1",
"tamper": "", "tamper_ok": "1", "bypass": 0, "rssi": "{WEB_MSG_STRONG} 9",
"resp_mode": [0,5,5,5,5,0], "ammeter": "0", "ver": "",
"bypass_tamper": 0,
"sid": "RF:0010b540", "su": 1, "alarm_status": "", "status_ex": "0", "hue": "-1", "sat": "-1", "ctemp": "-1", "hue_cmode": "-1", "hue_cie_x": "-1", "hue_cie_y": "-1", "hue_color_cap": "0", "nuki": "-1", "shutter_turn": 0,"status": ""},

Titel: Antw:Regex zuordnen/formatieren und interpretieren
Beitrag von: is2late am 28 Dezember 2021, 11:40:32
Hat niemand eine Idee?
Titel: Antw:Regex zuordnen/formatieren und interpretieren
Beitrag von: Otto123 am 28 Dezember 2021, 13:28:21
Doch, ein direktere Weg? Ist ev. einfacher?
https://fhem.de/commandref.html#JsonMod
Titel: Antw:Regex zuordnen/formatieren und interpretieren
Beitrag von: is2late am 28 Dezember 2021, 16:37:19
Danke, Otto,

aber mit Json komme ich einfach nicht zurecht. Hab da schon diverse Versuche unternommen, nie mit dem gewünschten Resultat.

LG
Titel: Antw:Regex zuordnen/formatieren und interpretieren
Beitrag von: jkriegl am 28 Dezember 2021, 17:06:37
Laut commanref kann das Ergebnis mit einem attr umgesetzt werden. B:
attr PM reading02-3OMap 0:NOKt, 1:OK
Titel: Antw:Regex zuordnen/formatieren und interpretieren
Beitrag von: is2late am 28 Dezember 2021, 17:15:41
Hi jkriegl,

danke...  Habs versucht und bekomme einen Fehler. Stimmt die Syntax? Gehört das "3O" zu "Map"?
Und woher kommt das "t" hinter "NOK"?

LG Ingo
Titel: Antw:Regex zuordnen/formatieren und interpretieren
Beitrag von: jkriegl am 28 Dezember 2021, 17:39:25
probier mal 01-72OMap
t ist ein typo
Titel: Antw:Regex zuordnen/formatieren und interpretieren
Beitrag von: Otto123 am 28 Dezember 2021, 18:59:54
Zitat von: is2late am 28 Dezember 2021, 16:37:19
Danke, Otto,

aber mit Json komme ich einfach nicht zurecht. Hab da schon diverse Versuche unternommen, nie mit dem gewünschten Resultat.

LG
Aber das was Du hast ist doch json - wozu das jetzt fremd zerlegen / lesen ::)
Titel: Antw:Regex zuordnen/formatieren und interpretieren
Beitrag von: JensS am 28 Dezember 2021, 20:10:24
Wie Otto geschrieben hat - JSON direkt nutzen.
Das geht bei HTTPMOD geht das automatisch, wenn duattr Lupusecstat enforceGoodReadingNames 1eingibst.
Die speziell gewünschten Readings kannst du mitattr Lupusecstat LupusName {ReadingsVal($NAME,"name","Fehler")." ".ReadingsVal($NAME,"area","Fehler")}anlegen lassen.

Gruß Jens
Titel: Antw:Regex zuordnen/formatieren und interpretieren
Beitrag von: is2late am 29 Dezember 2021, 15:49:43
Vielen Dank, ich probiere es....
Am Beispiel des o.g. Ausschnitts aus dem HTTPMOD also

attr CO-Melder Tresorraum Lupusecstat LupusName {ReadingsVal($NAME,"name","Fehler")." ".ReadingsVal($NAME,"area","Fehler")}

richtig? Klappt nicht, also muss ich wahrscheinlich noch etwas in Jens` Beispielcode anpassen, oder? Was hat es mit "Fehler" auf sich? Ich will doch auf die Batterie hinaus... :'(

LG