Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. Blockly
  5. Shelly per Blockly auslesen / parsen

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    17
    1
    2.5k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    990

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.3k

Shelly per Blockly auslesen / parsen

Geplant Angeheftet Gesperrt Verschoben Blockly
6 Beiträge 4 Kommentatoren 297 Aufrufe 4 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • D Offline
    D Offline
    DasMoritz
    schrieb am zuletzt editiert von
    #1

    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

    AsgothianA paul53P 2 Antworten Letzte Antwort
    0
    • D DasMoritz

      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

      AsgothianA Offline
      AsgothianA Offline
      Asgothian
      Developer
      schrieb am zuletzt editiert von
      #2

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

      ioBroker auf RPi4 - Hardware soweit wie möglich via Zigbee.
      "Shit don't work" ist keine Fehlermeldung, sondern ein Fluch.

      1 Antwort Letzte Antwort
      0
      • D DasMoritz

        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

        paul53P Offline
        paul53P Offline
        paul53
        schrieb am zuletzt editiert von
        #3

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

        Das trennt man mit einem Punkt:

        Blockly_temp.JPG

        Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
        Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

        Pedder007P 1 Antwort Letzte Antwort
        1
        • paul53P paul53

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

          Das trennt man mit einem Punkt:

          Blockly_temp.JPG

          Pedder007P Offline
          Pedder007P Offline
          Pedder007
          schrieb am zuletzt editiert von Homoran
          #4

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

          Pedder
          All @Proxmox/Bookworm auf HP Elitedesk 800 G4; Zigbee: ZigStar (LAN), ~110Devices
          Unifi, Motioneye/3Reolinks, PiHole, Bosch CS7800i via BBQKees/EMS-ESP, Fronius/BYD 11kWp via Modbus
          Under construction: Smart-WoMo auf Raspi4

          paul53P 1 Antwort Letzte Antwort
          0
          • Pedder007P Pedder007

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

            paul53P Offline
            paul53P Offline
            paul53
            schrieb am zuletzt editiert von paul53
            #5

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

            Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
            Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

            Pedder007P 1 Antwort Letzte Antwort
            1
            • paul53P 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.

              Pedder007P Offline
              Pedder007P Offline
              Pedder007
              schrieb am zuletzt editiert von
              #6

              @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 :+1: 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!

              Pedder
              All @Proxmox/Bookworm auf HP Elitedesk 800 G4; Zigbee: ZigStar (LAN), ~110Devices
              Unifi, Motioneye/3Reolinks, PiHole, Bosch CS7800i via BBQKees/EMS-ESP, Fronius/BYD 11kWp via Modbus
              Under construction: Smart-WoMo auf Raspi4

              1 Antwort Letzte Antwort
              0
              Antworten
              • In einem neuen Thema antworten
              Anmelden zum Antworten
              • Älteste zuerst
              • Neuste zuerst
              • Meiste Stimmen


              Support us

              ioBroker
              Community Adapters
              Donate

              297

              Online

              32.6k

              Benutzer

              82.3k

              Themen

              1.3m

              Beiträge
              Community
              Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
              ioBroker Community 2014-2025
              logo
              • Anmelden

              • Du hast noch kein Konto? Registrieren

              • Anmelden oder registrieren, um zu suchen
              • Erster Beitrag
                Letzter Beitrag
              0
              • Home
              • Aktuell
              • Tags
              • Ungelesen 0
              • Kategorien
              • Unreplied
              • Beliebt
              • GitHub
              • Docu
              • Hilfe