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. E3DC Hauskraftwerk steuern

NEWS

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

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

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

E3DC Hauskraftwerk steuern

Geplant Angeheftet Gesperrt Verschoben JavaScript
3.5k Beiträge 70 Kommentatoren 1.6m Aufrufe 61 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.
  • A ArnoD

    @smartboart sagte in E3DC Hauskraftwerk steuern:

    ich habe mir jetzt nen Modbuszähler als Erzeugungszähler zusätzlich eingebaut...
    Dafür habe ich ein Script geschrieben, welches täglich den Ertrag hochzählt, wie sourceanalytics. Wegen einem State wollte ich keinen ganzen Adapter laufen lassen.

    Würdest du mir dass Script zur Verfügung stellen ? Würde auch gerne ohne zusätzlichen sourceanalytics Adapter die Werte hochzählen. :-)

    smartboartS Offline
    smartboartS Offline
    smartboart
    schrieb am zuletzt editiert von
    #235

    @ArnoD sagte in E3DC Hauskraftwerk steuern:

    @smartboart sagte in E3DC Hauskraftwerk steuern:

    ich habe mir jetzt nen Modbuszähler als Erzeugungszähler zusätzlich eingebaut...
    Dafür habe ich ein Script geschrieben, welches täglich den Ertrag hochzählt, wie sourceanalytics. Wegen einem State wollte ich keinen ganzen Adapter laufen lassen.

    Würdest du mir dass Script zur Verfügung stellen ? Würde auch gerne ohne zusätzlichen sourceanalytics Adapter die Werte hochzählen. :-)

    klar...
    heute ist der state den ich für dein script verwende...
    javascript.1.PVAnlage.Ertrag.E3DC.Solarproduktion.heute

    Tag ist quasi dann der komplette Tageswert nach 00:01Uhr.
    genauso für Woche , Monat und Jahr...Immer der laufende Wert und dann am Ende der Wert von gestern, letze Woche, letzter Monat, letztes Jahr.

    createState('javascript.1.PVAnlage.Ertrag.E3DC.Solarproduktion.heute',    0, {name: 'lezter Zählerstand heute', type: 'number', unit: 'kW/h' });
    createState('javascript.1.PVAnlage.Ertrag.E3DC.Solarproduktion.tag',    0, {name: 'Zählerstand gestern', type: 'number', unit: 'kW/h' });
    
    createState('javascript.1.PVAnlage.Ertrag.E3DC.Solarproduktion.aktuellewoche',    0, {name: 'lezter Zählerstand laufende Woche', type: 'number', unit: 'kW/h' });
    createState('javascript.1.PVAnlage.Ertrag.E3DC.Solarproduktion.woche',    0, {name: 'Zählerstand Woche', type: 'number', unit: 'kW/h' });
    
    createState('javascript.1.PVAnlage.Ertrag.E3DC.Solarproduktion.aktuellermonat',    0, {name: 'lezter Zählerstand laufender Monat', type: 'number', unit: 'kW/h' });
    createState('javascript.1.PVAnlage.Ertrag.E3DC.Solarproduktion.monat',    0, {name: 'Zählerstand Monat', type: 'number', unit: 'kW/h' });
    
    createState('javascript.1.PVAnlage.Ertrag.E3DC.Solarproduktion.aktuellesjahr',    0, {name: 'lezter Zählerstand laufendes Jahr', type: 'number', unit: 'kW/h' });
    createState('javascript.1.PVAnlage.Ertrag.E3DC.Solarproduktion.jahr',    0, {name: 'Zählerstand Jahr', type: 'number', unit: 'kW/h' });
    
    createState('javascript.1.PVAnlage.Ertrag.E3DC.Solarproduktion.Alt',    0, {name: 'Zählerstand Alt', type: 'number', unit: 'kW/h' });
    
    
    var debug = true;
    var logging = true;
    var difference = null;
    
    const idSolarproduktionGesamt = 'modbus.0.holdingRegisters.12288_E3DC_Lieferung Summe'/*12288 E3dc Lieferung Summe*/;
    
    const idSolarproduktionHeute = 'javascript.1.PVAnlage.Ertrag.E3DC.Solarproduktion.heute';
    const idSolarproduktionGestern = 'javascript.1.PVAnlage.Ertrag.E3DC.Solarproduktion.tag';
    
    const idSolarproduktionaktuellewoche = 'javascript.1.PVAnlage.Ertrag.E3DC.Solarproduktion.aktuellewoche';
    const idSolarproduktionwoche = 'javascript.1.PVAnlage.Ertrag.E3DC.Solarproduktion.woche';
    
    const idSolarproduktionaktuellermonat = 'javascript.1.PVAnlage.Ertrag.E3DC.Solarproduktion.aktuellermonat';
    const idSolarproduktionmonat = 'javascript.1.PVAnlage.Ertrag.E3DC.Solarproduktion.monat';
    
    const idSolarproduktionaktuellesjahr = 'javascript.1.PVAnlage.Ertrag.E3DC.Solarproduktion.aktuellesjahr';
    const idSolarproduktionjahr = 'javascript.1.PVAnlage.Ertrag.E3DC.Solarproduktion.jahr';
    
    const idAlt = 'javascript.1.PVAnlage.Ertrag.E3DC.Solarproduktion.Alt';
    
    //scriptstart
    
    //on(idSolarproduktionGesamt, function(data) {
    schedule("*/5 * * * *", function () {
        var SolarproduktionGesamt = getState(idSolarproduktionGesamt).val;
        setState(idAlt,SolarproduktionGesamt,true);
        if(debug)log('Schedule Funktion Zähler merken u. Difference Berechnung einleiten. Aktueller Zählerstand ist: ' + SolarproduktionGesamt);
    
    });
    
    on(idAlt, function(data) {
        if(debug)log("Alter Zählerwert: " + data.oldState.val + "  aktueller Zählerwert: " + data.newState.val);
                difference = (data.newState.val - data.oldState.val); 
                setTimeout(function(){Berechnen();},200);
                if(debug)log("Differenz berechnet " + difference);  
    });
    
    //Berechne laufende Tage Wochen Monate
    function Berechnen () {    
    var heute = parseFloat(getState(idSolarproduktionHeute).val);
    var aktuellewoche = getState(idSolarproduktionaktuellewoche).val;
    var aktuellermonat = getState(idSolarproduktionaktuellermonat).val;  
    var aktuellesjahr = getState(idSolarproduktionaktuellesjahr).val;
    var SolarproduktionGesamt = getState(idSolarproduktionGesamt).val;  
    setState(idSolarproduktionHeute, Math.round((heute + difference)*100)/100,true);
    setState(idSolarproduktionaktuellewoche,Math.round((aktuellewoche + difference)*100)/100,true);
    setState(idSolarproduktionaktuellermonat,Math.round((aktuellermonat + difference)*100)/100,true); 
    setState(idSolarproduktionaktuellesjahr,Math.round((aktuellesjahr + difference)*100)/100,true); 
    setState(idAlt,SolarproduktionGesamt,true);
    if(debug)log("Zählerstand heute aktualisiert auf: " +heute );
    }
    
    // täglich um 24:03 tageszähler auf null setzen
    schedule({hour: 0, minute: 1}, function () { 
    var heute = getState(idSolarproduktionHeute).val;   
    setState(idSolarproduktionGestern,heute,true); 
    setStateDelayed(idSolarproduktionHeute,0,true,1000);
    if(logging)log("Tageszähler genullt und Tag gestern gesetzt");
    });
    
    // Sonntags um 23:58 aktuelle Woche auf 0 setzen
    schedule ("58 23 * * 0", function () { 
    var aktuellewoche = getState(idSolarproduktionaktuellewoche).val;    
    setState(idSolarproduktionwoche,aktuellewoche,true); 
    setStateDelayed(idSolarproduktionaktuellewoche,0,true,1000);
    if(logging)log("Wochenzähler genullt und letzte Woche gesetzt");
    });
    
    // am monatsanfang um 01:01 aktueller monat auf 0 setzen
    schedule("1 0 1 * *", function() { 
    var aktuellermonat = getState(idSolarproduktionaktuellermonat).val;    
    setState(idSolarproduktionmonat,aktuellermonat,true); 
    setStateDelayed(idSolarproduktionaktuellermonat,0,true,1000);
    if(logging)log("Monatsszähler genullt und letzzten Monat gesetzt");
    });
    
    // am 1.Januar um 00:01 aktuelles jahr auf 0 setzen
    schedule("1 0 1 1 *", function() { 
    var aktuellesjahr = getState(idSolarproduktionaktuellesjahr).val;    
    setState(idSolarproduktionjahr,aktuellesjahr,true); 
    setStateDelayed(idSolarproduktionaktuellesjahr,0,true,1000);
    if(logging)log("Jahressszähler genullt und letzztes Jahr gesetzt");
    });
    
    
    smartboartS A 2 Antworten Letzte Antwort
    0
    • smartboartS smartboart

      @ArnoD sagte in E3DC Hauskraftwerk steuern:

      @smartboart sagte in E3DC Hauskraftwerk steuern:

      ich habe mir jetzt nen Modbuszähler als Erzeugungszähler zusätzlich eingebaut...
      Dafür habe ich ein Script geschrieben, welches täglich den Ertrag hochzählt, wie sourceanalytics. Wegen einem State wollte ich keinen ganzen Adapter laufen lassen.

      Würdest du mir dass Script zur Verfügung stellen ? Würde auch gerne ohne zusätzlichen sourceanalytics Adapter die Werte hochzählen. :-)

      klar...
      heute ist der state den ich für dein script verwende...
      javascript.1.PVAnlage.Ertrag.E3DC.Solarproduktion.heute

      Tag ist quasi dann der komplette Tageswert nach 00:01Uhr.
      genauso für Woche , Monat und Jahr...Immer der laufende Wert und dann am Ende der Wert von gestern, letze Woche, letzter Monat, letztes Jahr.

      createState('javascript.1.PVAnlage.Ertrag.E3DC.Solarproduktion.heute',    0, {name: 'lezter Zählerstand heute', type: 'number', unit: 'kW/h' });
      createState('javascript.1.PVAnlage.Ertrag.E3DC.Solarproduktion.tag',    0, {name: 'Zählerstand gestern', type: 'number', unit: 'kW/h' });
      
      createState('javascript.1.PVAnlage.Ertrag.E3DC.Solarproduktion.aktuellewoche',    0, {name: 'lezter Zählerstand laufende Woche', type: 'number', unit: 'kW/h' });
      createState('javascript.1.PVAnlage.Ertrag.E3DC.Solarproduktion.woche',    0, {name: 'Zählerstand Woche', type: 'number', unit: 'kW/h' });
      
      createState('javascript.1.PVAnlage.Ertrag.E3DC.Solarproduktion.aktuellermonat',    0, {name: 'lezter Zählerstand laufender Monat', type: 'number', unit: 'kW/h' });
      createState('javascript.1.PVAnlage.Ertrag.E3DC.Solarproduktion.monat',    0, {name: 'Zählerstand Monat', type: 'number', unit: 'kW/h' });
      
      createState('javascript.1.PVAnlage.Ertrag.E3DC.Solarproduktion.aktuellesjahr',    0, {name: 'lezter Zählerstand laufendes Jahr', type: 'number', unit: 'kW/h' });
      createState('javascript.1.PVAnlage.Ertrag.E3DC.Solarproduktion.jahr',    0, {name: 'Zählerstand Jahr', type: 'number', unit: 'kW/h' });
      
      createState('javascript.1.PVAnlage.Ertrag.E3DC.Solarproduktion.Alt',    0, {name: 'Zählerstand Alt', type: 'number', unit: 'kW/h' });
      
      
      var debug = true;
      var logging = true;
      var difference = null;
      
      const idSolarproduktionGesamt = 'modbus.0.holdingRegisters.12288_E3DC_Lieferung Summe'/*12288 E3dc Lieferung Summe*/;
      
      const idSolarproduktionHeute = 'javascript.1.PVAnlage.Ertrag.E3DC.Solarproduktion.heute';
      const idSolarproduktionGestern = 'javascript.1.PVAnlage.Ertrag.E3DC.Solarproduktion.tag';
      
      const idSolarproduktionaktuellewoche = 'javascript.1.PVAnlage.Ertrag.E3DC.Solarproduktion.aktuellewoche';
      const idSolarproduktionwoche = 'javascript.1.PVAnlage.Ertrag.E3DC.Solarproduktion.woche';
      
      const idSolarproduktionaktuellermonat = 'javascript.1.PVAnlage.Ertrag.E3DC.Solarproduktion.aktuellermonat';
      const idSolarproduktionmonat = 'javascript.1.PVAnlage.Ertrag.E3DC.Solarproduktion.monat';
      
      const idSolarproduktionaktuellesjahr = 'javascript.1.PVAnlage.Ertrag.E3DC.Solarproduktion.aktuellesjahr';
      const idSolarproduktionjahr = 'javascript.1.PVAnlage.Ertrag.E3DC.Solarproduktion.jahr';
      
      const idAlt = 'javascript.1.PVAnlage.Ertrag.E3DC.Solarproduktion.Alt';
      
      //scriptstart
      
      //on(idSolarproduktionGesamt, function(data) {
      schedule("*/5 * * * *", function () {
          var SolarproduktionGesamt = getState(idSolarproduktionGesamt).val;
          setState(idAlt,SolarproduktionGesamt,true);
          if(debug)log('Schedule Funktion Zähler merken u. Difference Berechnung einleiten. Aktueller Zählerstand ist: ' + SolarproduktionGesamt);
      
      });
      
      on(idAlt, function(data) {
          if(debug)log("Alter Zählerwert: " + data.oldState.val + "  aktueller Zählerwert: " + data.newState.val);
                  difference = (data.newState.val - data.oldState.val); 
                  setTimeout(function(){Berechnen();},200);
                  if(debug)log("Differenz berechnet " + difference);  
      });
      
      //Berechne laufende Tage Wochen Monate
      function Berechnen () {    
      var heute = parseFloat(getState(idSolarproduktionHeute).val);
      var aktuellewoche = getState(idSolarproduktionaktuellewoche).val;
      var aktuellermonat = getState(idSolarproduktionaktuellermonat).val;  
      var aktuellesjahr = getState(idSolarproduktionaktuellesjahr).val;
      var SolarproduktionGesamt = getState(idSolarproduktionGesamt).val;  
      setState(idSolarproduktionHeute, Math.round((heute + difference)*100)/100,true);
      setState(idSolarproduktionaktuellewoche,Math.round((aktuellewoche + difference)*100)/100,true);
      setState(idSolarproduktionaktuellermonat,Math.round((aktuellermonat + difference)*100)/100,true); 
      setState(idSolarproduktionaktuellesjahr,Math.round((aktuellesjahr + difference)*100)/100,true); 
      setState(idAlt,SolarproduktionGesamt,true);
      if(debug)log("Zählerstand heute aktualisiert auf: " +heute );
      }
      
      // täglich um 24:03 tageszähler auf null setzen
      schedule({hour: 0, minute: 1}, function () { 
      var heute = getState(idSolarproduktionHeute).val;   
      setState(idSolarproduktionGestern,heute,true); 
      setStateDelayed(idSolarproduktionHeute,0,true,1000);
      if(logging)log("Tageszähler genullt und Tag gestern gesetzt");
      });
      
      // Sonntags um 23:58 aktuelle Woche auf 0 setzen
      schedule ("58 23 * * 0", function () { 
      var aktuellewoche = getState(idSolarproduktionaktuellewoche).val;    
      setState(idSolarproduktionwoche,aktuellewoche,true); 
      setStateDelayed(idSolarproduktionaktuellewoche,0,true,1000);
      if(logging)log("Wochenzähler genullt und letzte Woche gesetzt");
      });
      
      // am monatsanfang um 01:01 aktueller monat auf 0 setzen
      schedule("1 0 1 * *", function() { 
      var aktuellermonat = getState(idSolarproduktionaktuellermonat).val;    
      setState(idSolarproduktionmonat,aktuellermonat,true); 
      setStateDelayed(idSolarproduktionaktuellermonat,0,true,1000);
      if(logging)log("Monatsszähler genullt und letzzten Monat gesetzt");
      });
      
      // am 1.Januar um 00:01 aktuelles jahr auf 0 setzen
      schedule("1 0 1 1 *", function() { 
      var aktuellesjahr = getState(idSolarproduktionaktuellesjahr).val;    
      setState(idSolarproduktionjahr,aktuellesjahr,true); 
      setStateDelayed(idSolarproduktionaktuellesjahr,0,true,1000);
      if(logging)log("Jahressszähler genullt und letzztes Jahr gesetzt");
      });
      
      
      smartboartS Offline
      smartboartS Offline
      smartboart
      schrieb am zuletzt editiert von
      #236

      @ArnoD
      hast du dein Tabellenscript schon gesehen..
      Hab mit Hilfe von Paul alles in ein Json gepackt und diverse Berechnungen dazu genommen. States sind auch entfallen.. Mit MaterialDesign Json List ne schöne Sache Liste füllt sich vortlaufend weiter...

      1 Antwort Letzte Antwort
      0
      • smartboartS smartboart

        @ArnoD sagte in E3DC Hauskraftwerk steuern:

        @smartboart sagte in E3DC Hauskraftwerk steuern:

        ich habe mir jetzt nen Modbuszähler als Erzeugungszähler zusätzlich eingebaut...
        Dafür habe ich ein Script geschrieben, welches täglich den Ertrag hochzählt, wie sourceanalytics. Wegen einem State wollte ich keinen ganzen Adapter laufen lassen.

        Würdest du mir dass Script zur Verfügung stellen ? Würde auch gerne ohne zusätzlichen sourceanalytics Adapter die Werte hochzählen. :-)

        klar...
        heute ist der state den ich für dein script verwende...
        javascript.1.PVAnlage.Ertrag.E3DC.Solarproduktion.heute

        Tag ist quasi dann der komplette Tageswert nach 00:01Uhr.
        genauso für Woche , Monat und Jahr...Immer der laufende Wert und dann am Ende der Wert von gestern, letze Woche, letzter Monat, letztes Jahr.

        createState('javascript.1.PVAnlage.Ertrag.E3DC.Solarproduktion.heute',    0, {name: 'lezter Zählerstand heute', type: 'number', unit: 'kW/h' });
        createState('javascript.1.PVAnlage.Ertrag.E3DC.Solarproduktion.tag',    0, {name: 'Zählerstand gestern', type: 'number', unit: 'kW/h' });
        
        createState('javascript.1.PVAnlage.Ertrag.E3DC.Solarproduktion.aktuellewoche',    0, {name: 'lezter Zählerstand laufende Woche', type: 'number', unit: 'kW/h' });
        createState('javascript.1.PVAnlage.Ertrag.E3DC.Solarproduktion.woche',    0, {name: 'Zählerstand Woche', type: 'number', unit: 'kW/h' });
        
        createState('javascript.1.PVAnlage.Ertrag.E3DC.Solarproduktion.aktuellermonat',    0, {name: 'lezter Zählerstand laufender Monat', type: 'number', unit: 'kW/h' });
        createState('javascript.1.PVAnlage.Ertrag.E3DC.Solarproduktion.monat',    0, {name: 'Zählerstand Monat', type: 'number', unit: 'kW/h' });
        
        createState('javascript.1.PVAnlage.Ertrag.E3DC.Solarproduktion.aktuellesjahr',    0, {name: 'lezter Zählerstand laufendes Jahr', type: 'number', unit: 'kW/h' });
        createState('javascript.1.PVAnlage.Ertrag.E3DC.Solarproduktion.jahr',    0, {name: 'Zählerstand Jahr', type: 'number', unit: 'kW/h' });
        
        createState('javascript.1.PVAnlage.Ertrag.E3DC.Solarproduktion.Alt',    0, {name: 'Zählerstand Alt', type: 'number', unit: 'kW/h' });
        
        
        var debug = true;
        var logging = true;
        var difference = null;
        
        const idSolarproduktionGesamt = 'modbus.0.holdingRegisters.12288_E3DC_Lieferung Summe'/*12288 E3dc Lieferung Summe*/;
        
        const idSolarproduktionHeute = 'javascript.1.PVAnlage.Ertrag.E3DC.Solarproduktion.heute';
        const idSolarproduktionGestern = 'javascript.1.PVAnlage.Ertrag.E3DC.Solarproduktion.tag';
        
        const idSolarproduktionaktuellewoche = 'javascript.1.PVAnlage.Ertrag.E3DC.Solarproduktion.aktuellewoche';
        const idSolarproduktionwoche = 'javascript.1.PVAnlage.Ertrag.E3DC.Solarproduktion.woche';
        
        const idSolarproduktionaktuellermonat = 'javascript.1.PVAnlage.Ertrag.E3DC.Solarproduktion.aktuellermonat';
        const idSolarproduktionmonat = 'javascript.1.PVAnlage.Ertrag.E3DC.Solarproduktion.monat';
        
        const idSolarproduktionaktuellesjahr = 'javascript.1.PVAnlage.Ertrag.E3DC.Solarproduktion.aktuellesjahr';
        const idSolarproduktionjahr = 'javascript.1.PVAnlage.Ertrag.E3DC.Solarproduktion.jahr';
        
        const idAlt = 'javascript.1.PVAnlage.Ertrag.E3DC.Solarproduktion.Alt';
        
        //scriptstart
        
        //on(idSolarproduktionGesamt, function(data) {
        schedule("*/5 * * * *", function () {
            var SolarproduktionGesamt = getState(idSolarproduktionGesamt).val;
            setState(idAlt,SolarproduktionGesamt,true);
            if(debug)log('Schedule Funktion Zähler merken u. Difference Berechnung einleiten. Aktueller Zählerstand ist: ' + SolarproduktionGesamt);
        
        });
        
        on(idAlt, function(data) {
            if(debug)log("Alter Zählerwert: " + data.oldState.val + "  aktueller Zählerwert: " + data.newState.val);
                    difference = (data.newState.val - data.oldState.val); 
                    setTimeout(function(){Berechnen();},200);
                    if(debug)log("Differenz berechnet " + difference);  
        });
        
        //Berechne laufende Tage Wochen Monate
        function Berechnen () {    
        var heute = parseFloat(getState(idSolarproduktionHeute).val);
        var aktuellewoche = getState(idSolarproduktionaktuellewoche).val;
        var aktuellermonat = getState(idSolarproduktionaktuellermonat).val;  
        var aktuellesjahr = getState(idSolarproduktionaktuellesjahr).val;
        var SolarproduktionGesamt = getState(idSolarproduktionGesamt).val;  
        setState(idSolarproduktionHeute, Math.round((heute + difference)*100)/100,true);
        setState(idSolarproduktionaktuellewoche,Math.round((aktuellewoche + difference)*100)/100,true);
        setState(idSolarproduktionaktuellermonat,Math.round((aktuellermonat + difference)*100)/100,true); 
        setState(idSolarproduktionaktuellesjahr,Math.round((aktuellesjahr + difference)*100)/100,true); 
        setState(idAlt,SolarproduktionGesamt,true);
        if(debug)log("Zählerstand heute aktualisiert auf: " +heute );
        }
        
        // täglich um 24:03 tageszähler auf null setzen
        schedule({hour: 0, minute: 1}, function () { 
        var heute = getState(idSolarproduktionHeute).val;   
        setState(idSolarproduktionGestern,heute,true); 
        setStateDelayed(idSolarproduktionHeute,0,true,1000);
        if(logging)log("Tageszähler genullt und Tag gestern gesetzt");
        });
        
        // Sonntags um 23:58 aktuelle Woche auf 0 setzen
        schedule ("58 23 * * 0", function () { 
        var aktuellewoche = getState(idSolarproduktionaktuellewoche).val;    
        setState(idSolarproduktionwoche,aktuellewoche,true); 
        setStateDelayed(idSolarproduktionaktuellewoche,0,true,1000);
        if(logging)log("Wochenzähler genullt und letzte Woche gesetzt");
        });
        
        // am monatsanfang um 01:01 aktueller monat auf 0 setzen
        schedule("1 0 1 * *", function() { 
        var aktuellermonat = getState(idSolarproduktionaktuellermonat).val;    
        setState(idSolarproduktionmonat,aktuellermonat,true); 
        setStateDelayed(idSolarproduktionaktuellermonat,0,true,1000);
        if(logging)log("Monatsszähler genullt und letzzten Monat gesetzt");
        });
        
        // am 1.Januar um 00:01 aktuelles jahr auf 0 setzen
        schedule("1 0 1 1 *", function() { 
        var aktuellesjahr = getState(idSolarproduktionaktuellesjahr).val;    
        setState(idSolarproduktionjahr,aktuellesjahr,true); 
        setStateDelayed(idSolarproduktionaktuellesjahr,0,true,1000);
        if(logging)log("Jahressszähler genullt und letzztes Jahr gesetzt");
        });
        
        
        A Online
        A Online
        ArnoD
        schrieb am zuletzt editiert von
        #237

        @smartboart

        Super, Danke.:+1:
        Werde mich am Wochenende mal damit beschäftigen. :-)

        1 Antwort Letzte Antwort
        0
        • A ArnoD

          Warum rechnest du den nicht bei jeder Aktualisierung vom Wert dazu. ?

          S Offline
          S Offline
          stevie77
          schrieb am zuletzt editiert von
          #238

          @ArnoD sagte in E3DC Hauskraftwerk steuern:

          Warum rechnest du den nicht bei jeder Aktualisierung vom Wert dazu. ?

          Ich vermute mal, dass der Faktor bei einmal einfacher zu bestimmen ist (ist ja auch ein Annäherungsprozess) bzw. ich wollte nicht darüber nachdenken, ob es ungenauer wird, wenn ich jede Sekunde oder bei jeder Modbus-Wertänderung einen Korrekturfaktor anwende (vor allem darf ich ja nicht den Gesamtwert mehrfach multiplizieren, sondern müsste irgendwie an den Wert rankommen, der bei Sourceanalytix addiert wird). Verstehe eh nicht so genau, wie Sourceanalytix genau funktioniert, also wie da die Summe gebildet wird. War ja auch kein Problem seither, als nur einmal am Tag das Diagramm aus dem Wert aufgebaut wurde. Reicht mir auch weiterhin den Korrekturfaktor erst abends anzuwenden, vorher schaue ich sowieso nicht drauf...

          1 Antwort Letzte Antwort
          0
          • A Online
            A Online
            ArnoD
            schrieb am zuletzt editiert von
            #239

            @smartboart dein upgrade vom Tabellenscript Zählerstände ist mega :-)
            Würde es dir was ausmachen wenn ich das in das E3DC-Control Script integriere ? oder sollen die beiden lieber eigenständige Scripte bleiben ?
            Man könnte dadurch einen Monatlichen Chron Job reduzieren, da ich den Json String für das Diagramm auch monatlich speichere.

            smartboartS 1 Antwort Letzte Antwort
            0
            • S stevie77

              @stevie77 sagte in E3DC Hauskraftwerk steuern:

              Ich glaube dieser Wert, der da bei mir falsch angezeigt wird, ist der Anteil meiner 2. PV-Anlage. Warum ist mir noch nicht ganz klar...
              Hatte seither kurz vor 22 Uhr einen Korrekturfaktor auf das Ist-Ergebnis losgelassen (1.088 trifft es meist ganz gut), aber das klappt jetzt mit der neuen Version nicht mehr. Mal sehen, ob ich das gefixt bekomme.

              Okay, ich hab' mir jetzt ne Liste angelegt, was ich bei einem Update des Skripts alles ändern muss. Unter anderem ergänze ich das früher vorhandene

              schedule({hour: 22, minute: 1}, function(){makeJson();});
              

              Damit wird bei mir zum Tagesende, wenn ich mal draufschaue, wie gut die Vorhersage eingetroffen ist, nun wieder mein nach oben korrigierter Gesamterzeugungswert auch im Diagramm angezeigt.

              A Online
              A Online
              ArnoD
              schrieb am zuletzt editiert von
              #240

              @stevie77 sagte in E3DC Hauskraftwerk steuern:

              Okay, ich hab' mir jetzt ne Liste angelegt, was ich bei einem Update des Skripts alles ändern muss. Unter anderem ergänze ich das früher vorhandene

              Was musst du noch alles ändern ?
              -Werde die Abfrage um 22 Uhr wieder integrieren, da es für mich keine Rolle spielt ob diese drin ist oder nicht,
              -Ich werde auf Änderungen von beiden Zählerstände (Zähler 0 und 1) reagieren.
              Das mit dem Korrekturfaktor auf die PV-Leistung habe ich mir mal angesehen, ist nicht so einfach wie gedacht.
              Ich müsste mir jedes Mal den alten Wert merken um den Korrekturfaktor nur auf die Differenz zwischen alten und neuen Wert dazu zu rechnen. Das Problem ist das ja eine Änderung bei beiden PV-Zähler zu einer Berechnung führen würde und ich mir die jeweiligen Werte merken müsste.
              Wenn es für dich in Ordnung ist mit dem einmaligen Korrekturfaktor auf das Ist-Ergebnis um 22:00 Uhr, würde ich mir die Arbeit sparen. :-)

              S 1 Antwort Letzte Antwort
              0
              • A ArnoD

                @smartboart dein upgrade vom Tabellenscript Zählerstände ist mega :-)
                Würde es dir was ausmachen wenn ich das in das E3DC-Control Script integriere ? oder sollen die beiden lieber eigenständige Scripte bleiben ?
                Man könnte dadurch einen Monatlichen Chron Job reduzieren, da ich den Json String für das Diagramm auch monatlich speichere.

                smartboartS Offline
                smartboartS Offline
                smartboart
                schrieb am zuletzt editiert von smartboart
                #241

                @ArnoD sagte in E3DC Hauskraftwerk steuern:

                @smartboart dein upgrade vom Tabellenscript Zählerstände ist mega :-)
                Würde es dir was ausmachen wenn ich das in das E3DC-Control Script integriere ? oder sollen die beiden lieber eigenständige Scripte bleiben ?
                Man könnte dadurch einen Monatlichen Chron Job reduzieren, da ich den Json String für das Diagramm auch monatlich speichere.

                du kannst das gerne integrieren, ich sehe es aber eher als separates script. passt so besser zu meiner organisationsstruktur. Da hat aber jeder seine eigene Ordnung...

                Ich will dir da aber nicht rein reden, das ist ja deine Arbeit hier. Wenn du es drinne haben möchtest, mach es ...

                A 1 Antwort Letzte Antwort
                0
                • smartboartS smartboart

                  @ArnoD sagte in E3DC Hauskraftwerk steuern:

                  @smartboart dein upgrade vom Tabellenscript Zählerstände ist mega :-)
                  Würde es dir was ausmachen wenn ich das in das E3DC-Control Script integriere ? oder sollen die beiden lieber eigenständige Scripte bleiben ?
                  Man könnte dadurch einen Monatlichen Chron Job reduzieren, da ich den Json String für das Diagramm auch monatlich speichere.

                  du kannst das gerne integrieren, ich sehe es aber eher als separates script. passt so besser zu meiner organisationsstruktur. Da hat aber jeder seine eigene Ordnung...

                  Ich will dir da aber nicht rein reden, das ist ja deine Arbeit hier. Wenn du es drinne haben möchtest, mach es ...

                  A Online
                  A Online
                  ArnoD
                  schrieb am zuletzt editiert von
                  #242

                  @smartboart
                  Ok dann lasse ich die beiden getrennt, Ist wahrscheinlich auch besser zur Fehler Suche.

                  1 Antwort Letzte Antwort
                  0
                  • A Online
                    A Online
                    ArnoD
                    schrieb am zuletzt editiert von
                    #243

                    @smartboart Habe mal eine Frage :-)
                    Kann man mit der on() Funktion zwei States überwachen, oder muss ich mir hier was basteln?

                    S smartboartS 2 Antworten Letzte Antwort
                    0
                    • A ArnoD

                      @stevie77 sagte in E3DC Hauskraftwerk steuern:

                      Okay, ich hab' mir jetzt ne Liste angelegt, was ich bei einem Update des Skripts alles ändern muss. Unter anderem ergänze ich das früher vorhandene

                      Was musst du noch alles ändern ?
                      -Werde die Abfrage um 22 Uhr wieder integrieren, da es für mich keine Rolle spielt ob diese drin ist oder nicht,
                      -Ich werde auf Änderungen von beiden Zählerstände (Zähler 0 und 1) reagieren.
                      Das mit dem Korrekturfaktor auf die PV-Leistung habe ich mir mal angesehen, ist nicht so einfach wie gedacht.
                      Ich müsste mir jedes Mal den alten Wert merken um den Korrekturfaktor nur auf die Differenz zwischen alten und neuen Wert dazu zu rechnen. Das Problem ist das ja eine Änderung bei beiden PV-Zähler zu einer Berechnung führen würde und ich mir die jeweiligen Werte merken müsste.
                      Wenn es für dich in Ordnung ist mit dem einmaligen Korrekturfaktor auf das Ist-Ergebnis um 22:00 Uhr, würde ich mir die Arbeit sparen. :-)

                      S Offline
                      S Offline
                      stevie77
                      schrieb am zuletzt editiert von
                      #244

                      @ArnoD sagte in E3DC Hauskraftwerk steuern:

                      Was musst du noch alles ändern ?

                      • evtl. Ersetzen "if (UnloadSoC<50){UnloadSoC=50;}" durch "if (UnloadSoC<60){UnloadSoC=60;}"
                      • Zeile "sUnload[2] = AktSpeicherSoC;" ersetzen durch sUnload[2] = UnloadSoC;
                      • am Ende ergänzen: schedule({hour: 22, minute: 1}, function(){makeJson();});

                      Vielleicht kann man die ersten beiden Zeilen parametrierbar machen. Also die erste ist ja leicht direkt durch eine User-Variable variabel ;-) zu gestalten. Bei der zweiten wäre es eben eine if-Abfrage auf eine vom Benutzer zu setzende Parametereinstellung.

                      -Werde die Abfrage um 22 Uhr wieder integrieren, da es für mich keine Rolle spielt ob diese drin ist oder nicht,
                      -Ich werde auf Änderungen von beiden Zählerstände (Zähler 0 und 1) reagieren.

                      Das wäre schön, dann wird die Liste wieder kürzer.

                      Das mit dem Korrekturfaktor auf die PV-Leistung habe ich mir mal angesehen, ist nicht so einfach wie gedacht.
                      Ich müsste mir jedes Mal den alten Wert merken um den Korrekturfaktor nur auf die Differenz zwischen alten und neuen Wert dazu zu rechnen. Das Problem ist das ja eine Änderung bei beiden PV-Zähler zu einer Berechnung führen würde und ich mir die jeweiligen Werte merken müsste.

                      Genau das war meine Überlegung, weshalb ich das nur einmal am Schluss kurz vor 22 Uhr mache wenn ich sicher sein kann, dass sich der Tageswert nicht mehr ändert.

                      Wenn es für dich in Ordnung ist mit dem einmaligen Korrekturfaktor auf das Ist-Ergebnis um 22:00 Uhr, würde ich mir die Arbeit sparen. :-)

                      Ja klar, das habe ich sowieso in ein anderes Skript integriert, das läuft mit. Es funktionierte halt nur nicht mehr, weil das Diagramm um 22 Uhr nicht nochmals aktualisiert wurde.

                      1 Antwort Letzte Antwort
                      0
                      • A ArnoD

                        @smartboart Habe mal eine Frage :-)
                        Kann man mit der on() Funktion zwei States überwachen, oder muss ich mir hier was basteln?

                        S Offline
                        S Offline
                        stevie77
                        schrieb am zuletzt editiert von
                        #245

                        @ArnoD sagte in E3DC Hauskraftwerk steuern:

                        Kann man mit der on() Funktion zwei States überwachen, oder muss ich mir hier was basteln?

                        Das Problem hatte ich auch bei der Berechnung der Gesamtleistung meiner beiden PV-Anlagen als eine kurze Zahl in der immer sichtbaren Statusleiste. Also zwei Trigger für eine Funktion. Ich hab mich dann für folgendes entschieden, was gut funktioniert und recht kurz und unkompliziert ist.

                        on(powerPV1, calculateCompletePVPower);
                        on(powerPV2, calculateCompletePVPower);
                        
                        function calculateCompletePVPower() {...}
                        

                        Falls du noch was kürzeres findest, lass' es mich auch wissen. :-)

                        1 Antwort Letzte Antwort
                        0
                        • A Online
                          A Online
                          ArnoD
                          schrieb am zuletzt editiert von
                          #246

                          So habe ich es erstmal auch gelöst, habe mich nur gefragt ob es hier nicht bereits ein Workaround gibt, da ich bestimmt nicht der erste bin der das benötigt.
                          Habe aber nur eine Lösung gefunden wie man eine Gruppe triggert oder alle mit der ID .State am ende. Hilft aber in meinem Fall nicht, da beides nicht zutrifft.

                          1 Antwort Letzte Antwort
                          0
                          • A Online
                            A Online
                            ArnoD
                            schrieb am zuletzt editiert von
                            #247

                            Neue Version 0.2.01 hochgeladen.

                            1 Antwort Letzte Antwort
                            0
                            • A ArnoD

                              @smartboart Habe mal eine Frage :-)
                              Kann man mit der on() Funktion zwei States überwachen, oder muss ich mir hier was basteln?

                              smartboartS Offline
                              smartboartS Offline
                              smartboart
                              schrieb am zuletzt editiert von smartboart
                              #248

                              @ArnoD
                              du kannst das über die enumeration lösen indem du beide states einer Funktion zuordnest oder eben im script über einen funktionsaufruf..

                              z.B:

                              var cacheSelectorState = $('state[state.id=*.STATE](functions="Zaehler")'); // Gewerk Zaehler
                              cacheSelectorState.on(function(obj) { // bei Zustandänderung *.STATE im Gewerk Zaehler
                              if (logging) log('Auslösender Zaehler: ' + obj.id + ': ' + obj.state.val); // Info im Log, welcher Zustand sich geändert hat
                              Berechnen(); // Funktionsaufruf
                              });
                              

                              oder

                              const id1 = '';
                              const id2 = '';
                              
                              on(id1, function(dp) {
                                 if (logging) log ('Trigger Zaehler');
                                 Berechnen();
                              });
                              
                              on(id2, function(dp) {
                                 if (logging) log ('Trigger Zaehler2');
                                 Berechnen();
                              
                              function Berechnen(){
                              }
                              
                              
                              A 1 Antwort Letzte Antwort
                              0
                              • smartboartS smartboart

                                @ArnoD
                                du kannst das über die enumeration lösen indem du beide states einer Funktion zuordnest oder eben im script über einen funktionsaufruf..

                                z.B:

                                var cacheSelectorState = $('state[state.id=*.STATE](functions="Zaehler")'); // Gewerk Zaehler
                                cacheSelectorState.on(function(obj) { // bei Zustandänderung *.STATE im Gewerk Zaehler
                                if (logging) log('Auslösender Zaehler: ' + obj.id + ': ' + obj.state.val); // Info im Log, welcher Zustand sich geändert hat
                                Berechnen(); // Funktionsaufruf
                                });
                                

                                oder

                                const id1 = '';
                                const id2 = '';
                                
                                on(id1, function(dp) {
                                   if (logging) log ('Trigger Zaehler');
                                   Berechnen();
                                });
                                
                                on(id2, function(dp) {
                                   if (logging) log ('Trigger Zaehler2');
                                   Berechnen();
                                
                                function Berechnen(){
                                }
                                
                                
                                A Online
                                A Online
                                ArnoD
                                schrieb am zuletzt editiert von
                                #249

                                @smartboart sagte in E3DC Hauskraftwerk steuern:

                                @ArnoD
                                du kannst das über die enumeration lösen indem du beide states einer Funktion zuordnest oder eben im script über einen funktionsaufruf..

                                z.B:

                                var cacheSelectorState = $('state[state.id=*.STATE](functions="Zaehler")'); // Gewerk Zaehler
                                cacheSelectorState.on(function(obj) { // bei Zustandänderung *.STATE im Gewerk Zaehler
                                if (logging) log('Auslösender Zaehler: ' + obj.id + ': ' + obj.state.val); // Info im Log, welcher Zustand sich geändert hat
                                Berechnen(); // Funktionsaufruf
                                });
                                

                                Dieses Beispiel ist interessant.
                                Wie müsste ich die folgenden Programmzeilen umschreiben ?

                                if (existsState(sPvLeistung_kWh)){
                                    on({id: sPvLeistung_kWh,change: "ne"}, function (obj){SummePvLeistung();});
                                }
                                if (existsState(sEinspeiserLeistung_kWh)){
                                    on({id: sEinspeiserLeistung_kWh,change: "ne"}, function (obj){SummePvLeistung();});	
                                }
                                

                                Verstehe die erste Zeile in deinem Beispiel noch nicht ganz.

                                smartboartS 1 Antwort Letzte Antwort
                                0
                                • A ArnoD

                                  @smartboart sagte in E3DC Hauskraftwerk steuern:

                                  @ArnoD
                                  du kannst das über die enumeration lösen indem du beide states einer Funktion zuordnest oder eben im script über einen funktionsaufruf..

                                  z.B:

                                  var cacheSelectorState = $('state[state.id=*.STATE](functions="Zaehler")'); // Gewerk Zaehler
                                  cacheSelectorState.on(function(obj) { // bei Zustandänderung *.STATE im Gewerk Zaehler
                                  if (logging) log('Auslösender Zaehler: ' + obj.id + ': ' + obj.state.val); // Info im Log, welcher Zustand sich geändert hat
                                  Berechnen(); // Funktionsaufruf
                                  });
                                  

                                  Dieses Beispiel ist interessant.
                                  Wie müsste ich die folgenden Programmzeilen umschreiben ?

                                  if (existsState(sPvLeistung_kWh)){
                                      on({id: sPvLeistung_kWh,change: "ne"}, function (obj){SummePvLeistung();});
                                  }
                                  if (existsState(sEinspeiserLeistung_kWh)){
                                      on({id: sEinspeiserLeistung_kWh,change: "ne"}, function (obj){SummePvLeistung();});	
                                  }
                                  

                                  Verstehe die erste Zeile in deinem Beispiel noch nicht ganz.

                                  smartboartS Offline
                                  smartboartS Offline
                                  smartboart
                                  schrieb am zuletzt editiert von
                                  #250

                                  @ArnoD
                                  wenn ich einen Screenshot von den beiden Objekten aus dem admin bekomme, bastle ich das zusammen.
                                  Wie gesagt beide Objekte müssen dann im Admin unter Aufzählungen dem Gewerk Zaehler zugeordnet sein.

                                  mit folgendem Script kann man prüfen ob die selektorfunktion funktioniert..

                                  const test = $ ('state[state.id=*.STATE](functions=Zaehler)');
                                  test.each(function(id,i){
                                  log(id);
                                  });
                                  
                                  A 3 Antworten Letzte Antwort
                                  0
                                  • smartboartS smartboart

                                    @ArnoD
                                    wenn ich einen Screenshot von den beiden Objekten aus dem admin bekomme, bastle ich das zusammen.
                                    Wie gesagt beide Objekte müssen dann im Admin unter Aufzählungen dem Gewerk Zaehler zugeordnet sein.

                                    mit folgendem Script kann man prüfen ob die selektorfunktion funktioniert..

                                    const test = $ ('state[state.id=*.STATE](functions=Zaehler)');
                                    test.each(function(id,i){
                                    log(id);
                                    });
                                    
                                    A Online
                                    A Online
                                    ArnoD
                                    schrieb am zuletzt editiert von
                                    #251

                                    @smartboart
                                    Du meinst in dieser Maske ?

                                    bild1.png

                                    smartboartS 1 Antwort Letzte Antwort
                                    0
                                    • smartboartS smartboart

                                      @ArnoD
                                      wenn ich einen Screenshot von den beiden Objekten aus dem admin bekomme, bastle ich das zusammen.
                                      Wie gesagt beide Objekte müssen dann im Admin unter Aufzählungen dem Gewerk Zaehler zugeordnet sein.

                                      mit folgendem Script kann man prüfen ob die selektorfunktion funktioniert..

                                      const test = $ ('state[state.id=*.STATE](functions=Zaehler)');
                                      test.each(function(id,i){
                                      log(id);
                                      });
                                      
                                      A Online
                                      A Online
                                      ArnoD
                                      schrieb am zuletzt editiert von
                                      #252

                                      @smartboart sagte in E3DC Hauskraftwerk steuern:

                                      Wie gesagt beide Objekte müssen dann im Admin unter Aufzählungen dem Gewerk Zaehler zugeordnet sein.

                                      stehe auf dem Schlauch :-)
                                      Wo kann ich das Objekt dem Gewerk Zaehler zuordnen?

                                      1 Antwort Letzte Antwort
                                      0
                                      • smartboartS smartboart

                                        @ArnoD
                                        wenn ich einen Screenshot von den beiden Objekten aus dem admin bekomme, bastle ich das zusammen.
                                        Wie gesagt beide Objekte müssen dann im Admin unter Aufzählungen dem Gewerk Zaehler zugeordnet sein.

                                        mit folgendem Script kann man prüfen ob die selektorfunktion funktioniert..

                                        const test = $ ('state[state.id=*.STATE](functions=Zaehler)');
                                        test.each(function(id,i){
                                        log(id);
                                        });
                                        
                                        A Online
                                        A Online
                                        ArnoD
                                        schrieb am zuletzt editiert von
                                        #253

                                        @smartboart

                                        ok, meinst du das ?
                                        funktioniert nur nicht.
                                        bild1.png

                                        smartboartS 1 Antwort Letzte Antwort
                                        0
                                        • A ArnoD

                                          @smartboart

                                          ok, meinst du das ?
                                          funktioniert nur nicht.
                                          bild1.png

                                          smartboartS Offline
                                          smartboartS Offline
                                          smartboart
                                          schrieb am zuletzt editiert von
                                          #254

                                          @ArnoD sagte in E3DC Hauskraftwerk steuern:

                                          @smartboart

                                          ok, meinst du das ?
                                          funktioniert nur nicht.
                                          bild1.png

                                          ja genau da

                                          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

                                          813

                                          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