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
    10
    1
    192

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    24
    1
    1.5k

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

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

Geplant Angeheftet Gesperrt Verschoben JavaScript
11 Beiträge 5 Kommentatoren 767 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 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

                      784

                      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