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 Sperriges JSON vom Tasmota Stromzähler Script

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    GELÖST Sperriges JSON vom Tasmota Stromzähler Script

    This topic has been deleted. Only users with topic management privileges can see it.
    • MartinP
      MartinP last edited by MartinP

      JSON Knoten, deren Namen mit einer Ziffer beginnen scheinen Javascript nicht zu behagen!

      Das ist ein MQTT-JSON, was vom Tasmota Stromzähler Script erzeugt wird:

      var content = {
          "Time": "2024-11-18T11:04:23",
          "Switch1": "OFF",
          "OP": {
              "1_8_0": 16263845.96161001,
              "16_7_0": 494.64999999999998,
              "36_7_0": 323.36000000000001,
              "56_7_0": 106.26000000000001,
              "76_7_0": 65.030000000000001,
              "32_7_0": 230.59999999999999,
              "52_7_0": 228.09999999999999,
              "72_7_0": 227.5,
              "96_1_0": "1EBZ..........."
          }
      };
      log(content.OP.16_7_0);
      

      Führende Ziffern in Node-Namen führen anscheinend zu Ungemach, wird schon beim Eintippen unterschlängelt ...

      Kann man das irgendwie doch sauber im Javascript verarbeiten, oder muss das im Tasmota-Script bereinigt werden?

      paul53 Codierknecht 2 Replies Last reply Reply Quote 0
      • paul53
        paul53 @MartinP last edited by

        @martinp

        log(content.OP['16_7_0']);
        
        1 Reply Last reply Reply Quote 1
        • Codierknecht
          Codierknecht Developer Most Active @MartinP last edited by Codierknecht

          @martinp sagte in Sperriges JSON vom Tasmota Stromzähler Script:

          Kann man das irgendwie im Tasmota-Script bereinigen?

          Wenn Du das zeigen würdest 😉

          >D
          >B
          =>sensor53 r 
          >M 1
          +1,1,s,0,9600,eHZM
          1,77070100100700ff@1,Leistung,W,Power_curr,0
          1,77070100010800ff@1000,Verbrauch,KWh,Total_in,1
          1,77070100010801ff@1,Tarif1,Wh,Tarif1_in,1
          1,77070100010802ff@1,Tarif2,Wh,Tarif2_in,1
          1,=h<hr/> 
          1,77070100020800ff@1000,Einspeisung,kWh,Einspeisung,4
          #
          

          Der 5. Wert in den Zeilen 6-9 und 11 sollte der Name sein, der im Telegramm verwendet wird.
          Den kannst Du ja frei wählen.

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

            @Codierknecht

            >D
            >B
            ; TelePeriod 30
            =>sensor53 r
            >M 1
            ; Device: eBZ DD3 2R06 ODZ1
            ; protocol is D0 OBIS ASCII
            ; 9600@7E1 for OP-type devices, 9600@8N1 for SM-type devices
            +1,3,o,0,9600,OP,1
            ; Zählerstand zu +A, tariflos, 
            ; Zählerstände Auflösung 10 µW*h (6 Vorkomma- und 8 Nachkommastellen)
            1,1-0:1.8.0*255(@0.001,Energie Bezug,Wh,1_8_0,8
            ; Zählerstand zu +A, Tarif 1
            ; 1,1-0:1.8.1*255(@0.001,Energie Bezug T1,Wh,1_8_1,8
            ; Zählerstand zu +A, Tarif 2
            ; 1,1-0:1.8.2*255(@0.001,Energie Bezug T2,Wh,1_8_2,8
            ; Zählerstand zu -A, tariflos
            ; 1,1-0:2.8.0*255(@0.001,Energie Export,Wh,2_8_0,8
            ; Summe der Momentan-Leistungen in allen Phasen, Auflösung 0,01W (5 Vorkomma- und 2 Nachkommastellen)
            1,1-0:16.7.0*255(@1,Leistung,W,16_7_0,18
            ; Momentane Leistung in Phase Lx, Auflösung 0,01W (5 Vorkomma- und 2 Nachkommastellen)
            1,1-0:36.7.0*255(@1,Leistung L1,W,36_7_0,18
            1,1-0:56.7.0*255(@1,Leistung L2,W,56_7_0,18
            1,1-0:76.7.0*255(@1,Leistung L3,W,76_7_0,18
            ; Spannung in Phase Lx, Auflösung 0,1V (nur über MSB)
            1,1-0:32.7.0*255(@1,Spannung L1,V,32_7_0,1
            1,1-0:52.7.0*255(@1,Spannung L2,V,52_7_0,1
            1,1-0:72.7.0*255(@1,Spannung L3,V,72_7_0,1
            ; Statuswort, 4 Byte Information über den Betriebszustand, HEX string
            ; tasmota can decode one string per device only!
            ;1,1-0:96.5.0*255(@#),Status1,,96_5_0,0
            ;1,1-0:96.8.0*255(@#),Status2,,96_8_0,0
            ; Geräte-Identifikation, Nach DIN 43863-5 
            1,1-0:96.1.0*255(@#),Identifikation,,96_1_0,0
            ;1,1-0:0.0.0*255(@#),Identifikation,,0_0_0,0
            #
            

            Derzeit werte ich mit dem Sonoff Adapter aus, der kommt mit dem JSON-Format klar

            Danke für die Hilfe, werde mal schauen, ob ich da das Tasmota-Script anpasse, oder ob ich mit dem Index-Trick von @paul53 arbeitet

            Codierknecht 1 Reply Last reply Reply Quote 0
            • Codierknecht
              Codierknecht Developer Most Active @MartinP last edited by

              @martinp sagte in GELÖST Sperriges JSON vom Tasmota Stromzähler Script:

              Derzeit werte ich mit dem Sonoff Adapter aus, der kommt mit dem JSON-Format klar

              Eben!
              Für alles mit Tasmota nehme ich ebenfalls den Sonoff.
              Da brauche ich nichts von Hand aus dem JSON zu extrahieren.

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

                @codierknecht Wollte ganz gerne so viel wie möglich auf einen externen Mosquitto Server umstellen, und von dort aus mit dem MQTT Broker/Client Adapter als Client zugreifen ...

                Habe mit dem Sonoff-Adapter seit neuestem merkwürdige Aussetzer ...
                Kann mir aber natürlich nicht sicher sein, ob es mit dem Mosquitto als Zwischenglied besser wird ...

                sonoff.0
                	2024-11-18 11:18:13.414	warn	Client [Stromzaehler_B5F63F] received pubrel on Stromzaehler_B5F63F for unknown messageId 31329
                sonoff.0
                	2024-11-18 11:18:13.415	warn	Client [Stromzaehler_B5F63F] received pubcomp for unknown message ID: 21609
                sonoff.0
                	2024-11-18 11:18:13.415	warn	Client [Stromzaehler_B5F63F] received pubrel on Stromzaehler_B5F63F for unknown messageId 25890
                sonoff.0
                	2024-11-18 11:18:13.415	info	Client [Stromzaehler_B5F63F] connection closed: Error: Cannot parse topic
                sonoff.0
                	2024-11-18 11:18:14.399	info	Client [Stromzaehler_B5F63F] connected with secret 1731925094398_606
                sonoff.0
                	2024-11-18 11:25:02.290	info	Client [Stromzaehler_B5F63F] reconnected. Old secret 1731925094398_606 ==> New secret 1731925502286_7992
                sonoff.0
                	2024-11-18 11:25:54.697	info	Client [Stromzaehler_B5F63F] reconnected. Old secret 1731925502286_7992 ==> New secret 1731925554686_4188
                sonoff.0
                	2024-11-18 11:26:05.662	warn	Client [Stromzaehler_B5F63F] cannot parse data"SENSOR": _{"Ti0U
                

                Aber womöglich liegt es auch am WLAN - die Fritzbox hat auch Logging zum Tasmota Device ...

                f53d0df6-7f4b-4f8f-8a10-de811c0ebc1e-grafik.png

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

                  @martinp sagte in GELÖST Sperriges JSON vom Tasmota Stromzähler Script:

                  JSON Knoten, deren Namen mit einer Ziffer beginnen scheinen Javascript nicht zu behagen!

                  Das ist ein MQTT-JSON, was vom Tasmota Stromzähler Script erzeugt wird:

                  var content = {
                      "Time": "2024-11-18T11:04:23",
                      "Switch1": "OFF",
                      "OP": {
                          "1_8_0": 16263845.96161001,
                          "16_7_0": 494.64999999999998,
                          "36_7_0": 323.36000000000001,
                          "56_7_0": 106.26000000000001,
                          "76_7_0": 65.030000000000001,
                          "32_7_0": 230.59999999999999,
                          "52_7_0": 228.09999999999999,
                          "72_7_0": 227.5,
                          "96_1_0": "1EBZ..........."
                      }
                  };
                  log(content.OP.16_7_0);
                  

                  Führende Ziffern in Node-Namen führen anscheinend zu Ungemach, wird schon beim Eintippen unterschlängelt ...

                  Kann man das irgendwie doch sauber im Javascript verarbeiten, oder muss das im Tasmota-Script bereinigt werden?

                  Mit Blockly und Jsonata habe ich auch eine Lösung gefunden:

                  d4b00110-4615-4114-8dab-5c2229ce53aa-grafik.png

                  (EDIT: ein kleines Suchbild - finde den Fehler 😉 )

                  EDIT2: Hilfestellungen bei der Lösung:

                  JSONATA Execiser: https://try.jsonata.org/
                  Dokumentation $lookup(): https://docs.jsonata.org/object-functions

                  423ecdf8-2248-495d-98cf-c6b0b35ac93f-grafik.png

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

                    Frage zu einem weiteren Lösungsansatz ohne JSONATA, mit Funktionsaufruf:

                    b385bc3b-1712-4494-8aed-4eba15241d75-grafik.png

                    Ist die Abfrage ob das Attribut gefunden wurde in der Funktion "TestVar" so korrekt?

                    Bei meinem Test funktioniert es zwar, aber das kann ja auch ein Einzelfall sein...

                    avascript.0	11:46:27.494	info	script.js.Spielwiese.Test: TestJson
                    javascript.0	11:46:27.497	info	script.js.Spielwiese.Test: 72_7_0 nicht gefunden
                    javascript.0	11:46:27.502	info	script.js.Spielwiese.Test: TestJson
                    javascript.0	11:46:27.502	info	script.js.Spielwiese.Test: 76_7_0=61.84
                    
                    
                    paul53 1 Reply Last reply Reply Quote 0
                    • paul53
                      paul53 @MartinP last edited by paul53

                      @martinp sagte: Ist die Abfrage ob das Attribut gefunden wurde in der Funktion "TestVar" so korrekt?

                      Wenn der Wert 0 kein gültiger Wert ist, funktioniert diese Prüfung.
                      Falls der Wert 0 ein gültiger Wert sein kann, prüfe "MyVal != null".

                      Blockly_temp.JPG

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

                      Support us

                      ioBroker
                      Community Adapters
                      Donate

                      695
                      Online

                      31.8k
                      Users

                      80.0k
                      Topics

                      1.3m
                      Posts

                      3
                      9
                      365
                      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