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. JavaScript
  5. Result-Funktion von InfluxDB-Adapter richtig nutzen

NEWS

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

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

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

Result-Funktion von InfluxDB-Adapter richtig nutzen

Geplant Angeheftet Gesperrt Verschoben JavaScript
15 Beiträge 3 Kommentatoren 973 Aufrufe 3 Watching
  • Ä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.
  • E Online
    E Online
    etzeste13
    schrieb am zuletzt editiert von
    #1

    Hallo,

    ich habe mir folgendes Skript erstellt um meine Stromerzeugung der PV aus den aktuellen Ertragswerten alles 30sek zu speichern und daraus den stündlichen Ertrag in kwh zu speichern. Hier das skript... 3mal weil ich die 3 Himmelsrichtungen extra ausgewertet haben möchte.

    //Die Ost-Süd-West- Leistungen von der letzen Stunde zusammenrechnen und abspeichern
    
    schedule("*/60 * * * *", function () {     //alle 60Min das Skript starten
    
        // die Werte von Osten abfragen und abspeichern.
        
        var end = new Date().getTime();     // definiert aktuellen Zeitpunkt.
        //console.log(end);
        var Stundenertrag = 0;
        var Time_to_next_value_in_ms = 0;   
        var x_s = 0;
        sendTo('influxdb.0', 'getHistory', {          // ist der Aufruf der Datenbank-Fuktion get History vom Influx.DB Adapter 0
            id: '0_userdata.0.PV_Anlagen.MTBG-38_1.Leistung-OST',   // Datenpunkt der ausgelesen wird
            options: {                                  // die optionen anhand deren ausgelesen werden soll  
                start:      end - 3600000,                 // Startpunkt ist aktuelle Zeitpunkt - 1Stunde in ms
                end:        end,                        // auslesen bis jetzt in ms
                count:      180,                       //bis zu 180 Werte auslesen, da generell alle 30sek geschrieben wird
                aggregate: 'none' // or 'none' to get raw values    // aggregate: none definiert die eigentlichen Werte ausgegeben werden sollen 
            }
        }, function (result) {
            for (var i = 0; i < result.result.length; i++) {
                //console.log(result.result[i].ts)        //timestamp des Ergebnisses der Nr[i] ausgeben
                if (i == 0) {                           // im ersten Durchlauf muss mann die 30sec manuell angeben, da sonst bei der berechnung [i-1] ein Fehler auftritt 
                    Time_to_next_value_in_ms = 30000;
                } else {
                    Time_to_next_value_in_ms = result.result[i].ts - result.result[i-1].ts;
                }
                //console.log(Time_to_next_value_in_ms);
                Stundenertrag = Stundenertrag + result.result[i].val / (3600000 / Time_to_next_value_in_ms);   //die 3.600.000ms / die MS zum Vorgängerwert addiert, ergeben die W/h
                x_s = x_s + 1;                                      // x_s nur zur Kontrolle, damit ich sehe wie viele Werte addiert wurden
            }
            Stundenertrag = Math.round(Stundenertrag);                 //Ergebnis auf ganze Zahl runden
            console.log('Stundenertrag_OST: ' + Stundenertrag + ', gelesene Einträge: ' + x_s);                    // PV-Ertrag der letzten Stunde + die Anzahl der Datenpunkte ins LOG schreiben
            setState("0_userdata.0.PV_Anlagen.MTBG-38_1.Leistung-OST_letzte_Stunde", Stundenertrag, true);     //PV-Ertrag der letzten Stunde in Datenpunkt schreiben
        });
    
    
    // die Werte von Süden abfragen und abspeichern.
        
        var end = new Date().getTime();     // definiert aktuellen Zeitpunkt.
        //console.log(end);
        var Stundenertrag = 0;
        var Time_to_next_value_in_ms = 0;   
        var x_s = 0;
        sendTo('influxdb.0', 'getHistory', {          // ist der Aufruf der Datenbank-Fuktion get History vom Influx.DB Adapter 0
            id: '0_userdata.0.PV_Anlagen.MTBG-38_1.Leistung-SÜD',   // Datenpunkt der ausgelesen wird
            options: {                                  // die optionen anhand deren ausgelesen werden soll  
                start:      end - 3600000,                 // Startpunkt ist aktuelle Zeitpunkt - 1Stunde in ms
                end:        end,                        // auslesen bis jetzt in ms
                count:      180,                       //bis zu 180 Werte auslesen, da generell alle 30sek geschrieben wird
                aggregate: 'none' // or 'none' to get raw values    // aggregate: none definiert die eigentlichen Werte ausgegeben werden sollen 
            }
        }, function (result) {
            for (var i = 0; i < result.result.length; i++) {
                //console.log(result.result[i].ts)        //timestamp des Ergebnisses der Nr[i] ausgeben
                if (i == 0) {                           // im ersten Durchlauf muss mann die 30sec manuell angeben, da sonst bei der berechnung [i-1] ein Fehler auftritt 
                    Time_to_next_value_in_ms = 30000;
                } else {
                    Time_to_next_value_in_ms = result.result[i].ts - result.result[i-1].ts;
                }
                //console.log(Time_to_next_value_in_ms);
                Stundenertrag = Stundenertrag + result.result[i].val / (3600000 / Time_to_next_value_in_ms);   //die 3.600.000ms / die MS zum Vorgängerwert addiert, ergeben die W/h
                x_s = x_s + 1;                                      // x_s nur zur Kontrolle, damit ich sehe wie viele Werte addiert wurden
            }
            Stundenertrag = Math.round(Stundenertrag);                 //Ergebnis auf ganze Zahl runden
            console.log('Stundenertrag_SUED: ' + Stundenertrag + ', gelesene Einträge: ' + x_s);                    // PV-Ertrag der letzten Stunde + die Anzahl der Datenpunkte ins LOG schreiben
            setState("0_userdata.0.PV_Anlagen.MTBG-38_1.Leistung-SÜD_letzte_Stunde", Stundenertrag, true);     //PV-Ertrag der letzten Stunde in Datenpunkt schreiben
        });    
    
    // die Werte von WEST abfragen und abspeichern.
        
        var end = new Date().getTime();     // definiert aktuellen Zeitpunkt.
        //console.log(end);
        var Stundenertrag = 0;
        var Time_to_next_value_in_ms = 0;   
        var x_s = 0;
        sendTo('influxdb.0', 'getHistory', {          // ist der Aufruf der Datenbank-Fuktion get History vom Influx.DB Adapter 0
            id: '0_userdata.0.PV_Anlagen.MTBG-38_1.Leistung-WEST',   // Datenpunkt der ausgelesen wird
            options: {                                  // die optionen anhand deren ausgelesen werden soll  
                start:      end - 3600000,                 // Startpunkt ist aktuelle Zeitpunkt - 1Stunde in ms
                end:        end,                        // auslesen bis jetzt in ms
                count:      180,                       //bis zu 180 Werte auslesen, da generell alle 30sek geschrieben wird
                aggregate: 'none' // or 'none' to get raw values    // aggregate: none definiert die eigentlichen Werte ausgegeben werden sollen 
            }
        }, function (result) {
            for (var i = 0; i < result.result.length; i++) {
                //console.log(result.result[i].ts)        //timestamp des Ergebnisses der Nr[i] ausgeben
                if (i == 0) {                           // im ersten Durchlauf muss mann die 30sec manuell angeben, da sonst bei der berechnung [i-1] ein Fehler auftritt 
                    Time_to_next_value_in_ms = 30000;
                } else {
                    Time_to_next_value_in_ms = result.result[i].ts - result.result[i-1].ts;
                }
                //console.log(Time_to_next_value_in_ms);
                Stundenertrag = Stundenertrag + result.result[i].val / (3600000 / Time_to_next_value_in_ms);   //die 3.600.000ms / die MS zum Vorgängerwert addiert, ergeben die W/h
                x_s = x_s + 1;                                      // x_s nur zur Kontrolle, damit ich sehe wie viele Werte addiert wurden
            }
            Stundenertrag = Math.round(Stundenertrag);                 //Ergebnis auf ganze Zahl runden
            console.log('Stundenertrag_WEST: ' + Stundenertrag + ', gelesene Einträge: ' + x_s);                   // PV-Ertrag der letzten Stunde + die Anzahl der Datenpunkte ins LOG schreiben
            setState("0_userdata.0.PV_Anlagen.MTBG-38_1.Leistung-WEST_letzte_Stunde", Stundenertrag, true);     //PV-Ertrag der letzten Stunde in Datenpunkt schreiben
        });
    
    });code_text
    

    Grunssätzlich funktioniert das Ganze, aber mir ist aufgefallen, dass die Werte von WEST und SÜD immer zu hoch sind. Bei der Prüfung warum das so ist, habe ich mir ausgeben lassen wie viele Punkte in den Schleifen jeweils addiert werden. Das sieht im Log so aus:

    2023-05-09 13:00:00.224 - info: javascript.0 (1414) script.js.PV-Anlage.MTBG38_OSW-Leistung_stündlich_berechnen: Stundenertrag_WEST: 3837gelesene Einträge: 180
    2023-05-09 13:00:00.246 - info: javascript.0 (1414) script.js.PV-Anlage.MTBG38_OSW-Leistung_stündlich_berechnen: Stundenertrag_SUED: 9968gelesene Einträge: 319
    2023-05-09 13:00:00.256 - info: javascript.0 (1414) script.js.PV-Anlage.MTBG38_OSW-Leistung_stündlich_berechnen: Stundenertrag_OST: 14840gelesene Einträge: 499
    

    Wie man sieht werden die Durchläufe immer höher, und ich habe die Vermutung, dass sich das "Objekt" result nicht zwischen den Aufrufen löscht, sondern dass die Einträge von SÜD bzw WEST dann hinten drangeschrieben werden, und somit das Ergebnis bei WEST und SÜD immer zu hoch ist.

    Gibt es eine Möglichkeit das "Objekt" result von getHistory zwischen den Aufrufen zu löschen, bzw rückzusetzen, damit beim nächsten Aufruf nur die Daten von WEST bzw SÜD berechnet werden?

    Ich hoffe ich habs soweit verständlich beschrieben und freue mich auf euer Input.

    vG Etze

    PS: Ich bin leider kein JS Profi und habe mir den Code so zusammengebastelt, bitte als nicht konforme Skriptdetails zu entschuldigen. Bin für alle Verbesserungen offen...:-)

    M 1 Antwort Letzte Antwort
    0
    • E etzeste13

      Hallo,

      ich habe mir folgendes Skript erstellt um meine Stromerzeugung der PV aus den aktuellen Ertragswerten alles 30sek zu speichern und daraus den stündlichen Ertrag in kwh zu speichern. Hier das skript... 3mal weil ich die 3 Himmelsrichtungen extra ausgewertet haben möchte.

      //Die Ost-Süd-West- Leistungen von der letzen Stunde zusammenrechnen und abspeichern
      
      schedule("*/60 * * * *", function () {     //alle 60Min das Skript starten
      
          // die Werte von Osten abfragen und abspeichern.
          
          var end = new Date().getTime();     // definiert aktuellen Zeitpunkt.
          //console.log(end);
          var Stundenertrag = 0;
          var Time_to_next_value_in_ms = 0;   
          var x_s = 0;
          sendTo('influxdb.0', 'getHistory', {          // ist der Aufruf der Datenbank-Fuktion get History vom Influx.DB Adapter 0
              id: '0_userdata.0.PV_Anlagen.MTBG-38_1.Leistung-OST',   // Datenpunkt der ausgelesen wird
              options: {                                  // die optionen anhand deren ausgelesen werden soll  
                  start:      end - 3600000,                 // Startpunkt ist aktuelle Zeitpunkt - 1Stunde in ms
                  end:        end,                        // auslesen bis jetzt in ms
                  count:      180,                       //bis zu 180 Werte auslesen, da generell alle 30sek geschrieben wird
                  aggregate: 'none' // or 'none' to get raw values    // aggregate: none definiert die eigentlichen Werte ausgegeben werden sollen 
              }
          }, function (result) {
              for (var i = 0; i < result.result.length; i++) {
                  //console.log(result.result[i].ts)        //timestamp des Ergebnisses der Nr[i] ausgeben
                  if (i == 0) {                           // im ersten Durchlauf muss mann die 30sec manuell angeben, da sonst bei der berechnung [i-1] ein Fehler auftritt 
                      Time_to_next_value_in_ms = 30000;
                  } else {
                      Time_to_next_value_in_ms = result.result[i].ts - result.result[i-1].ts;
                  }
                  //console.log(Time_to_next_value_in_ms);
                  Stundenertrag = Stundenertrag + result.result[i].val / (3600000 / Time_to_next_value_in_ms);   //die 3.600.000ms / die MS zum Vorgängerwert addiert, ergeben die W/h
                  x_s = x_s + 1;                                      // x_s nur zur Kontrolle, damit ich sehe wie viele Werte addiert wurden
              }
              Stundenertrag = Math.round(Stundenertrag);                 //Ergebnis auf ganze Zahl runden
              console.log('Stundenertrag_OST: ' + Stundenertrag + ', gelesene Einträge: ' + x_s);                    // PV-Ertrag der letzten Stunde + die Anzahl der Datenpunkte ins LOG schreiben
              setState("0_userdata.0.PV_Anlagen.MTBG-38_1.Leistung-OST_letzte_Stunde", Stundenertrag, true);     //PV-Ertrag der letzten Stunde in Datenpunkt schreiben
          });
      
      
      // die Werte von Süden abfragen und abspeichern.
          
          var end = new Date().getTime();     // definiert aktuellen Zeitpunkt.
          //console.log(end);
          var Stundenertrag = 0;
          var Time_to_next_value_in_ms = 0;   
          var x_s = 0;
          sendTo('influxdb.0', 'getHistory', {          // ist der Aufruf der Datenbank-Fuktion get History vom Influx.DB Adapter 0
              id: '0_userdata.0.PV_Anlagen.MTBG-38_1.Leistung-SÜD',   // Datenpunkt der ausgelesen wird
              options: {                                  // die optionen anhand deren ausgelesen werden soll  
                  start:      end - 3600000,                 // Startpunkt ist aktuelle Zeitpunkt - 1Stunde in ms
                  end:        end,                        // auslesen bis jetzt in ms
                  count:      180,                       //bis zu 180 Werte auslesen, da generell alle 30sek geschrieben wird
                  aggregate: 'none' // or 'none' to get raw values    // aggregate: none definiert die eigentlichen Werte ausgegeben werden sollen 
              }
          }, function (result) {
              for (var i = 0; i < result.result.length; i++) {
                  //console.log(result.result[i].ts)        //timestamp des Ergebnisses der Nr[i] ausgeben
                  if (i == 0) {                           // im ersten Durchlauf muss mann die 30sec manuell angeben, da sonst bei der berechnung [i-1] ein Fehler auftritt 
                      Time_to_next_value_in_ms = 30000;
                  } else {
                      Time_to_next_value_in_ms = result.result[i].ts - result.result[i-1].ts;
                  }
                  //console.log(Time_to_next_value_in_ms);
                  Stundenertrag = Stundenertrag + result.result[i].val / (3600000 / Time_to_next_value_in_ms);   //die 3.600.000ms / die MS zum Vorgängerwert addiert, ergeben die W/h
                  x_s = x_s + 1;                                      // x_s nur zur Kontrolle, damit ich sehe wie viele Werte addiert wurden
              }
              Stundenertrag = Math.round(Stundenertrag);                 //Ergebnis auf ganze Zahl runden
              console.log('Stundenertrag_SUED: ' + Stundenertrag + ', gelesene Einträge: ' + x_s);                    // PV-Ertrag der letzten Stunde + die Anzahl der Datenpunkte ins LOG schreiben
              setState("0_userdata.0.PV_Anlagen.MTBG-38_1.Leistung-SÜD_letzte_Stunde", Stundenertrag, true);     //PV-Ertrag der letzten Stunde in Datenpunkt schreiben
          });    
      
      // die Werte von WEST abfragen und abspeichern.
          
          var end = new Date().getTime();     // definiert aktuellen Zeitpunkt.
          //console.log(end);
          var Stundenertrag = 0;
          var Time_to_next_value_in_ms = 0;   
          var x_s = 0;
          sendTo('influxdb.0', 'getHistory', {          // ist der Aufruf der Datenbank-Fuktion get History vom Influx.DB Adapter 0
              id: '0_userdata.0.PV_Anlagen.MTBG-38_1.Leistung-WEST',   // Datenpunkt der ausgelesen wird
              options: {                                  // die optionen anhand deren ausgelesen werden soll  
                  start:      end - 3600000,                 // Startpunkt ist aktuelle Zeitpunkt - 1Stunde in ms
                  end:        end,                        // auslesen bis jetzt in ms
                  count:      180,                       //bis zu 180 Werte auslesen, da generell alle 30sek geschrieben wird
                  aggregate: 'none' // or 'none' to get raw values    // aggregate: none definiert die eigentlichen Werte ausgegeben werden sollen 
              }
          }, function (result) {
              for (var i = 0; i < result.result.length; i++) {
                  //console.log(result.result[i].ts)        //timestamp des Ergebnisses der Nr[i] ausgeben
                  if (i == 0) {                           // im ersten Durchlauf muss mann die 30sec manuell angeben, da sonst bei der berechnung [i-1] ein Fehler auftritt 
                      Time_to_next_value_in_ms = 30000;
                  } else {
                      Time_to_next_value_in_ms = result.result[i].ts - result.result[i-1].ts;
                  }
                  //console.log(Time_to_next_value_in_ms);
                  Stundenertrag = Stundenertrag + result.result[i].val / (3600000 / Time_to_next_value_in_ms);   //die 3.600.000ms / die MS zum Vorgängerwert addiert, ergeben die W/h
                  x_s = x_s + 1;                                      // x_s nur zur Kontrolle, damit ich sehe wie viele Werte addiert wurden
              }
              Stundenertrag = Math.round(Stundenertrag);                 //Ergebnis auf ganze Zahl runden
              console.log('Stundenertrag_WEST: ' + Stundenertrag + ', gelesene Einträge: ' + x_s);                   // PV-Ertrag der letzten Stunde + die Anzahl der Datenpunkte ins LOG schreiben
              setState("0_userdata.0.PV_Anlagen.MTBG-38_1.Leistung-WEST_letzte_Stunde", Stundenertrag, true);     //PV-Ertrag der letzten Stunde in Datenpunkt schreiben
          });
      
      });code_text
      

      Grunssätzlich funktioniert das Ganze, aber mir ist aufgefallen, dass die Werte von WEST und SÜD immer zu hoch sind. Bei der Prüfung warum das so ist, habe ich mir ausgeben lassen wie viele Punkte in den Schleifen jeweils addiert werden. Das sieht im Log so aus:

      2023-05-09 13:00:00.224 - info: javascript.0 (1414) script.js.PV-Anlage.MTBG38_OSW-Leistung_stündlich_berechnen: Stundenertrag_WEST: 3837gelesene Einträge: 180
      2023-05-09 13:00:00.246 - info: javascript.0 (1414) script.js.PV-Anlage.MTBG38_OSW-Leistung_stündlich_berechnen: Stundenertrag_SUED: 9968gelesene Einträge: 319
      2023-05-09 13:00:00.256 - info: javascript.0 (1414) script.js.PV-Anlage.MTBG38_OSW-Leistung_stündlich_berechnen: Stundenertrag_OST: 14840gelesene Einträge: 499
      

      Wie man sieht werden die Durchläufe immer höher, und ich habe die Vermutung, dass sich das "Objekt" result nicht zwischen den Aufrufen löscht, sondern dass die Einträge von SÜD bzw WEST dann hinten drangeschrieben werden, und somit das Ergebnis bei WEST und SÜD immer zu hoch ist.

      Gibt es eine Möglichkeit das "Objekt" result von getHistory zwischen den Aufrufen zu löschen, bzw rückzusetzen, damit beim nächsten Aufruf nur die Daten von WEST bzw SÜD berechnet werden?

      Ich hoffe ich habs soweit verständlich beschrieben und freue mich auf euer Input.

      vG Etze

      PS: Ich bin leider kein JS Profi und habe mir den Code so zusammengebastelt, bitte als nicht konforme Skriptdetails zu entschuldigen. Bin für alle Verbesserungen offen...:-)

      M Online
      M Online
      MCU
      schrieb am zuletzt editiert von MCU
      #2

      @etzeste13 Mich wunderte, warum du keine Fehlermeldung bekommen hast. Ändere mal die var -> let, dann bekommst du die eventuell auch.
      Man darf die Variablen end, Stundenertrag, Time_to_next_value_in_ms, x_s nicht öfter definieren.
      Du hast sie 3x definiert.
      Du kannst es so versuchen

      
      schedule("*/60 * * * *", function () {     //alle 60Min das Skript starten
       
          // die Werte von Osten abfragen und abspeichern.
          
          let end = new Date().getTime();     // definiert aktuellen Zeitpunkt.
          //console.log(end);
          let Stundenertrag = 0;
          let Time_to_next_value_in_ms = 0;   
          let x_s = 0;
          sendTo('influxdb.0', 'getHistory', {          // ist der Aufruf der Datenbank-Fuktion get History vom Influx.DB Adapter 0
              id: '0_userdata.0.PV_Anlagen.MTBG-38_1.Leistung-OST',   // Datenpunkt der ausgelesen wird
              options: {                                  // die optionen anhand deren ausgelesen werden soll  
                  start:      end - 3600000,                 // Startpunkt ist aktuelle Zeitpunkt - 1Stunde in ms
                  end:        end,                        // auslesen bis jetzt in ms
                  count:      180,                       //bis zu 180 Werte auslesen, da generell alle 30sek geschrieben wird
                  aggregate: 'none' // or 'none' to get raw values    // aggregate: none definiert die eigentlichen Werte ausgegeben werden sollen 
              }
          }, function (result) {
              for (var i = 0; i < result.result.length; i++) {
                  //console.log(result.result[i].ts)        //timestamp des Ergebnisses der Nr[i] ausgeben
                  if (i == 0) {                           // im ersten Durchlauf muss mann die 30sec manuell angeben, da sonst bei der berechnung [i-1] ein Fehler auftritt 
                      Time_to_next_value_in_ms = 30000;
                  } else {
                      Time_to_next_value_in_ms = result.result[i].ts - result.result[i-1].ts;
                  }
                  //console.log(Time_to_next_value_in_ms);
                  Stundenertrag = Stundenertrag + result.result[i].val / (3600000 / Time_to_next_value_in_ms);   //die 3.600.000ms / die MS zum Vorgängerwert addiert, ergeben die W/h
                  x_s = x_s + 1;                                      // x_s nur zur Kontrolle, damit ich sehe wie viele Werte addiert wurden
              }
              Stundenertrag = Math.round(Stundenertrag);                 //Ergebnis auf ganze Zahl runden
              console.log('Stundenertrag_OST: ' + Stundenertrag + ', gelesene Einträge: ' + x_s);                    // PV-Ertrag der letzten Stunde + die Anzahl der Datenpunkte ins LOG schreiben
              setState("0_userdata.0.PV_Anlagen.MTBG-38_1.Leistung-OST_letzte_Stunde", Stundenertrag, true);     //PV-Ertrag der letzten Stunde in Datenpunkt schreiben
          });
       
       
      // die Werte von Süden abfragen und abspeichern.
          
          end = new Date().getTime();     // definiert aktuellen Zeitpunkt.
          //console.log(end);
          Stundenertrag = 0;
          Time_to_next_value_in_ms = 0;   
          x_s = 0;
          sendTo('influxdb.0', 'getHistory', {          // ist der Aufruf der Datenbank-Fuktion get History vom Influx.DB Adapter 0
              id: '0_userdata.0.PV_Anlagen.MTBG-38_1.Leistung-SÜD',   // Datenpunkt der ausgelesen wird
              options: {                                  // die optionen anhand deren ausgelesen werden soll  
                  start:      end - 3600000,                 // Startpunkt ist aktuelle Zeitpunkt - 1Stunde in ms
                  end:        end,                        // auslesen bis jetzt in ms
                  count:      180,                       //bis zu 180 Werte auslesen, da generell alle 30sek geschrieben wird
                  aggregate: 'none' // or 'none' to get raw values    // aggregate: none definiert die eigentlichen Werte ausgegeben werden sollen 
              }
          }, function (result) {
              for (var i = 0; i < result.result.length; i++) {
                  //console.log(result.result[i].ts)        //timestamp des Ergebnisses der Nr[i] ausgeben
                  if (i == 0) {                           // im ersten Durchlauf muss mann die 30sec manuell angeben, da sonst bei der berechnung [i-1] ein Fehler auftritt 
                      Time_to_next_value_in_ms = 30000;
                  } else {
                      Time_to_next_value_in_ms = result.result[i].ts - result.result[i-1].ts;
                  }
                  //console.log(Time_to_next_value_in_ms);
                  Stundenertrag = Stundenertrag + result.result[i].val / (3600000 / Time_to_next_value_in_ms);   //die 3.600.000ms / die MS zum Vorgängerwert addiert, ergeben die W/h
                  x_s = x_s + 1;                                      // x_s nur zur Kontrolle, damit ich sehe wie viele Werte addiert wurden
              }
              Stundenertrag = Math.round(Stundenertrag);                 //Ergebnis auf ganze Zahl runden
              console.log('Stundenertrag_SUED: ' + Stundenertrag + ', gelesene Einträge: ' + x_s);                    // PV-Ertrag der letzten Stunde + die Anzahl der Datenpunkte ins LOG schreiben
              setState("0_userdata.0.PV_Anlagen.MTBG-38_1.Leistung-SÜD_letzte_Stunde", Stundenertrag, true);     //PV-Ertrag der letzten Stunde in Datenpunkt schreiben
          });    
       
      // die Werte von WEST abfragen und abspeichern.
          
          end = new Date().getTime();     // definiert aktuellen Zeitpunkt.
          //console.log(end);
          Stundenertrag = 0;
          Time_to_next_value_in_ms = 0;   
          x_s = 0;
          sendTo('influxdb.0', 'getHistory', {          // ist der Aufruf der Datenbank-Fuktion get History vom Influx.DB Adapter 0
              id: '0_userdata.0.PV_Anlagen.MTBG-38_1.Leistung-WEST',   // Datenpunkt der ausgelesen wird
              options: {                                  // die optionen anhand deren ausgelesen werden soll  
                  start:      end - 3600000,                 // Startpunkt ist aktuelle Zeitpunkt - 1Stunde in ms
                  end:        end,                        // auslesen bis jetzt in ms
                  count:      180,                       //bis zu 180 Werte auslesen, da generell alle 30sek geschrieben wird
                  aggregate: 'none' // or 'none' to get raw values    // aggregate: none definiert die eigentlichen Werte ausgegeben werden sollen 
              }
          }, function (result) {
              for (var i = 0; i < result.result.length; i++) {
                  //console.log(result.result[i].ts)        //timestamp des Ergebnisses der Nr[i] ausgeben
                  if (i == 0) {                           // im ersten Durchlauf muss mann die 30sec manuell angeben, da sonst bei der berechnung [i-1] ein Fehler auftritt 
                      Time_to_next_value_in_ms = 30000;
                  } else {
                      Time_to_next_value_in_ms = result.result[i].ts - result.result[i-1].ts;
                  }
                  //console.log(Time_to_next_value_in_ms);
                  Stundenertrag = Stundenertrag + result.result[i].val / (3600000 / Time_to_next_value_in_ms);   //die 3.600.000ms / die MS zum Vorgängerwert addiert, ergeben die W/h
                  x_s = x_s + 1;                                      // x_s nur zur Kontrolle, damit ich sehe wie viele Werte addiert wurden
              }
              Stundenertrag = Math.round(Stundenertrag);                 //Ergebnis auf ganze Zahl runden
              console.log('Stundenertrag_WEST: ' + Stundenertrag + ', gelesene Einträge: ' + x_s);                   // PV-Ertrag der letzten Stunde + die Anzahl der Datenpunkte ins LOG schreiben
              setState("0_userdata.0.PV_Anlagen.MTBG-38_1.Leistung-WEST_letzte_Stunde", Stundenertrag, true);     //PV-Ertrag der letzten Stunde in Datenpunkt schreiben
          });
       
      });
      

      NUC i7 64GB mit Proxmox ---- Jarvis Infos Aktualisierungen der Doku auf Instagram verfolgen -> mcuiobroker Instagram
      Wenn Euch mein Vorschlag geholfen hat, bitte rechts "^" klicken.

      mcm1957M 1 Antwort Letzte Antwort
      0
      • M MCU

        @etzeste13 Mich wunderte, warum du keine Fehlermeldung bekommen hast. Ändere mal die var -> let, dann bekommst du die eventuell auch.
        Man darf die Variablen end, Stundenertrag, Time_to_next_value_in_ms, x_s nicht öfter definieren.
        Du hast sie 3x definiert.
        Du kannst es so versuchen

        
        schedule("*/60 * * * *", function () {     //alle 60Min das Skript starten
         
            // die Werte von Osten abfragen und abspeichern.
            
            let end = new Date().getTime();     // definiert aktuellen Zeitpunkt.
            //console.log(end);
            let Stundenertrag = 0;
            let Time_to_next_value_in_ms = 0;   
            let x_s = 0;
            sendTo('influxdb.0', 'getHistory', {          // ist der Aufruf der Datenbank-Fuktion get History vom Influx.DB Adapter 0
                id: '0_userdata.0.PV_Anlagen.MTBG-38_1.Leistung-OST',   // Datenpunkt der ausgelesen wird
                options: {                                  // die optionen anhand deren ausgelesen werden soll  
                    start:      end - 3600000,                 // Startpunkt ist aktuelle Zeitpunkt - 1Stunde in ms
                    end:        end,                        // auslesen bis jetzt in ms
                    count:      180,                       //bis zu 180 Werte auslesen, da generell alle 30sek geschrieben wird
                    aggregate: 'none' // or 'none' to get raw values    // aggregate: none definiert die eigentlichen Werte ausgegeben werden sollen 
                }
            }, function (result) {
                for (var i = 0; i < result.result.length; i++) {
                    //console.log(result.result[i].ts)        //timestamp des Ergebnisses der Nr[i] ausgeben
                    if (i == 0) {                           // im ersten Durchlauf muss mann die 30sec manuell angeben, da sonst bei der berechnung [i-1] ein Fehler auftritt 
                        Time_to_next_value_in_ms = 30000;
                    } else {
                        Time_to_next_value_in_ms = result.result[i].ts - result.result[i-1].ts;
                    }
                    //console.log(Time_to_next_value_in_ms);
                    Stundenertrag = Stundenertrag + result.result[i].val / (3600000 / Time_to_next_value_in_ms);   //die 3.600.000ms / die MS zum Vorgängerwert addiert, ergeben die W/h
                    x_s = x_s + 1;                                      // x_s nur zur Kontrolle, damit ich sehe wie viele Werte addiert wurden
                }
                Stundenertrag = Math.round(Stundenertrag);                 //Ergebnis auf ganze Zahl runden
                console.log('Stundenertrag_OST: ' + Stundenertrag + ', gelesene Einträge: ' + x_s);                    // PV-Ertrag der letzten Stunde + die Anzahl der Datenpunkte ins LOG schreiben
                setState("0_userdata.0.PV_Anlagen.MTBG-38_1.Leistung-OST_letzte_Stunde", Stundenertrag, true);     //PV-Ertrag der letzten Stunde in Datenpunkt schreiben
            });
         
         
        // die Werte von Süden abfragen und abspeichern.
            
            end = new Date().getTime();     // definiert aktuellen Zeitpunkt.
            //console.log(end);
            Stundenertrag = 0;
            Time_to_next_value_in_ms = 0;   
            x_s = 0;
            sendTo('influxdb.0', 'getHistory', {          // ist der Aufruf der Datenbank-Fuktion get History vom Influx.DB Adapter 0
                id: '0_userdata.0.PV_Anlagen.MTBG-38_1.Leistung-SÜD',   // Datenpunkt der ausgelesen wird
                options: {                                  // die optionen anhand deren ausgelesen werden soll  
                    start:      end - 3600000,                 // Startpunkt ist aktuelle Zeitpunkt - 1Stunde in ms
                    end:        end,                        // auslesen bis jetzt in ms
                    count:      180,                       //bis zu 180 Werte auslesen, da generell alle 30sek geschrieben wird
                    aggregate: 'none' // or 'none' to get raw values    // aggregate: none definiert die eigentlichen Werte ausgegeben werden sollen 
                }
            }, function (result) {
                for (var i = 0; i < result.result.length; i++) {
                    //console.log(result.result[i].ts)        //timestamp des Ergebnisses der Nr[i] ausgeben
                    if (i == 0) {                           // im ersten Durchlauf muss mann die 30sec manuell angeben, da sonst bei der berechnung [i-1] ein Fehler auftritt 
                        Time_to_next_value_in_ms = 30000;
                    } else {
                        Time_to_next_value_in_ms = result.result[i].ts - result.result[i-1].ts;
                    }
                    //console.log(Time_to_next_value_in_ms);
                    Stundenertrag = Stundenertrag + result.result[i].val / (3600000 / Time_to_next_value_in_ms);   //die 3.600.000ms / die MS zum Vorgängerwert addiert, ergeben die W/h
                    x_s = x_s + 1;                                      // x_s nur zur Kontrolle, damit ich sehe wie viele Werte addiert wurden
                }
                Stundenertrag = Math.round(Stundenertrag);                 //Ergebnis auf ganze Zahl runden
                console.log('Stundenertrag_SUED: ' + Stundenertrag + ', gelesene Einträge: ' + x_s);                    // PV-Ertrag der letzten Stunde + die Anzahl der Datenpunkte ins LOG schreiben
                setState("0_userdata.0.PV_Anlagen.MTBG-38_1.Leistung-SÜD_letzte_Stunde", Stundenertrag, true);     //PV-Ertrag der letzten Stunde in Datenpunkt schreiben
            });    
         
        // die Werte von WEST abfragen und abspeichern.
            
            end = new Date().getTime();     // definiert aktuellen Zeitpunkt.
            //console.log(end);
            Stundenertrag = 0;
            Time_to_next_value_in_ms = 0;   
            x_s = 0;
            sendTo('influxdb.0', 'getHistory', {          // ist der Aufruf der Datenbank-Fuktion get History vom Influx.DB Adapter 0
                id: '0_userdata.0.PV_Anlagen.MTBG-38_1.Leistung-WEST',   // Datenpunkt der ausgelesen wird
                options: {                                  // die optionen anhand deren ausgelesen werden soll  
                    start:      end - 3600000,                 // Startpunkt ist aktuelle Zeitpunkt - 1Stunde in ms
                    end:        end,                        // auslesen bis jetzt in ms
                    count:      180,                       //bis zu 180 Werte auslesen, da generell alle 30sek geschrieben wird
                    aggregate: 'none' // or 'none' to get raw values    // aggregate: none definiert die eigentlichen Werte ausgegeben werden sollen 
                }
            }, function (result) {
                for (var i = 0; i < result.result.length; i++) {
                    //console.log(result.result[i].ts)        //timestamp des Ergebnisses der Nr[i] ausgeben
                    if (i == 0) {                           // im ersten Durchlauf muss mann die 30sec manuell angeben, da sonst bei der berechnung [i-1] ein Fehler auftritt 
                        Time_to_next_value_in_ms = 30000;
                    } else {
                        Time_to_next_value_in_ms = result.result[i].ts - result.result[i-1].ts;
                    }
                    //console.log(Time_to_next_value_in_ms);
                    Stundenertrag = Stundenertrag + result.result[i].val / (3600000 / Time_to_next_value_in_ms);   //die 3.600.000ms / die MS zum Vorgängerwert addiert, ergeben die W/h
                    x_s = x_s + 1;                                      // x_s nur zur Kontrolle, damit ich sehe wie viele Werte addiert wurden
                }
                Stundenertrag = Math.round(Stundenertrag);                 //Ergebnis auf ganze Zahl runden
                console.log('Stundenertrag_WEST: ' + Stundenertrag + ', gelesene Einträge: ' + x_s);                   // PV-Ertrag der letzten Stunde + die Anzahl der Datenpunkte ins LOG schreiben
                setState("0_userdata.0.PV_Anlagen.MTBG-38_1.Leistung-WEST_letzte_Stunde", Stundenertrag, true);     //PV-Ertrag der letzten Stunde in Datenpunkt schreiben
            });
         
        });
        
        mcm1957M Online
        mcm1957M Online
        mcm1957
        schrieb am zuletzt editiert von mcm1957
        #3

        VAR erlaubt die Redeclaration von Variablen. Bei bleibt der Wert erhalten.

        https://www.w3schools.com/js/js_variables.asp

        Re-Declaring JavaScript Variables
        If you re-declare a JavaScript variable declared with var, it will not lose its value.
        
        The variable carName will still have the value "Volvo" after the execution of these statements:
        
        Example
        var carName = "Volvo";
        var carName;
        

        Man wäre also gut beraten var zu vergessen und die aktuellen Declaartionen let und const zu verwenden.

        Entwicklung u Betreuung: envertech-pv, hoymiles-ms, ns-client, pid, snmp Adapter;
        Support Repositoryverwaltung.

        Wer Danke sagen will, kann nen Kaffee spendieren: https://paypal.me/mcm1957atiobroker

        LESEN - gute Forenbeitrage

        1 Antwort Letzte Antwort
        0
        • E Online
          E Online
          etzeste13
          schrieb am zuletzt editiert von
          #4

          @mcm57
          @MCU

          besten Dank für die Inputs. Ich habe das Script entsprechend geändert und werden morgen früh sobald die Sonne wieder scheint berichten.

          vG Etze

          E 1 Antwort Letzte Antwort
          0
          • E etzeste13

            @mcm57
            @MCU

            besten Dank für die Inputs. Ich habe das Script entsprechend geändert und werden morgen früh sobald die Sonne wieder scheint berichten.

            vG Etze

            E Online
            E Online
            etzeste13
            schrieb am zuletzt editiert von
            #5

            @mcm57
            @McUles

            Hallo, also ich habe das Scrict entsprechend geändert und getestet, aber es gibt noch immer das gleiche verhalten, dass es scheint das sich die durchläufe bzw Ergebnisse aus den 3 Abfragen aus der InfluxDB aufsummieren...

            hier der eintrag aus dem LOG.... da kann man sehr gut erkenne, dass sich OST und SÜD auf das WEST Ergebniss aufaddieren.

            2023-05-10 16:00:00.223 - info: javascript.0 (1416) script.js.PV-Anlage.MTBG38_OSW-Leistung_stündlich_berechnen: Stundenertrag_SUED: 2408, gelesene Einträge: 133
            2023-05-10 16:00:00.245 - info: javascript.0 (1416) script.js.PV-Anlage.MTBG38_OSW-Leistung_stündlich_berechnen: Stundenertrag_OST: 3982, gelesene Einträge: 310
            2023-05-10 16:00:00.256 - info: javascript.0 (1416) script.js.PV-Anlage.MTBG38_OSW-Leistung_stündlich_berechnen: Stundenertrag_WEST: 6699, gelesene Einträge: 444
            

            habt Ihr hier noch eine Idee, wie ich das "Objekt" result reseten kann vor der nächsten Abfrage?

            1 Antwort Letzte Antwort
            0
            • M Online
              M Online
              MCU
              schrieb am zuletzt editiert von
              #6

              @etzeste13 Wie hast du das Script verändert, zeig mal.

              NUC i7 64GB mit Proxmox ---- Jarvis Infos Aktualisierungen der Doku auf Instagram verfolgen -> mcuiobroker Instagram
              Wenn Euch mein Vorschlag geholfen hat, bitte rechts "^" klicken.

              E 1 Antwort Letzte Antwort
              0
              • M MCU

                @etzeste13 Wie hast du das Script verändert, zeig mal.

                E Online
                E Online
                etzeste13
                schrieb am zuletzt editiert von etzeste13
                #7

                @mcu

                Hi, sry für die späte Antwort, ich kam leider nicht eher dazu hier weiterzumachen...
                Hier das geänderte Script.

                //Die Ost-Süd-West- Leistungen von der letzen Stunde zusammenrechnen und abspeichern
                
                schedule("*/60 * * * *", function () {
                
                    // die Werte von Osten abfragen und abspeichern.
                    
                    let end = new Date().getTime();     // definiert aktuellen Zeitpunkt.
                    //console.log(end);
                    let Stundenertrag = 0;
                    let Time_to_next_value_in_ms = 0;   
                    let x_s = 0;
                    sendTo('influxdb.0', 'getHistory', {          // ist der Aufruf der Datenbank-Fuktion get History vom Influx.DB Adapter 0
                        id: '0_userdata.0.PV_Anlagen.MTBG-38_1.Leistung-OST',   // Datenpunkt der ausgelesen wird
                        options: {                                  // die optionen anhand deren ausgelesen werden soll  
                            start:      end - 3600000,                 // Startpunkt ist aktuelle Zeitpunkt - 1Stunde in ms
                            end:        end,                        // auslesen bis jetzt in ms
                            count:      180,                       //bis zu 180 Werte auslesen, da generell alle 30sek geschrieben wird
                            aggregate: 'none' // or 'none' to get raw values    // aggregate: none definiert die eigentlichen Werte ausgegeben werden sollen 
                        }
                    }, function (result) {
                        for (var i = 0; i < result.result.length; i++) {
                            //console.log(result.result[i].ts)        //timestamp des Ergebnisses der Nr[i] ausgeben
                            if (i == 0) {                           // im ersten Durchlauf muss mann die 30sec manuell angeben, da sonst bei der berechnung [i-1] ein Fehler auftritt 
                                Time_to_next_value_in_ms = 30000;
                            } else {
                                Time_to_next_value_in_ms = result.result[i].ts - result.result[i-1].ts;
                            }
                            //console.log(Time_to_next_value_in_ms);
                            Stundenertrag = Stundenertrag + result.result[i].val / (3600000 / Time_to_next_value_in_ms);   //die 3.600.000ms / die MS zum Vorgängerwert addiert, ergeben die W/h
                            x_s = x_s + 1;                                      // x_s nur zur Kontrolle, damit ich sehe wie viele Werte addiert wurden
                        }
                        Stundenertrag = Math.round(Stundenertrag);                 //Ergebnis auf ganze Zahl runden
                        console.log('Stundenertrag_OST: ' + Stundenertrag + ', gelesene Einträge: ' + x_s);                    // PV-Ertrag der letzten Stunde + die Anzahl der Datenpunkte ins LOG schreiben
                        setState("0_userdata.0.PV_Anlagen.MTBG-38_1.Leistung-OST_letzte_Stunde", Stundenertrag, true);     //PV-Ertrag der letzten Stunde in Datenpunkt schreiben
                    });
                
                
                // die Werte von Süden abfragen und abspeichern.
                    
                    end = new Date().getTime();     // definiert aktuellen Zeitpunkt.
                    //console.log(end);
                    Stundenertrag = 0;
                    Time_to_next_value_in_ms = 0;   
                    x_s = 0;
                    sendTo('influxdb.0', 'getHistory', {          // ist der Aufruf der Datenbank-Fuktion get History vom Influx.DB Adapter 0
                        id: '0_userdata.0.PV_Anlagen.MTBG-38_1.Leistung-SÜD',   // Datenpunkt der ausgelesen wird
                        options: {                                  // die optionen anhand deren ausgelesen werden soll  
                            start:      end - 3600000,                 // Startpunkt ist aktuelle Zeitpunkt - 1Stunde in ms
                            end:        end,                        // auslesen bis jetzt in ms
                            count:      180,                       //bis zu 180 Werte auslesen, da generell alle 30sek geschrieben wird
                            aggregate: 'none' // or 'none' to get raw values    // aggregate: none definiert die eigentlichen Werte ausgegeben werden sollen 
                        }
                    }, function (result) {
                        for (var i = 0; i < result.result.length; i++) {
                            //console.log(result.result[i].ts)        //timestamp des Ergebnisses der Nr[i] ausgeben
                            if (i == 0) {                           // im ersten Durchlauf muss mann die 30sec manuell angeben, da sonst bei der berechnung [i-1] ein Fehler auftritt 
                                Time_to_next_value_in_ms = 30000;
                            } else {
                                Time_to_next_value_in_ms = result.result[i].ts - result.result[i-1].ts;
                            }
                            //console.log(Time_to_next_value_in_ms);
                            Stundenertrag = Stundenertrag + result.result[i].val / (3600000 / Time_to_next_value_in_ms);   //die 3.600.000ms / die MS zum Vorgängerwert addiert, ergeben die W/h
                            x_s = x_s + 1;                                      // x_s nur zur Kontrolle, damit ich sehe wie viele Werte addiert wurden
                        }
                        Stundenertrag = Math.round(Stundenertrag);                 //Ergebnis auf ganze Zahl runden
                        console.log('Stundenertrag_SUED: ' + Stundenertrag + ', gelesene Einträge: ' + x_s);                    // PV-Ertrag der letzten Stunde + die Anzahl der Datenpunkte ins LOG schreiben
                        setState("0_userdata.0.PV_Anlagen.MTBG-38_1.Leistung-SÜD_letzte_Stunde", Stundenertrag, true);     //PV-Ertrag der letzten Stunde in Datenpunkt schreiben
                    });    
                
                // die Werte von WEST abfragen und abspeichern.
                    
                    end = new Date().getTime();     // definiert aktuellen Zeitpunkt.
                    //console.log(end);
                    Stundenertrag = 0;
                    Time_to_next_value_in_ms = 0;   
                    x_s = 0;
                    sendTo('influxdb.0', 'getHistory', {          // ist der Aufruf der Datenbank-Fuktion get History vom Influx.DB Adapter 0
                        id: '0_userdata.0.PV_Anlagen.MTBG-38_1.Leistung-WEST',   // Datenpunkt der ausgelesen wird
                        options: {                                  // die optionen anhand deren ausgelesen werden soll  
                            start:      end - 3600000,                 // Startpunkt ist aktuelle Zeitpunkt - 1Stunde in ms
                            end:        end,                        // auslesen bis jetzt in ms
                            count:      180,                       //bis zu 180 Werte auslesen, da generell alle 30sek geschrieben wird
                            aggregate: 'none' // or 'none' to get raw values    // aggregate: none definiert die eigentlichen Werte ausgegeben werden sollen 
                        }
                    }, function (result) {
                        for (var i = 0; i < result.result.length; i++) {
                            //console.log(result.result[i].ts)        //timestamp des Ergebnisses der Nr[i] ausgeben
                            if (i == 0) {                           // im ersten Durchlauf muss mann die 30sec manuell angeben, da sonst bei der berechnung [i-1] ein Fehler auftritt 
                                Time_to_next_value_in_ms = 30000;
                            } else {
                                Time_to_next_value_in_ms = result.result[i].ts - result.result[i-1].ts;
                            }
                            //console.log(Time_to_next_value_in_ms);
                            Stundenertrag = Stundenertrag + result.result[i].val / (3600000 / Time_to_next_value_in_ms);   //die 3.600.000ms / die MS zum Vorgängerwert addiert, ergeben die W/h
                            x_s = x_s + 1;                                      // x_s nur zur Kontrolle, damit ich sehe wie viele Werte addiert wurden
                        }
                        Stundenertrag = Math.round(Stundenertrag);                 //Ergebnis auf ganze Zahl runden
                        console.log('Stundenertrag_WEST: ' + Stundenertrag + ', gelesene Einträge: ' + x_s);                   // PV-Ertrag der letzten Stunde + die Anzahl der Datenpunkte ins LOG schreiben
                        setState("0_userdata.0.PV_Anlagen.MTBG-38_1.Leistung-WEST_letzte_Stunde", Stundenertrag, true);     //PV-Ertrag der letzten Stunde in Datenpunkt schreiben
                    });
                
                });
                
                1 Antwort Letzte Antwort
                0
                • M Online
                  M Online
                  MCU
                  schrieb am zuletzt editiert von
                  #8

                  @etzeste13 Ich würde die sendTo ineinander verschachteln.

                  /Die Ost-Süd-West- Leistungen von der letzen Stunde zusammenrechnen und abspeichern
                   
                  schedule("*/60 * * * *", function () {
                   
                      // die Werte von Osten abfragen und abspeichern.
                      
                      let end = new Date().getTime();     // definiert aktuellen Zeitpunkt.
                      //console.log(end);
                      let Stundenertrag = 0;
                      let Time_to_next_value_in_ms = 0;   
                      let x_s = 0;
                      sendTo('influxdb.0', 'getHistory', {          // ist der Aufruf der Datenbank-Fuktion get History vom Influx.DB Adapter 0
                          id: '0_userdata.0.PV_Anlagen.MTBG-38_1.Leistung-OST',   // Datenpunkt der ausgelesen wird
                          options: {                                  // die optionen anhand deren ausgelesen werden soll  
                              start:      end - 3600000,                 // Startpunkt ist aktuelle Zeitpunkt - 1Stunde in ms
                              end:        end,                        // auslesen bis jetzt in ms
                              count:      180,                       //bis zu 180 Werte auslesen, da generell alle 30sek geschrieben wird
                              aggregate: 'none' // or 'none' to get raw values    // aggregate: none definiert die eigentlichen Werte ausgegeben werden sollen 
                          }
                      }, function (result) {
                          for (var i = 0; i < result.result.length; i++) {
                              //console.log(result.result[i].ts)        //timestamp des Ergebnisses der Nr[i] ausgeben
                              if (i == 0) {                           // im ersten Durchlauf muss mann die 30sec manuell angeben, da sonst bei der berechnung [i-1] ein Fehler auftritt 
                                  Time_to_next_value_in_ms = 30000;
                              } else {
                                  Time_to_next_value_in_ms = result.result[i].ts - result.result[i-1].ts;
                              }
                              //console.log(Time_to_next_value_in_ms);
                              Stundenertrag = Stundenertrag + result.result[i].val / (3600000 / Time_to_next_value_in_ms);   //die 3.600.000ms / die MS zum Vorgängerwert addiert, ergeben die W/h
                              x_s = x_s + 1;                                      // x_s nur zur Kontrolle, damit ich sehe wie viele Werte addiert wurden
                          }
                          Stundenertrag = Math.round(Stundenertrag);                 //Ergebnis auf ganze Zahl runden
                          console.log('Stundenertrag_OST: ' + Stundenertrag + ', gelesene Einträge: ' + x_s);                    // PV-Ertrag der letzten Stunde + die Anzahl der Datenpunkte ins LOG schreiben
                          setState("0_userdata.0.PV_Anlagen.MTBG-38_1.Leistung-OST_letzte_Stunde", Stundenertrag, true);     //PV-Ertrag der letzten Stunde in Datenpunkt schreiben
                  // die Werte von Süden abfragen und abspeichern.
                      
                      end = new Date().getTime();     // definiert aktuellen Zeitpunkt.
                      //console.log(end);
                      Stundenertrag = 0;
                      Time_to_next_value_in_ms = 0;   
                      x_s = 0;
                      sendTo('influxdb.0', 'getHistory', {          // ist der Aufruf der Datenbank-Fuktion get History vom Influx.DB Adapter 0
                          id: '0_userdata.0.PV_Anlagen.MTBG-38_1.Leistung-SÜD',   // Datenpunkt der ausgelesen wird
                          options: {                                  // die optionen anhand deren ausgelesen werden soll  
                              start:      end - 3600000,                 // Startpunkt ist aktuelle Zeitpunkt - 1Stunde in ms
                              end:        end,                        // auslesen bis jetzt in ms
                              count:      180,                       //bis zu 180 Werte auslesen, da generell alle 30sek geschrieben wird
                              aggregate: 'none' // or 'none' to get raw values    // aggregate: none definiert die eigentlichen Werte ausgegeben werden sollen 
                          }
                      }, function (result) {
                          for (var i = 0; i < result.result.length; i++) {
                              //console.log(result.result[i].ts)        //timestamp des Ergebnisses der Nr[i] ausgeben
                              if (i == 0) {                           // im ersten Durchlauf muss mann die 30sec manuell angeben, da sonst bei der berechnung [i-1] ein Fehler auftritt 
                                  Time_to_next_value_in_ms = 30000;
                              } else {
                                  Time_to_next_value_in_ms = result.result[i].ts - result.result[i-1].ts;
                              }
                              //console.log(Time_to_next_value_in_ms);
                              Stundenertrag = Stundenertrag + result.result[i].val / (3600000 / Time_to_next_value_in_ms);   //die 3.600.000ms / die MS zum Vorgängerwert addiert, ergeben die W/h
                              x_s = x_s + 1;                                      // x_s nur zur Kontrolle, damit ich sehe wie viele Werte addiert wurden
                          }
                          Stundenertrag = Math.round(Stundenertrag);                 //Ergebnis auf ganze Zahl runden
                          console.log('Stundenertrag_SUED: ' + Stundenertrag + ', gelesene Einträge: ' + x_s);                    // PV-Ertrag der letzten Stunde + die Anzahl der Datenpunkte ins LOG schreiben
                          setState("0_userdata.0.PV_Anlagen.MTBG-38_1.Leistung-SÜD_letzte_Stunde", Stundenertrag, true);     //PV-Ertrag der letzten Stunde in Datenpunkt schreiben
                  // die Werte von WEST abfragen und abspeichern.
                      
                      end = new Date().getTime();     // definiert aktuellen Zeitpunkt.
                      //console.log(end);
                      Stundenertrag = 0;
                      Time_to_next_value_in_ms = 0;   
                      x_s = 0;
                      sendTo('influxdb.0', 'getHistory', {          // ist der Aufruf der Datenbank-Fuktion get History vom Influx.DB Adapter 0
                          id: '0_userdata.0.PV_Anlagen.MTBG-38_1.Leistung-WEST',   // Datenpunkt der ausgelesen wird
                          options: {                                  // die optionen anhand deren ausgelesen werden soll  
                              start:      end - 3600000,                 // Startpunkt ist aktuelle Zeitpunkt - 1Stunde in ms
                              end:        end,                        // auslesen bis jetzt in ms
                              count:      180,                       //bis zu 180 Werte auslesen, da generell alle 30sek geschrieben wird
                              aggregate: 'none' // or 'none' to get raw values    // aggregate: none definiert die eigentlichen Werte ausgegeben werden sollen 
                          }
                      }, function (result) {
                          for (var i = 0; i < result.result.length; i++) {
                              //console.log(result.result[i].ts)        //timestamp des Ergebnisses der Nr[i] ausgeben
                              if (i == 0) {                           // im ersten Durchlauf muss mann die 30sec manuell angeben, da sonst bei der berechnung [i-1] ein Fehler auftritt 
                                  Time_to_next_value_in_ms = 30000;
                              } else {
                                  Time_to_next_value_in_ms = result.result[i].ts - result.result[i-1].ts;
                              }
                              //console.log(Time_to_next_value_in_ms);
                              Stundenertrag = Stundenertrag + result.result[i].val / (3600000 / Time_to_next_value_in_ms);   //die 3.600.000ms / die MS zum Vorgängerwert addiert, ergeben die W/h
                              x_s = x_s + 1;                                      // x_s nur zur Kontrolle, damit ich sehe wie viele Werte addiert wurden
                          }
                          Stundenertrag = Math.round(Stundenertrag);                 //Ergebnis auf ganze Zahl runden
                          console.log('Stundenertrag_WEST: ' + Stundenertrag + ', gelesene Einträge: ' + x_s);                   // PV-Ertrag der letzten Stunde + die Anzahl der Datenpunkte ins LOG schreiben
                          setState("0_userdata.0.PV_Anlagen.MTBG-38_1.Leistung-WEST_letzte_Stunde", Stundenertrag, true);     //PV-Ertrag der letzten Stunde in Datenpunkt schreiben
                      });
                  
                      });    
                  
                      });
                   
                  });
                  
                  

                  NUC i7 64GB mit Proxmox ---- Jarvis Infos Aktualisierungen der Doku auf Instagram verfolgen -> mcuiobroker Instagram
                  Wenn Euch mein Vorschlag geholfen hat, bitte rechts "^" klicken.

                  E 1 Antwort Letzte Antwort
                  0
                  • M MCU

                    @etzeste13 Ich würde die sendTo ineinander verschachteln.

                    /Die Ost-Süd-West- Leistungen von der letzen Stunde zusammenrechnen und abspeichern
                     
                    schedule("*/60 * * * *", function () {
                     
                        // die Werte von Osten abfragen und abspeichern.
                        
                        let end = new Date().getTime();     // definiert aktuellen Zeitpunkt.
                        //console.log(end);
                        let Stundenertrag = 0;
                        let Time_to_next_value_in_ms = 0;   
                        let x_s = 0;
                        sendTo('influxdb.0', 'getHistory', {          // ist der Aufruf der Datenbank-Fuktion get History vom Influx.DB Adapter 0
                            id: '0_userdata.0.PV_Anlagen.MTBG-38_1.Leistung-OST',   // Datenpunkt der ausgelesen wird
                            options: {                                  // die optionen anhand deren ausgelesen werden soll  
                                start:      end - 3600000,                 // Startpunkt ist aktuelle Zeitpunkt - 1Stunde in ms
                                end:        end,                        // auslesen bis jetzt in ms
                                count:      180,                       //bis zu 180 Werte auslesen, da generell alle 30sek geschrieben wird
                                aggregate: 'none' // or 'none' to get raw values    // aggregate: none definiert die eigentlichen Werte ausgegeben werden sollen 
                            }
                        }, function (result) {
                            for (var i = 0; i < result.result.length; i++) {
                                //console.log(result.result[i].ts)        //timestamp des Ergebnisses der Nr[i] ausgeben
                                if (i == 0) {                           // im ersten Durchlauf muss mann die 30sec manuell angeben, da sonst bei der berechnung [i-1] ein Fehler auftritt 
                                    Time_to_next_value_in_ms = 30000;
                                } else {
                                    Time_to_next_value_in_ms = result.result[i].ts - result.result[i-1].ts;
                                }
                                //console.log(Time_to_next_value_in_ms);
                                Stundenertrag = Stundenertrag + result.result[i].val / (3600000 / Time_to_next_value_in_ms);   //die 3.600.000ms / die MS zum Vorgängerwert addiert, ergeben die W/h
                                x_s = x_s + 1;                                      // x_s nur zur Kontrolle, damit ich sehe wie viele Werte addiert wurden
                            }
                            Stundenertrag = Math.round(Stundenertrag);                 //Ergebnis auf ganze Zahl runden
                            console.log('Stundenertrag_OST: ' + Stundenertrag + ', gelesene Einträge: ' + x_s);                    // PV-Ertrag der letzten Stunde + die Anzahl der Datenpunkte ins LOG schreiben
                            setState("0_userdata.0.PV_Anlagen.MTBG-38_1.Leistung-OST_letzte_Stunde", Stundenertrag, true);     //PV-Ertrag der letzten Stunde in Datenpunkt schreiben
                    // die Werte von Süden abfragen und abspeichern.
                        
                        end = new Date().getTime();     // definiert aktuellen Zeitpunkt.
                        //console.log(end);
                        Stundenertrag = 0;
                        Time_to_next_value_in_ms = 0;   
                        x_s = 0;
                        sendTo('influxdb.0', 'getHistory', {          // ist der Aufruf der Datenbank-Fuktion get History vom Influx.DB Adapter 0
                            id: '0_userdata.0.PV_Anlagen.MTBG-38_1.Leistung-SÜD',   // Datenpunkt der ausgelesen wird
                            options: {                                  // die optionen anhand deren ausgelesen werden soll  
                                start:      end - 3600000,                 // Startpunkt ist aktuelle Zeitpunkt - 1Stunde in ms
                                end:        end,                        // auslesen bis jetzt in ms
                                count:      180,                       //bis zu 180 Werte auslesen, da generell alle 30sek geschrieben wird
                                aggregate: 'none' // or 'none' to get raw values    // aggregate: none definiert die eigentlichen Werte ausgegeben werden sollen 
                            }
                        }, function (result) {
                            for (var i = 0; i < result.result.length; i++) {
                                //console.log(result.result[i].ts)        //timestamp des Ergebnisses der Nr[i] ausgeben
                                if (i == 0) {                           // im ersten Durchlauf muss mann die 30sec manuell angeben, da sonst bei der berechnung [i-1] ein Fehler auftritt 
                                    Time_to_next_value_in_ms = 30000;
                                } else {
                                    Time_to_next_value_in_ms = result.result[i].ts - result.result[i-1].ts;
                                }
                                //console.log(Time_to_next_value_in_ms);
                                Stundenertrag = Stundenertrag + result.result[i].val / (3600000 / Time_to_next_value_in_ms);   //die 3.600.000ms / die MS zum Vorgängerwert addiert, ergeben die W/h
                                x_s = x_s + 1;                                      // x_s nur zur Kontrolle, damit ich sehe wie viele Werte addiert wurden
                            }
                            Stundenertrag = Math.round(Stundenertrag);                 //Ergebnis auf ganze Zahl runden
                            console.log('Stundenertrag_SUED: ' + Stundenertrag + ', gelesene Einträge: ' + x_s);                    // PV-Ertrag der letzten Stunde + die Anzahl der Datenpunkte ins LOG schreiben
                            setState("0_userdata.0.PV_Anlagen.MTBG-38_1.Leistung-SÜD_letzte_Stunde", Stundenertrag, true);     //PV-Ertrag der letzten Stunde in Datenpunkt schreiben
                    // die Werte von WEST abfragen und abspeichern.
                        
                        end = new Date().getTime();     // definiert aktuellen Zeitpunkt.
                        //console.log(end);
                        Stundenertrag = 0;
                        Time_to_next_value_in_ms = 0;   
                        x_s = 0;
                        sendTo('influxdb.0', 'getHistory', {          // ist der Aufruf der Datenbank-Fuktion get History vom Influx.DB Adapter 0
                            id: '0_userdata.0.PV_Anlagen.MTBG-38_1.Leistung-WEST',   // Datenpunkt der ausgelesen wird
                            options: {                                  // die optionen anhand deren ausgelesen werden soll  
                                start:      end - 3600000,                 // Startpunkt ist aktuelle Zeitpunkt - 1Stunde in ms
                                end:        end,                        // auslesen bis jetzt in ms
                                count:      180,                       //bis zu 180 Werte auslesen, da generell alle 30sek geschrieben wird
                                aggregate: 'none' // or 'none' to get raw values    // aggregate: none definiert die eigentlichen Werte ausgegeben werden sollen 
                            }
                        }, function (result) {
                            for (var i = 0; i < result.result.length; i++) {
                                //console.log(result.result[i].ts)        //timestamp des Ergebnisses der Nr[i] ausgeben
                                if (i == 0) {                           // im ersten Durchlauf muss mann die 30sec manuell angeben, da sonst bei der berechnung [i-1] ein Fehler auftritt 
                                    Time_to_next_value_in_ms = 30000;
                                } else {
                                    Time_to_next_value_in_ms = result.result[i].ts - result.result[i-1].ts;
                                }
                                //console.log(Time_to_next_value_in_ms);
                                Stundenertrag = Stundenertrag + result.result[i].val / (3600000 / Time_to_next_value_in_ms);   //die 3.600.000ms / die MS zum Vorgängerwert addiert, ergeben die W/h
                                x_s = x_s + 1;                                      // x_s nur zur Kontrolle, damit ich sehe wie viele Werte addiert wurden
                            }
                            Stundenertrag = Math.round(Stundenertrag);                 //Ergebnis auf ganze Zahl runden
                            console.log('Stundenertrag_WEST: ' + Stundenertrag + ', gelesene Einträge: ' + x_s);                   // PV-Ertrag der letzten Stunde + die Anzahl der Datenpunkte ins LOG schreiben
                            setState("0_userdata.0.PV_Anlagen.MTBG-38_1.Leistung-WEST_letzte_Stunde", Stundenertrag, true);     //PV-Ertrag der letzten Stunde in Datenpunkt schreiben
                        });
                    
                        });    
                    
                        });
                     
                    });
                    
                    
                    E Online
                    E Online
                    etzeste13
                    schrieb am zuletzt editiert von
                    #9

                    @mcu
                    wie soll ich das machen? ich muss ja die einzelnen Datenpunkte einzeln aus der influxDB holen... oder nicht ?

                    M 1 Antwort Letzte Antwort
                    0
                    • E etzeste13

                      @mcu
                      wie soll ich das machen? ich muss ja die einzelnen Datenpunkte einzeln aus der influxDB holen... oder nicht ?

                      M Online
                      M Online
                      MCU
                      schrieb am zuletzt editiert von MCU
                      #10

                      @etzeste13 Ich habe es doch schon gemacht.
                      Damit wird der nächste sendTo-Befehl erst ausgelöst, wenn die Daten vom 1. da sind, usw..

                      NUC i7 64GB mit Proxmox ---- Jarvis Infos Aktualisierungen der Doku auf Instagram verfolgen -> mcuiobroker Instagram
                      Wenn Euch mein Vorschlag geholfen hat, bitte rechts "^" klicken.

                      E 1 Antwort Letzte Antwort
                      0
                      • M MCU

                        @etzeste13 Ich habe es doch schon gemacht.
                        Damit wird der nächste sendTo-Befehl erst ausgelöst, wenn die Daten vom 1. da sind, usw..

                        E Online
                        E Online
                        etzeste13
                        schrieb am zuletzt editiert von etzeste13
                        #11

                        @MCU bitte entschuldige die vlt. blöde Frage, aber ich finde den Unterschied im Code einfach nicht.... kannst du mir kurz schreiben was du geändert hast.... Scheint als ob ich den Wald vor lauter Bäumen nicht finde...

                        M 1 Antwort Letzte Antwort
                        0
                        • E etzeste13

                          @MCU bitte entschuldige die vlt. blöde Frage, aber ich finde den Unterschied im Code einfach nicht.... kannst du mir kurz schreiben was du geändert hast.... Scheint als ob ich den Wald vor lauter Bäumen nicht finde...

                          M Online
                          M Online
                          MCU
                          schrieb am zuletzt editiert von MCU
                          #12

                          @etzeste13
                          Also es sind 3 sendTo

                          Vorher:

                          sendTo{
                          }
                          sendTo{
                          }
                          sendTo{
                          }
                          

                          Nachher:

                          sendTo{
                                sendTo{
                                    sendTo{
                                    }
                               }
                          }
                          

                          NUC i7 64GB mit Proxmox ---- Jarvis Infos Aktualisierungen der Doku auf Instagram verfolgen -> mcuiobroker Instagram
                          Wenn Euch mein Vorschlag geholfen hat, bitte rechts "^" klicken.

                          E 1 Antwort Letzte Antwort
                          0
                          • M MCU

                            @etzeste13
                            Also es sind 3 sendTo

                            Vorher:

                            sendTo{
                            }
                            sendTo{
                            }
                            sendTo{
                            }
                            

                            Nachher:

                            sendTo{
                                  sendTo{
                                      sendTo{
                                      }
                                 }
                            }
                            
                            E Online
                            E Online
                            etzeste13
                            schrieb am zuletzt editiert von
                            #13

                            @mcu
                            Alles klar, jetzt hab ichs... danke dir. Ich werde es morgen testen, wenn wieder die Sonne scheint.... bzw. es hell wird, von Sonne aktuell keine Spur... :-(

                            E 1 Antwort Letzte Antwort
                            0
                            • E etzeste13

                              @mcu
                              Alles klar, jetzt hab ichs... danke dir. Ich werde es morgen testen, wenn wieder die Sonne scheint.... bzw. es hell wird, von Sonne aktuell keine Spur... :-(

                              E Online
                              E Online
                              etzeste13
                              schrieb am zuletzt editiert von
                              #14

                              @MCU

                              vielen Dank für deinen Input... jetzt funktioniert es wie es gedacht war.
                              Kannst du mir vielleicht noch den Grund erklären warum das jetzt funktioniert?

                              vG Etze

                              1 Antwort Letzte Antwort
                              0
                              • M Online
                                M Online
                                MCU
                                schrieb am zuletzt editiert von
                                #15

                                @etzeste13
                                Vorher wurden die sendTo Funktionen direkt nacheinander ausgelöst. Es wurde nicht darauf gewartet, bis die Daten verarbeitet wurden.

                                Nachher wurden die Funktionen immer erst dann aufgerufen, wenn die Daten aus der vorherigen Funktion, auch wirklich verarbeitet gewesen sind.

                                NUC i7 64GB mit Proxmox ---- Jarvis Infos Aktualisierungen der Doku auf Instagram verfolgen -> mcuiobroker Instagram
                                Wenn Euch mein Vorschlag geholfen hat, bitte rechts "^" klicken.

                                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

                                891

                                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