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. JavaScript
  5. [Gelöst] MQTT SENSOR String in einzelne Werte zerlegen

NEWS

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    5
    1
    28

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    24
    1
    1.4k

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    9.3k

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

Geplant Angeheftet Gesperrt Verschoben JavaScript
11 Beiträge 5 Kommentatoren 766 Aufrufe 3 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.
  • M Offline
    M Offline
    Magicfriend 0
    schrieb am zuletzt editiert von 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 Antworten Letzte Antwort
    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 Online
      A Online
      ag
      schrieb am zuletzt editiert von
      #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 Antwort Letzte Antwort
      0
      • A ag

        @magicfriend-0
        Hallo
        versuchs mal mit dem Alias Adapter

        mfg

        M Offline
        M Offline
        Magicfriend 0
        schrieb am zuletzt editiert von
        #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 Antwort Letzte Antwort
        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
          schrieb am zuletzt editiert von
          #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 Antwort Letzte Antwort
          0
          • paul53P paul53

            @magicfriend-0
            Ändere Zeile 5:

                var obj = JSON.parse(dp.state.val)[''] ;
            
            M Offline
            M Offline
            Magicfriend 0
            schrieb am zuletzt editiert von
            #5

            @paul53
            Hallo paul53,

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

            haselchenH 1 Antwort Letzte Antwort
            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 Online
              A Online
              ag
              schrieb am zuletzt editiert von
              #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 Antwort Letzte Antwort
              0
              • M Magicfriend 0

                @paul53
                Hallo paul53,

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

                haselchenH Offline
                haselchenH Offline
                haselchen
                Most Active
                schrieb am zuletzt editiert von
                #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 Antwort Letzte Antwort
                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
                  schrieb am zuletzt editiert von
                  #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 Antwort Letzte Antwort
                  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
                    schrieb am zuletzt editiert von
                    #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 Antwort Letzte Antwort
                    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
                      schrieb am zuletzt editiert von
                      #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 Antwort Letzte Antwort
                      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
                        schrieb am zuletzt editiert von
                        #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 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

                        662

                        Online

                        32.5k

                        Benutzer

                        81.7k

                        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