NEWS
Payload String zerlegen
-
Hallo Gemeinde,
ich habe eine kleine Herausforderung, ich möchte aus diesem String:
mqtt/0/tele/zisterne/SENSOR : msg.payload : string[58] "{"Time":"2021-06-20T20:16:28","SR04":{"Distance":130.544}}"
die 130.544 extrahieren....
könnt ihr mir einen Tipp geben wie ich das machen kann?
Vielen Dank im Voraus, Gruß
Christian -
@riste76 sagte in Payload String zerlegen:
"{"Time":"2021-06-20T20:16:28","SR04":{"Distance":130.544}}"
Hier bitte:
-
@mickym
vielen Dank!
funktioniert -
Ich möchte das Thema mal aufgreifen und hoffe, Du kannst mir auch den Weg weisen.
Ich habe versucht, Deine Lösung nachzubauen für folgenden JSON, den ich aus dem MQTT-Adapter nach NodeRed hole:
{"src":"shellyplus1-xxxxxxxxxxxxx","dst":"ShellyPlus1/events","method":"NotifyStatus","params":{"ts":1632490225.43,"switch:0":{"id":0,"output":true,"source":"WS_in"}}}
Ich brauche den Wert von "output", der true oder false sein kann.
Wie müßte ich den Flow korrekt ändern?
Vielen Dank schon mal für jegliche Unterstützung.
-
@66er sagte in Payload String zerlegen:
{"src":"shellyplus1-xxxxxxxxxxxxx","dst":"ShellyPlus1/events","method":"NotifyStatus","params":{"ts":1632490225.43,"switch:0":{"id":0,"output":true,"source":"WS_in"}}}
Ja das war mit den Doppelpunkten in der Tat etwas tricky. Aber NodeRed bietet im Debug-Fenster eine ganz tolle Hilfe
Wenn Du mit der Maus über den Wert der Dich interessiert fährst, kannst Du den Pfad innerhalb des Objektes kopieren:
Somit sieht die Change Node dann so aus:
-
Werde ich gleich austesten.
Vielen Dank.
(Und wieder was dazu lernen dürfen . )
-
-
Hallo und schönen Sonntag.
Nochmals Danke für Deine bisherige Unterstützung.
Das Gelernte konnte ich inzwischen auf weitere Gerätetypen umsetzen. Soweit so gut.
Doch nun scheitere ich an einem Gerät mit 4 Kanälen, der JSON ist entsprechend umfangreicher:
{"ble":{},"cloud":{"connected":false},"eth":{"ip":null},"input:0":{"id":0,"state":false},"input:1":{"id":1,"state":false},"input:2":{"id":2,"state":false},"input:3":{"id":3,"state":false},"mqtt":{"connected":true},"switch:0":{"id": 0, "source": "UI", "output": false, "apower": 0.000, "voltage": 237.237,"aenergy": {"total":0.021,"by_minute":[0.000,0.000,0.000],"minute_ts":1633241652},"temperature":{"tC":null, "tF":null}},"switch:1":{"id": 1, "source": "init", "output": false, "apower": 0.000, "voltage": 237.292,"aenergy": {"total":0.000,"by_minute":[0.000,0.000,0.000],"minute_ts":1633241652},"temperature":{"tC":null, "tF":null}},"switch:2":{"id": 2, "source": "init", "output": false, "apower": 0.000, "voltage": 238.268,"aenergy": {"total":0.000,"by_minute":[0.000,0.000,0.000],"minute_ts":1633241652},"temperature":{"tC":null, "tF":null}},"switch:3":{"id": 3, "source": "init", "output": false, "apower": 0.000, "voltage": 238.230,"aenergy": {"total":0.000,"by_minute":[0.000,0.000,0.000],"minute_ts":1633241651},"temperature":{"tC":null, "tF":null}},"sys":{"mac":"95CCA87E43AC","restart_required":false,"time":"08:14","unixtime":1633241653,"uptime":741,"ram_size":236340,"ram_free":147172,"fs_size":474641,"fs_free":317515,"available_updates":{"beta":{"version":"0.9.0-beta1"}}},"wifi":{"sta_ip":"192.168.1.182","status":"got ip","ssid":"IoT","rssi":-58}}
Wie bekomme ich da die 4 Werte "output" sauber raus? Obwohl ich nach Deiner Vorlage auch hier vorgegangen bin, kommen am Debug-Node auch Meldungen der anderen Kanäle raus.
Bin für Deine Unterstützung sehr dankbar.
Edit:
So sieht mein aktuelles Ergebnis aus:Auch die von Dir gezeigte Pfadübernahme aus dem DEBUG bringt mir leider nicht das gewünschte Ergebnis.
-
Gefühlt 1000 Versuche später:
Geschafft und erledigt.
(Freu' mich, denn am Besten bleibt es haften, wenn man selbst drauf gekommen ist. )Die einzelnen Kanäle habe ich nun mittels eines "Switch" mit 4 Bedingungen gefiltert. Der restliche Ablauf funktioniert dann unverändert.
-
@66er Ehrlich gesagt verstehe ich das Problem nicht. Man kann auch diese Werte ganz normal über den Pfad selektieren (Pfad kopieren):
Verstehe nicht warum man da irgendwas filtern muss - klappt ganz normal:
-
Danke für's Feedback.
Vielleicht hatte sich auch bei mir ein Fehler eingeschlichen!?
Stehe ja erst am Anfang mit MQTT und NodeRed.
Da heißt es schon mal hinfallen, aufstehen und weitermachen.
Danke nochmal.
(PS: Werde es nochmal gegenchecken. Sollte dann ja auch bei mir laufen.)
-
@66er Du kannst auch jedes Switch Objekt nur auf die Objektebene herauslösen und dann die Eigenschaften eines Switches in einem 2. Schritt bearbeiten. Deiner Fantasie sind keine Grenzen gesetzt:
-
@mickym
Sieht ja fast aus, wie mein Ergebnis.So bin ich zu Erfolg gekommen:
-
@66er Falls Du das nur in eigene DP wegschreiben willst, dann kannst Dir ja mal meinen Subflow anschauen:
https://forum.iobroker.net/topic/43856/json-string-oder-java-object-in-iobroker-struktur
Seit Admin 5 musst Du dann zwar noch etwas nacharbeiten, in dem Du mit einem Skript die fehlenden Objekte noch erzeugst. Aber falls Du ihn nutzen willst, bekommst Du so alles in DP zerlegt.
IN meinen Augen ist das zwar nicht sinnvoll, aber ich sehe ja, dass Du mit Deinem Flow nichts anderes machst.
Oder Du nimmst den mqtt-Adapter im iobroker - dann hast Du ebenfalls alles als einzelne Datenpunkte.
-
@mickym sagte in Payload String zerlegen:
...
IN meinen Augen ist das zwar nicht sinnvoll, aber ich sehe ja, dass Du mit Deinem Flow nichts anderes machst.
Schau mir den anderen Link natürlich noch an.
Warum ist das nicht sinnvoll? (Ich lerne mich ja gerade erst ein und wenn ich hier was falsch mache, sollte ich verstehen warum.)
Versuchsweise schreibe ich die Werte da rein und visualisiere sie dann.
Leider geben die Geräte nur einen "Sammelstring" nach MQTT und keine einzelnen, direkt verwertbare Datenpunkte.
-
@66er OK zum Visualisieren hängt davon ab, was Du halt nutzt. Für VIS ja.
Wenn Du das Node-Red Dashborad nutzt, dann fütterst Du ja den switch mit der payload und der Switch behält ja den Status.
Aber Du hast Recht für VIS ist es sinnvoll.Ansonsten ist zwar schön alles in eigene Datenpunkte zu schreiben, aber gibt Dir ja keinen Mehrwert, weil die Info letztlich in dem JSON String enthalten ist. Wie gesagt für VIS ist es sinnvoll.
-
Ja, ich nutze VIS.
Hier noch ein Screenshot von MQTT:
Im RPC-String unter events steht alles drin.
-
@66er Ja wie gesagt, wenn Du nur das wieder in DP speicherst, was Du visualisierst - passt das schon!!!
-
Prima,
und ja: alle anderen Datenpunkt bleiben im JSON ohne das ich die anpacke.
Danke, wieder mein Wissen und Verständnis für MQTT erweitert.
-
Hallo
Ich versuche gerade mein Stromzähler String zu zerlegen.
Eine Verbindung zum mqtt-Broker besteht, die Daten werden auch im Debug angezeigt.Ich habe schon einiges Versuch, ich bekomme einfach nicht die Werte einzeln angezeigt.
Smartmeter_Garten/tele/SENSOR : msg.payload : string[643]
"{"Time":"2023-01-13T12:54:35","SDM630":{"1":178,"Voltage_P1":231.88,"Voltage_P2":231.5,"Voltage_P3":232.49,"Current_P1":0,"Current_P2":0.1,"Current_P3":0,"Power_P1":0,"Power_P2":22.35,"Power_P3":0,"Frequenz":50.01,"Total":534.694,"phase_angle":-9.73,"Import_nres":186.145,"Export_nres":348.549,"Export_P1":13.568,"Export_P2":334.981,"Export_P3":0,"Import_P1":19.409,"Import_P2":131.003,"Import_P3":35.733,"L1_total_kwh":32.977,"L2_total_kwh":465.984,"L3_total_kwh":35.733,"Blindleistung_L1":0,"Blindleistung_L2":-7.734,"Blindleistung_L3":0,"Scheinleistung_L1":0,"Scheinleistung_L2":22.627,"Scheinleistung_L3":0,"VAh_since_last_reset":565.815}}"Ich hoffe jemand kann mir weiter helfen.
Grüße André