Skip to content
  • Home
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • 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

  • Default (No Skin)
  • No Skin
Collapse
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. JavaScript
  5. [Gelöst] MQTT SENSOR String in einzelne Werte zerlegen

NEWS

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

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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.2k

[Gelöst] MQTT SENSOR String in einzelne Werte zerlegen

Scheduled Pinned Locked Moved JavaScript
11 Posts 5 Posters 822 Views 3 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • M Offline
    M Offline
    Magicfriend 0
    wrote on last edited by Magicfriend 0
    #1

    Hallo zusammen,
    ich möchte einen MQTT Sensor Wert eines Tasmota Zählers, der folgenden String enthält, in 3 einzelne Objekte trennen:

    {
      "Time": "2024-01-18T18:03:52",
      "": {
        "Total_in": 25856.6,
        "Total_out": 61.91,
        "Power_curr": 1534
      }
    }
    

    Ich habe auch schon ähnliche Beiträge dazu gefunden, doch leider funktioniert es noch nicht ganz.
    Der MQTT-Sensor Wert sieht so aus:

    {
      "_id": "mqtt.1.tele.Strom_Zaehler.SENSOR",
      "common": {
        "name": "tele/Strom_Zaehler/SENSOR",
        "write": true,
        "read": true,
        "role": "variable",
        "desc": "mqtt client variable",
        "type": "string"
      },
      "native": {
        "topic": "tele/Strom_Zaehler/SENSOR"
      },
      "type": "state",
      "from": "system.adapter.mqtt.1",
      "user": "system.user.admin",
      "ts": 1705481190584,
      "acl": {
        "object": 1636,
        "state": 1636
      }
    }
    

    Ich habe bisher ein Script das so aussieht, um die Werte auszulesen:

    const idJson = 'mqtt.1.tele.Strom_Zaehler.SENSOR';
    const path = 'javascript.0.';
     
    on(idJson, function(dp) {
        var obj = JSON.parse(dp.state.val) ;
        let id = path + 'Total_in';
        if(existsState(id)) setState(id, (obj.Total_in), true);
        else createState(id, obj.Total_in.Total_in, {type: 'number', name: 'Total_in', role: 'value', unit: 'kWh'});
        id = path + 'Total_out';
        if(existsState(id)) setState(id, obj.Total_out, true);
        else createState(id, obj.Total_out.Total_out, {type: 'number', name: 'Total_out', role: 'value', unit: 'kWh'});
        id = path + 'Power_curr';
        if(existsState(id)) setState(id, obj.Power_curr, true);
        else createState(id, obj.Power_curr.Power_curr, {type: 'number', name: 'Power_curr', role: 'value', unit: 'W'});
        // usw. für weitere Datenpunkte
    });
    

    Die angelegten Objekte dazu werden auch regelmässig aktualisiert, nur nicht mit den richtigen Werten. Die Werte darin sehen so Aus:
    Total_in.JPG
    Ich bin leider nicht so tief drin in der Programmierung, ich finde den Fehler einfach nicht :confused:

    Gruss, Sascha

    A paul53P 2 Replies Last reply
    0
    • M Magicfriend 0

      Hallo zusammen,
      ich möchte einen MQTT Sensor Wert eines Tasmota Zählers, der folgenden String enthält, in 3 einzelne Objekte trennen:

      {
        "Time": "2024-01-18T18:03:52",
        "": {
          "Total_in": 25856.6,
          "Total_out": 61.91,
          "Power_curr": 1534
        }
      }
      

      Ich habe auch schon ähnliche Beiträge dazu gefunden, doch leider funktioniert es noch nicht ganz.
      Der MQTT-Sensor Wert sieht so aus:

      {
        "_id": "mqtt.1.tele.Strom_Zaehler.SENSOR",
        "common": {
          "name": "tele/Strom_Zaehler/SENSOR",
          "write": true,
          "read": true,
          "role": "variable",
          "desc": "mqtt client variable",
          "type": "string"
        },
        "native": {
          "topic": "tele/Strom_Zaehler/SENSOR"
        },
        "type": "state",
        "from": "system.adapter.mqtt.1",
        "user": "system.user.admin",
        "ts": 1705481190584,
        "acl": {
          "object": 1636,
          "state": 1636
        }
      }
      

      Ich habe bisher ein Script das so aussieht, um die Werte auszulesen:

      const idJson = 'mqtt.1.tele.Strom_Zaehler.SENSOR';
      const path = 'javascript.0.';
       
      on(idJson, function(dp) {
          var obj = JSON.parse(dp.state.val) ;
          let id = path + 'Total_in';
          if(existsState(id)) setState(id, (obj.Total_in), true);
          else createState(id, obj.Total_in.Total_in, {type: 'number', name: 'Total_in', role: 'value', unit: 'kWh'});
          id = path + 'Total_out';
          if(existsState(id)) setState(id, obj.Total_out, true);
          else createState(id, obj.Total_out.Total_out, {type: 'number', name: 'Total_out', role: 'value', unit: 'kWh'});
          id = path + 'Power_curr';
          if(existsState(id)) setState(id, obj.Power_curr, true);
          else createState(id, obj.Power_curr.Power_curr, {type: 'number', name: 'Power_curr', role: 'value', unit: 'W'});
          // usw. für weitere Datenpunkte
      });
      

      Die angelegten Objekte dazu werden auch regelmässig aktualisiert, nur nicht mit den richtigen Werten. Die Werte darin sehen so Aus:
      Total_in.JPG
      Ich bin leider nicht so tief drin in der Programmierung, ich finde den Fehler einfach nicht :confused:

      Gruss, Sascha

      A Offline
      A Offline
      ag
      wrote on last edited by
      #2

      @magicfriend-0
      Hallo
      versuchs mal mit dem Alias Adapter

      mfg

      Operating System: Debian GNU/Linux 12 architecture: arm64 Pi5 8GB
      /usr/bin/nodejs v20.18.0 /usr/bin/node 20.18.1 /usr/bin/npm 10.8.2
      js-controller 7.0.6 admin 7.4.10

      M 1 Reply Last reply
      0
      • A ag

        @magicfriend-0
        Hallo
        versuchs mal mit dem Alias Adapter

        mfg

        M Offline
        M Offline
        Magicfriend 0
        wrote on last edited by
        #3

        @ag
        Hallo,
        wie soll ich das in den Alias Adapter rein bekommen. Da kann ich doch auch nur den ganzen SENSOR-String auswählen?!
        Gruss, Sascha

        A 1 Reply Last reply
        0
        • M Magicfriend 0

          Hallo zusammen,
          ich möchte einen MQTT Sensor Wert eines Tasmota Zählers, der folgenden String enthält, in 3 einzelne Objekte trennen:

          {
            "Time": "2024-01-18T18:03:52",
            "": {
              "Total_in": 25856.6,
              "Total_out": 61.91,
              "Power_curr": 1534
            }
          }
          

          Ich habe auch schon ähnliche Beiträge dazu gefunden, doch leider funktioniert es noch nicht ganz.
          Der MQTT-Sensor Wert sieht so aus:

          {
            "_id": "mqtt.1.tele.Strom_Zaehler.SENSOR",
            "common": {
              "name": "tele/Strom_Zaehler/SENSOR",
              "write": true,
              "read": true,
              "role": "variable",
              "desc": "mqtt client variable",
              "type": "string"
            },
            "native": {
              "topic": "tele/Strom_Zaehler/SENSOR"
            },
            "type": "state",
            "from": "system.adapter.mqtt.1",
            "user": "system.user.admin",
            "ts": 1705481190584,
            "acl": {
              "object": 1636,
              "state": 1636
            }
          }
          

          Ich habe bisher ein Script das so aussieht, um die Werte auszulesen:

          const idJson = 'mqtt.1.tele.Strom_Zaehler.SENSOR';
          const path = 'javascript.0.';
           
          on(idJson, function(dp) {
              var obj = JSON.parse(dp.state.val) ;
              let id = path + 'Total_in';
              if(existsState(id)) setState(id, (obj.Total_in), true);
              else createState(id, obj.Total_in.Total_in, {type: 'number', name: 'Total_in', role: 'value', unit: 'kWh'});
              id = path + 'Total_out';
              if(existsState(id)) setState(id, obj.Total_out, true);
              else createState(id, obj.Total_out.Total_out, {type: 'number', name: 'Total_out', role: 'value', unit: 'kWh'});
              id = path + 'Power_curr';
              if(existsState(id)) setState(id, obj.Power_curr, true);
              else createState(id, obj.Power_curr.Power_curr, {type: 'number', name: 'Power_curr', role: 'value', unit: 'W'});
              // usw. für weitere Datenpunkte
          });
          

          Die angelegten Objekte dazu werden auch regelmässig aktualisiert, nur nicht mit den richtigen Werten. Die Werte darin sehen so Aus:
          Total_in.JPG
          Ich bin leider nicht so tief drin in der Programmierung, ich finde den Fehler einfach nicht :confused:

          Gruss, Sascha

          paul53P Offline
          paul53P Offline
          paul53
          wrote on last edited by
          #4

          @magicfriend-0
          Ändere Zeile 5:

              var obj = JSON.parse(dp.state.val)[''] ;
          

          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

          M 1 Reply Last reply
          0
          • paul53P paul53

            @magicfriend-0
            Ändere Zeile 5:

                var obj = JSON.parse(dp.state.val)[''] ;
            
            M Offline
            M Offline
            Magicfriend 0
            wrote on last edited by
            #5

            @paul53
            Hallo paul53,

            genau das wars, jetzt sind die Werte da - DANKE!!!!

            haselchenH 1 Reply Last reply
            0
            • M Magicfriend 0

              @ag
              Hallo,
              wie soll ich das in den Alias Adapter rein bekommen. Da kann ich doch auch nur den ganzen SENSOR-String auswählen?!
              Gruss, Sascha

              A Offline
              A Offline
              ag
              wrote on last edited by
              #6

              @magicfriend-0

              hier ein Beispiel tasmota Temperatur und Feuchte Sensor

              Screenshot 2024-01-18 185324.png

              In diesem Fall die Temperatur

              Operating System: Debian GNU/Linux 12 architecture: arm64 Pi5 8GB
              /usr/bin/nodejs v20.18.0 /usr/bin/node 20.18.1 /usr/bin/npm 10.8.2
              js-controller 7.0.6 admin 7.4.10

              1 Reply Last reply
              0
              • M Magicfriend 0

                @paul53
                Hallo paul53,

                genau das wars, jetzt sind die Werte da - DANKE!!!!

                haselchenH Offline
                haselchenH Offline
                haselchen
                Most Active
                wrote on last edited by
                #7

                @magicfriend-0

                Und der Sonoff Adapter ist nicht die Lösung?
                Für Tasmota Geräte ist der nämlich die erste Wahl, weil er die Strings schon aufbereitet liefert.
                Da musste nix mit Skript oder dergleichen machen.

                Synology DS218+ & 2 x Fujitsu Esprimo (VM/Container) + FritzBox7590 + 2 AVM 3000 Repeater & Homematic & HUE & Osram & Xiaomi, NPM 10.9.4, Nodejs 22.21.0 ,JS Controller 7.0.7 ,Admin 7.7.19

                MartinPM 1 Reply Last reply
                0
                • haselchenH haselchen

                  @magicfriend-0

                  Und der Sonoff Adapter ist nicht die Lösung?
                  Für Tasmota Geräte ist der nämlich die erste Wahl, weil er die Strings schon aufbereitet liefert.
                  Da musste nix mit Skript oder dergleichen machen.

                  MartinPM Online
                  MartinPM Online
                  MartinP
                  wrote on last edited by
                  #8

                  @haselchen Hat nicht die gleiche Flexibiliät. In dem Fall, dass es ein Tasmota-Gerät ist, passt es meistens. Bei mir ist es ein zigbee2mqtt Server, dessen Baum komplett eingebunden ist, und da weiß man ja nie vorher, was sich da noch an Zigbee-Geräten materialisiert, und da man sich dann entscheiden muss, ob der zigbee2mqtt Server sich mit dem mqtt Adapter, oder dem Sonoff Adapter verbinden, bin ich den offeneren Weg gegangen ...

                  Intel(R) Celeron(R) CPU N3000 @ 1.04GHz 8G RAM 480G SSD
                  Virtualization : unprivileged lxc container (debian 12 on Proxmox 8.4.14)
                  Linux pve 6.8.12-16-pve
                  6 GByte RAM für den Container
                  Fritzbox 6591 FW 8.03 (Vodafone Leih-Box)
                  Remote-Access über Wireguard der Fritzbox

                  haselchenH 1 Reply Last reply
                  1
                  • MartinPM MartinP

                    @haselchen Hat nicht die gleiche Flexibiliät. In dem Fall, dass es ein Tasmota-Gerät ist, passt es meistens. Bei mir ist es ein zigbee2mqtt Server, dessen Baum komplett eingebunden ist, und da weiß man ja nie vorher, was sich da noch an Zigbee-Geräten materialisiert, und da man sich dann entscheiden muss, ob der zigbee2mqtt Server sich mit dem mqtt Adapter, oder dem Sonoff Adapter verbinden, bin ich den offeneren Weg gegangen ...

                    haselchenH Offline
                    haselchenH Offline
                    haselchen
                    Most Active
                    wrote on last edited by
                    #9

                    @martinp

                    Da hier erkennbar ist, dass es ein Tasmota Gerät ist, würde ich immer den Weg über den Sonoff Adapter gehen.
                    Ansonsten würde ich diesen Ratschlag auch nicht geben.
                    Andere Geräte, wie bei Dir , binde ich auch über andere MQTT Möglichkeiten ein.
                    Aber wenn ich hier sehe, was für ein Aufwand betrieben wird, um an die Werte zu kommen, die vermutlich der Sonoff Adapter schon fertig liefert, dann muss man den Hinweis geben :)

                    Synology DS218+ & 2 x Fujitsu Esprimo (VM/Container) + FritzBox7590 + 2 AVM 3000 Repeater & Homematic & HUE & Osram & Xiaomi, NPM 10.9.4, Nodejs 22.21.0 ,JS Controller 7.0.7 ,Admin 7.7.19

                    M 1 Reply Last reply
                    0
                    • haselchenH haselchen

                      @martinp

                      Da hier erkennbar ist, dass es ein Tasmota Gerät ist, würde ich immer den Weg über den Sonoff Adapter gehen.
                      Ansonsten würde ich diesen Ratschlag auch nicht geben.
                      Andere Geräte, wie bei Dir , binde ich auch über andere MQTT Möglichkeiten ein.
                      Aber wenn ich hier sehe, was für ein Aufwand betrieben wird, um an die Werte zu kommen, die vermutlich der Sonoff Adapter schon fertig liefert, dann muss man den Hinweis geben :)

                      M Offline
                      M Offline
                      Magicfriend 0
                      wrote on last edited by
                      #10

                      @haselchen
                      Ich hatte das vorher auch über den Tasmota adapter. Momentan habe ich aber den MQTT-Broker auf einer anderen virtuellen Maschine laufen, da ich die Daten auch noch wo anders brauche. Deswegen bin ich diesen weg gegangen.
                      Gruss, Sascha

                      haselchenH 1 Reply Last reply
                      0
                      • M Magicfriend 0

                        @haselchen
                        Ich hatte das vorher auch über den Tasmota adapter. Momentan habe ich aber den MQTT-Broker auf einer anderen virtuellen Maschine laufen, da ich die Daten auch noch wo anders brauche. Deswegen bin ich diesen weg gegangen.
                        Gruss, Sascha

                        haselchenH Offline
                        haselchenH Offline
                        haselchen
                        Most Active
                        wrote on last edited by
                        #11

                        @magicfriend-0

                        Alles klar.
                        Danke fürs Feedback.
                        Dann ist der Weg natürlich logisch :+1:

                        Synology DS218+ & 2 x Fujitsu Esprimo (VM/Container) + FritzBox7590 + 2 AVM 3000 Repeater & Homematic & HUE & Osram & Xiaomi, NPM 10.9.4, Nodejs 22.21.0 ,JS Controller 7.0.7 ,Admin 7.7.19

                        1 Reply Last reply
                        0
                        Reply
                        • Reply as topic
                        Log in to reply
                        • Oldest to Newest
                        • Newest to Oldest
                        • Most Votes


                        Support us

                        ioBroker
                        Community Adapters
                        Donate

                        737

                        Online

                        32.6k

                        Users

                        82.2k

                        Topics

                        1.3m

                        Posts
                        Community
                        Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                        ioBroker Community 2014-2025
                        logo
                        • Login

                        • Don't have an account? Register

                        • Login or register to search.
                        • First post
                          Last post
                        0
                        • Home
                        • Recent
                        • Tags
                        • Unread 0
                        • Categories
                        • Unreplied
                        • Popular
                        • GitHub
                        • Docu
                        • Hilfe