Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Einsteigerfragen
    4. Automatisierung
    5. Javascript und MQTT

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Javascript und MQTT

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

      Hallo, ich hoffe, ich bin hier im richtigen Unterforum gelandet.
      Ich möchte gern meinen Stromverbrauch und das, was das Balkonkraftwerk liefert, grafisch darstellen.
      Dafür habe ich mir einen IR-Lesekopf gekauft und IO-Broker installiert.
      Ich bin nun so weit, dass mir die Stromdaten auf dem Handy angezeigt werden und auch als JSON im IO-Broker landen.
      Der String sieht so aus:

      {
        "Time": "2023-05-26T23:26:34",
        "": {
          "Total": 11652.444,
          "Supply": 94.6405,
          "Aktuell": 69,
          "strom_l1": 0.18,
          "spannung_l1": 234.5,
          "strom_l2": 0.48,
          "spannung_l2": 235.2,
          "strom_l3": 0.17,
          "spannung_l3": 235.2,
          "Freq": 50,
          "0A-01-45-46-52-20-02-CE-Server-ID": "0a014546522002ceeaa4"
        }
      }
      
      

      Ich habe nun mit verschiedenen Vorlagen von Javascript herumexperimentiert (ohne allerdings recht zu wissen, was ich da tue).
      Mein letzter Versuch:

      on({id: 'mqtt.0.Stromkasten/tele/SENSOR', change: "any"}, function (obj) {
       var Zeit
      var Supply
          var Aktuell
         var strom_l1 
        var spannung_l1 
        var strom_l2 
        var spannung_l2 
        var strom_l3 
       var spannung_l3 
         var Freq 
      
      try {obj = JSON.parse(getState('mqtt.0.Stromkasten/tele/SENSOR').val);
         } catch (e) {
                 console.error('Cannot parse: ' + getState('mqtt.0.Stromkasten/tele/SENSOR').val);
                 return;
          }
      
      Zeit = obj.Time;
      Supply = obj.Supply;
      Aktuell = obj.Aktuell;
      
        setState('javascript.0.Time', (Zeit));
          setState('javascript.0.Supply', (Supply));
            setState('javascript.0.Aktuell', (Aktuell));
      });
      
      

      Es passiert genau gar nichts. Immerhin gibt es auch keine Fehlermeldung beim Kompilieren.
      Meine Vermutung ist, dass ich die Datenquelle nicht richtig addressiert habe und deswegen kein Change entsteht, der das Verfahren anstoßen könnte. Für freundliche Hilfestellung wäre ich echt dankbar.

      PS: Hier mal ein Screenshot der Quelle
      ioBroker.jpg

      MartinP paul53 Homoran 3 Replies Last reply Reply Quote 0
      • MartinP
        MartinP @Theophilus last edited by MartinP

        @theophilus Ich bin auch nur ein Rookie in Javascript im ioBroker, aber versuche doch einmal, im kompletten Pfad Punkte als Trennzeichen zu verwenden...

        also statt 'mqtt.0.Stromkasten/tele/SENSOR'

        'mqtt.0.Stromkasten.tele.SENSOR'

        1 Reply Last reply Reply Quote 0
        • T
          Theophilus last edited by

          @martinp Ja, danke.
          Witzigerweise war ich auch gerade auf diesem Weg, weil bei Blockly die Quelle so angegeben wird: "mqtt.0.Stromkasten.tele.SENSOR"
          Leider bringt aber weder diese Schreibweise Erfolg, noch die mit Hochkommata 'mqtt. ...

          1 Reply Last reply Reply Quote 0
          • paul53
            paul53 @Theophilus last edited by paul53

            @theophilus
            Versuche es mal so:

            on('mqtt.0.Stromkasten.tele.SENSOR', function(dp) {
                const obj = JSON.parse(dp.state.val);
                log('Time: ' + obj.Time);
                log('Aktuell: ' + obj[''].Aktuell);
            });
            
            T 1 Reply Last reply Reply Quote 0
            • T
              Theophilus @paul53 last edited by

              @paul53 said in Javascript und MQTT:

              on('mqtt.0.Stromkasten.tele.SENSOR', function(dp) {

              22:54:43.754 error javascript.0 (61247) script.js.Skript_3 compile failed: at script.js.Skript_3:7

              paul53 1 Reply Last reply Reply Quote 0
              • paul53
                paul53 @Theophilus last edited by

                @theophilus sagte: compile failed: at script.js.Skript_3:7

                Sorry, es fehlte die schließende Klammer hinter .Aktuell.

                T 1 Reply Last reply Reply Quote 0
                • T
                  Theophilus @paul53 last edited by

                  @paul53 Hallo, danke für deine Hilfe.
                  Das Skript läuft jetzt durch, aber was sollte passieren?

                  paul53 1 Reply Last reply Reply Quote 0
                  • paul53
                    paul53 @Theophilus last edited by paul53

                    @theophilus sagte: aber was sollte passieren?

                    Es sollten Logausgaben mit den Werten von "Time" und "Aktuell" erfolgen, wenn sich das JSON im Datenpunkt ändert.

                    T 1 Reply Last reply Reply Quote 0
                    • T
                      Theophilus @paul53 last edited by

                      @paul53 Ja, da kommt was!

                      paul53 1 Reply Last reply Reply Quote 0
                      • paul53
                        paul53 @Theophilus last edited by

                        @theophilus sagte: da kommt was!

                        Dann können die Logs durch setState() ersetzt und das Skript um weitere Werte ergänzt werden.

                        T 1 Reply Last reply Reply Quote 0
                        • Homoran
                          Homoran Global Moderator Administrators @Theophilus last edited by

                          @theophilus sagte in Javascript und MQTT:

                          Dafür habe ich mir einen IR-Lesekopf gekauft und IO-Broker installiert.

                          Dem folgenden entnehme ich, dass es nicht nur ein einfacher IR Lesekopf ist, der an den ioBroker-Server angeschlossen ist, sondern ein Gerät, das irgendwie schon die Daten des Zählers bearbeitet. Ansonsten wüdre der Smartmeter Adapter dir die Arbeit abnehmen können.

                          T 1 Reply Last reply Reply Quote 0
                          • T
                            Theophilus @Homoran last edited by

                            @homoran Ich verwende den hier: https://www.ebay.de/itm/275501110235
                            (Tasmota Wifi ESP01S Lesekopf für Stromzähler / Smart Meter)

                            1 Reply Last reply Reply Quote 0
                            • T
                              Theophilus @paul53 last edited by

                              @paul53 Ich habe das Skript jetzt so ergänzt:

                              on('mqtt.0.Stromkasten.tele.SENSOR', function(dp) {
                              
                                  const obj = JSON.parse(dp.state.val);
                              
                              Zeit = obj.Time;
                              Supply = obj.Supply;
                              Aktuell = obj.Aktuell;
                              Total = obj.Total
                              
                                  setState('0_userdata.0.Zeit', (Zeit));
                                  setState('0_userdata.0.Supply', (Supply));
                                  setState('0_userdata.0.Aktuell', (Aktuell));
                                  setState('0_userdata.0.Total', (Total));
                                  
                                  log('Time: ' + obj.Time);
                                  log('Aktuell: ' + obj[''].Aktuell);
                                
                              });
                              

                              Merkwürdigerweise wird aber nur die Variable "Zeit" befüllt. Die anderen bleiben auf Null. Ich habe mal versuchsweise eine davon von "Number" auf "String" gesetzt, aber das hat auch nichts gebracht. Wo liegt der Fehler?

                              Eine dumme Frage: Die Variable wird ja jetzt alle 100 Sekunden überschrieben. Ich will die Werte aber ja dauerhaft speichern. Wie mache ich das? Kann ich die irgendwie in eine Tabelle schreiben oder so?

                              paul53 1 Reply Last reply Reply Quote 0
                              • paul53
                                paul53 @Theophilus last edited by paul53

                                @theophilus sagte: wird aber nur die Variable "Zeit" befüllt.

                                Versuche es mal so:

                                let Zeit = obj.Time;
                                let Supply = obj[''].Supply;
                                let Aktuell = obj[''].Aktuell;
                                let Total = obj[''].Total;
                                
                                T 1 Reply Last reply Reply Quote 0
                                • T
                                  Theophilus @paul53 last edited by

                                  @paul53 said in Javascript und MQTT:

                                  Danke, so funktioniert es.
                                  Wo kann ich nachlesen, warum das so funktioniert? Was bewirkt dieses "obj[' ']"?

                                  paul53 Homoran 2 Replies Last reply Reply Quote 0
                                  • paul53
                                    paul53 @Theophilus last edited by

                                    @theophilus sagte: Was bewirkt dieses "obj[' ']"?

                                    Schau mal Zeile 3 des JSON an.

                                    1 Reply Last reply Reply Quote 1
                                    • Homoran
                                      Homoran Global Moderator Administrators @Theophilus last edited by

                                      @theophilus sagte in Javascript und MQTT:

                                      Wo kann ich nachlesen, warum das so funktioniert? Was bewirkt dieses "obj[' ']"?

                                      Zusätzlich zu @paul53 Info solltest du dir die Adresse im Screenshot merk3n.
                                      Da siehst du es möglicherweise deutlicher
                                      Screenshot_20230528-152122_Firefox.jpg

                                      T 1 Reply Last reply Reply Quote 0
                                      • T
                                        Theophilus @Homoran last edited by

                                        Aber wie geht es jetzt weiter? Wie kann ich den Inhalt der Variablen in eine Tabelle oder so schreiben?
                                        Bringt mich der History-Adapter weiter?

                                        Homoran 1 Reply Last reply Reply Quote 0
                                        • Homoran
                                          Homoran Global Moderator Administrators @Theophilus last edited by

                                          @theophilus sagte in Javascript und MQTT:

                                          Wie kann ich den Inhalt der Variablen in eine Tabelle oder so schreiben?

                                          was genau willst du denn eigentlich schlussendlich erreichen?

                                          @theophilus sagte in Javascript und MQTT:

                                          Bringt mich der History-Adapter weiter?

                                          sehr wahrscheinlich, falls du einen Verlauf wie auch immer visualisieren willst.
                                          Das wäre dann eher oder so. Eine Tabelle ist für mich für eine Momentaufnahme.

                                          T 1 Reply Last reply Reply Quote 0
                                          • T
                                            Theophilus @Homoran last edited by

                                            @homoran Ich will erreichen, dass ich eine Übersicht über meinen Stromverbrauch und die Produktion des Balkonkraftwerks über den Tag verteilt habe. Gern auch grafisch aufbereitet. Momentan schreibe ich von Hand jeden Morgen die Zählerstände in eine Excel-Tabelle, was zum einen ziemlich mühsam ist und zum anderen fahre ich demnächst für ein paar Tage weg, was bei diesem manuellen Weg eine Datenlücke zur Folge hätte.
                                            Derzeit experimentiere ich auf meinem Laptop, aber wenn ich endlich mal durchblicke, soll mein Raspberry zum Einsatz kommen.
                                            Danke für eure Unterstützung! ioBroker ist ein echter Dschungel ...

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            973
                                            Online

                                            31.7k
                                            Users

                                            79.7k
                                            Topics

                                            1.3m
                                            Posts

                                            6
                                            36
                                            1701
                                            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