Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. [FRAGE]Verbrauchsdaten aus Basis der Daten aus History Adapter

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    [FRAGE]Verbrauchsdaten aus Basis der Daten aus History Adapter

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

      Hallo,

      pünktlich zum Jahreswechsel will ich es endlich angehen, meine Verbrauchsdaten lieber aus den Daten des History-Adapters zu errechnen, statt selbst eine eigenen Objekt mit Daten mitlaufen zu lassen.

      Ich habe in Github die Anleitung für das Auslesen der Daten gesehen: https://github.com/ioBroker/ioBroker.hi … pt-adapter

      Meine Frage:

      Hat jemand vielleicht schon ein Skript erstellt, das ich freundlicherweise nutzen kann und welches die Daten vom ersten des Monats 0:00 Uhr oder ersten des Jahres 0:00 Uhr oder heute 0:00 Uhr abfragt? Es geht nur um einen Datensatz (den frühesten des Tages), nicht um eine Reihe.

      Ich bauen dann damit weiter.

      Viele Grüße, guten Rutsch...

      Pix

      1 Reply Last reply Reply Quote 0
      • K
        Kueppert last edited by

        Wenn das auch mit einer Sql-Datenbank auf einer Synology funktioniert, würde mich dass auch brennend interessieren 🙂

        Gesendet von meinem HUAWEI RIO-L01 mit Tapatalk

        1 Reply Last reply Reply Quote 0
        • E
          ehome last edited by

          Hi,

          ich htte mal 'ne Sammlung von SQL Statements angeregt und ein Beispiel gepostet:

          http://forum.iobroker.net/viewtopic.php … 112#p98112

          Gab aber wenig Feedback und ist im Sande verlaufen.

          Ich nutze momentan dieses Skript

          bin in Java Script nicht zuhause 😉 - es ist deshalb sicherlich nicht elegant - erfüllt aber seinen Zweck.

          Es erstellt unter der benutzen JavaScript einen Objektbaum (heisst das so ??) für einige Statistiken.

          @pix: Denke das ist nicht 100% das was du wolltest, aber ggf kannst du dir das benötigte ja rauspicken ...

          Es werden keine Umrechnungen vorgenommen, da ich meine Counter-Werte immer auf kWh normiere wird alles in kWh

          erwartet und angegeben.

          Die Counter und deren Beschgreibung werden oben in zwei Arrays eingetragen

           `//
          // Berechnet counter differenzen 
          //
          
          var logging=true;
          
          // instanz und pfad
          var instanz="javascript."+instance+".Statistiken.";
          
          // wrapper Objekt für aktuellen Zaehlerstand
          // sind alle in kWh
          
          var wrapperobj='wrapper.1.Counter.';
          
          var counter=[];
          counter[0] ='pv-eigenverbrauch';
          counter[1] ='pv-gesamtproduktion';
          counter[2] ='hausnaschluss-abgabe';
          counter[3] ='wallbox';
          counter[4] ='hausnaschluss-bezug';
          counter[5] ='waschmaschine';
          counter[6] ='trockner';
          counter[7] ='gasanschluss-bezug';
          counter[8] ='gasbrenner-laufzeit';
          counter[9] ='gasbrenner-starts';
          
          var label=[];
          label[0]='PV Eigenverbr.';
          label[1]='PV Produktion';
          label[2]='PV Einspeisung';
          label[3]='Wallbox';
          label[4]='Bezug aus Netz';
          label[5]='Waschmaschine';
          label[6]='Trockner';
          label[7]='Gas';
          label[8]='Brenner Laufzeit';
          label[9]='Brenner Starts';
          
          //
          // 12 Monats Statistik
          //
          
          var statistik12monate="12_Monate.";
          var namebez="12 Monate.";
          counter.forEach(function(element) {
              createState(instanz+statistik12monate+element, {
                      name: namebez+' '+element,
                      type: 'string',
                      unit: 'kWh',
              });
          
          });
          
          //
          // 7 Tage Statistik
          //
          
          var statistik7tage="7_Tage.";
          var namebez="7 Tage";
          counter.forEach(function(element) {
              log("7 Tage->"+element);
              createState(instanz+statistik7tage+element, {
                      name: namebez+' '+element,
                      type: 'string',
                      unit: 'kWh',
              });
          
          });
          
          // seit Tagesanfang
          
          var statistik_anfangTag="seitTagesbeginn.";
          var namebez="seit Tagesbeginn";
          counter.forEach(function(element) {
              createState(instanz+statistik_anfangTag+element, {
                      name: namebez+' '+element,
                      type: 'string',
                      unit: 'kWh',
              });
          
          });
          
          var statistik_anfangWoche="seitWochenbeginn.";
          var namebez="seit Wochenbeginn";
          counter.forEach(function(element) {
              createState(instanz+statistik_anfangWoche+element, {
                      name: namebez+' '+element,
                      type: 'string',
                      unit: 'kWh',
              });
          
          });
          
          var statistik_anfangMonat="seitMonatsbeginn.";
          var namebez="seit Monatsbeginn";
          counter.forEach(function(element) {
              createState(instanz+statistik_anfangMonat+element, {
                      name: namebez+' '+element,
                      type: 'string',
                      unit: 'kWh',
              });
          
          });
          
          var statistik_anfangJahr="seitJahresbeginn.";
          var namebez="seit Jahresbeginn";
          counter.forEach(function(element) {
              createState(instanz+statistik_anfangJahr+element, {
                      name: namebez+' '+element,
                      type: 'string',
                      unit: 'kWh',
              });
          });
          
          createState(instanz+statistik_anfangTag+"pv-gesamtproduktion_proz", {name: "PV Anteil eigenverbrauch Tag", type: 'number', unit: '%'});
          createState(instanz+statistik_anfangWoche+"pv-gesamtproduktion_proz", {name: "PV Anteil eigenverbrauch Woche", type: 'number', unit: '%'});
          createState(instanz+statistik_anfangMonat+"pv-gesamtproduktion_proz", {name: "PV Anteil eigenverbrauch Monat", type: 'number', unit: '%'});
          createState(instanz+statistik_anfangJahr+"pv-gesamtproduktion_proz", {name: "PV Anteil eigenverbrauch Jahr", type: 'number', unit: '%'});
          
          schedule("23 * * * *", function () {
              counter.forEach(function(element) {
                 var id=wrapperobj+element;
          
                 // letzten 12 Monate
                 var id_ergebnis=instanz+statistik12monate+element;
                 tolog(logging,id+" -> "+id_ergebnis);
                 statistiken_counter_12_monate(id,id_ergebnis);
          
                 // letzten 7 Tage
                 id_ergebnis=instanz+statistik7tage+element;
                 tolog(logging,id+" -> "+id_ergebnis);
                 statistiken_counter_7_tage(id,id_ergebnis);
          
              });
          
              //  12 Monate Jan-Dez
              var count=0;
              counter.forEach(function(element) {
                  var id=wrapperobj+element;    
                  statistiken_counter_jan_dez(id,count);
                  count++;
              });
          
          });
          
          schedule("*/15 * * * *", function () {  
          
              counter.forEach(function(element) {
                 var id=wrapperobj+element;
          
                 // seit Jahresanfang
                 var jahresanfang=datum_jahresanfang(new Date());
                 id_ergebnis=instanz+statistik_anfangJahr+element;
                 tolog(logging,id+" -> "+id_ergebnis);
                 statistiken_differenz_seit_datum(id,id_ergebnis,jahresanfang);
                 var eigen=getState("javascript."+instance+".Statistiken.seitJahresbeginn.pv-eigenverbrauch").val;
                 var gesamt=getState("javascript."+instance+".Statistiken.seitJahresbeginn.pv-gesamtproduktion").val;
                 var eigen_proz=round(Number((eigen/gesamt)*100),1);
                 setState(instanz+statistik_anfangJahr+"pv-gesamtproduktion_proz",eigen_proz,true);
          
                 // seit Monatsanfang
                 var monatsanfang=datum_monatsanfang(new Date());
                 id_ergebnis=instanz+statistik_anfangMonat+element;
                 tolog(logging,id+" -> "+id_ergebnis);
                 statistiken_differenz_seit_datum(id,id_ergebnis,monatsanfang);
                 eigen=getState("javascript."+instance+".Statistiken.seitMonatsbeginn.pv-eigenverbrauch").val;
                 gesamt=getState("javascript."+instance+".Statistiken.seitMonatsbeginn.pv-gesamtproduktion").val;
                 eigen_proz=round(Number((eigen/gesamt)*100),1);
                 setState(instanz+statistik_anfangMonat+"pv-gesamtproduktion_proz",eigen_proz,true);
          
                 // seit Wochenanfang
                 var wochenanfang=datum_wochenanfang(new Date());
                 id_ergebnis=instanz+statistik_anfangWoche+element;
                 tolog(logging,id+" -> "+id_ergebnis);
                 statistiken_differenz_seit_datum(id,id_ergebnis,wochenanfang);
                 eigen=getState("javascript."+instance+".Statistiken.seitWochenbeginn.pv-eigenverbrauch").val;
                 gesamt=getState("javascript."+instance+".Statistiken.seitWochenbeginn.pv-gesamtproduktion").val;
                 eigen_proz=round(Number((eigen/gesamt)*100),1);
                 setState(instanz+statistik_anfangWoche+"pv-gesamtproduktion_proz",eigen_proz,true);
          
                 // seit Tagesanfang
                 var tagesanfang=datum_tagesanfang(new Date());
                 id_ergebnis=instanz+statistik_anfangTag+element;
                 tolog(logging,id+" -> "+id_ergebnis);
                 statistiken_differenz_seit_datum(id,id_ergebnis,tagesanfang);
                 eigen=getState("javascript."+instance+".Statistiken.seitTagesbeginn.pv-eigenverbrauch").val;
                 gesamt=getState("javascript."+instance+".Statistiken.seitTagesbeginn.pv-gesamtproduktion").val;
                 eigen_proz=round(Number((eigen/gesamt)*100),1);
                 setState(instanz+statistik_anfangTag+"pv-gesamtproduktion_proz",eigen_proz,true);
          
              });
          
          });
          
          function statistiken_differenz_seit_datum (id,id_ergebnis,datum) {
              var ergebnis;
              var myQuery="SELECT round((max(val)-min(val)),0) as delta  \
                           FROM iobroker.ts_number WHERE  id=(select id from iobroker.datapoints where name='"+id+"') \
                           AND (FROM_UNIXTIME(substring(ts,1,10)) >= '"+datum+"');";
                   //log(myQuery);
              sendTo('sql.0', 'query', myQuery, function (result) {
                  if (result.error) {
                      //log(result.error);
                  } else {
                      ergebnis=String(result.result[0].delta);
                      tolog(logging,id_ergebnis+" -> "+ergebnis);
                      setState(id_ergebnis,ergebnis,true);
                  }
              });
          }
          
          function statistiken_counter_7_tage (id,id_ergebnis) {
          
              var myQuery="SELECT CONCAT(MONTH(FROM_UNIXTIME(substring(ts,1,10))),'-', DAY(FROM_UNIXTIME(substring(ts,1,10)))) AS Tag, round(max(val)-min(val),0) AS Verbrauch \
                           FROM iobroker.ts_number WHERE  id=(select id from iobroker.datapoints where name='"+id+"') \
                           AND FROM_UNIXTIME(substring(ts,1,10)) BETWEEN DATE_SUB(CURRENT_DATE(),INTERVAL 7 day) \
                           AND CURRENT_DATE() \
                           GROUP BY MONTH(FROM_UNIXTIME(substring(ts,1,10))),DAY(FROM_UNIXTIME(substring(ts,1,10))) \
                           ORDER BY MONTH(FROM_UNIXTIME(substring(ts,1,10))) , DAY(FROM_UNIXTIME(substring(ts,1,10))) ;";
          
              sendTo('sql.0', 'query', myQuery, function (result) {
                  if (result.error) {
                      //log(result.error);
                  } else {
                      // show result
                      setState(id_ergebnis,JSON.stringify(result.result),true);
                  }
              });
          }
          
          function statistiken_counter_12_monate (id,id_ergebnis) {
          
              var myQuery="SELECT CONCAT(YEAR(FROM_UNIXTIME(substring(ts,1,10))),'-', MONTH(FROM_UNIXTIME(substring(ts,1,10)))) AS Monat, round(max(val)-min(val),0) AS Verbrauch \
                           FROM iobroker.ts_number WHERE  id=(select id from iobroker.datapoints where name='"+id+"') \
                           AND FROM_UNIXTIME(substring(ts,1,10)) BETWEEN DATE_SUB(CURRENT_DATE(),INTERVAL 12 month) \
                           AND CURRENT_DATE() \
                           GROUP BY YEAR(FROM_UNIXTIME(substring(ts,1,10))),MONTH(FROM_UNIXTIME(substring(ts,1,10))) \
                           ORDER BY YEAR(FROM_UNIXTIME(substring(ts,1,10))) , MONTH(FROM_UNIXTIME(substring(ts,1,10))) ;";
          
              myQuery="SELECT DATE_FORMAT(FROM_UNIXTIME(substring(ts,1,10)),'%b') AS Monat, round(max(val)-min(val),0) AS Verbrauch \
                           FROM iobroker.ts_number WHERE  id=(select id from iobroker.datapoints where name='"+id+"') \
                           AND FROM_UNIXTIME(substring(ts,1,10)) BETWEEN DATE_SUB(CURRENT_DATE(),INTERVAL 12 month) \
                           AND CURRENT_DATE() \
                           GROUP BY YEAR(FROM_UNIXTIME(substring(ts,1,10))),MONTH(FROM_UNIXTIME(substring(ts,1,10))) \
                           ORDER BY YEAR(FROM_UNIXTIME(substring(ts,1,10))) , MONTH(FROM_UNIXTIME(substring(ts,1,10))) ;";
              //log("**"+myQuery);
              sendTo('sql.0', 'query', myQuery, function (result) {
                  if (result.error) {
                      log(result.error);
                  } else {
                      // show result
                      setState(id_ergebnis,JSON.stringify(result.result),true);
                  }
              });
          }
          
          function statistiken_counter_jan_dez (id,count) {
          
              //
              // Jahr von Jan - Dez
              //
          
              var date=new Date();
              var jahr=(date).getFullYear();
              var statistik12monate_jan_dez="Monatswerte."+jahr+".";
              var id_ergebnis=instanz+statistik12monate_jan_dez+counter[count]+"_json";
          
              var namebez="monatliche Werte";
              createState(id_ergebnis, {
                      name: 'monatl. Werte '+label[count],
                      type: 'string',
                      unit: 'kWh',
              });    
          
              log("**"+id_ergebnis);
              var myQuery="SELECT YEAR(FROM_UNIXTIME(substring(ts,1,10))) AS Jahr, MONTH(FROM_UNIXTIME(substring(ts,1,10))) AS Monat, max(val)-min(val) AS Zaehlerdifferenz \
                           FROM iobroker.ts_number WHERE \
                           id=(select id from iobroker.datapoints where name='"+id+"') and \
                           YEAR(FROM_UNIXTIME(substring(ts,1,10)))=YEAR(Now()) GROUP BY Jahr,Monat ORDER BY Jahr, Monat ;";
          
                 myQuery="SELECT MONTH(FROM_UNIXTIME(substring(ts,1,10))) AS Monat, \
                            ROUND(max(val)-min(val),2) AS Zaehlerdifferenz FROM iobroker.ts_number \
                            WHERE id=(select id from iobroker.datapoints where name='"+id+"') \
                            and YEAR(FROM_UNIXTIME(substring(ts,1,10)))=YEAR(Now()) GROUP BY Monat ORDER BY Monat";
          
                          // log(myQuery);
              sendTo('sql.0', 'query', myQuery, function (result) {
                  if (result.error) {
                      //log(result.error);
                  } else {
                      // show result
                      //log("**"+result.result);
                      setState(id_ergebnis,JSON.stringify(result.result),true);
                  }
              });
          }
          
          // 
          // Transformation der json für grafische auswertungen oder tabellen in vis
          //
          
          function werteAlsArray (id,id_ergebnis) {
          
              heute=new Date();
              hJahr=heute.getFullYear();
              hMonat=heute.getMonth() + 1;
          
              var ergebnis=[];
              var werte=JSON.parse(id);
              var monate=[];
          
              for (i=1; i<=12; i++) {
                  datum=minusNmonate(hJahr,hMonat,1,i);
                  var lMonat=datum.getMonth() + 1;
                  var lJahr=datum.getFullYear();
                  var verbrauchszeitraum=lJahr+"-"+lMonat;
                  var verbrauch=get_data_from_json(verbrauchszeitraum,id);
                  monate.push("'"+verbrauchszeitraum+"'");
                  if (typeof verbrauch === "undefined") {
                      verbrauch=0 ;
                  }
                  ergebnis.push(verbrauch);
                  //log("**Verbrauch "+verbrauchszeitraum+":"+verbrauch);
              }    
              ergebnis="["+String(ergebnis)+"]";
              zeitraum="["+String(monate)+"]";
              //log(zeitraum);
              //log(ergebnis);
          }   
          
          function minusNmonate(year, month, day,diff){
              var d = new Date(year, month - 1, day + 1);
              if (d.getMonth() + 1 != month){
                  d.setMonth(d.getMonth() - diff);
                  d.setDate(0);
              }
              else{
                  d.setDate(1);
                  d.setMonth(d.getMonth() - diff);
                  var m = d.getMonth();
                  d.setDate(day);
                  if(d.getMonth() != m) d.setDate(0);
              }
              return d;
          }
          
          function get_data_from_json (verbrauchszeitraum,json){
              var werte=JSON.parse(json);
              for(var i = 0; i < werte.length; i++) {
                  if(werte[i].Monat == verbrauchszeitraum) {
                      verbrauch = werte[i].Verbrauch;
                      return(verbrauch);
                  }   
              }
          }********` ******[/i][/i]******
          
          1 Reply Last reply Reply Quote 0
          • P
            pix last edited by

            Danke, ehome, ich sehe es mir an.

            Pix

            1 Reply Last reply Reply Quote 0
            • E
              ehome last edited by

              mir ist noch eingefallen, dass mein Skript ein paar, bei mir als global, definierte Funktionen nutzt:

              function datum_jahresanfang (date) {
                   return (date).getFullYear()+"-01-01";
              }
              
              function datum_monatsanfang (date) {
                   var monat=1+date.getMonth();
                   return (date).getFullYear()+"-"+monat+"-01";
              }
              
              function datum_tagesanfang (date) {
                  var jahr=(date).getFullYear();
                  var monat=1+date.getMonth();
                  var tag = date.getDate();
                  return jahr+"-"+monat+"-"+tag;
              }
              
              function datum_wochenanfang(date){
                      var iDayOfWeek = date.getDay();
                      var iDifference = date.getDate() - iDayOfWeek + (iDayOfWeek === 0 ?  -6:1);
                      var woa=new Date(date.setDate(iDifference));
                      return woa.toISOString().slice(0,10);
              } 
              
              function datum_gestern(datum){
                 var yesterday = new Date(datum.valueOf() - 1000*60*60*24);
                 return yesterday.toISOString().slice(0,10);
              }
              
              function kalenderwoche (d){
                  // Copy date so don't modify original
                  d = new Date(Date.UTC(d.getFullYear(), d.getMonth(), d.getDate()));
                  // Set to nearest Thursday: current date + 4 - current day number
                  // Make Sunday's day number 7
                  d.setUTCDate(d.getUTCDate() + 4 - (d.getUTCDay()||7));
                  // Get first day of year
                  var yearStart = new Date(Date.UTC(d.getUTCFullYear(),0,1));
                  // Calculate full weeks to nearest Thursday
                  var weekNo = Math.ceil(( ( (d - yearStart) / 86400000) + 1)/7);
                  // Return array of year and week number
                  return weekNo;
              }
              
              function currentDate2() {
                var d = new Date();
                return new Date(d.getFullYear(), d.getMonth(), d.getDate());
              }
              
              function addDate(strDate) {
                  var date = strDate.split('.');
                  var d = currentDate2();
                  d.setDate(date[0]);
                  d.setMonth(date[1]-1);
                  d.setFullYear(date[2]);
                  return d;
              }
              
              function isDateInRange(strLower, strUpper) {
                var now = new Date();
                var lower = addDate(strLower);
                var upper = addDate(strUpper);
                var inRange = false;
                if (upper > lower) inRange = (now >= lower && now <= upper) ? true : false;
                  else log('isDateInRange meldet Fehler! "von"-Datum ist nicht früher als "bis"-Datum', 'error');
               return inRange;
              }
              
              

              damit sollte das Skript dann auch funktionieren …..

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

              Support us

              ioBroker
              Community Adapters
              Donate

              873
              Online

              31.9k
              Users

              80.2k
              Topics

              1.3m
              Posts

              3
              5
              1794
              Loading More Posts
              • Oldest to Newest
              • Newest to Oldest
              • Most Votes
              Reply
              • Reply as topic
              Log in to reply
              Community
              Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
              The ioBroker Community 2014-2023
              logo