Regex zuordnen/formatieren und interpretieren

Begonnen von is2late, 27 Dezember 2021, 15:17:40

Vorheriges Thema - Nächstes Thema

is2late

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": ""},

Pi4, Tahoma Jalousien, Hue, Echo, Sonos, Lupusec XT3, FritzBox

is2late

Pi4, Tahoma Jalousien, Hue, Echo, Sonos, Lupusec XT3, FritzBox

Otto123

Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

is2late

Danke, Otto,

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

LG
Pi4, Tahoma Jalousien, Hue, Echo, Sonos, Lupusec XT3, FritzBox

jkriegl

Laut commanref kann das Ergebnis mit einem attr umgesetzt werden. B:
attr PM reading02-3OMap 0:NOKt, 1:OK
Rpi 3/4, buster, Fhem, Cul 868, HM-CC-RT-DN, HM-Sec-Sco, HM-ES-PMSw1-Pl, ebus (Vaillant), ECMD, Telegram, HTTPMOD, Xiaomi, Shelly

is2late

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
Pi4, Tahoma Jalousien, Hue, Echo, Sonos, Lupusec XT3, FritzBox

jkriegl

#6
probier mal 01-72OMap
t ist ein typo
Rpi 3/4, buster, Fhem, Cul 868, HM-CC-RT-DN, HM-Sec-Sco, HM-ES-PMSw1-Pl, ebus (Vaillant), ECMD, Telegram, HTTPMOD, Xiaomi, Shelly

Otto123

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 ::)
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

JensS

#8
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
Debian auf APU2C4, HM-CFG-USB2, SIGNALduino, HM-ES-PMSw1-Pl, TFA 30.3121, TFA 30.3125, ITS-150, PIR-5000, configurable Firmata USB & LAN, 1-wire: DS-18B20, DS-18S20, DS-2408, DS-2413, diverse I2C-Komponenten, zigbee2mqtt, ESPEasy etc.

is2late

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

Pi4, Tahoma Jalousien, Hue, Echo, Sonos, Lupusec XT3, FritzBox