Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. MQTT Json -> einzelner Datenpunkt - SonoffPOW 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

    MQTT Json -> einzelner Datenpunkt - SonoffPOW Script

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

      8-) Moin

      Edit weil Script erweitert! (hier immer mein aktuellster):

      Zum Script er liest die Werte korrekt aus und schreibt diese in die passenden Objekte.

      In den Logs habe ich aber noch folgende Warnung:

      javascript.0	2017-07-12 20:33:23.260	warn	Wrong type of javascript.0.jsonconverter.sonoff.Ampere: "number". Please fix, while deprecated and will not work in next versions.
      

      das liegt wie ich es sehe an folgendem:

      setState('javascript.0.jsonconverter.sonoff.Watt', (watt));
      

      muss ich noch etwas vor (watt) schreiben?

      //MQTT Json to Objekt
      
      // var setzen
      
      // Create States
      createState('javascript.0.jsonconverter.sonoff.Watt', 0,{type: 'nummer',name: 'Aktuelle Watt Zahl', read: true,write: true,role: 'value.watt'})
      createState('javascript.0.jsonconverter.sonoff.Volt', 0,{type: 'nummer',name: 'Aktuelle Volt Zahl', read: true,write: true,role: 'value.voltage'})
      createState('javascript.0.jsonconverter.sonoff.Ampere', 0,{type: 'nummer',name: 'Aktuelle Ampere Zahl', read: true,write: true,role: 'value.ampere'})
      
      // Script beginning
      on({id: 'mqtt.0.tele.sonoff_pow.ENERGY', change: "any"}, function (obj) {
      
         //variabele erstellen fuer meine 3 beispiel objecte
              var volt;
              var watt;  
              var ampere; 
      
         //der try ist wichtig das der adapter nicht abschmiert bei einem fehler, hiermit pasen wird die json in ein object
         try {obj = JSON.parse(getState('mqtt.0.tele.sonoff_pow.ENERGY').val);
         } catch (e) {
                 console.error('Cannot parse: ' + getState('mqtt.0.tele.sonoff_pow.ENERGY').val);
                 return;
          }
          //hier schreien wir die daten des json strings in die variabelen, links die variable und rechts der name im json. obj bedeuten halt lese den wert nach :
          // bei dir waere das z.b. obj.time / obj.yesterday usw
         volt = obj.Voltage;
         watt = obj.Power;
         ampere = obj.Current;
      
      //
      
      setState('javascript.0.jsonconverter.sonoff.Watt', (watt));
      setState('javascript.0.jsonconverter.sonoff.Volt', (volt));
      setState('javascript.0.jsonconverter.sonoff.Ampere', (ampere));
      
         //jetzt lass uns mal im log zeigen was wir bekommen haben
         log(volt);
         log(watt);
         log(ampere);
      });
      

      mein alter Script sieht wie folgt aus:

      // Script beginning
      on({id: 'mqtt.0.tele.sonoff_pow.ENERGY', change: "any"}, function (obj) {
      
         //variabele erstellen fuer meine 3 beispiel objecte
              var volt;
              var watt;  
              var ampere; 
      
         //der try ist wichtig das der adapter nicht abschmiert bei einem fehler, hiermit pasen wird die json in ein object
         try {obj = JSON.parse(getState('mqtt.0.tele.sonoff_pow.ENERGY').val);
         } catch (e) {
                 console.error('Cannot parse: ' + getState('mqtt.0.tele.sonoff_pow.ENERGY').val);
                 return;
          }
          //hier schreien wir die daten des json strings in die variabelen, links die variable und rechts der name im json. obj bedeuten halt lese den wert nach :
          // bei dir waere das z.b. obj.time / obj.yesterday usw
         volt = obj.Voltage;
         watt = obj.Power;
         ampere = obj.Current;
      
         //jetzt lass uns mal im log zeigen was wir bekommen haben
         log(volt);
         log(watt);
         log(ampere);
      });
      

      Log Ausgabe:

      19:41:15.981	[error]	javascript.0 script.js.Test.sonoff compile failed: SyntaxError: Unexpected token )
      19:41:33.740	[info]	javascript.0 Stop script script.js.Test.sonoff
      19:41:33.765	[info]	javascript.0 Start javascript script.js.Test.sonoff
      19:41:33.767	[info]	javascript.0 script.js.Test.sonoff: registered 1 subscription and 0 schedules
      19:41:55.597	[info]	javascript.0 Stop script script.js.Test.sonoff
      19:41:55.615	[info]	javascript.0 Start javascript script.js.Test.sonoff
      19:41:55.616	[info]	javascript.0 script.js.Test.sonoff: registered 1 subscription and 0 schedules
      19:42:52.186	[info]	javascript.0 script.js.Test.sonoff: 223
      19:42:52.187	[info]	javascript.0 script.js.Test.sonoff: 71
      19:42:52.187	[info]	javascript.0 script.js.Test.sonoff: 0.104
      
      javascript.0 script.js.Test.sonoff compile failed: SyntaxError: Unexpected token )
      

      Den Fehler habe ich durch dieses Ende des Scriptes gelöst bekommen

      });
      

      Was ich noch am bauen bin ist folgendes:

      //MQTT Json to Objekt
      
      // var setzen
      
      var sonoff = "Sonoff_pow1"
      
      // Create States
      createState('javascript.0.jsonconverter.sonoff.Watt', 0,{type: 'nummer',name: 'Aktuelle Watt Zahl', read: true,write: true,role: 'value.watt'})
      createState('javascript.0.jsonconverter.sonoff.Volt', 0,{type: 'nummer',name: 'Aktuelle Volt Zahl', read: true,write: true,role: 'value.voltage'})
      createState('javascript.0.jsonconverter.sonoff.Ampere', 0,{type: 'nummer',name: 'Aktuelle Ampeere Zahl', read: true,write: true,role: 'value.ampere'})
      
      

      Möchte für verschiedene Sonoff den "converter" benutzen und nicht immer alles umschreiben deswegen oben die var sonoff

      Hoffe das geht so?

      javascript.0.jsonconverter.sonoff.Watt das sonoff soll halt in die var sonoff = "Sonoff_pow1" geändert werden. Oder muss ich das dann anders schreiben?

      Desweiteren weiß ich nicht genau was das role sein soll. Hat das eine spezielle funktion? Wird z.B value.watt erzeugt? Weil die gibt es in meinem ioBroker nicht.

      Und zum abschluss muss ich es noch hinbekommen das er die werte die ich ja schon mal erfolgreich auslesen konnte in die objekte die ich oben angelegt habe schreibe.

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

        @kmxak:

        In den Logs habe ich aber noch folgende Warnung:

        javascript.0   2017-07-12 20:33:23.260   warn   Wrong type of javascript.0.jsonconverter.sonoff.Ampere: "number". Please fix, while deprecated and will not work in next versions.
        ```` `  
        

        @kmxak:

        // Create States
        createState('javascript.0.jsonconverter.sonoff.Watt', 0,{type: 'nummer',name: 'Aktuelle Watt Zahl', read: true,write: true,role: 'value.watt'})
        createState('javascript.0.jsonconverter.sonoff.Volt', 0,{type: 'nummer',name: 'Aktuelle Volt Zahl', read: true,write: true,role: 'value.voltage'})
        createState('javascript.0.jsonconverter.sonoff.Ampere', 0,{type: 'nummer',name: 'Aktuelle Ampere Zahl', read: true,write: true,role: 'value.ampere'})
        ```` `  
        

        Im Reiter "Objekte" ändern:

        type: 'nummer'  --> type: 'number'
        
        1 Reply Last reply Reply Quote 0
        • paul53
          paul53 last edited by

          Übrigens:

          Aktuelle Watt Zahl = Aktuelle Leistung

          Aktuelle Volt Zahl = Aktuelle Spannung

          Altuelle Ampere Zahl = Aktueller Strom

          role: 'value' sollte in den 3 Fällen passen.

          1 Reply Last reply Reply Quote 0
          • Dutchman
            Dutchman Developer Most Active Administrators last edited by

            Paul hat dir ja bereits die vorlage gegeben, in meinen Post den Spoiler öffnen da stehen auch die creates 😉

            Aber soweit so gut ging ja schnell bei dir oder übersehe ich jetzt was ?

            –-----------------------

            Send from mobile device

            1 Reply Last reply Reply Quote 0
            • kmxak
              kmxak Most Active last edited by

              Hey hier mal mein fertiges Script. Könnt ja mal drüber schauen ob das so passt.

              Dutchman das Script im Spoiler blicke ich gerade noch nicht durch :lol:

              Habe es nun wie unten zu sehen gelöst.

              /*
              Json Converter Sonoff POW
              
              Setup: Pfad + Channel + SName setzen / immer ein . am ende
              
              */
              
              var pfad = "javascript.0.jsonconverter.";
              var channel = "sonoff.";
              var sname = "sonoff_pow1.";
              
              // do not change
              
              var idwatt = pfad + channel + sname + 'Watt';
              var idvolt = pfad + channel + sname + 'Volt';
              var idampere = pfad + channel + sname + 'Ampere';
              
              // Create States
              
              createState(idwatt, 0,{type: 'number',name: 'Aktuelle Leistung', read: true,write: true,role: 'value'});
              createState(idvolt, 0,{type: 'number',name: 'Aktuelle Spannung', read: true,write: true,role: 'value'});
              createState(idampere, 0,{type: 'number',name: 'Aktueller Strom', read: true,write: true,role: 'value'});
              
              // script beginning
              on({id: 'mqtt.0.tele.sonoff_pow.ENERGY', change: "any"}, function (obj) {
              
                 //variabele erstellen fuer meine 3 beispiel objecte
                      var volt;
                      var watt;  
                      var ampere; 
              
                 try {obj = JSON.parse(getState('mqtt.0.tele.sonoff_pow.ENERGY').val);
                 } catch (e) {
                         console.error('Cannot parse: ' + getState('mqtt.0.tele.sonoff_pow.ENERGY').val);
                         return;
                  }
              
                 volt = obj.Voltage;
                 watt = obj.Power;
                 ampere = obj.Current;
              
                  setState(idwatt, watt);
                  setState(idvolt, volt);
                  setState(idampere, ampere);
              
                 log(volt);
                 log(watt);
                 log(ampere);
              });
              

              Naja ging schnell ist relativ sitze seit 17 Uhr dabei :roll: Naja für das erste größere Script mit viel googelei und Forum leserei ging es ganz gut :mrgreen:

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

                Danke genau das hatte ich auch noch vor

                Gesendet von meinem HUAWEI VNS-L31 mit Tapatalk

                1 Reply Last reply Reply Quote 0
                • Dutchman
                  Dutchman Developer Most Active Administrators last edited by

                  Hi there,

                  Schaue gerade von Handy aus dann sind scripte nicht immer so leicht zu deuten.

                  Würde aber sagen sieht gut aus, kommem die Werte und variabelen jetzt auch wie erwartet?

                  Den creates state eventuell noch mit einer if abfangen das er es nur einmalig macht.

                  Die Log Werte könntest du noch als debug Definieren damit er es nur ausspukt wen der JavaScript adapter auf debug steht sonst komt jetzt immer die Meldung im Log.

                  Also dafür das die angefangen hast mit keine Ahnung und trigger will lernen, aus nem abstrakten Beispiel deine Sachen eingefüllt… Schulter klopfen und stolz sein und das sogar vor den Wochenende!

                  Ich finde es immer sehr gut wenn man nicht nur nach der Lösung fragt sondern wirklich probiert zu verstehen was da passiert und wie man es macht!

                  PS: einer meiner ersten scripte sieht auch als Resultat leicht aus (resol-vbus), habe aber Tage gebraucht also du mit deinen par Stunden, bierchen auf, zurück lenen und Schulter klopfen du 😉


                  Send from mobile device

                  1 Reply Last reply Reply Quote 0
                  • kmxak
                    kmxak Most Active last edited by

                    Danke dir und prost 8-) (bin gerade bei udemy paar kurse machen. Das hilft schon gut obwohl ich noch am anfang bin.)

                    Die Änderungen werde ich noch einfließen lassen.

                    Der Sonoff gibt ja noch mehr Daten her ich werde das Script auf jeden fall noch erweitern und ein Widget damit basteln.

                    Aber das wirklich erst am Wochenende :lol:

                    Ich halte euch auf dem laufenden.

                    Herzlichen Dank nochmal an die vielen tollen Leute hier im Forum für all die Hilfe :!:

                    1 Reply Last reply Reply Quote 0
                    • Dutchman
                      Dutchman Developer Most Active Administrators last edited by

                      @kmxak:

                      Aber das wirklich erst am Wochenende :lol:

                      Ich halte euch auf dem laufenden.

                      Herzlichen Dank nochmal an die vielen tollen Leute hier im Forum für all die Hilfe :!: `

                      Geht doch klar dafür sind wir die ioBroker community.

                      Und nur noch Mal so als Ansatz, bitte von diesen Post die lesson learned mit nehmen und Endresultat teilen.

                      Und wenn ich fragen darf… Später auch Mal anderen helfem, jetzt bist du der Anfänger aber schnell ein Guru.

                      Gurus bleiben, aber jeder muss irgendwo anfangen... 😉

                      So Ende offtopic... Have Fun!


                      Send from mobile device

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

                        hi,

                        ich bin gerade dabei und versuche auch das Script bei mir ans laufen zu bekommen. Nur leider werden die Objekte bei mir nciht gefüllt. Kannst du vielleicht kurz dein Script erklären.

                        Danke

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

                          OK hat sich erledigt. Ich hatte ein Brett vorm Kopf.

                          Bei mir heist der Wert mqtt.0.POWDrucker.ENERGY und nicht mqtt.0.tele.POWDrucker.ENERGY

                          Danke das Script ist klassse werde das direkt erweitern für die anderen 3 Parameter.

                          Ach ja eine Frage habe ich noch!

                          Damit er das jede Minute ausführt, muss ich doch am anfang folgendes einfügen oder?

                          schedule("* * * * * *",

                          code

                          )

                          Sonst wird es doch nur einmal ausgeführt, wenn ich das Script starte oder?

                          Danke für eure Hilfe.

                          1 Reply Last reply Reply Quote 0
                          • kmxak
                            kmxak Most Active last edited by

                            Hey, schön das es läuft.

                            Bin da auch noch kein Profi aber es sollte bei jeder erkannten Änderung aktualisieren.

                            Habe es allerdings noch nicht produktiv im Einsatz und daher noch nicht lange getestet. Wenn du mir rückinfo geben könntest wäre das natürlich klasse

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

                              Hi,

                              Werde ich machen sobald ich es in Erfahrung gebracht habe. Morgen erstmal die JavaScript Doku drucken und durcharbeiten

                              Gesendet von meinem HUAWEI VNS-L31 mit Tapatalk

                              1 Reply Last reply Reply Quote 0
                              • Dutchman
                                Dutchman Developer Most Active Administrators last edited by

                                @smoker2604x:

                                OK hat sich erledigt. Ich hatte ein Brett vorm Kopf.

                                Bei mir heist der Wert mqtt.0.POWDrucker.ENERGY und nicht mqtt.0.tele.POWDrucker.ENERGY

                                Danke das Script ist klassse werde das direkt erweitern für die anderen 3 Parameter.

                                Ach ja eine Frage habe ich noch!

                                Damit er das jede Minute ausführt, muss ich doch am anfang folgendes einfügen oder?

                                schedule("* * * * * *",

                                code

                                )

                                Sonst wird es doch nur einmal ausgeführt, wenn ich das Script starte oder?

                                Danke für eure Hilfe. `

                                Genau

                                In javascript hast du oben rechts eine Knopf cron Schau da Mal.

                                Kannst du deine Zeiten zusammen klicken in einer GUI und der cron kommt Dan mit de richtigen Werten 😉

                                Und gut so, Fragen ist gut aber nicht warten sondern probieren klappt doch gut bei dir chapeau !

                                (So hab ich auch angefangen ;))

                                –-----------------------

                                Send from mobile device

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

                                  Hallo zusammen,

                                  ich habe das Script um die weiteren 3 parameter ergänzt und noch einen Scheduel hinzugefügt der alle 2 Minuten lauft.

                                  Mla sehen ob es jetzt so klappt wie ich mir das vorstelle.

                                  Quellcode:

                                  ! ````
                                  /*
                                  Json Converter Sonoff POW
                                  ! Setup: Pfad + Channel + SName setzen / immer ein . am ende
                                  ! /
                                  ! var pfad = "javascript.0.jsonconverter.";
                                  var channel = "SonoffPOW.";
                                  var sname = "POWDrucker.";
                                  ! // do not change
                                  ! var idwatt = pfad + channel + sname + 'Watt';
                                  var idvolt = pfad + channel + sname + 'Volt';
                                  var idampere = pfad + channel + sname + 'Ampere';
                                  var idtotal = pfad + channel + sname + 'Total';
                                  var idyesterday = pfad + channel + sname + 'Gestern';
                                  var idtoday = pfad + channel + sname + 'Heute';
                                  ! // Create States
                                  ! createState(idwatt, 0,{type: 'number',name: 'Aktuelle Leistung', read: true,write: true,role: 'value'});
                                  createState(idvolt, 0,{type: 'number',name: 'Aktuelle Spannung', read: true,write: true,role: 'value'});
                                  createState(idampere, 0,{type: 'number',name: 'Aktueller Strom', read: true,write: true,role: 'value'});
                                  createState(idtotal, 0,{type: 'number',name: 'Total KWh', read: true,write: true,role: 'value'});
                                  createState(idyesterday, 0,{type: 'number',name: 'Gestern KWh', read: true,write: true,role: 'value'});
                                  createState(idtoday, 0,{type: 'number',name: 'Heute KWh', read: true,write: true,role: 'value'});
                                  ! schedule("
                                  /2 * * * *", function () {
                                  ! // script beginning
                                  on({id: 'mqtt.0.POWDrucker.ENERGY', change: "any"}, function (obj) {

                                     //variabele erstellen fuer meine 3 beispiel objecte
                                          var volt;
                                          var watt;  
                                          var ampere; 
                                          var total;
                                          var today;
                                          var yesterday;
                                  
                                     try {obj = JSON.parse(getState('mqtt.0.POWDrucker.ENERGY').val);
                                     } catch (e) {
                                             console.error('Cannot parse: ' + getState('mqtt.0.POWDrucker.ENERGY').val);
                                             return;
                                      }
                                  
                                     volt = obj.Voltage;
                                     watt = obj.Power;
                                     ampere = obj.Current;
                                     total = obj.Total;
                                     today = obj.Today;
                                     yesterday = obj.Yesterday;
                                  
                                      setState(idwatt, watt);
                                      setState(idvolt, volt);
                                      setState(idampere, ampere);
                                      setState(idtotal, total);
                                      setState(idtoday, today);
                                      setState(idyesterday, yesterday);
                                  
                                     log(volt);
                                     log(watt);
                                     log(ampere);
                                     log(total);
                                     log(today);
                                     log(yesterday);
                                  });
                                  

                                  });

                                  ! ````

                                  1 Reply Last reply Reply Quote 0
                                  • Dutchman
                                    Dutchman Developer Most Active Administrators last edited by

                                    @smoker2604x:

                                    Hallo zusammen,

                                    ich habe das Script um die weiteren 3 parameter ergänzt und noch einen Scheduel hinzugefügt der alle 2 Minuten lauft.

                                    Mla sehen ob es jetzt so klappt wie ich mir das vorstelle.

                                    Quellcode:

                                    ! ````
                                    /*
                                    Json Converter Sonoff POW
                                    ! Setup: Pfad + Channel + SName setzen / immer ein . am ende
                                    ! /
                                    ! var pfad = "javascript.0.jsonconverter.";
                                    var channel = "SonoffPOW.";
                                    var sname = "POWDrucker.";
                                    ! // do not change
                                    ! var idwatt = pfad + channel + sname + 'Watt';
                                    var idvolt = pfad + channel + sname + 'Volt';
                                    var idampere = pfad + channel + sname + 'Ampere';
                                    var idtotal = pfad + channel + sname + 'Total';
                                    var idyesterday = pfad + channel + sname + 'Gestern';
                                    var idtoday = pfad + channel + sname + 'Heute';
                                    ! // Create States
                                    ! createState(idwatt, 0,{type: 'number',name: 'Aktuelle Leistung', read: true,write: true,role: 'value'});
                                    createState(idvolt, 0,{type: 'number',name: 'Aktuelle Spannung', read: true,write: true,role: 'value'});
                                    createState(idampere, 0,{type: 'number',name: 'Aktueller Strom', read: true,write: true,role: 'value'});
                                    createState(idtotal, 0,{type: 'number',name: 'Total KWh', read: true,write: true,role: 'value'});
                                    createState(idyesterday, 0,{type: 'number',name: 'Gestern KWh', read: true,write: true,role: 'value'});
                                    createState(idtoday, 0,{type: 'number',name: 'Heute KWh', read: true,write: true,role: 'value'});
                                    ! schedule("
                                    /2 * * * *", function () {
                                    ! // script beginning
                                    on({id: 'mqtt.0.POWDrucker.ENERGY', change: "any"}, function (obj) {

                                       //variabele erstellen fuer meine 3 beispiel objecte
                                            var volt;
                                            var watt;  
                                            var ampere; 
                                            var total;
                                            var today;
                                            var yesterday;
                                    
                                       try {obj = JSON.parse(getState('mqtt.0.POWDrucker.ENERGY').val);
                                       } catch (e) {
                                               console.error('Cannot parse: ' + getState('mqtt.0.POWDrucker.ENERGY').val);
                                               return;
                                        }
                                    
                                    
                                       volt = obj.Voltage;
                                       watt = obj.Power;
                                       ampere = obj.Current;
                                       total = obj.Total;
                                       today = obj.Today;
                                       yesterday = obj.Yesterday;
                                    
                                        setState(idwatt, watt);
                                        setState(idvolt, volt);
                                        setState(idampere, ampere);
                                        setState(idtotal, total);
                                        setState(idtoday, today);
                                        setState(idyesterday, yesterday);
                                      
                                       log(volt);
                                       log(watt);
                                       log(ampere);
                                       log(total);
                                       log(today);
                                       log(yesterday);
                                    });
                                    

                                    });

                                    ! ```` `

                                    Hi,

                                    Ich verstehe nicht danz die logik dahinter was du machst 🙂

                                    Einerseitzt hast du eien cron der alle 2 minuten das script triggert, das hast du am anfang vom script gesetzt:

                                    schedule("*/2 * * * *", function () {
                                    

                                    Innerhalb deines sccript ist noch ein trigger verbaut der die variabelen fuellt wen sich der status von de MQTT werten aendert:

                                        // script beginning
                                        on({id: 'mqtt.0.POWDrucker.ENERGY', change: "any"}, function (obj)
                                    
                                           //variabele erstellen fuer meine 3 beispiel objecte
                                                var volt;
                                                var watt;  
                                                var ampere; 
                                                var total;
                                                var today;
                                                var yesterday;
                                    
                                           try {obj = JSON.parse(getState('mqtt.0.POWDrucker.ENERGY').val);
                                           } catch (e) {
                                                   console.error('Cannot parse: ' + getState('mqtt.0.POWDrucker.ENERGY').val);
                                                   return;
                                            }
                                    
                                    1. Was moechtest du genau erreichen ? Die werte alle 2 minuten aktualisieren ? Lass dan das on weg und integrieren auslesen der MQTT werte in deinem schedule.

                                    (ich frag mich aber ab wozu das gut sein soll, macht doch nur sinn die daten zu erneuern wen diese sich geaendert haben ?)

                                    ! ` > schedule("*/2 * * * *", function () {

                                    //variabele erstellen fuer meine 3 beispiel objecte

                                    var volt;

                                    var watt;

                                    var ampere;

                                    var total;

                                    var today;

                                    var yesterday;

                                    try {obj = JSON.parse(getState('mqtt.0.POWDrucker.ENERGY').val);

                                    } catch (e) {

                                    console.error('Cannot parse: ' + getState('mqtt.0.POWDrucker.ENERGY').val);

                                    return;

                                    }

                                    volt = obj.Voltage;

                                    watt = obj.Power;

                                    ampere = obj.Current;

                                    total = obj.Total;

                                    today = obj.Today;

                                    yesterday = obj.Yesterday;

                                    setState(idwatt, watt);

                                    setState(idvolt, volt);

                                    setState(idampere, ampere);

                                    setState(idtotal, total);

                                    setState(idtoday, today);

                                    setState(idyesterday, yesterday);

                                    log(volt);

                                    log(watt);

                                    log(ampere);

                                    log(total);

                                    log(today);

                                    log(yesterday);

                                    }); `

                                    1. Die werte aktualisieren wen diese sich von MQTT aus geaendert haben ? Lass dan den shedule weg (faende ich logischer.

                                    ! ````
                                    // script beginning
                                    on({id: 'mqtt.0.POWDrucker.ENERGY', change: "any"}, function (obj) {

                                       //variabele erstellen fuer meine 3 beispiel objecte
                                            var volt;
                                            var watt;  
                                            var ampere; 
                                            var total;
                                            var today;
                                            var yesterday;
                                    
                                       try {obj = JSON.parse(getState('mqtt.0.POWDrucker.ENERGY').val);
                                       } catch (e) {
                                               console.error('Cannot parse: ' + getState('mqtt.0.POWDrucker.ENERGY').val);
                                               return;
                                        }
                                    
                                       volt = obj.Voltage;
                                       watt = obj.Power;
                                       ampere = obj.Current;
                                       total = obj.Total;
                                       today = obj.Today;
                                       yesterday = obj.Yesterday;
                                    
                                        setState(idwatt, watt);
                                        setState(idvolt, volt);
                                        setState(idampere, ampere);
                                        setState(idtotal, total);
                                        setState(idtoday, today);
                                        setState(idyesterday, yesterday);
                                    
                                       log(volt);
                                       log(watt);
                                       log(ampere);
                                       log(total);
                                       log(today);
                                       log(yesterday);
                                    });
                                    

                                    ! ````

                                    hoffe das hilft dir ein bischen, man sollte vermeiden das unnoetig date geschrieben werden en es auch sinn man diese zu lesen 🙂

                                    Den cron welcher jetzt bei dir eingebaut ist macht naemlich garnix :), alles hinter dem on( wird nur ausgefuert wen sich der MQTT wert geaendert/updated hat das macht er bei jeden update (durch change : "any"), kannst du noch aendern in nur wen wert geaendert wurde (change : "ne")

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

                                      Super ich danke dir. Deine Erklärung und das hinterfragen hat mir sehr geholfen. Mir war nicht klar das das Script mit in immer auf eine Änderung reagiert. Ich dachte das reagiert nur darauf wenn es abgefragt wird. Vielen Dank dann kann ich den cron wieder entfernen.

                                      Gesendet von meinem HUAWEI VNS-L31 mit Tapatalk

                                      1 Reply Last reply Reply Quote 0
                                      • D
                                        djonny88 last edited by

                                        Hi,

                                        jetzt muss ich den Thread nochmals vorholen.

                                        Wie hast du es geschafft, dass du die Werte vom Sonoff POW an iobroker sendest?

                                        Bei mir wird zwar das Objekt angelegt, jedoch sehe ich keine Werter im Ereignis oder sonst wo… Ich sehe nur Online/Offline sowie On/Off

                                        wäre für jede Hilfe Dankbar.

                                        LG Jonny

                                        1 Reply Last reply Reply Quote 0
                                        • kmxak
                                          kmxak Most Active last edited by

                                          Die Werte vom POW kommen per MQTT im ioBroker an.

                                          Von da aus geht es mit diesem Script weiter.

                                          1 Reply Last reply Reply Quote 0
                                          • A
                                            abuzze last edited by

                                            Hallo zusammen

                                            Ich hab jetzt auch versucht die Temperatur meines Sonoff TH einzeln zu stellen aber ich habe es noch nicht geschafft. Ist das letzte Script das was bei Dir/Euch funktioniert ? Oder ist das nur ein Code Schnipsel ?

                                            Vielleicht könnte einer nochmal das komplette Script veröffentlichen. Anpassen mache ich selber will auch lernen.

                                            Danke

                                            @Dutchman:

                                            @smoker2604x:

                                            Hallo zusammen,

                                            ich habe das Script um die weiteren 3 parameter ergänzt und noch einen Scheduel hinzugefügt der alle 2 Minuten lauft.

                                            Mla sehen ob es jetzt so klappt wie ich mir das vorstelle.

                                            Quellcode:

                                            ! ````
                                            /*
                                            Json Converter Sonoff POW
                                            ! Setup: Pfad + Channel + SName setzen / immer ein . am ende
                                            ! /
                                            ! var pfad = "javascript.0.jsonconverter.";
                                            var channel = "SonoffPOW.";
                                            var sname = "POWDrucker.";
                                            ! // do not change
                                            ! var idwatt = pfad + channel + sname + 'Watt';
                                            var idvolt = pfad + channel + sname + 'Volt';
                                            var idampere = pfad + channel + sname + 'Ampere';
                                            var idtotal = pfad + channel + sname + 'Total';
                                            var idyesterday = pfad + channel + sname + 'Gestern';
                                            var idtoday = pfad + channel + sname + 'Heute';
                                            ! // Create States
                                            ! createState(idwatt, 0,{type: 'number',name: 'Aktuelle Leistung', read: true,write: true,role: 'value'});
                                            createState(idvolt, 0,{type: 'number',name: 'Aktuelle Spannung', read: true,write: true,role: 'value'});
                                            createState(idampere, 0,{type: 'number',name: 'Aktueller Strom', read: true,write: true,role: 'value'});
                                            createState(idtotal, 0,{type: 'number',name: 'Total KWh', read: true,write: true,role: 'value'});
                                            createState(idyesterday, 0,{type: 'number',name: 'Gestern KWh', read: true,write: true,role: 'value'});
                                            createState(idtoday, 0,{type: 'number',name: 'Heute KWh', read: true,write: true,role: 'value'});
                                            ! schedule("
                                            /2 * * * *", function () {
                                            ! // script beginning
                                            on({id: 'mqtt.0.POWDrucker.ENERGY', change: "any"}, function (obj) {

                                               //variabele erstellen fuer meine 3 beispiel objecte
                                                    var volt;
                                                    var watt;  
                                                    var ampere; 
                                                    var total;
                                                    var today;
                                                    var yesterday;
                                            
                                               try {obj = JSON.parse(getState('mqtt.0.POWDrucker.ENERGY').val);
                                               } catch (e) {
                                                       console.error('Cannot parse: ' + getState('mqtt.0.POWDrucker.ENERGY').val);
                                                       return;
                                                }
                                            
                                            
                                               volt = obj.Voltage;
                                               watt = obj.Power;
                                               ampere = obj.Current;
                                               total = obj.Total;
                                               today = obj.Today;
                                               yesterday = obj.Yesterday;
                                            
                                                setState(idwatt, watt);
                                                setState(idvolt, volt);
                                                setState(idampere, ampere);
                                                setState(idtotal, total);
                                                setState(idtoday, today);
                                                setState(idyesterday, yesterday);
                                              
                                               log(volt);
                                               log(watt);
                                               log(ampere);
                                               log(total);
                                               log(today);
                                               log(yesterday);
                                            });
                                            

                                            });

                                            ! ```` `

                                            Hi,

                                            Ich verstehe nicht danz die logik dahinter was du machst 🙂

                                            Einerseitzt hast du eien cron der alle 2 minuten das script triggert, das hast du am anfang vom script gesetzt:

                                            schedule("*/2 * * * *", function () {
                                            

                                            Innerhalb deines sccript ist noch ein trigger verbaut der die variabelen fuellt wen sich der status von de MQTT werten aendert:

                                                // script beginning
                                                on({id: 'mqtt.0.POWDrucker.ENERGY', change: "any"}, function (obj)
                                                
                                                   //variabele erstellen fuer meine 3 beispiel objecte
                                                        var volt;
                                                        var watt;  
                                                        var ampere; 
                                                        var total;
                                                        var today;
                                                        var yesterday;
                                                
                                                   try {obj = JSON.parse(getState('mqtt.0.POWDrucker.ENERGY').val);
                                                   } catch (e) {
                                                           console.error('Cannot parse: ' + getState('mqtt.0.POWDrucker.ENERGY').val);
                                                           return;
                                                    }
                                            
                                            1. Was moechtest du genau erreichen ? Die werte alle 2 minuten aktualisieren ? Lass dan das on weg und integrieren auslesen der MQTT werte in deinem schedule.

                                            (ich frag mich aber ab wozu das gut sein soll, macht doch nur sinn die daten zu erneuern wen diese sich geaendert haben ?)

                                            ! ` > schedule("*/2 * * * *", function () {

                                            //variabele erstellen fuer meine 3 beispiel objecte

                                            var volt;

                                            var watt;

                                            var ampere;

                                            var total;

                                            var today;

                                            var yesterday;

                                            try {obj = JSON.parse(getState('mqtt.0.POWDrucker.ENERGY').val);

                                            } catch (e) {

                                            console.error('Cannot parse: ' + getState('mqtt.0.POWDrucker.ENERGY').val);

                                            return;

                                            }

                                            volt = obj.Voltage;

                                            watt = obj.Power;

                                            ampere = obj.Current;

                                            total = obj.Total;

                                            today = obj.Today;

                                            yesterday = obj.Yesterday;

                                            setState(idwatt, watt);

                                            setState(idvolt, volt);

                                            setState(idampere, ampere);

                                            setState(idtotal, total);

                                            setState(idtoday, today);

                                            setState(idyesterday, yesterday);

                                            log(volt);

                                            log(watt);

                                            log(ampere);

                                            log(total);

                                            log(today);

                                            log(yesterday);

                                            }); `

                                            1. Die werte aktualisieren wen diese sich von MQTT aus geaendert haben ? Lass dan den shedule weg (faende ich logischer.

                                            ! ````
                                            // script beginning
                                            on({id: 'mqtt.0.POWDrucker.ENERGY', change: "any"}, function (obj) {

                                               //variabele erstellen fuer meine 3 beispiel objecte
                                                    var volt;
                                                    var watt;  
                                                    var ampere; 
                                                    var total;
                                                    var today;
                                                    var yesterday;
                                            
                                               try {obj = JSON.parse(getState('mqtt.0.POWDrucker.ENERGY').val);
                                               } catch (e) {
                                                       console.error('Cannot parse: ' + getState('mqtt.0.POWDrucker.ENERGY').val);
                                                       return;
                                                }
                                            
                                            
                                               volt = obj.Voltage;
                                               watt = obj.Power;
                                               ampere = obj.Current;
                                               total = obj.Total;
                                               today = obj.Today;
                                               yesterday = obj.Yesterday;
                                            
                                                setState(idwatt, watt);
                                                setState(idvolt, volt);
                                                setState(idampere, ampere);
                                                setState(idtotal, total);
                                                setState(idtoday, today);
                                                setState(idyesterday, yesterday);
                                              
                                               log(volt);
                                               log(watt);
                                               log(ampere);
                                               log(total);
                                               log(today);
                                               log(yesterday);
                                            });
                                            

                                            ! ````

                                            hoffe das hilft dir ein bischen, man sollte vermeiden das unnoetig date geschrieben werden en es auch sinn man diese zu lesen 🙂

                                            Den cron welcher jetzt bei dir eingebaut ist macht naemlich garnix :), alles hinter dem on( wird nur ausgefuert wen sich der MQTT wert geaendert/updated hat das macht er bei jeden update (durch change : "any"), kannst du noch aendern in nur wen wert geaendert wurde (change : "ne") `

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            647
                                            Online

                                            31.7k
                                            Users

                                            79.8k
                                            Topics

                                            1.3m
                                            Posts

                                            11
                                            40
                                            10674
                                            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