Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Blockly
    5. Daten Objekt aus MQTT zerlegen und in eigene Objekte packen

    NEWS

    • Neues Video über Aliase, virtuelle Geräte und Kategorien

    • Wir empfehlen: Node.js 22.x

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    Daten Objekt aus MQTT zerlegen und in eigene Objekte packen

    This topic has been deleted. Only users with topic management privileges can see it.
    • M
      Meckii @Homoran last edited by Meckii

      @homoran
      Ja, ich hab das so stehen lassen damit man meinen Lösungsansatz sieht.
      Dass das genau so wie im Bild nicht gehen kann ist mir klar 😉

      Gerne

      {"Time":"2023-12-10T14:30:04","":{"aktuelle_wirkleistung":1212,"zählerstand_tarif_1":12495.9,"zählerstand_tarif_2":0.0}}
      
      paul53 1 Reply Last reply Reply Quote 0
      • Homoran
        Homoran Global Moderator Administrators last edited by

        @meckii sagte in Daten Objekt aus MQTT zerlegen und in eigene Objekte packen:

        @homoran

        Gerne

        {"Time":"2023-12-10T14:30:04","":{"aktuelle_wirkleistung":1212,"zählerstand_tarif_1":12495.9,"zählerstand_tarif_2":0.0}}
        

        siehste, da ist das letzte " nicht drin, dann müsste es mit

        @homoran sagte in Daten Objekt aus MQTT zerlegen und in eigene Objekte packen:

        probier mal ein 0.aktuelle......

        klappen

        1 Reply Last reply Reply Quote 0
        • paul53
          paul53 @Meckii last edited by paul53

          @meckii sagte: {"Time":"2023-12-10T14:30:04","":{"aktuelle_wirkleistung":1212,"zählerstand_tarif_1":12495.9,"zählerstand_tarif_2":0.0}}

          Das Problem ist der leere Bezeichner des Objektes. Man muss erst damit das Objekt erzeugen, um dann auf die Attribute zugreifen zu können.

          Blockly_temp.JPG

          M 1 Reply Last reply Reply Quote 0
          • M
            Meckii @paul53 last edited by

            @paul53 Da bekomme ich eine Fehlermeldung

            Cannot parse "mqtt.0.tele.tasmota_729799.SEN"SyntaxError: Unexpected token m in JSON at position 0
            
            paul53 Homoran 3 Replies Last reply Reply Quote 0
            • paul53
              paul53 @Meckii last edited by paul53

              @meckii

              Blockly_temp.JPG

              Blockly zeigen!

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

                @meckii sagte in Daten Objekt aus MQTT zerlegen und in eigene Objekte packen:

                @paul53 Da bekomme ich eine Fehlermeldung

                Cannot parse "mqtt.0.tele.tasmota_729799.SEN"SyntaxError: Unexpected token m in JSON at position 0
                

                und mit 0.aktuel....

                EDIT!
                Natürlich hat @Paul53 wieder recht!
                Screenshot_20231210-154606_Firefox.jpg

                anders geht's nicht

                M 1 Reply Last reply Reply Quote 0
                • M
                  Meckii @Homoran last edited by Meckii

                  @homoran
                  Ok wenn ich es mache wie du - also das Objekt in einen Text kopieren - dann geht es.
                  Greife ich auf das Objekt direkt zu kommt eine Fehlermeldung...

                  16:54:44.761	error	javascript.0 (1473) script.js.Strom.Bezug.Messdaten: Cannot parse "mqtt.0.tele.tasmota_729799.SEN"SyntaxError: Unexpected token m in JSON at position 0
                  16:54:44.763	error	javascript.0 (1473) script.js.Strom.Bezug.Messdaten: Cannot get zählerstand_tarif_2 of null
                  

                  Gibt es einen vernünftigen Weg das originale Objekt wie es aus MQTT im ioBroker landet zu kopieren und hier einzufügen?

                  Edit:
                  Ich nehme alles zurück - der Depp saß vor dem Monitor.
                  Man sollte auf den Wert von ObjektID gehen und nicht auf die ObjektID..

                  Vielen Dank an alle!

                  paul53 1 Reply Last reply Reply Quote 0
                  • paul53
                    paul53 @Meckii last edited by

                    @meckii sagte: Greife ich auf das Objekt direkt zu kommt eine Fehlermeldung...

                    Wie erfolgt der Zugriff? Zeigen!

                    M 1 Reply Last reply Reply Quote 0
                    • M
                      Meckii @paul53 last edited by

                      @paul53 sagte in Daten Objekt aus MQTT zerlegen und in eigene Objekte packen:

                      @meckii sagte: Greife ich auf das Objekt direkt zu kommt eine Fehlermeldung...

                      Wie erfolgt der Zugriff? Zeigen!

                      Ist erledigt.
                      Habs ein Beitrag weiter oben beschrieben - der Fehler saß vor dem Monitor 🙂

                      1 Reply Last reply Reply Quote 0
                      • M
                        Meckii last edited by

                        Meine Lösung für die Nachwelt:

                        var Objekt, wirkleistung, tarif1, tarif2, serverid;
                        
                        createState('Strom.Bezug.Wirkleistung', 0, JSON.parse('{"type": "number", "unit": "W"}'), async () => {
                        });
                        createState('Strom.Bezug.ZaehlerstandHT', 0, JSON.parse('{"type": "number", "unit": "kWh"}'), async () => {
                        });
                        createState('Strom.Bezug.ZaehlerstandNT', 0, JSON.parse('{"type": "number", "unit": "kWh"}'), async () => {
                        });
                        createState('Strom.Bezug.Server_ID', 0, async () => {
                        });
                        on({ id: [].concat(['mqtt.0.tele.tasmota_123456.SENSOR']), change: 'ne' }, async (obj) => {
                          let value = obj.state.val;
                          let oldValue = obj.oldState.val;
                          Objekt = getState('mqtt.0.tele.tasmota_123456.SENSOR').val;
                          wirkleistung = getAttr(getAttr(Objekt, ''), 'aktuelle_wirkleistung');
                          tarif1 = getAttr(getAttr(Objekt, ''), 'zählerstand_tarif_1');
                          tarif2 = getAttr(getAttr(Objekt, ''), 'zählerstand_tarif_2');
                          serverid = getAttr(getAttr(Objekt, ''), 'Server_ID');
                          setState('javascript.0.Strom.Bezug.Wirkleistung' /* Strom.Bezug.Wirkleistung */, wirkleistung, true);
                          setState('javascript.0.Strom.Bezug.ZaehlerstandHT' /* Strom.Bezug.ZaehlerstandHT */, tarif1, true);
                          setState('javascript.0.Strom.Bezug.ZaehlerstandNT' /* Strom.Bezug.ZaehlerstandNT */, tarif2, true);
                          setState('javascript.0.Strom.Bezug.Server_ID' /* Strom.Bezug.Server_ID */, serverid, true);
                        });
                        
                        
                        Homoran 1 Reply Last reply Reply Quote 0
                        • Homoran
                          Homoran Global Moderator Administrators @Meckii last edited by

                          @meckii sagte in Daten Objekt aus MQTT zerlegen und in eigene Objekte packen:

                          Meine Lösung für die Nachwelt:

                          wo ist das Blockly dazu?
                          https://forum.iobroker.net/topic/51555/hinweise-für-gute-forenbeiträge/1

                          @meckii sagte in Daten Objekt aus MQTT zerlegen und in eigene Objekte packen:

                          der Fehler saß vor dem Monitor

                          ID statt Wert von?

                          immer alles zeigen, zeigen, zeigen!!
                          was du trotz Nachfrage nicht gemacht hast

                          M 2 Replies Last reply Reply Quote 0
                          • M
                            Meckii @Homoran last edited by Meckii

                            @homoran
                            Das reiche ich gerne nach.
                            War nur so dass ich zwei Kinder auf mir rumturnen hatte - jetzt sind sie im Bett 🙂
                            Screenshot 2023-12-10 193239.png

                            Mir war übrigens nicht klar, warum ich dann etwas zeigen sollte wo ich den Fehler schon gefunden hatte...
                            ICh gelobe besserung 🍻

                            paul53 1 Reply Last reply Reply Quote 0
                            • M
                              Meckii @Homoran last edited by

                              @homoran sagte in Daten Objekt aus MQTT zerlegen und in eigene Objekte packen:

                              ID statt Wert von?

                              immer alles zeigen, zeigen, zeigen!!
                              was du trotz Nachfrage nicht gemacht hast

                              Ich hatte versehentlich den oberen Block genommen statt den unteren.
                              Screenshot 2023-12-10 194021.png

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

                                @meckii sagte in Daten Objekt aus MQTT zerlegen und in eigene Objekte packen:

                                @paul53 Da bekomme ich eine Fehlermeldung

                                Cannot parse "mqtt.0.tele.tasmota_729799.SEN"SyntaxError: Unexpected token m in JSON at position 0

                                das sah nämlich nach der DP ID aus, deswegen schrieb @paul53 auch sofort

                                @paul53 sagte in Daten Objekt aus MQTT zerlegen und in eigene Objekte packen:

                                Blockly zeigen!

                                1 Reply Last reply Reply Quote 0
                                • paul53
                                  paul53 @Meckii last edited by

                                  @meckii sagte in: Das reiche ich gerne nach.

                                  Einfacher:

                                  Blockly_temp.JPG

                                  1 Reply Last reply Reply Quote 2
                                  • CPU6502
                                    CPU6502 @Meckii last edited by CPU6502

                                    @Meckii
                                    Das geht auch ohne Blockly:

                                    Einfach einen neuen Alias für dein Quellobjekt (“mqtt.0.tele.tasmota_729799.SENSOR") anlegen und dann im Alias eine Konvertierungsfunktion beim Lesen verwenden:

                                    JSON.parse(val).aktuelle_wirkleistung

                                    In deinem Beispiel ist nur der Attributname des verschachtelten JSON-Objekts merkwürdigerweise leer. Das sollte eigentlich nicht sein, daher wird das so wie von mir angegeben vermutlich nicht direkt funktionieren. Du musst zunächst in deiner Tasmota-Konfiguration dafür sorgen, dass hier ein Attributname vergeben wird (z.B. „Energie“). Dann kannst du den Wert mittels

                                    JSON.parse(val).Energie.aktuelle_wirkleistung

                                    extrahieren.

                                    Viele Grüße, Stefan

                                    paul53 mickym 2 Replies Last reply Reply Quote 0
                                    • paul53
                                      paul53 @CPU6502 last edited by

                                      @cpu6502 sagte: JSON.parse(val).aktuelle_wirkleistung

                                      JSON.parse(val)[''].aktuelle_wirkleistung
                                      
                                      1 Reply Last reply Reply Quote 0
                                      • mickym
                                        mickym Most Active @CPU6502 last edited by

                                        @cpu6502 sagte in Daten Objekt aus MQTT zerlegen und in eigene Objekte packen:

                                        @Meckii
                                        Das geht auch ohne Blockly:

                                        Ja oder mit meinem Node-red Flow, der zerlegt jedes JSON in einzelne Datenpunkte.

                                        1 Reply Last reply Reply Quote 0
                                        • D
                                          disko @Thomas Braun last edited by

                                          @thomas-braun Hallo und danke für dieses Skript, Datenpunkte angepasst und es läuft
                                          Gruß Dirk

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

                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          915
                                          Online

                                          32.0k
                                          Users

                                          80.5k
                                          Topics

                                          1.3m
                                          Posts

                                          7
                                          24
                                          1257
                                          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