Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Blockly
    5. Shelly per Blockly auslesen / parsen

    NEWS

    • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?

    • Monatsrückblick – September 2025

    • Neues Video "KI im Smart Home" - ioBroker plus n8n

    Shelly per Blockly auslesen / parsen

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

      Moin zusammen,

      ich habe mal wieder eine Frage / ein Anliegen:

      Meine Shelly-Geräte übermitteln ihre Werte alle per MQTT an meinen zentralen MQTT Server (EMQX). Den Shelly-Adapter möchte ich eigentlich nicht nutzen, da ich alles auf dem MQTT Server halten möchte.

      Meine Shellys schreiben ihre Informationen also alle in Richtung des MQTT Server, den habe ich im ioBroker abonniert und die Werte stehen dann in den entsprechenden Datenpunkt, hier also der Datenpunkt:

      mqqt/0/Waermepumpe1/status/switch:0:
      

      In dem Datenpunkt stehen dann folgende Informationen:

      {"id":0, "source":"init", "output":true, "apower":1072.6, "voltage":231.4, "current":4.870, "aenergy":{"total":4145268.729,"by_minute":[17865.943,17855.005,17845.969],"minute_ts":1758697440},"temperature":{"tC":45.3, "tF":113.5}}
      

      Nun würde ich gerne den Wert apower und total auslesen. Den Wert "apower" kann ich nun mit dem untenstehenden Blockly auslesen, den Wert aenergy/total leider nicht.

      Und eine Frage: Ist mein Vorgehen so "logisch" okay oder komplett falsch abgebogen?

      Hier mein Blockly-Segment (das ist quasi nur eine Herleitung, bin schon froh, dass überhaupt apower kommt):

      schedule("*/5 * * * * *", async () => {
        console.info((() => { try { return JSON.parse(getState('mqtt.0.Waermepumpe1.status.switch:0').val); } catch (e) { return {}; }})());
        console.info(getAttr((() => { try { return JSON.parse(getState('mqtt.0.Waermepumpe1.status.switch:0').val); } catch (e) { return {}; }})(), 'apower'));
        console.info(getAttr((() => { try { return JSON.parse(getState('mqtt.0.Waermepumpe1.status.switch:0').val); } catch (e) { return {}; }})(), 'total'));
      });
      

      Für den Wert "aenergy/total" bekomme ich aber nur "undefined" zurück, ich glaube weil der verschachtelt unter aenergy hängt?

      Mag mir da mal jemand helfen?

      Ich kann leider keine weiteren Screenshots hochladen, ich weiß nicht warum 😞

      Danke,
      Moritz

      Asgothian paul53 2 Replies Last reply Reply Quote 0
      • Asgothian
        Asgothian Developer @DasMoritz last edited by

        @dasmoritz die Funktion getAttr kenn ich nicht, aber:

        JSON.parse("dein Payload").aenergy.total sollte deinen Wert beinhalten.

        Wenn du dir sorgen machst das er nicht existiert, dann:

        const jsonObj = JSON.parse(obj.val);
        const total = jsonObj.aenergy ? jsonObj.aenergy.total ? 'no energy';
        const power = jsonObj.apower;
        

        Ansonsten:

        • warum zum Teufel ein Heartbeat ?
        • warum liest du den gleichen State im Heartbeat 3 mal ein ?
        • warum parsed du den gleichen String im Heartbeat 3 mal ?
        • Du willst blockly - warum postest du dann JS Code ?

        A.

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

          @dasmoritz sagte: Für den Wert "aenergy/total" bekomme ich aber nur "undefined" zurück

          Das trennt man mit einem Punkt:

          Blockly_temp.JPG

          Pedder007 1 Reply Last reply Reply Quote 1
          • Pedder007
            Pedder007 @paul53 last edited by Homoran

            @paul53 danke erstmal für den Hinweis den ich hier gefunden habe, um mit einem Blockly Werte aus einem MQTT Wert zu extrahieren.
            Leider will es bei mir allerdings nicht funktionieren und nach zig-maligem überprüfen, dann doch hier die Frage, was ich da evtl. falsch mache 🙂

            Mein DP mit dem MQTT-String enthält folgendes:

            {"GPSData":{"GPSData":{"latitude":xx.036424,"longitude":xx.261328,"altitude":176.600000,"speed":0.000000,"date_iso_8601":"2025-11-09T19:09:39+0100"}}
            

            MOD-EDIT: Code in code-tags gesetzt!
            (DP aus einen Teltronix Router)

            Ich habe folgendes Blockly nachgebaut:
            07270501-fcfc-4735-af65-8f56b572f094-image.png
            Der MQTT-DP wird alle 3 Minuten aktualisiert und der Trigger wird entsprechend ausgelöst.
            Leider bekomme ich allerdings keinerlei Werte im Debug des Blocklys und auch in meinem manuell angelegten Datenpunkt 'Breitengrad' kommt nur folgendes an: {"ack":true}.
            Das 'DP' im Block 'setze' ist eine lokale Variable im Script.
            Auch im MQTT-Debug/Protokoll (steht auf Info) kommen nur die 'reconnected' und 'subscribe' Meldungen.

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

              @pedder007 sagt: Mein DP mit dem MQTT-String enthält folgendes:

              Dann sind die Attribute "GPSData.GPSData.latitude" und "GPSData.GPSData.longitude"

              EDIT: Oder so:

              Blockly_temp.JPG

              Ist JSON korrekt? Am Ende sehe ich nur 2 schließende Klammern. Es müssten aber 3 sein, wenn "GPSData" zweimal enthalten ist.

              Pedder007 1 Reply Last reply Reply Quote 1
              • Pedder007
                Pedder007 @paul53 last edited by

                @paul53 super das war's, vor allem auch noch der Hinweis bzgl. der fehlenden Klammer.
                Ich hatte das JSON eben über die Copy-Funktion aus dem Objektbaum geholt. Schaut man sich aber wirklich den Zustand an, dann steht da auch nur ein 'GPSData'.

                Entsprechend im Attribut also nur 'GPSData.latitude' und dann geht's 👍 Mir war aus dem Beispiel nicht klar geworden, dass man das auch noch mitnehmen muss 🙂

                ... und dann ist das Ganze auch sehr zäh, da ich da aktuell nur über eine Al-Talk Standard SIMkarte zugreife mit mittelmäßigem Empfang. Deshalb aber auch die Überwachung der Koordinaten 😉

                1000-Dank!

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

                Support us

                ioBroker
                Community Adapters
                Donate

                952
                Online

                32.4k
                Users

                81.3k
                Topics

                1.3m
                Posts

                4
                6
                172
                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