Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. [Gelöst] MQTT SENSOR String in einzelne Werte zerlegen

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

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

    This topic has been deleted. Only users with topic management privileges can see it.
    • M
      Magicfriend 0 last edited by 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 😕

      Gruss, Sascha

      A paul53 2 Replies Last reply Reply Quote 0
      • A
        ag @Magicfriend 0 last edited by

        @magicfriend-0
        Hallo
        versuchs mal mit dem Alias Adapter

        mfg

        M 1 Reply Last reply Reply Quote 0
        • M
          Magicfriend 0 @ag last edited by

          @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 Reply Quote 0
          • paul53
            paul53 @Magicfriend 0 last edited by

            @magicfriend-0
            Ändere Zeile 5:

                var obj = JSON.parse(dp.state.val)[''] ;
            
            M 1 Reply Last reply Reply Quote 0
            • M
              Magicfriend 0 @paul53 last edited by

              @paul53
              Hallo paul53,

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

              haselchen 1 Reply Last reply Reply Quote 0
              • A
                ag @Magicfriend 0 last edited by

                @magicfriend-0

                hier ein Beispiel tasmota Temperatur und Feuchte Sensor

                Screenshot 2024-01-18 185324.png

                In diesem Fall die Temperatur

                1 Reply Last reply Reply Quote 0
                • haselchen
                  haselchen Most Active @Magicfriend 0 last edited by

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

                  MartinP 1 Reply Last reply Reply Quote 0
                  • MartinP
                    MartinP @haselchen last edited by

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

                    haselchen 1 Reply Last reply Reply Quote 1
                    • haselchen
                      haselchen Most Active @MartinP last edited by

                      @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 1 Reply Last reply Reply Quote 0
                      • M
                        Magicfriend 0 @haselchen last edited by

                        @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

                        haselchen 1 Reply Last reply Reply Quote 0
                        • haselchen
                          haselchen Most Active @Magicfriend 0 last edited by

                          @magicfriend-0

                          Alles klar.
                          Danke fürs Feedback.
                          Dann ist der Weg natürlich logisch 👍

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

                          Support us

                          ioBroker
                          Community Adapters
                          Donate

                          1.0k
                          Online

                          31.7k
                          Users

                          79.6k
                          Topics

                          1.3m
                          Posts

                          5
                          11
                          472
                          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