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. [FRAGE]Verbrauchsdaten aus Basis der Daten aus History Adapter

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    17
    1
    2.1k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    936

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.2k

[FRAGE]Verbrauchsdaten aus Basis der Daten aus History Adapter

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
5 Beiträge 3 Kommentatoren 2.0k Aufrufe
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • P Offline
    P Offline
    pix
    schrieb am zuletzt editiert von
    #1

    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

    ioBroker auf Ubuntu in Proxmox (früher Mac mini (bis OS X 10.12.6 Sierra), VIS via iOS; angeschlossen: Homematic CCU2, Homepilot 1, ConBee II, einige Wemos, Sonos, Unifi CK+Protect, Homekit, Homebridge; KEIN blockly! Github-Profil

    1 Antwort Letzte Antwort
    0
    • K Offline
      K Offline
      Kueppert
      schrieb am zuletzt editiert von
      #2

      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

      UDM Pro, Intel NUC - ioBroker in Proxmox-VM, PiHole+Grafana&Influx+TasmoAdmin in LXCs, Raspberry Pi3 (als CCU), Zigbee-Stick Sonoff, Synology DS918+

      1 Antwort Letzte Antwort
      0
      • E Offline
        E Offline
        ehome
        schrieb am zuletzt editiert von
        #3

        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 Antwort Letzte Antwort
        0
        • P Offline
          P Offline
          pix
          schrieb am zuletzt editiert von
          #4

          Danke, ehome, ich sehe es mir an.

          Pix

          ioBroker auf Ubuntu in Proxmox (früher Mac mini (bis OS X 10.12.6 Sierra), VIS via iOS; angeschlossen: Homematic CCU2, Homepilot 1, ConBee II, einige Wemos, Sonos, Unifi CK+Protect, Homekit, Homebridge; KEIN blockly! Github-Profil

          1 Antwort Letzte Antwort
          0
          • E Offline
            E Offline
            ehome
            schrieb am zuletzt editiert von
            #5

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

            570

            Online

            32.6k

            Benutzer

            82.2k

            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