Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Umwandlung MQTT JSON in iobroker Datenpunkte

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Umwandlung MQTT JSON in iobroker Datenpunkte

    This topic has been deleted. Only users with topic management privileges can see it.
    • A
      alexkl last edited by

      Das ist offensichtlich ein extrem komplexes Thema, denn ich habe trotz ziemlich intensiver Suche keine gute Anleitung gefunden, nicht einmal eine schlechte.
      Die Aufgabe an sich ist allerdings einfach und noch dazu wahrscheinlich sehr, sehr häufig: mqtt Werte in iobroker weiterverwenden...

      In meinem Fall: einige GOSUND Steckdosen und einige esp32 (mit bme280), alle mit tasmota geflasht, senden Daten an einen mqtt Server.
      iobroker holt sich die Werte mittels des mqtt-Adapters. (Der sonoff-Adapter liefert mir, warum auch immer, gar keine Werte).
      Die importierten Daten finden sich dann (bei mir) in der Rubrik Objekte unter "mqtt.0.tasmota.tele.tasmota-gosund-EP2-03.SENSOR",
      und zwar als JSON-String:
      {"Time": "202x-01-23T02:13:58", "ENERGY": {"TotalStartTime": "202x-10-13T00:12:31", "Total": 1058.409, ... , "Current": 0.67}}

      Es hat lange gedauert (Doku schlecht zu finden?), bis ich verstanden habe, dass das mqtt-JSON in dieser Form einfach nicht zu gebrauchen ist, weil es:

      1. erst in einzelne Werte umgewandelt werden muss; und dass
      2. diese Umwandlung mittels einer JS-function namens 'on(){}' passiert, wenn ein Ereignis stattfindet (zB Neuer Wert eingetroffen ist); und dass
      3. diese umgewandelten Werte (Datenpunkte) unter der Objekt-Rubrik: '0_userdata.0.usw.usf...' abgespeichert werden müssen; und dass
      4. erst diese Datenpukte in iobroker importiert oder anderweitig (zB grafana) weiter verwendet werden können.

      So etwas Prinzipielles sollte doch eigentlich in den FAQ stehen?

      Die Aufgaben 1. bis 4. müssen irgendwie erledigt werden, zB über Blockly. Aber bitte, warum wieder irgendwas Neues und superspezielles lernen??
      Also Programmieren -> aber wo bitte gibt es sowas wie Musterlösungen ?? Viel gesucht, wenig gefunden.
      (Und übrigens: wer soll das ganze Wunderwerk denn irgendwann mal warten, wenn unsereins den Spass daran verloren hat, zB weil die Augen nicht mehr mitmachen? Glaubt denn irgendwer, dass außer den afficionados sich irgendjemand in so was einarbeiten wird - v.a. wenn's nicht die eigene Lösung ist? Lauter technische Schulden und viel zu kompliziert.)

      Hier also meine Lösung:
      ein kleines python Programm (github: https://github.com/alex-kline/mqtt_JSON_to_iobroker) erzeugt aus einer mqtt-JSON Zeile

      • eine JavaScript-Funktion "on(...){...}" (die man nur geringfügig anpassen muss (v.a. den Datentyp)),
      • diese JavaScript-Funktion wandelt das JSON in Einzelwerte um und
      • diese JavaScript-Funktion speichert die Einzelwerte in der korrekten Objekt-Rubrik: '0_userdata.0.usw.usf...' ab, wobei
      • diese JavaScript-Funktion den Objekt-Pfad anlegt, sofern er nicht vorhanden ist.

      Um das python Programm auszuprobieren kann man es aus github kopieren (https://github.com/alex-kline/mqtt_JSON_to_iobroker) und zB online laufen lassen:
      https://www.w3schools.com/python/trypython.asp?filename=demo_indentation oder
      https://www.online-python.com/ oder
      https://jupyterlite.github.io/demo/lab/index.html

      Die Konfiguration auf eigene Belange ist einfach:
      # 1. den angegebenen Beispiel mqtt-JSON String durch den eigenen ersetzen; der meine ist:
      json_str = '{"Time": "2100-01-19T00:16:16", "ENERGY": { "TotalStartTime": "2099-10-13T00:12:31", "Total": 1050.239, "Yesterday": 1.833, "Today": 0.040000000000000001,"Period": 0,"Power": 171, "ApparentPower": 200, "ReactivePower": 104, "Factor": 0.84999999999999998, "Voltage": 290, "Current": 0.68999999999999995 }}'
      #
      # 2. den angegebenen Beispiel-Ursprung des JSON-Strings durch den eigenen ersetzen; der meine ist::
      s_idJson = "'mqtt.0.tasmota.tele.tasmota-gosund-EP2-02.SENSOR';" # object-path des mqtt-JSON Strings
      #
      # 3. (Ziel-) Path der Werte, die im JSON-String enthalten sind, und die von dort
      # zB in grafana angezeigt werden sollen, durch den eigenen ersetzen.
      s_path = "'0_userdata.0.tasmota-gosund-EP2-02.SENSOR.';" # object-path der zugehörigen Einzelwerte im User-Namensraum

      Das Python Programm erzeugt eine js-function 'on(){}', die alle key:value des JSON-Strings in den object-Namensraum des Users kopiert nachdem sie vorher dort passende Objekte angelegt hat.
      Man braucht nun (höchstwahrscheinlich) nicht alle Werte aus dem JSON-String. Die überflüssigen Umwandlungen also bitte einfach in der js-function 'on(){}' löschen.

      Es gilt noch

      1. den Typ des betreffenden Wertes ('number'|'boolean'|'string') anzupassen -- sonst passiert ein Laufzeit-Fehler!
      2. die Einheit (zB '°C', 'kWh', usw.) anzugeben -- das ist unkritisch.
        nb: die on(){} Funktion besteht im wesentlichen aus einer großen try{} catch() Anweisung (oder wie man das in JavaScript nennt - ich kann diese Sprache nicht). Laufzeitfehler werden dadurch zwar offensichtlich abgefangen, aber nicht gemeldet oder ausgewertet. Das bedeutet, dass man gar nicht merkt, dass ein Fehler passiert. Man merkt nur, dass keine Werte an der erwarteten Stelle (in '0_userdata.0. ...') auftauchen. Zur Fehlersuche also am besten die try{} catch() Anweisung löschen/auskomentieren und bei der getesteten Version wieder aktivieren.

      Vielleicht erbarmt sich ja jemand und wandelt das python script in eine JavaScript-Funktion um, die dann evtl im iobroker als Dienst an geeigneter Stelle aufgerufen werden kann? Und vielleicht erbarmt sich jemand, und schreibt in irgendwo in der Dokumentation, wie sich das mit den mqtt-JSON Strings verhält.

      Codierknecht Homoran 2 Replies Last reply Reply Quote 0
      • mickym
        mickym Most Active last edited by mickym

        @alexkl du kannst ja meinen nodered flow nutzen, der ist schon lange fertig.

        https://forum.iobroker.net/topic/43856/json-oder-javascript-objekt-in-iobroker-datenpunkte-zerlegen

        A 1 Reply Last reply Reply Quote 1
        • Codierknecht
          Codierknecht Developer Most Active @alexkl last edited by Codierknecht

          @alexkl
          Wozu programmieren?
          Am einfachsten legt man sich einen oder mehrere Alias(e) an und verwendet eine passende Konvertierungsfunktion.

          JSON.parse(val).MeinWert
          

          Dazu einfach Rechtsklick auf den JSON-DP und "Alias erstellen".

          Ein JSON aus MQTT kann alles mögliche enthalten. In einer individuellen Struktur.
          In der Regel benötigt man aber nur einen oder wenige Werte. Daher ist an der Ecke "selbermachen" angesagt.

          A 1 Reply Last reply Reply Quote 1
          • T
            ticaki Developer last edited by ticaki

            @alexkl sagte in Umwandlung MQTT JSON in iobroker Datenpunkte:

            (Der sonoff-Adapter liefert mir, warum auch immer, gar keine Werte).

            Der Sonoff Adapter ersetzt den Mqtt-Server - man verbindet kompatible Geräte direkt mit ihm.

            https://github.com/ioBroker/ioBroker.sonoff#comparison-of-iobroker-adapters-using-mqtt-protocol

            A 1 Reply Last reply Reply Quote 1
            • Codierknecht
              Codierknecht Developer Most Active last edited by

              @alexkl

              @ticaki sagte in Umwandlung MQTT JSON in iobroker Datenpunkte:

              Der Sonoff Adapter ersetzt den Mqtt-Server - man verbindet kompatible Geräte direkt mit ihm.

              Dabei ist natürlich zu beachten, dass beim parallelen Betrieb von MQTT- und Sonoff-Adapter diese jeweils andere Ports erhalten. Und im entsprechenden Gerät natürlich passend eingestellt werden müssen.

              Ich hatte - im Gegensatz zu @ticaki - in Deinem Eingangspost das kleine Wörtchen "Tasmota" überlesen.
              Dafür ist der Sonoff-Adapter ideal. Der fummelt Dir das fein säuberlich auseinander. Ohne Aliase und erst recht ohne eine Zeile Code.

              c8daa5d7-3d75-43c8-82e0-024e707a610e-image.png

              A 1 Reply Last reply Reply Quote 1
              • A
                alexkl @mickym last edited by

                @mickym Vielen Dank! Leider habe ich ihn nicht gefunde. Und, ob nodered, Blockly oä, das macht mE keinen substantiellen Unterschied: in einem halben Jahr verstehe ich nichts mehr (vor einem Jahr habe ich nodered mal ansatzweise verstanden, als ich versucht habe das Ganze mal so nebenher in HomeAssistant zu erledigen - und mir tun die Augen jetzt noch weh, wen ich mich dran erinnere. Ich habe HA schnell aufgegeben und nodered). Und dann: wahrscheinlich hätte ich Deinen nodered-flow auch verwendet - aber ich habe ihn nicht gefunden. Vielleicht habe ich nicht gut gesucht, aber ich habe ihn nicht gefunden. Das ist das Problem. Wie damals (R) bei Siemens: Siemens weiß nicht was Siemens weiß.

                mickym 1 Reply Last reply Reply Quote 0
                • A
                  alexkl @Codierknecht last edited by

                  @codierknecht Vielen Dank - das hätte ich gerne vorher gewusst! Leider nicht gefunden (hab' ich was übersehen? Sicherlich! Aber wo??), und ehrlich gefragt: du schreibst: 'Daher ist an der Ecke "selbermachen" angesagt.' Und wo steht geschrieben wie das geht, Beispiele zB? (Ich will mich nicht wiederholen, s. meine Antwort zu mickym). Danke jedenfalls.

                  Codierknecht 1 Reply Last reply Reply Quote 0
                  • mickym
                    mickym Most Active @alexkl last edited by

                    @alexkl sagte in Umwandlung MQTT JSON in iobroker Datenpunkte:

                    @mickym Vielen Dank! Leider habe ich ihn nicht gefunde. Und, ob nodered, Blockly oä, das macht mE keinen substantiellen Unterschied: in einem halben Jahr verstehe ich nichts mehr (vor einem Jahr habe ich nodered mal ansatzweise verstanden, als ich versucht habe das Ganze mal so nebenher in HomeAssistant zu erledigen - und mir tun die Augen jetzt noch weh, wen ich mich dran erinnere. Ich habe HA schnell aufgegeben und nodered). Und dann: wahrscheinlich hätte ich Deinen nodered-flow auch verwendet - aber ich habe ihn nicht gefunden. Vielleicht habe ich nicht gut gesucht, aber ich habe ihn nicht gefunden. Das ist das Problem. Wie damals (R) bei Siemens: Siemens weiß nicht was Siemens weiß.

                    Ich verstehe nicht ganz - ich habe Dir doch den Thread mit dem Flow - unten gepostet? - Gut wenn Du NodeRed nicht magst, dann ist das eine andere Sache - aber so ein Flow ist wirklich nicht kompliziert und könnte Dir auch helfen.

                    A 1 Reply Last reply Reply Quote 1
                    • A
                      alexkl @ticaki last edited by

                      @ticaki Danke! Ich hab's erst jetzt durch deinen Link (vielleicht) kapiert: Alle meine tasmota Datenquellen (GOSUND Steckdosen und einige esp32 (mit bme280)) senden zu einem raspi auf dem ein mqtt broker läuft. Wenn ich die Tabelle recht verstehe, hätte ich die also alle umleiten müssen (?) auf den ioBroker.sonoff? ... Ich glaube sogar, dass ich die Tabelle gesehen habe und dann gelesen 'In the web config, you can determine which MQTT telegrams create the new objects not in default data points:'. Dann habe ich nach 'web config' gesucht und nichts gefunden... Wieder das Problem mit der Doku...

                      1 Reply Last reply Reply Quote 0
                      • A
                        alexkl @mickym last edited by

                        @mickym Pardon, ich habe mich missverständlich ausgedrückt: ich hatte Deinen Flow damals nicht gefunden. Jetzt natürlich schon - und chapeau wieviel Arbeit und Fachwissen da drin steckt! Aber ich habe ihn vor zwei Wochen nicht gefunden. Probier mal in der Suche 'mqtt JSON', es kommt brutal viel, was man durcharbeiten muss. Ich finde nach wie vor, in den FAQ ist eine Art Grundsatzartikel nötig. (Es stimmt auch: ich mag nodered nicht, ebensowenig js, Java. Ich habe mit FORTRAN angefangen, dann Pascal, Assembler, Algol, PHP, ABAP usw, inzwischen bin ich noch einigermaßen vertraut mit python, weil ich nur noch sehr selten programmiere. Ich sag Euch, das Zeug ist ALLES viel zu kompliziert - wer soll das alles mal warten? Ohne Doku??)

                        mickym 1 Reply Last reply Reply Quote 0
                        • A
                          alexkl @Codierknecht last edited by

                          @codierknecht Schade, schade dass ich vor zwei Wochen diese Information nicht gefunden habe! Gibt es denn irgendwo ein Beispiel, wie man den sonoff Adapter einbindet, eine Anleitung, ein Beispiel? Auf link text war ich vor zwei Wochen schon, aber bin wie gesagt daran gescheitert, zu verstehen, was 'In the web config ...' bedeutet. Und ich habe wie in meinem ersten Post schon geschrieben, lange gebraucht, um zu verstehen, dass die original-Datenpunkte (sollte es so heißen?) erst in den User-Namespace (sollte es so heißen) kopiert werden müssen etc., usw. Danke jedenfalls.

                          1 Reply Last reply Reply Quote 0
                          • mickym
                            mickym Most Active @alexkl last edited by

                            @alexkl Ok, wie gesagt, wenn Du Hilfe zu dem Flow brauchst, dann meldest Dich einfach nochmal. Es ist so einfach aufgebaut, dass Du keine Probleme haben wirst.

                            Im Prinzip brauchst Du nicht mehr, als diese 2 Nodes und eine iobroker-In Node, die die Daten liefert

                            fa647588-5a57-492e-b0f3-179447aa3715-image.png

                            Der Rest ist alles in dem Subflow verborgen und muss Dich nicht kümmern.

                            A 1 Reply Last reply Reply Quote 1
                            • A
                              alexkl @mickym last edited by

                              @mickym Danke!

                              1 Reply Last reply Reply Quote 0
                              • Homoran
                                Homoran Global Moderator Administrators @alexkl last edited by Homoran

                                @alexkl sagte in Umwandlung MQTT JSON in iobroker Datenpunkte:

                                So etwas Prinzipielles sollte doch eigentlich in den FAQ stehen?

                                in welchen FAQ?

                                @alexkl sagte in Umwandlung MQTT JSON in iobroker Datenpunkte:

                                Der sonoff-Adapter liefert mir, warum auch immer, gar keine Werte).

                                Das wäre die erste notwendige Info

                                @alexkl sagte in Umwandlung MQTT JSON in iobroker Datenpunkte:

                                Viel gesucht, wenig gefunden.

                                hmm, dazu gibt es gefühlt hunderte Threads, ob mit node-red, mit blockly, js, oder ganz einfach über alias

                                Alles jeweils ein kleiner "zweizeiler"

                                A 1 Reply Last reply Reply Quote 1
                                • A
                                  alexkl @Homoran last edited by

                                  @homoran

                                  • In welchen FAQ? Ich kann nur von meiner Sucherei berichten und meinen Schlussfolgerungen berichten. Ich denke:
                                    https://www.iobroker.net/#de/documentation/basics/README.md dort unter ioBroker Grundlagen > Software. Dort unbedingt den Hinweis, dass es einen User-Namespace gibt, was der bedeutet, welche Aufgaben der hat, wie man ihn verwendet, etc. (und Verweise auf Details, Beispiele etc.).
                                    Am besten aber, setzt man jemand vor ioBroker, der keine Angst vorm keyboard hat, der weiß was mqtt ist und beobachtet ihn beim Suchen. Im nachhinein können sich dei Erfahrenen nicht mehr vorstellen, wie's ist, wenn eine Materie neu ist.
                                  • Ja, der sonoff Adapter, der wär's wohl gewesen, aber kein Beispiel gefunden, auch nicht 'web config'. Keine Ahnung was das ist.
                                  • 'Gefühlte hundert Threads' ... that's the problem. Weil keine Doku. Also hunderte, die sich das zusammenreimen mussten - wie ich. Das ist doch der eindeutigste Hinweis darauf, dass Doku fehlt.
                                  • und, ich weiß ja wirklich nicht ob's stimmt, aber ich glaube mqtt ist was ganz Fundamentales...

                                  Vielen Dank! Ist übrigens die erste Resonanz, die mE das eigentliche Problem adressiert (wie man so schön sagt).

                                  Homoran 1 Reply Last reply Reply Quote 0
                                  • Homoran
                                    Homoran Global Moderator Administrators @alexkl last edited by

                                    @alexkl sagte in Umwandlung MQTT JSON in iobroker Datenpunkte:

                                    aber ich glaube mqtt ist was ganz Fundamentales...

                                    Natürlich!
                                    für die Dokus dazu ist aber nur begrenzt für ioBroker zuständig.
                                    Das ist ein Protokoll, das von ioBroker unterstützt eird.
                                    Ebenso JSON, das ist auch keine ioBrojer Erfindung.

                                    @alexkl sagte in Umwandlung MQTT JSON in iobroker Datenpunkte:

                                    Weil keine Doku

                                    naja, die gibt es schon. https://www.iobroker.net/#de/adapters/adapterref/iobroker.mqtt/README.md
                                    Aber dann noch Dokus über systemübergreifende Komponenten, ist doch etwas zu viel erwartet.

                                    @alexkl sagte in Umwandlung MQTT JSON in iobroker Datenpunkte:

                                    dass es einen User-Namespace gibt, was der bedeutet, welche Aufgaben der hat, wie man ihn verwendet,

                                    auch das gibt es.
                                    Aber wenn alles auf die erste Seite soll wird's da ziemlich eng.
                                    Dafür ist ioBroker einfach zu mächtig

                                    @alexkl sagte in Umwandlung MQTT JSON in iobroker Datenpunkte:

                                    Also hunderte, die sich das zusammenreimen mussten - wie ich. Das ist doch der eindeutigste Hinweis darauf, dass Doku fehlt.

                                    ...oder nicht suchen wollten, oder.....

                                    A 1 Reply Last reply Reply Quote 0
                                    • Codierknecht
                                      Codierknecht Developer Most Active @alexkl last edited by

                                      @alexkl sagte in Umwandlung MQTT JSON in iobroker Datenpunkte:

                                      ehrlich gefragt: du schreibst: 'Daher ist an der Ecke "selbermachen" angesagt.' Und wo steht geschrieben wie das geht, Beispiele zB?

                                      In einem JSON-Telegram aus MQTT kann alles mögliche drinstehen.
                                      Da kommt es darauf an, was drinsteht und was Du haben möchtest. Das habe ich mit "selbermachen" gemeint.

                                      Ist aber unerheblich. Wenn es um Tasmota geht: Installier Dir den Sonoff-Adapter, stelle dort einen nicht anderweitig verwendeten Port, Benutzername und Kennwort ein und in dem oder den Tasmota Gerät(en) diese Daten.
                                      Der Sonoff-Adapter ist speziell auf Tasmota abgestimmt. Einfacher geht's nicht.

                                      mickym 1 Reply Last reply Reply Quote 0
                                      • mickym
                                        mickym Most Active @Codierknecht last edited by

                                        @codierknecht Der Sonoff Adapter kennt aber nicht alle Parameter - dafür gibts einige Beispiele - aber ich werde diese Diskussion nicht wieder aufmachen. Als erstes Beispiel ist schon mal, dass Du den prefix und topic auf Standard lassen musst, sonst kann der Adapter damit nicht umgehen.

                                        Codierknecht 1 Reply Last reply Reply Quote 0
                                        • Codierknecht
                                          Codierknecht Developer Most Active @mickym last edited by

                                          @mickym sagte in Umwandlung MQTT JSON in iobroker Datenpunkte:

                                          Der Sonoff Adapter kennt aber nicht alle Parameter

                                          Ist aber - zumindest für den Anfang - die einfachste Möglichkeit.

                                          Erstmal Erfolgserlebnisse liefern und Frust abbauen. Der Rest kommt später 😉

                                          1 Reply Last reply Reply Quote 0
                                          • A
                                            alexkl @Homoran last edited by

                                            @homoran Danke für die Rückmeldung! Immerhin das Feedback, das auf mein eigentliches Anliegen, die Doku, eingeht. (Ich habe mein Problem ja gelöst, siehe mein allererstes Posting.) Ich habe meine unschöne Erfahrung mit der letztlich fruchtlosen Sucherei berichtet und denke Andere sollten bessere Erfahrungen machen. Jeder der mit SW zu tun hat, weiß, dass Doku das Problem ist. Ich denke der vorgeschlagene Ort in der Doku wäre ok, zumindest um dort weitere Hinweise zu bekommen. Aber, ich bin ioBroker zum ersten mal vor zwei Wochen begegnet. welche Kompetenz sollte ich haben, wo was am besten wie dokumentiert wird?

                                            Ich glaube mqtt ist wichtig - und muss natürlich nicht in ioBroker erklärt werden, wohl aber, wie man in ioBroker damit umgeht. Gleiches gilt für den User-Namensraum. Meiner Meinung reicht jeweils ein Satz, von jemand, der sich damit auskennt. Tu ich nicht.

                                            Aber ich wüsste ich immer noch gerne was 'web config' ist (darauf nimmt das readme von sonoff auf github Bezug), damit ich mein Zeug konfigurieren kann.

                                            Ansonsten: ich finde ioBroker richtig gut. Und ich danke der community! Alex

                                            T 1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            635
                                            Online

                                            31.7k
                                            Users

                                            79.7k
                                            Topics

                                            1.3m
                                            Posts

                                            5
                                            22
                                            947
                                            Loading More Posts
                                            • Oldest to Newest
                                            • Newest to Oldest
                                            • Most Votes
                                            Reply
                                            • Reply as topic
                                            Log in to reply
                                            Community
                                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                            The ioBroker Community 2014-2023
                                            logo