NEWS
Json splitten in 4 Datenpunkten
-
Hallo ioBroker -Gemeinde
Bin seit ca 2 Wochen dabei einen MQTT wert zu Splitten in 4 einzelne Datenpunkte . Die Datenpunkte sind schon angelegt.
Habe das orginal script ein wening umgeschrieben um zugeordnete werte besser (oder schlechter) zu trennen. Ich habe es
mit Blockly und Node-Red versucht mit teil erfolg . Diese wurde zwar zugeordnet aber mit falschen Zahlen und Sonderzeichen. Diese werte sollen dann grafisch in Vis dargestellt werden .
Die Mqtt Mitteilung lautet :
mqtt.0.SmartZähler_4_1.Status None,A:32766,B:32766,C:32766,D:32766,Counter:66,
Danke im voraus bei euch .
Roland1000 -
@roland1000 Jo, würde mich auch interessieren. Versuch gerade genau dasselbe, allerdings mit einem JSON Object, welches ich aus einer WebAPI geholt habe. Ich würde die einzelnen JSON-'topics' nun gerne einzelnen Datenpunkten zuordnen. Vllt. weiß jemand weiter? Ansonsten könnte man, das Object natürlich auch als STRING behandeln und manuell zerlegen, finde ich aber irgendwie unschön. Ob jemand ne Idee hat? Grüße!
-
@roland1000 Du musst das ganze halt in ein Objekt daraus zu machen.
In meinen Augen wenn Du daran selbst rumgefuhrwerkt hast - hast Du es schlimmer gemacht, als es vorher war.
Ich habe ausserdem mal meinen neuen Flow mit eingebaut:
In meinen Augen ist es Schwachsinn das alles wieder wegzuschreiben. Ich gehe mal davon aus, dass mqtt einen JSON String geliefert hat und nicht so einen verstümmelten String. Wenn das ein JSON String ist dann poste den lieber mal .Umd dann zum Beispiel den Counter zu extrahieren ist das viele Einfacher:
Mit meiner neuen Node - wird das automatisch in einzelne Datenpunkte aufgedröselt.
Ich weigere mich aber den Flow zu posten - wenn ihr JSON-Strings kaputt macht.
-
@smartnoob Dann probiere meine neue Node - und Du hast was Du willst
-
Hallo mickym
Wau. Dachte das Programm ist kleiner . Bin gerade dabei mich mit Java auseinander zusetzten. Werde gleich das programm im orignal zustand flashen
MFG
roland1000 -
@roland1000 Das ist nur so lange - weil Du den JSON String kaputt machst - poste den JSON String und nutz entweder die Node - oder wandel es selbst in ein Objekt um und extrahiere einzelne Werte- Das Ganze ist nur so lang - weil DU den JSON String kaputt gemacht hast. Mit dem orginären JSON String einer JSON Node - hast Du alles in einem Objekt - kannst dann meine Node nutzen oder selbst extrahieren.
MIt der Manipulieren von JSON Strings macht man diese hervorragende Konzept nur kaputt.
Und wer partout kein NodeRed nutzen will, der soll halt dann im Javascript den parse Befehl. Der wandelt es in ein Objekt um - und auf dessen Eigenschaften greift man einfach mit einem Punkt zu - also obj.eigenschaft.
var obj = JSON.parse(text);
siehe hier: https://www.w3schools.com/js/js_json.asp
-
So sieht die Originale Mqtt nachricht aus
mqtt.0.SmartZähler_4_1.Status None, 32766, 32766, 32766, 32766, C82B961DCB31, FRITZBOX, -64dB, 192.168.178.99, 5
LG roland1000
-
@roland1000 OK das ist kein JSON sondern Array.
Das kannst Du über split in JS in ein Array über führen.
Ansonsten mach ich Dir für dafür einen kleinen Flow,
Wenn Du es in ein Array umwandels (erste Change Node)
Auf diese einzelnen Werte greifst Du dann einfach über payload.0 oder payload.1 zu - also IP ist payload.8
Mit meinem Subflow bekommst Du dies Ergebnis:
Wenn Du den Flow implementierst - hast Du den Subflow mit implementiert - musst halt wieder löschen, wenn Du ihn nicht willst.
-
Im array Modus hab ich nur die Sonderzeichen gehabt. A B C D sind an einen ADS1115 angeschlossen der liefert werte von 4 Stromwandler habe mich deswegen entschieden weil ich dann nur einen ESP8266 verbauen muste.
-
Denke mal muss noch einiges lernen mit node red. Dem Hauptteil meiner scripte ist in Blockly weil diese der S7 ähnlich ist .
-
@roland1000 Bis auf das erste Zeichen in dem String sehe ich zumindest nichts ausgewöhnliches - das kann man ggf. noch mit einem Change rausfiltern - aber ich seh sonst keine Sonderzeichen???
Ich hab mal die Leerzeichen eliminiert:
Dann kommt das eigentlich sehr sauber raus:
-
Dann hab ich Node red noch nicht ganz verstanden wie gesagt der Datenpunkt wurde zugeordnet aber mit Sonderzeichen die ständig gewechselt haben
-
-
@roland1000 sagte in Json splitten in 4 Datenpunkten:
Dann hab ich Node red noch nicht ganz verstanden wie gesagt der Datenpunkt wurde zugeordnet aber mit Sonderzeichen die ständig gewechselt haben
Da kann ich Dir nur helfen, wenn Du Deinen Flow veröffentlichst und in eine InjectNode - den Quellstring einsetzt, der aus mqtt rauskommt.
Aber wenn es so für Dich funktioniert ist ja alles gut.
Nur wenn man um Hilfe bittet, dann ist es halt wichtig zu sehen, was ist die Ausgangslage und wieviel von dem ist da drin, was man schon selbst versucht hat.
-
Hab bis jetzt immer wieder alles verworfen dann wieder von vorne angefangen. Mein erstes Projekt hat ungefähr ein halbes Jahr gebraucht um zu funktionieren .
-
@roland1000 Wie gesagt ich helfe Dir gerne - und ich bin ein NodeRed Fan. wie Du wahrscheinlich schon festgestellt hast. Ich muss halt immer nur alle Fakten und die Zielsetzung vor Augen haben, nur dann kann ich halt effizient helfen.
Im Übrigen schon im Standard - kannst in NodeRed sowohl über die iobroker NOdes - als auch über mqtt-Nodes auf mqtt Daten zugreifen.
und noch ein Tipp: Mach in Deinem NodeRed Adapter gleich die unselige Option aus, dass alles in Strings umgewandelt wird. Das macht nur Verdruss.
-
Absolut Genial das script dann kann ich endlich den Aufbau starten. Dann wünsche ich dir erstmal ein schönes Wochenende
und Danke nochmal für deine Hilfe.LG
Roland1000 -
So. Habe gerade nochmal ein bisschen mit blockly rumgespielt. Damit geht es eigentlich ganz einfach über den Baustein
Attribut "" von Object XY. Damit einfach den gewünschten Datenpunkt aktualisieren, ggf. vorher noch in gewünschten Datentyp konvertieren, fertig. LG. -
@smartnoob du meinst wohl
-
Hallo erstmal .Funktioniert super mit dem Node red . Wirklich super das ihr mir hilft hab aber heute Post vom Stromversorger
bekommen jetzt wird unser alter Zähler gewechselt auf Digital. Hab noch gehofft das ich den noch 2 Jahre benutzten kann.