NEWS
Datenpunkte in MQTT Json Bündeln
-
Moin,
Ich möchte gerne mehre Datenpunkt per MQTT senden, aber im Jason Format. Ich bin allerdings in solchen Sachen absoluter Noob. Alles was gefunden habe ist leider genau im umgekehrter reinfolge.
Ich hab leider keine Ahnung wo ich anfangen soll oder sonst irgendwas. Ich bin für jede Hilfe Dankbar.
Gruß
Sören -
@sunshinemaker
Kannst du etwas mehr Details dazu liefern? Was liegt wie vor und wie muss die JSON Struktur aussehen? -
Es geht eigentlich um sämtliche Datenpunkte in ioBroker. Als Beispiel einiger der Datenpunkte sollten zusammengefast werden.
Und es wäre gut wenn das ganze hinter so ungefähr aussehen könnte:
Ich habe leider überhaupt keine Ahnung davon und auch nicht ob das überhaupt möglich ist das dann per MQTT aus ioBroker heraus zu verschicken. Ich hoffe du verstehst was ich meine.
-
Soll der ioBroker als MQTT Client fungieren, der das Json-Konstrukt als Topic published, oder soll er als MQTT-Broker das Json-Konstrukt an einen MQTT-Client verschicken?
-
Mit NodeRed wäre das kein Problem.
-
@mickym said in Datenpunkte in MQTT Json Bündeln:
Mit NodeRed wäre das kein Problem.
Ich habe einen Computer, damit ist das auch kein Problem
-
@martinp sagte in Datenpunkte in MQTT Json Bündeln:
Soll der ioBroker als MQTT Client fungieren, der das Json-Konstrukt als Topic published, oder soll er als MQTT-Broker das Json-Konstrukt an einen MQTT-Client verschicken?
ioBroker soll das Json-Kunstrukt erstellen und auch publishen. Der MQTT-Broker läuft an anderer stelle.
@martinp sagte in Datenpunkte in MQTT Json Bündeln:
@mickym said in Datenpunkte in MQTT Json Bündeln:
Mit NodeRed wäre das kein Problem.
Ich habe einen Computer, damit ist das auch kein Problem
Node-Red im iobroker zu installieren wäre nicht das Problem, aber von Node-Red hab ich genauso wenig Ahnung.
-
@sunshinemaker Node Red benutze ich nicht - hier eine Idee in Blockly - aber ungetestet
-
Ich hab ehrlich keine Lust mehr zu zeigen, dass ein Computer mit NodeRed mehr kann, als mit Puzzleteilchen und wenn jemand NodeRed nicht lernen will und lieber puzzeln will - dann soll er das halt machen.
Wenn ich mir anschaue - dass man den halben Bildschirm braucht um ein Objekt mit 3 Eigenschaften braucht, dann viel Spaß.
Hier mal ein Beispiel wie einfach Du ganze Äste mit NodeRed auslesen kannst - aber auch natürlich viel spezifischer machen kannst. Du hast ausserdem eine direkte Anbindung an deinen mqtt Broker und brauchst dafür keinen iobroker.
In diesem Ast finden sich 1054 Datenpunkte.
Diese 1054 kann man mit einer list Node in ein Array auslesen
und ein neues Objekt erstellen mit einer Change Node und JSONATA.
Das ganze wird dann via mqtt in ein Objekt geschrieben:
Hier zum Import
Und wenn Du von beidem keine Ahnung hast, dann solltest Dir halt überlegen - wo es sich eher lohnt Deinen Computer mit zu beschäftigen ohne dass Du damit Probleme bekommst.
Du kannst natürlich auch Javascript lernen,.
-
@mickym er hat "Mehrere" geschrieben, nicht "Alle"
Ein "*" ist da wenig hilfreich...
-
@martinp Kann man alles machen - nur was Dein Blockly macht, ist nicht ein Objekt mit Einzelwerten sondern ein Array mit Strings
["prop1:val1","prop2:val2","prop3:val3"]
ich denke aber er will ein Objekt haben mit 3 Props:
Also:
{"prop1":"val1","prop2":"val2","prop3":"val3"}
oder zeig mal deine Ausgabe?
-
Selbst wenn ich also eine eigene Struktur mit Einzelwerten machen will und Puzzeln wollte, würde ich mit JSONATA und einem Array arbeiten.
Nehmen wir also mal an wir wollen die 3 Datenpunkte in ein Objekt verfrachten:
-
Wenn man die Objekthierarchie erhalten möchte dann bin ich des JS nicht ganz mächtig und hab eine Kontext innerhalb einer function Node genutzt.
Über einen JSON Editor kannst Du dieses Objekt formatieren kommt aber das gleiche raus.
Wenn man mit dem Stern nicht alle Daten haben will sondern nur bestimmte Werte, so kann man diese in dem Ast auch noch mit regulären Ausdrücken filtern:
-
Um einfach nur 3 beliebige Werte mit NodeRed rauszuholen und als Objekt abzuspeichern - speichert man das in verschiedene Objekteigenschaften. Um das untere Beispiel mit den 3 Werten auszulesen, die ich vorher mit dem Blockly ausgelesen haben kann man 3 get Nodes verwenden und diese 3 Nachrichteneigenschaften zuweisen:
Wichtig ist dabei jeden Wert einer unterschiedlichen Nachrichteneigenschaft zuzuweisen:
Schaut man sich das Nachrichtenobjekt an - sieht man, dass alle Werte in den unterschiedlichen Nachrichteneigenschaften zugewiesen sind.
Diese Werte kann man nun beliebig zu benennenden Eigenschaften super einfach via JSONATA zuweisen
und erhält so easy ein Objekt mit den gewünschten Eigenschaften und Werten:
und dann einfach an den mqtt Broker senden - und das Ergebnis ist dann ein JSON Objekt.
So damit bin ich am Ende,
Weiterhin fröhliches Puzzeln mit problemlosen Computern.
-
Wenn du mehrere Datenpunkte einzeln via mqtt und nicht "gebündelt" versenden willst, dann brauchst nur den mqtt-Client installieren und dann mit dem Zahnrad die entsprechenden Datenpunkte auswählen,
-