NEWS
Parser Regex
-
Hallo, ich rufe mit dem Parser einen String von einen Server ab, der an meinen WR angesteckt ist. Nun ist es so, das alles werte übertragen werden, ich möchte via Regex, ein Wort mit dem dazugehörigen Wert in ein Datenpunkt schreiben un Ihn dann via Influx loggen. Ich bekomme das einfach nicht hin, den Zahlenwert an ein Wort zu binden. Zum Beispiel: Batterieladezustand (SOC) in %. Wie müßte die Regex aussehen?
Bin hier am verzweifeln, und die Erfahrung mit Regex habe ich leider auch nicht. Vielen Dank für Eure Hilfe.{ "val": "{\"InverterStatus\":5,\"InputPower\":270,\"PV1Voltage\":362.9,\"PV1InputCurrent\":0.7,\"PV1InputPower\":257.9,\"PV2Voltage\":288.4,\"PV2InputCurrent\":0,\"PV2InputPower\":20.9,\"OutputPower\":496.7,\"GridFrequency\":49.98,\"L1ThreePhaseGridVoltage\":241.5,\"L1ThreePhaseGridOutputCurrent\":2.3,\"L1ThreePhaseGridOutputPower\":492.9,\"L2ThreePhaseGridVoltage\":0,\"L2ThreePhaseGridOutputCurrent\":0,\"L2ThreePhaseGridOutputPower\":0,\"L3ThreePhaseGridVoltage\":0,\"L3ThreePhaseGridOutputCurrent\":0,\"L3ThreePhaseGridOutputPower\":0,\"TodayGenerateEnergy\":27.9,\"TotalGenerateEnergy\":6828.3,\"TWorkTimeTotal\":5.903158e7,\"PV1EnergyToday\":12.3,\"PV1EnergyTotal\":3153.6,\"PV2EnergyToday\":17.1,\"PV2EnergyTotal\":3378.2,\"PVEnergyTotal\":6554.4,\"InverterTemperature\":36,\"TemperatureInsideIPM\":33.3,\"BoostTemperature\":35.9,\"DischargePower\":0,\"ChargePower\":0,\"BatteryVoltage\":53.3,\"SOC\":100,\"ACPowerToUser\":0,\"ACPowerToUserTotal\":0,\"ACPowerToGrid\":81,\"ACPowerToGridTotal\":81,\"INVPowerToLocalLoad\":200,\"INVPowerToLocalLoadTotal\":200,\"BatteryTemperature\":26,\"BatteryState\":5,\"EnergyToUserToday\":1.2,\"EnergyToUserTotal\":8244.3,\"EnergyToGridToday\":0.8,\"EnergyToGridTotal\":217.9,\"DischargeEnergyToday\":8.8,\"DischargeEnergyTotal\":3086.6,\"ChargeEnergyToday\":10.8,\"ChargeEnergyTotal\":3092.5,\"LocalLoadEnergyToday\":27.8,\"LocalLoadEnergyTotal\":14574.9,\"ACChargeEnergyToday\":0.4,\"ACChargeEnergyTotal\":840.4,\"Mac\":\"48:55:19:68:30:C9\",\"Cnt\":100808}", "ack": true, "ts": 1719331820944, "q": 0, "from": "system.adapter.mqtt.0", "user": "system.user.admin", "lc": 1719331820944, "_id": "mqtt.0.SPH4600", "common": { "name": "SPH4600", "write": true, "read": true, "role": "variable", "desc": "mqtt server variable", "type": "string" }, "native": { "topic": "SPH4600" }, "type": "state", "acl": { "object": 1636, "state": 1636, "owner": "system.user.dressman79", "ownerGroup": "system.group.user" } }
-
@Wuffi26
Mit javascript?let dpInhalt = { "val": "{\"InverterStatus\":5,\"InputPower\":270,\"PV1Voltage\":362.9,\"PV1InputCurrent\":0.7,\"PV1InputPower\":257.9,\"PV2Voltage\":288.4,\"PV2InputCurrent\":0,\"PV2InputPower\":20.9,\"OutputPower\":496.7,\"GridFrequency\":49.98,\"L1ThreePhaseGridVoltage\":241.5,\"L1ThreePhaseGridOutputCurrent\":2.3,\"L1ThreePhaseGridOutputPower\":492.9,\"L2ThreePhaseGridVoltage\":0,\"L2ThreePhaseGridOutputCurrent\":0,\"L2ThreePhaseGridOutputPower\":0,\"L3ThreePhaseGridVoltage\":0,\"L3ThreePhaseGridOutputCurrent\":0,\"L3ThreePhaseGridOutputPower\":0,\"TodayGenerateEnergy\":27.9,\"TotalGenerateEnergy\":6828.3,\"TWorkTimeTotal\":5.903158e7,\"PV1EnergyToday\":12.3,\"PV1EnergyTotal\":3153.6,\"PV2EnergyToday\":17.1,\"PV2EnergyTotal\":3378.2,\"PVEnergyTotal\":6554.4,\"InverterTemperature\":36,\"TemperatureInsideIPM\":33.3,\"BoostTemperature\":35.9,\"DischargePower\":0,\"ChargePower\":0,\"BatteryVoltage\":53.3,\"SOC\":100,\"ACPowerToUser\":0,\"ACPowerToUserTotal\":0,\"ACPowerToGrid\":81,\"ACPowerToGridTotal\":81,\"INVPowerToLocalLoad\":200,\"INVPowerToLocalLoadTotal\":200,\"BatteryTemperature\":26,\"BatteryState\":5,\"EnergyToUserToday\":1.2,\"EnergyToUserTotal\":8244.3,\"EnergyToGridToday\":0.8,\"EnergyToGridTotal\":217.9,\"DischargeEnergyToday\":8.8,\"DischargeEnergyTotal\":3086.6,\"ChargeEnergyToday\":10.8,\"ChargeEnergyTotal\":3092.5,\"LocalLoadEnergyToday\":27.8,\"LocalLoadEnergyTotal\":14574.9,\"ACChargeEnergyToday\":0.4,\"ACChargeEnergyTotal\":840.4,\"Mac\":\"48:55:19:68:30:C9\",\"Cnt\":100808}", "ack": true, "ts": 1719331820944, "q": 0, "from": "system.adapter.mqtt.0", "user": "system.user.admin", "lc": 1719331820944, "_id": "mqtt.0.SPH4600", "common": { "name": "SPH4600", "write": true, "read": true, "role": "variable", "desc": "mqtt server variable", "type": "string" }, "native": { "topic": "SPH4600" }, "type": "state", "acl": { "object": 1636, "state": 1636, "owner": "system.user.dressman79", "ownerGroup": "system.group.user" } } let val = dpInhalt.val let parsedVal = JSON.parse(val) log(parsedVal.SOC) log(parsedVal.Cnt)
DP holen
let val = getState('mqtt.0.SPH4600').val let parsedVal = JSON.parse(val) log(parsedVal.SOC) log(parsedVal.Cnt)
-
Danke für die schnelle, aber mit JS habe ich keinen Plan. In der Parser Instanz kann man eine Regex eingeben, da der string sich immer wieder aktualisiert, wolle eigentlich diesen Weg nehmen. Wie könnte man das noch realisieren?
-
@wuffi26 Keine Ahnung ob es funktioniert
Regex\"SOC\":(\d+(\.\d+)?) /\"SOC\":(\d+(\.\d+)?)/
-
OK danke werde es gleich mal probieren.
-
-
Wenn ich nur SOC eingebe findet er logischerweise Nur das Wort.
-
oder so
\\\"SOC\\\":([\d\.\,]+),
das regex brücksichtigt auch, das die zahl auch mal punkt und komma enthält
snsonsten reicht auch\\\"SOC\\\":([\d]+),
-
@oliverio said in Parser Regex:
\"SOC\":([\d.,]+),
Ein Regex Experte, es fontioniert. Ich werde daraus einfach nicht schlau. Vielen Dank.
-
ja regex ist hart.
habe auch mehrere anläufe über die jahre gebraucht bis ich es kapiert habedie folgende seite hilft da enorm.
da habe ich genau deinen fall mal gespeichert.
oben rechts steht die beschreibung welche zeichen da was genau was matcht.
die größte schwierigkeit besteht ein stop zeichen zu finden, da regex als greedy gilt und lieber mehr zeichen anzeiht als zu wenig.
aber hier haben wir das , nach der zahl
https://regex101.com/r/WiCynN/1 -
Ok vielen Dank für Deine Hilfe.