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. MQTT Json -> einzelner Datenpunkt - SonoffPOW Script

NEWS

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

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    2.1k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    16
    1
    2.9k

MQTT Json -> einzelner Datenpunkt - SonoffPOW Script

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
40 Beiträge 11 Kommentatoren 11.9k Aufrufe
  • Ä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.
  • kmxakK Offline
    kmxakK Offline
    kmxak
    Most Active
    schrieb am zuletzt editiert von
    #1

    Inzwischen nutze ich den Sonoff POW mit dem Sonoff Adapter - Das Script ist somit nicht mehr nötig.

    Hier oben gibt es immer das aktuellste Script!

    ! ````
    /*
    Json Converter Sonoff POW
    ! Setup: Pfad + Channel + SName setzen / immer ein . am ende
    Version 1.0
    ! */
    ! 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);
    });

    
    Ab hier der Origniale Beitrag!
    
    Hi
    
    ich habe im MQTT Datenpunkt einem Json. (sagt man das so oder eher json string oder tabelle?)
    
    Nun möchte ich gerne aus dieser Tabelle die Werte einzeln in verschiedenen von mir angelegten Datenpunkten haben.
    
    Wie gehe ich die Sache nun am besten an?
    
    Eine Option die ESP8622 Firmware zu modifizieren. ( Fällt zumindest für mich raus)
    
    Meine Überlegung wäre es nun ein JS zu schreiben das bei einer Änderung der Json die Werte in meine Datenpunkte schreibt.
    
    Habe ich noch eine Option?

    Gruß Alex

    1 Antwort Letzte Antwort
    0
    • DutchmanD Offline
      DutchmanD Offline
      Dutchman
      Developer Most Active Administrators
      schrieb am zuletzt editiert von
      #2

      Das siehst du schon richtig einfach per js die objecten extrahieren und in objecten Weg schreiben.

      Vom Handy aus kurz schwer zu suchen aber gibt viele Beispiele im Forum dazu vorhanden.

      Meld sich sonst nochmal geben wir dir Beispiele. Dann würde es auch helfen wen du postest wie die Daten (JSON) Aussehen welche du rein bekommst

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

      Send from mobile device

      1 Antwort Letzte Antwort
      0
      • kmxakK Offline
        kmxakK Offline
        kmxak
        Most Active
        schrieb am zuletzt editiert von
        #3

        ok alles klar.

        Die Json Daten kommen von einem Sonoff POW.

        {"Time":"2017-07-11T19:40:38", "Total":0.006, "Yesterday":0.000, "Today":0.006, "Period":0, "Power":0, "Factor":0.00, "Voltage":0, "Current":0.000}
        

        Allerdings würde ich es dann erstmal gerne selber probieren ich will es ja unbedingt selber lernen 8-)

        Werde mich dann am Wochenende dran setzen und meinen Fortschritt hier aktualisieren und du kannst ja dann mal drüber schauen ob das so gut war :mrgreen:

        Danke dir schon mal für die Hilfe

        Gruß Alex

        1 Antwort Letzte Antwort
        0
        • DutchmanD Offline
          DutchmanD Offline
          Dutchman
          Developer Most Active Administrators
          schrieb am zuletzt editiert von
          #4

          @kmxak:

          ok alles klar.

          Die Json Daten kommen von einem Sonoff POW.

          {"Time":"2017-07-11T19:40:38", "Total":0.006, "Yesterday":0.000, "Today":0.006, "Period":0, "Power":0, "Factor":0.00, "Voltage":0, "Current":0.000}
          

          Allerdings würde ich es dann erstmal gerne selber probieren ich will es ja unbedingt selber lernen 8-)

          Werde mich dann am Wochenende dran setzen und meinen Fortschritt hier aktualisieren und du kannst ja dann mal drüber schauen ob das so gut war :mrgreen:

          Danke dir schon mal für die Hilfe `

          naja bisschen hilfe kan nicht schaden und ich langweile mich gerade…..

          du bekommst die weter time:, total: usw... de code hier unten sollte dir ein bischen auf die spruenge helfen.

          Ich habe ihn bewusst nicht auf deine werte umgeschrieben sonst entnehme ich dir ja den lern factor :mrgreen:

          //trigger uf state change des MQTT eingangs und lese werte in variable z.b. channel, state, device bei mir
          on({id: 'mqtt.0.domoticz.out', change: "any"}, function (obj) {
          
          	//variabele erstellen fuer meine 3 beispiel objecte
                  var state;
                  var device;  
                  var channel; 
          
          	//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.domoticz.out').val);
          	} catch (e) {
                  	console.error('Cannot parse: ' + getState('mqtt.0.domoticz.out').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
          	channel = obj.idx;
          	state = obj.nvalue;
          	device = obj.name;
          
          	//jetzt lass uns mal im log zeigen was wir bekommen haben
          	log(channel);
          	log(device);
          	log(state);
          }
          
          

          hier fehlen jetzt noch die create states und set states fuer die empfangende daten, da du auch selber spielen moechtest las ich das mal weg siehe javascript adapter documentation :)

          auf gutes gelingen!

          ~Dutch

          hier mal ein kompletter beispiel code womit ich von domitcz eine json tabellen per htpp auslese states erstelle.

          Wen du die basis hier oben verstehst sollte der code hier unten ach zum nachbauen helfen, mus halt umgeschrieben werden von http request naar mqtt object usw….

          ! ```
          var objekt, results, count_import; // Connect to Domoticz API interface and list all devices try { require("request")('http://192.168.1.152:8080/json.htm?type=devices', function (error, response, results) { objekt = JSON.parse(results); ! log ("ServerTime:"+ objekt.ServerTime); log ("Reading Domoticz device list : " + objekt.status); log("Total amount of Devices found: " + objekt.result.length); ! var i,j; for (i = 0; i < objekt.result.length; i++) { // If received value is On/Off translate to boolean, otherwise use received value if ( objekt.result[i].Data == 'On') { state = true; } else if ( objekt.result[i].Data == 'Off' ) { state = false; } else { state = objekt.result[i].Data; } // Only create states for supported switchtypes if(objekt.result[i].SwitchType == "Push On Button" || objekt.result[i].SwitchType == "Doorbell" || objekt.result[i].SwitchType == "On/Off"){ //Create States for each device createState("domoticz.Devices." + objekt.result[i].Name + '.STATE', { name: objekt.result[i].Name, type: 'boolean', role: 'switch', def: 'false', idx: objekt.result[i].idx, SwitchType: objekt.result[i].SwitchType }); } else { // Error logging for unsupported devices log("Device creation failed not supported yet! DeviceName : " + objekt.result[i].Name + " | SwitchType : " + objekt.result[i].SwitchType + " | Subtype : " + objekt.result[i].SubType); } }}); } catch (e) { console.error(e); } [/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i]

          1 Antwort Letzte Antwort
          0
          • kmxakK Offline
            kmxakK Offline
            kmxak
            Most Active
            schrieb am zuletzt editiert von
            #5

            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.

            Gruß Alex

            1 Antwort Letzte Antwort
            0
            • paul53P Offline
              paul53P Offline
              paul53
              schrieb am zuletzt editiert von
              #6

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

              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

              1 Antwort Letzte Antwort
              0
              • paul53P Offline
                paul53P Offline
                paul53
                schrieb am zuletzt editiert von
                #7

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

                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

                1 Antwort Letzte Antwort
                0
                • DutchmanD Offline
                  DutchmanD Offline
                  Dutchman
                  Developer Most Active Administrators
                  schrieb am zuletzt editiert von
                  #8

                  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 Antwort Letzte Antwort
                  0
                  • kmxakK Offline
                    kmxakK Offline
                    kmxak
                    Most Active
                    schrieb am zuletzt editiert von
                    #9

                    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:

                    Gruß Alex

                    1 Antwort Letzte Antwort
                    0
                    • smoker2604xS Offline
                      smoker2604xS Offline
                      smoker2604x
                      schrieb am zuletzt editiert von
                      #10

                      Danke genau das hatte ich auch noch vor

                      Gesendet von meinem HUAWEI VNS-L31 mit Tapatalk

                      Liebe Grüße Tobias

                      1 Antwort Letzte Antwort
                      0
                      • DutchmanD Offline
                        DutchmanD Offline
                        Dutchman
                        Developer Most Active Administrators
                        schrieb am zuletzt editiert von
                        #11

                        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 Antwort Letzte Antwort
                        0
                        • kmxakK Offline
                          kmxakK Offline
                          kmxak
                          Most Active
                          schrieb am zuletzt editiert von
                          #12

                          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 :!:

                          Gruß Alex

                          1 Antwort Letzte Antwort
                          0
                          • DutchmanD Offline
                            DutchmanD Offline
                            Dutchman
                            Developer Most Active Administrators
                            schrieb am zuletzt editiert von
                            #13

                            @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 Antwort Letzte Antwort
                            0
                            • smoker2604xS Offline
                              smoker2604xS Offline
                              smoker2604x
                              schrieb am zuletzt editiert von
                              #14

                              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

                              Liebe Grüße Tobias

                              1 Antwort Letzte Antwort
                              0
                              • smoker2604xS Offline
                                smoker2604xS Offline
                                smoker2604x
                                schrieb am zuletzt editiert von
                                #15

                                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.

                                Liebe Grüße Tobias

                                1 Antwort Letzte Antwort
                                0
                                • kmxakK Offline
                                  kmxakK Offline
                                  kmxak
                                  Most Active
                                  schrieb am zuletzt editiert von
                                  #16

                                  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

                                  Gruß Alex

                                  1 Antwort Letzte Antwort
                                  0
                                  • smoker2604xS Offline
                                    smoker2604xS Offline
                                    smoker2604x
                                    schrieb am zuletzt editiert von
                                    #17

                                    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

                                    Liebe Grüße Tobias

                                    1 Antwort Letzte Antwort
                                    0
                                    • DutchmanD Offline
                                      DutchmanD Offline
                                      Dutchman
                                      Developer Most Active Administrators
                                      schrieb am zuletzt editiert von
                                      #18

                                      @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 Antwort Letzte Antwort
                                      0
                                      • smoker2604xS Offline
                                        smoker2604xS Offline
                                        smoker2604x
                                        schrieb am zuletzt editiert von
                                        #19

                                        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);
                                        });
                                        

                                        });

                                        ! ````

                                        Liebe Grüße Tobias

                                        1 Antwort Letzte Antwort
                                        0
                                        • DutchmanD Offline
                                          DutchmanD Offline
                                          Dutchman
                                          Developer Most Active Administrators
                                          schrieb am zuletzt editiert von
                                          #20

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

                                          629

                                          Online

                                          32.4k

                                          Benutzer

                                          81.5k

                                          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