Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. Datenpunkte in MQTT Json Bündeln

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Datenpunkte in MQTT Json Bündeln

    This topic has been deleted. Only users with topic management privileges can see it.
    • MartinP
      MartinP @Sunshinemaker last edited by

      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?

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

        Mit NodeRed wäre das kein Problem.

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

          @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

          1 Reply Last reply Reply Quote 0
          • Sunshinemaker
            Sunshinemaker @MartinP last edited by

            @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.

            1 Reply Last reply Reply Quote 0
            • MartinP
              MartinP last edited by

              @sunshinemaker Node Red benutze ich nicht - hier eine Idee in Blockly - aber ungetestet

              1760b343-9f9d-40e9-b9f9-ffd219ee4b39-grafik.png

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

                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.

                d9c8746d-30c3-44d8-a1a2-10bdacfddd0a-image.png

                Diese 1054 kann man mit einer list Node in ein Array auslesen

                9245824c-b966-4163-8dca-b8d04ab679c8-image.png

                und ein neues Objekt erstellen mit einer Change Node und JSONATA.

                Das ganze wird dann via mqtt in ein Objekt geschrieben:

                8a02799d-bbf2-4a96-82e0-bd583049b5b1-image.png

                8649083c-46ab-493e-9ad5-08395b847997-image.png
                ff9b6925-4d39-4fac-a3f0-35040412bc53-image.png
                Hier zum Import

                [
                   {
                       "id": "bd71cef564083799",
                       "type": "inject",
                       "z": "7e6af0015415146d",
                       "name": "0_userdata.0.accuWeather.*",
                       "props": [
                           {
                               "p": "topic",
                               "vt": "str"
                           }
                       ],
                       "repeat": "",
                       "crontab": "",
                       "once": false,
                       "onceDelay": 0.1,
                       "topic": "0_userdata.0.accuWeather.*",
                       "x": 2040,
                       "y": 140,
                       "wires": [
                           [
                               "066005975670db3c"
                           ]
                       ]
                   },
                   {
                       "id": "066005975670db3c",
                       "type": "ioBroker list",
                       "z": "7e6af0015415146d",
                       "name": "",
                       "topic": "",
                       "objType": "state",
                       "regex": "",
                       "asArray": "true",
                       "onlyIDs": "false",
                       "withValues": "true",
                       "x": 2250,
                       "y": 140,
                       "wires": [
                           [
                               "9d85ab16951fdf4f",
                               "e904e4d433b4ada0"
                           ]
                       ]
                   },
                   {
                       "id": "9d85ab16951fdf4f",
                       "type": "change",
                       "z": "7e6af0015415146d",
                       "name": "",
                       "rules": [
                           {
                               "t": "set",
                               "p": "payload",
                               "pt": "msg",
                               "to": "payload.{_id:val}~>$merge()",
                               "tot": "jsonata"
                           }
                       ],
                       "action": "",
                       "property": "",
                       "from": "",
                       "to": "",
                       "reg": false,
                       "x": 2470,
                       "y": 140,
                       "wires": [
                           [
                               "0003e55bdca22fc3"
                           ]
                       ]
                   },
                   {
                       "id": "0003e55bdca22fc3",
                       "type": "mqtt out",
                       "z": "7e6af0015415146d",
                       "name": "",
                       "topic": "test/hallo",
                       "qos": "",
                       "retain": "",
                       "respTopic": "",
                       "contentType": "",
                       "userProps": "",
                       "correl": "",
                       "expiry": "",
                       "broker": "be6c1eaab0dff4fe",
                       "x": 2680,
                       "y": 140,
                       "wires": []
                   },
                   {
                       "id": "e904e4d433b4ada0",
                       "type": "debug",
                       "z": "7e6af0015415146d",
                       "name": "alle Datenpunkte",
                       "active": true,
                       "tosidebar": true,
                       "console": false,
                       "tostatus": false,
                       "complete": "payload",
                       "targetType": "msg",
                       "statusVal": "",
                       "statusType": "auto",
                       "x": 2470,
                       "y": 80,
                       "wires": []
                   },
                   {
                       "id": "be6c1eaab0dff4fe",
                       "type": "mqtt-broker",
                       "name": "",
                       "broker": "192.168.178.104",
                       "port": "1883",
                       "clientid": "mqttClientNodeRedTest",
                       "autoConnect": true,
                       "usetls": false,
                       "protocolVersion": "4",
                       "keepalive": "60",
                       "cleansession": true,
                       "birthTopic": "",
                       "birthQos": "0",
                       "birthPayload": "",
                       "birthMsg": {},
                       "closeTopic": "",
                       "closeQos": "0",
                       "closePayload": "",
                       "closeMsg": {},
                       "willTopic": "",
                       "willQos": "0",
                       "willPayload": "",
                       "willMsg": {},
                       "userProps": "",
                       "sessionExpiry": ""
                   }
                ]
                

                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,.

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

                  @mickym er hat "Mehrere" geschrieben, nicht "Alle"

                  Ein "*" ist da wenig hilfreich...

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

                    @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?

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

                      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:

                      3adfd251-5c95-4ddb-b278-22f25afc1a0f-image.png

                      b3bcf57e-8682-49ca-852d-264c11383953-image.png

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

                        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.

                        ca710503-543b-4ee2-a08f-56e0771b9690-image.png

                        ![435109a5-2060-4771-b0af-ea40c6a232ec-image.png](/assets/uploads/files/1706484981316-435109a5-2060-4771-b0af-ea40c6a232ec-image-resized.png) code_text
                        

                        7d9a032c-a2b8-4f7f-8e2b-dae1641b0dfb-image.png

                        Ü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:

                        de21a607-56f7-4dc3-adf0-9ea820a1a1ba-image.png

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

                          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:

                          dbe647f1-f0c7-42f0-93a5-d64c9dbef433-image.png

                          Schaut man sich das Nachrichtenobjekt an - sieht man, dass alle Werte in den unterschiedlichen Nachrichteneigenschaften zugewiesen sind.

                          8aeb2523-2c6e-462a-b1e9-8cec50fb81b9-image.png

                          Diese Werte kann man nun beliebig zu benennenden Eigenschaften super einfach via JSONATA zuweisen

                          cf5dc22b-1e7f-4ad0-9126-ce42af4f023f-image.png

                          und erhält so easy ein Objekt mit den gewünschten Eigenschaften und Werten:
                          8a59c687-3729-455e-bf00-17858c7a1c0b-image.png

                          und dann einfach an den mqtt Broker senden - und das Ergebnis ist dann ein JSON Objekt.

                          873f7c15-8a52-4e40-a60c-df6df8cca95f-image.png

                          So damit bin ich am Ende,

                          Weiterhin fröhliches Puzzeln mit problemlosen Computern. 😉

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

                            @Sunshinemaker

                            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,

                            1 Reply Last reply Reply Quote 0
                            • Sunshinemaker
                              Sunshinemaker last edited by

                              @MartinP Danke für deinen Vorschlag 🙂

                              @mickym Ich bin ausgestiegen bei :"Ich hab ehrlich keine Lust mehr zu zeigen..."

                              Ich hab eine Lösung für mich gefunden und bin zufrieden.

                              PS: Kann NodeRed RSCP für die Anbindung vom E3/DC S10 Pro ?????

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

                              Support us

                              ioBroker
                              Community Adapters
                              Donate

                              643
                              Online

                              31.6k
                              Users

                              79.6k
                              Topics

                              1.3m
                              Posts

                              4
                              16
                              555
                              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