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. PV Überschuss Steckdose

NEWS

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

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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.3k

PV Überschuss Steckdose

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

    Moin, ich habe mir da mal ein Script gebastelt und wollte mal fragen ob da mal einer drüber schauen könnte der sich "richtig" auskennt und natürlich euch auch zur verfügung stellen.

    Neueste Version

    // Konfiguration
    var threshold = -1100; // Schwellenwert für den Stromüberschuss
    var averageTimeMinutes = 30; // Zeitraum für den Durchschnitt in Minuten
    var powerOnTimeoutMinutes = 30; // Timeout für das Einschalten in Minuten, X Minuten bleibt das Gerät definitiv an.
    var powerOffTimeoutMinutes = 5; // Timeout für das Ausschalten in Minuten, X Minuten bleibt das Gerät definitiv aus.
    var devicePowerConsumption = 400; // Leistungsaufnahme des Gerätes in Watt
    var debugMode = false; // Debug-Modus ein-/ausschalten
    
    var entpreller = 0;
    var istAn = false;
    var averagePower = [];
    
    on({ id: [].concat(['sonoff.0.Hichi_Stromzähler. _16_7_0']), change: 'ne' }, async (obj) => {
     var value = obj.state.val;
     var timestamp = obj.state.ts;
    
     var deltaTime = 0;
     if (averagePower.length > 0) {
       var lastTimestamp = averagePower[0].timestamp;
       deltaTime = (timestamp - lastTimestamp) / (1000 * 60);
     }
    
     var powerChange = 0;
     if (averagePower.length > 0) {
       var lastValue = averagePower[0].value;
       powerChange = value - lastValue;
     }
     var powerChangeRate = deltaTime > 0 ? powerChange / deltaTime : 0;
    
     averagePower.unshift({ value: value, timestamp: timestamp });
     if (averagePower.length > averageTimeMinutes) {
       averagePower.pop();
     }
    
     var weightedAverage = 0;
     var weightSum = 0;
     for (var i = 0; i < averagePower.length; i++) {
       var weight = Math.exp(-i / 5);
       weightedAverage += averagePower[i].value * weight;
       weightSum += weight;
     }
     var average = Math.round(weightedAverage / weightSum);
    
     // Debug-Protokollierung für den aktuellen Wert des Stromzählers
     if (debugMode) {
       console.log("Aktueller Wert des Stromzählers: " + value);
     }
    
     // Debug-Protokollierung für den Durchschnitt
     if (debugMode) {
       console.log("Durchschnitt über " + averageTimeMinutes + " Minuten: " + average);
     }
    
     if (entpreller == 0 && istAn == false && average < (threshold + devicePowerConsumption) && compareTime('10:00', '19:00', 'between', null)) {
       entpreller = 1;
       setState('sonoff.0.Gosund_16A_3.POWER', true);
       istAn = true;
       console.log('PV Steckdose ein! Stromüberschuss vorhanden.');
       sendTo("telegram.0", "send", {
         text: 'PV Steckdose ein! Stromüberschuss vorhanden.'
       });
       setTimeout(() => {
         entpreller = 0;
       }, powerOnTimeoutMinutes * 60000); // Umwandlung von Minuten in Millisekunden
     }
    
     if (entpreller == 0 && istAn == true && average > (threshold - devicePowerConsumption)) {
       entpreller = 1;
       setState('sonoff.0.Gosund_16A_3.POWER', false);
       istAn = false;
       console.log('PV Steckdose aus! Kein Stromüberschuss vorhanden.');
       sendTo("telegram.0", "send", {
         text: 'PV Steckdose aus! Kein Stromüberschuss vorhanden.'
       });
       setTimeout(() => {
         entpreller = 0;
       }, powerOffTimeoutMinutes * 60000); // Umwandlung von Minuten in Millisekunden
     }
    });
    
    

    Alte Version

    // Konfiguration
    var threshold = -1500; // Schwellenwert für den Stromüberschuss
    var averageTimeMinutes = 45; // Zeitraum für den Durchschnitt in Minuten
    var powerOnTimeoutMinutes = 30; // Timeout für das Einschalten in Minuten, X Minuten bleibt das Gerät definitiv an.
    var powerOffTimeoutMinutes = 5; // Timeout für das Ausschalten in Minuten, X Minuten bleibt das Gerät definitiv aus.
    var debugMode = false; // Debug-Modus ein-/ausschalten
    
    
    var entpreller, istAn, timeout, timeout2;
    var averagePower = []; // Array zur Speicherung der letzten Durchschnittszeit Leistungswerte
    entpreller = 0;
    istAn = false;
    
    on({ id: [].concat(['sonoff.0.Hichi_Stromzähler. _16_7_0']), change: 'ne' }, async (obj) => {
      let value = obj.state.val;
      let oldValue = obj.oldState.val;
      
      // Debug-Protokollierung für den aktuellen Wert des Stromzählers
      if (debugMode) {
        console.log("Aktueller Wert des Stromzählers: " + getState('sonoff.0.Hichi_Stromzähler. _16_7_0').val);
      }
      
      // Hinzufügen des aktuellen Werts zum Durchschnittsarray
      averagePower.push(value);
      if (averagePower.length > averageTimeMinutes) {
        averagePower.shift(); // Entfernen des ältesten Werts, wenn die Länge überschritten ist
      }
      
      // Berechnung des Durchschnitts und Rundung auf ganze Zahl
      let average = Math.round(averagePower.reduce((acc, curr) => acc + curr, 0) / averagePower.length);
      
      // Debug-Protokollierung für den Durchschnitt
      if (debugMode) {
        console.log("Durchschnitt über " + averageTimeMinutes + " Minuten: " + average);
      }
      
      if ((entpreller == 0 && istAn == false && average < threshold && compareTime('10:00', '19:00', 'between', null))) {
        entpreller = 1;
        setState('sonoff.0.Gosund_16A_3.POWER' /* Gosund_16A_3 POWER */, true);
        istAn = true;
        console.log('PV Steckdose ein! Stromüberschuss vorhanden.');
        sendTo("telegram.0", "send", {
            text: 'PV Steckdose ein! Stromüberschuss vorhanden.'
        });
        timeout = setTimeout(async () => {
          timeout = null;
          entpreller = 0;
        }, powerOnTimeoutMinutes * 60000); // Umwandlung von Minuten in Millisekunden
      }
      
      if ((entpreller == 0 && istAn == true && average > threshold)) {
        entpreller = 1;
        setState('sonoff.0.Gosund_16A_3.POWER' /* Gosund_16A_3 POWER */, false);
        istAn = false;
        console.log('PV Steckdose aus! Kein Stromüberschuss vorhanden.');
        sendTo("telegram.0", "send", {
            text: 'PV Steckdose aus! Kein Stromüberschuss vorhanden.'
        });
        timeout2 = setTimeout(async () => {
          timeout2 = null;
          entpreller = 0;
        }, powerOffTimeoutMinutes * 60000); // Umwandlung von Minuten in Millisekunden
      }
    });
    
    

    Es soll wenn ich Überschuss habe eine Steckdose einschalten oder wenn ich zu wenig habe diese wieder ausschalten.
    Paar Timeouts und den Durchschnittswert sollen verhindern das sich das Gerät andauernd an und aus schaltet. Nicht jede Wolke soll das können sondern nur langanhaltendes schlechtes Wetter :grinning:

    Was haltet Ihr davon und habt ihr anregungen?

    Gruß Alex

    Gruß Alex

    Rene55R paul53P 2 Antworten Letzte Antwort
    0
    • kmxakK kmxak

      Moin, ich habe mir da mal ein Script gebastelt und wollte mal fragen ob da mal einer drüber schauen könnte der sich "richtig" auskennt und natürlich euch auch zur verfügung stellen.

      Neueste Version

      // Konfiguration
      var threshold = -1100; // Schwellenwert für den Stromüberschuss
      var averageTimeMinutes = 30; // Zeitraum für den Durchschnitt in Minuten
      var powerOnTimeoutMinutes = 30; // Timeout für das Einschalten in Minuten, X Minuten bleibt das Gerät definitiv an.
      var powerOffTimeoutMinutes = 5; // Timeout für das Ausschalten in Minuten, X Minuten bleibt das Gerät definitiv aus.
      var devicePowerConsumption = 400; // Leistungsaufnahme des Gerätes in Watt
      var debugMode = false; // Debug-Modus ein-/ausschalten
      
      var entpreller = 0;
      var istAn = false;
      var averagePower = [];
      
      on({ id: [].concat(['sonoff.0.Hichi_Stromzähler. _16_7_0']), change: 'ne' }, async (obj) => {
       var value = obj.state.val;
       var timestamp = obj.state.ts;
      
       var deltaTime = 0;
       if (averagePower.length > 0) {
         var lastTimestamp = averagePower[0].timestamp;
         deltaTime = (timestamp - lastTimestamp) / (1000 * 60);
       }
      
       var powerChange = 0;
       if (averagePower.length > 0) {
         var lastValue = averagePower[0].value;
         powerChange = value - lastValue;
       }
       var powerChangeRate = deltaTime > 0 ? powerChange / deltaTime : 0;
      
       averagePower.unshift({ value: value, timestamp: timestamp });
       if (averagePower.length > averageTimeMinutes) {
         averagePower.pop();
       }
      
       var weightedAverage = 0;
       var weightSum = 0;
       for (var i = 0; i < averagePower.length; i++) {
         var weight = Math.exp(-i / 5);
         weightedAverage += averagePower[i].value * weight;
         weightSum += weight;
       }
       var average = Math.round(weightedAverage / weightSum);
      
       // Debug-Protokollierung für den aktuellen Wert des Stromzählers
       if (debugMode) {
         console.log("Aktueller Wert des Stromzählers: " + value);
       }
      
       // Debug-Protokollierung für den Durchschnitt
       if (debugMode) {
         console.log("Durchschnitt über " + averageTimeMinutes + " Minuten: " + average);
       }
      
       if (entpreller == 0 && istAn == false && average < (threshold + devicePowerConsumption) && compareTime('10:00', '19:00', 'between', null)) {
         entpreller = 1;
         setState('sonoff.0.Gosund_16A_3.POWER', true);
         istAn = true;
         console.log('PV Steckdose ein! Stromüberschuss vorhanden.');
         sendTo("telegram.0", "send", {
           text: 'PV Steckdose ein! Stromüberschuss vorhanden.'
         });
         setTimeout(() => {
           entpreller = 0;
         }, powerOnTimeoutMinutes * 60000); // Umwandlung von Minuten in Millisekunden
       }
      
       if (entpreller == 0 && istAn == true && average > (threshold - devicePowerConsumption)) {
         entpreller = 1;
         setState('sonoff.0.Gosund_16A_3.POWER', false);
         istAn = false;
         console.log('PV Steckdose aus! Kein Stromüberschuss vorhanden.');
         sendTo("telegram.0", "send", {
           text: 'PV Steckdose aus! Kein Stromüberschuss vorhanden.'
         });
         setTimeout(() => {
           entpreller = 0;
         }, powerOffTimeoutMinutes * 60000); // Umwandlung von Minuten in Millisekunden
       }
      });
      
      

      Alte Version

      // Konfiguration
      var threshold = -1500; // Schwellenwert für den Stromüberschuss
      var averageTimeMinutes = 45; // Zeitraum für den Durchschnitt in Minuten
      var powerOnTimeoutMinutes = 30; // Timeout für das Einschalten in Minuten, X Minuten bleibt das Gerät definitiv an.
      var powerOffTimeoutMinutes = 5; // Timeout für das Ausschalten in Minuten, X Minuten bleibt das Gerät definitiv aus.
      var debugMode = false; // Debug-Modus ein-/ausschalten
      
      
      var entpreller, istAn, timeout, timeout2;
      var averagePower = []; // Array zur Speicherung der letzten Durchschnittszeit Leistungswerte
      entpreller = 0;
      istAn = false;
      
      on({ id: [].concat(['sonoff.0.Hichi_Stromzähler. _16_7_0']), change: 'ne' }, async (obj) => {
        let value = obj.state.val;
        let oldValue = obj.oldState.val;
        
        // Debug-Protokollierung für den aktuellen Wert des Stromzählers
        if (debugMode) {
          console.log("Aktueller Wert des Stromzählers: " + getState('sonoff.0.Hichi_Stromzähler. _16_7_0').val);
        }
        
        // Hinzufügen des aktuellen Werts zum Durchschnittsarray
        averagePower.push(value);
        if (averagePower.length > averageTimeMinutes) {
          averagePower.shift(); // Entfernen des ältesten Werts, wenn die Länge überschritten ist
        }
        
        // Berechnung des Durchschnitts und Rundung auf ganze Zahl
        let average = Math.round(averagePower.reduce((acc, curr) => acc + curr, 0) / averagePower.length);
        
        // Debug-Protokollierung für den Durchschnitt
        if (debugMode) {
          console.log("Durchschnitt über " + averageTimeMinutes + " Minuten: " + average);
        }
        
        if ((entpreller == 0 && istAn == false && average < threshold && compareTime('10:00', '19:00', 'between', null))) {
          entpreller = 1;
          setState('sonoff.0.Gosund_16A_3.POWER' /* Gosund_16A_3 POWER */, true);
          istAn = true;
          console.log('PV Steckdose ein! Stromüberschuss vorhanden.');
          sendTo("telegram.0", "send", {
              text: 'PV Steckdose ein! Stromüberschuss vorhanden.'
          });
          timeout = setTimeout(async () => {
            timeout = null;
            entpreller = 0;
          }, powerOnTimeoutMinutes * 60000); // Umwandlung von Minuten in Millisekunden
        }
        
        if ((entpreller == 0 && istAn == true && average > threshold)) {
          entpreller = 1;
          setState('sonoff.0.Gosund_16A_3.POWER' /* Gosund_16A_3 POWER */, false);
          istAn = false;
          console.log('PV Steckdose aus! Kein Stromüberschuss vorhanden.');
          sendTo("telegram.0", "send", {
              text: 'PV Steckdose aus! Kein Stromüberschuss vorhanden.'
          });
          timeout2 = setTimeout(async () => {
            timeout2 = null;
            entpreller = 0;
          }, powerOffTimeoutMinutes * 60000); // Umwandlung von Minuten in Millisekunden
        }
      });
      
      

      Es soll wenn ich Überschuss habe eine Steckdose einschalten oder wenn ich zu wenig habe diese wieder ausschalten.
      Paar Timeouts und den Durchschnittswert sollen verhindern das sich das Gerät andauernd an und aus schaltet. Nicht jede Wolke soll das können sondern nur langanhaltendes schlechtes Wetter :grinning:

      Was haltet Ihr davon und habt ihr anregungen?

      Gruß Alex

      Rene55R Offline
      Rene55R Offline
      Rene55
      schrieb am zuletzt editiert von
      #2

      @kmxak Hallo Alex, was hast du mit der Steckdose vor? Strom verbraten?

      Ich hab es noch nicht komplett durchgesehen aber schau mal nach 'sonoff.0.Hichi_Stromzähler. _16_7_0'. Da ist ein Blank drin - scheint mir nicht richtig.

      Host: Fujitsu Intel(R) Pentium(R) CPU G4560T, 32 GB RAM, Proxmox 8.x + lxc Ubuntu 22.04
      ioBroker (8 GB RAM) Node.js: 20.19.1, NPM: 10.8.2, js-Controller: 7.0.6, Admin: 7.6.3
      Wetterstation: Froggit WH3000SE V1.6.6

      kmxakK 1 Antwort Letzte Antwort
      0
      • Rene55R Rene55

        @kmxak Hallo Alex, was hast du mit der Steckdose vor? Strom verbraten?

        Ich hab es noch nicht komplett durchgesehen aber schau mal nach 'sonoff.0.Hichi_Stromzähler. _16_7_0'. Da ist ein Blank drin - scheint mir nicht richtig.

        kmxakK Offline
        kmxakK Offline
        kmxak
        Most Active
        schrieb am zuletzt editiert von
        #3

        @rene55 moin, doch das ist richtig. Muss mal in Tasmota schauen ob da was falsch ist.

        Ich schalte damit einen Entfeuchter der im Keller steht. Es ist nicht unbedingt nötig diesen zu Entfeuchten aber dort ist ein Gästezimmer mit Bett und bevor da etwas am stocken ist schalte ich den ab und zu an. Und nun halt immer mit Stromüberschuss.

        Gruß Alex

        da_WoodyD 1 Antwort Letzte Antwort
        -1
        • kmxakK kmxak

          @rene55 moin, doch das ist richtig. Muss mal in Tasmota schauen ob da was falsch ist.

          Ich schalte damit einen Entfeuchter der im Keller steht. Es ist nicht unbedingt nötig diesen zu Entfeuchten aber dort ist ein Gästezimmer mit Bett und bevor da etwas am stocken ist schalte ich den ab und zu an. Und nun halt immer mit Stromüberschuss.

          da_WoodyD Online
          da_WoodyD Online
          da_Woody
          schrieb am zuletzt editiert von
          #4

          @kmxak Leerstellen in DPs sind selten gut...

          gruß vom Woody
          HAPPINESS is not a DESTINATION, it's a WAY of LIFE!

          1 Antwort Letzte Antwort
          0
          • kmxakK kmxak

            Moin, ich habe mir da mal ein Script gebastelt und wollte mal fragen ob da mal einer drüber schauen könnte der sich "richtig" auskennt und natürlich euch auch zur verfügung stellen.

            Neueste Version

            // Konfiguration
            var threshold = -1100; // Schwellenwert für den Stromüberschuss
            var averageTimeMinutes = 30; // Zeitraum für den Durchschnitt in Minuten
            var powerOnTimeoutMinutes = 30; // Timeout für das Einschalten in Minuten, X Minuten bleibt das Gerät definitiv an.
            var powerOffTimeoutMinutes = 5; // Timeout für das Ausschalten in Minuten, X Minuten bleibt das Gerät definitiv aus.
            var devicePowerConsumption = 400; // Leistungsaufnahme des Gerätes in Watt
            var debugMode = false; // Debug-Modus ein-/ausschalten
            
            var entpreller = 0;
            var istAn = false;
            var averagePower = [];
            
            on({ id: [].concat(['sonoff.0.Hichi_Stromzähler. _16_7_0']), change: 'ne' }, async (obj) => {
             var value = obj.state.val;
             var timestamp = obj.state.ts;
            
             var deltaTime = 0;
             if (averagePower.length > 0) {
               var lastTimestamp = averagePower[0].timestamp;
               deltaTime = (timestamp - lastTimestamp) / (1000 * 60);
             }
            
             var powerChange = 0;
             if (averagePower.length > 0) {
               var lastValue = averagePower[0].value;
               powerChange = value - lastValue;
             }
             var powerChangeRate = deltaTime > 0 ? powerChange / deltaTime : 0;
            
             averagePower.unshift({ value: value, timestamp: timestamp });
             if (averagePower.length > averageTimeMinutes) {
               averagePower.pop();
             }
            
             var weightedAverage = 0;
             var weightSum = 0;
             for (var i = 0; i < averagePower.length; i++) {
               var weight = Math.exp(-i / 5);
               weightedAverage += averagePower[i].value * weight;
               weightSum += weight;
             }
             var average = Math.round(weightedAverage / weightSum);
            
             // Debug-Protokollierung für den aktuellen Wert des Stromzählers
             if (debugMode) {
               console.log("Aktueller Wert des Stromzählers: " + value);
             }
            
             // Debug-Protokollierung für den Durchschnitt
             if (debugMode) {
               console.log("Durchschnitt über " + averageTimeMinutes + " Minuten: " + average);
             }
            
             if (entpreller == 0 && istAn == false && average < (threshold + devicePowerConsumption) && compareTime('10:00', '19:00', 'between', null)) {
               entpreller = 1;
               setState('sonoff.0.Gosund_16A_3.POWER', true);
               istAn = true;
               console.log('PV Steckdose ein! Stromüberschuss vorhanden.');
               sendTo("telegram.0", "send", {
                 text: 'PV Steckdose ein! Stromüberschuss vorhanden.'
               });
               setTimeout(() => {
                 entpreller = 0;
               }, powerOnTimeoutMinutes * 60000); // Umwandlung von Minuten in Millisekunden
             }
            
             if (entpreller == 0 && istAn == true && average > (threshold - devicePowerConsumption)) {
               entpreller = 1;
               setState('sonoff.0.Gosund_16A_3.POWER', false);
               istAn = false;
               console.log('PV Steckdose aus! Kein Stromüberschuss vorhanden.');
               sendTo("telegram.0", "send", {
                 text: 'PV Steckdose aus! Kein Stromüberschuss vorhanden.'
               });
               setTimeout(() => {
                 entpreller = 0;
               }, powerOffTimeoutMinutes * 60000); // Umwandlung von Minuten in Millisekunden
             }
            });
            
            

            Alte Version

            // Konfiguration
            var threshold = -1500; // Schwellenwert für den Stromüberschuss
            var averageTimeMinutes = 45; // Zeitraum für den Durchschnitt in Minuten
            var powerOnTimeoutMinutes = 30; // Timeout für das Einschalten in Minuten, X Minuten bleibt das Gerät definitiv an.
            var powerOffTimeoutMinutes = 5; // Timeout für das Ausschalten in Minuten, X Minuten bleibt das Gerät definitiv aus.
            var debugMode = false; // Debug-Modus ein-/ausschalten
            
            
            var entpreller, istAn, timeout, timeout2;
            var averagePower = []; // Array zur Speicherung der letzten Durchschnittszeit Leistungswerte
            entpreller = 0;
            istAn = false;
            
            on({ id: [].concat(['sonoff.0.Hichi_Stromzähler. _16_7_0']), change: 'ne' }, async (obj) => {
              let value = obj.state.val;
              let oldValue = obj.oldState.val;
              
              // Debug-Protokollierung für den aktuellen Wert des Stromzählers
              if (debugMode) {
                console.log("Aktueller Wert des Stromzählers: " + getState('sonoff.0.Hichi_Stromzähler. _16_7_0').val);
              }
              
              // Hinzufügen des aktuellen Werts zum Durchschnittsarray
              averagePower.push(value);
              if (averagePower.length > averageTimeMinutes) {
                averagePower.shift(); // Entfernen des ältesten Werts, wenn die Länge überschritten ist
              }
              
              // Berechnung des Durchschnitts und Rundung auf ganze Zahl
              let average = Math.round(averagePower.reduce((acc, curr) => acc + curr, 0) / averagePower.length);
              
              // Debug-Protokollierung für den Durchschnitt
              if (debugMode) {
                console.log("Durchschnitt über " + averageTimeMinutes + " Minuten: " + average);
              }
              
              if ((entpreller == 0 && istAn == false && average < threshold && compareTime('10:00', '19:00', 'between', null))) {
                entpreller = 1;
                setState('sonoff.0.Gosund_16A_3.POWER' /* Gosund_16A_3 POWER */, true);
                istAn = true;
                console.log('PV Steckdose ein! Stromüberschuss vorhanden.');
                sendTo("telegram.0", "send", {
                    text: 'PV Steckdose ein! Stromüberschuss vorhanden.'
                });
                timeout = setTimeout(async () => {
                  timeout = null;
                  entpreller = 0;
                }, powerOnTimeoutMinutes * 60000); // Umwandlung von Minuten in Millisekunden
              }
              
              if ((entpreller == 0 && istAn == true && average > threshold)) {
                entpreller = 1;
                setState('sonoff.0.Gosund_16A_3.POWER' /* Gosund_16A_3 POWER */, false);
                istAn = false;
                console.log('PV Steckdose aus! Kein Stromüberschuss vorhanden.');
                sendTo("telegram.0", "send", {
                    text: 'PV Steckdose aus! Kein Stromüberschuss vorhanden.'
                });
                timeout2 = setTimeout(async () => {
                  timeout2 = null;
                  entpreller = 0;
                }, powerOffTimeoutMinutes * 60000); // Umwandlung von Minuten in Millisekunden
              }
            });
            
            

            Es soll wenn ich Überschuss habe eine Steckdose einschalten oder wenn ich zu wenig habe diese wieder ausschalten.
            Paar Timeouts und den Durchschnittswert sollen verhindern das sich das Gerät andauernd an und aus schaltet. Nicht jede Wolke soll das können sondern nur langanhaltendes schlechtes Wetter :grinning:

            Was haltet Ihr davon und habt ihr anregungen?

            Gruß Alex

            paul53P Offline
            paul53P Offline
            paul53
            schrieb am zuletzt editiert von paul53
            #5

            @kmxak sagte: Was haltet Ihr davon und habt ihr anregungen?

            Da der Entfeuchter durch Ein-/Ausschalten auf den PV-Überschuss zurück wirkt, muss man eine Hysterese vorsehen, die etwas größer ist als die Leistungsaufnahme des Entfeuchters.

            Prinzip in Blockly:

            Blockly_temp.JPG

            Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
            Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

            kmxakK 1 Antwort Letzte Antwort
            0
            • paul53P paul53

              @kmxak sagte: Was haltet Ihr davon und habt ihr anregungen?

              Da der Entfeuchter durch Ein-/Ausschalten auf den PV-Überschuss zurück wirkt, muss man eine Hysterese vorsehen, die etwas größer ist als die Leistungsaufnahme des Entfeuchters.

              Prinzip in Blockly:

              Blockly_temp.JPG

              kmxakK Offline
              kmxakK Offline
              kmxak
              Most Active
              schrieb am zuletzt editiert von
              #6

              @paul53

              soetwas?

              // Konfiguration
              var threshold = -1500; // Schwellenwert für den Stromüberschuss
              var averageTimeMinutes = 45; // Zeitraum für den Durchschnitt in Minuten
              var powerOnTimeoutMinutes = 30; // Timeout für das Einschalten in Minuten, X Minuten bleibt das Gerät definitiv an.
              var powerOffTimeoutMinutes = 5; // Timeout für das Ausschalten in Minuten, X Minuten bleibt das Gerät definitiv aus.
              var devicePowerConsumption = 400; // Leistungsaufnahme des Gerätes in Watt
              var debugMode = false; // Debug-Modus ein-/ausschalten
              
              var entpreller = 0;
              var istAn = false;
              var averagePower = [];
              
              on({ id: [].concat(['sonoff.0.Hichi_Stromzähler. _16_7_0']), change: 'ne' }, async (obj) => {
                var value = obj.state.val;
                var oldValue = obj.oldState.val;
                
                // Debug-Protokollierung für den aktuellen Wert des Stromzählers
                if (debugMode) {
                  console.log("Aktueller Wert des Stromzählers: " + value);
                }
                
                // Hinzufügen des aktuellen Werts zum Durchschnittsarray
                averagePower.push(value);
                if (averagePower.length > averageTimeMinutes) {
                  averagePower.shift(); // Entfernen des ältesten Werts, wenn die Länge überschritten ist
                }
                
                // Berechnung des Durchschnitts und Rundung auf ganze Zahl
                var average = Math.round(averagePower.reduce((acc, curr) => acc + curr, 0) / averagePower.length);
                
                // Debug-Protokollierung für den Durchschnitt
                if (debugMode) {
                  console.log("Durchschnitt über " + averageTimeMinutes + " Minuten: " + average);
                }
                
                if (entpreller == 0 && istAn == false && average < (threshold + devicePowerConsumption) && compareTime('10:00', '19:00', 'between', null)) {
                  entpreller = 1;
                  setState('sonoff.0.Gosund_16A_3.POWER', true);
                  istAn = true;
                  console.log('PV Steckdose ein! Stromüberschuss vorhanden.');
                  sendTo("telegram.0", "send", {
                      text: 'PV Steckdose ein! Stromüberschuss vorhanden.'
                  });
                  setTimeout(() => {
                    entpreller = 0;
                  }, powerOnTimeoutMinutes * 60000); // Umwandlung von Minuten in Millisekunden
                }
                
                if (entpreller == 0 && istAn == true && average > (threshold - devicePowerConsumption)) {
                  entpreller = 1;
                  setState('sonoff.0.Gosund_16A_3.POWER', false);
                  istAn = false;
                  console.log('PV Steckdose aus! Kein Stromüberschuss vorhanden.');
                  sendTo("telegram.0", "send", {
                      text: 'PV Steckdose aus! Kein Stromüberschuss vorhanden.'
                  });
                  setTimeout(() => {
                    entpreller = 0;
                  }, powerOffTimeoutMinutes * 60000); // Umwandlung von Minuten in Millisekunden
                }
              });
              
              

              Gruß Alex

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

                nochmal eine neue Version mit einem gleitenden Durchschnitt

                // Konfiguration
                var threshold = -1100; // Schwellenwert für den Stromüberschuss
                var averageTimeMinutes = 30; // Zeitraum für den Durchschnitt in Minuten
                var powerOnTimeoutMinutes = 30; // Timeout für das Einschalten in Minuten, X Minuten bleibt das Gerät definitiv an.
                var powerOffTimeoutMinutes = 5; // Timeout für das Ausschalten in Minuten, X Minuten bleibt das Gerät definitiv aus.
                var devicePowerConsumption = 400; // Leistungsaufnahme des Gerätes in Watt
                var debugMode = false; // Debug-Modus ein-/ausschalten
                
                var entpreller = 0;
                var istAn = false;
                var averagePower = [];
                
                on({ id: [].concat(['sonoff.0.Hichi_Stromzähler. _16_7_0']), change: 'ne' }, async (obj) => {
                  var value = obj.state.val;
                  var timestamp = obj.state.ts;
                
                  var deltaTime = 0;
                  if (averagePower.length > 0) {
                    var lastTimestamp = averagePower[averagePower.length - 1].timestamp;
                    deltaTime = (timestamp - lastTimestamp) / (1000 * 60);
                  }
                
                  var powerChange = 0;
                  if (averagePower.length > 0) {
                    var lastValue = averagePower[averagePower.length - 1].value;
                    powerChange = value - lastValue;
                  }
                  var powerChangeRate = deltaTime > 0 ? powerChange / deltaTime : 0;
                
                  averagePower.push({ value: value, timestamp: timestamp });
                  if (averagePower.length > averageTimeMinutes) {
                    averagePower.shift();
                  }
                
                  var sumPowerChange = averagePower.reduce((acc, curr, index, array) => {
                    if (index < array.length - 1) {
                      return acc + (curr.value - array[index + 1].value);
                    } else {
                      return acc;
                    }
                  }, 0);
                
                  var average = Math.round(sumPowerChange / averagePower.length);
                
                  // Debug-Protokollierung für den aktuellen Wert des Stromzählers
                  if (debugMode) {
                    console.log("Aktueller Wert des Stromzählers: " + value);
                  }
                
                  // Debug-Protokollierung für den Durchschnitt
                  if (debugMode) {
                    console.log("Durchschnitt über " + averageTimeMinutes + " Minuten: " + average);
                  }
                
                  if (entpreller == 0 && istAn == false && average < (threshold + devicePowerConsumption) && compareTime('10:00', '19:00', 'between', null)) {
                    entpreller = 1;
                    setState('sonoff.0.Gosund_16A_3.POWER', true);
                    istAn = true;
                    console.log('PV Steckdose ein! Stromüberschuss vorhanden.');
                    sendTo("telegram.0", "send", {
                      text: 'PV Steckdose ein! Stromüberschuss vorhanden.'
                    });
                    setTimeout(() => {
                      entpreller = 0;
                    }, powerOnTimeoutMinutes * 60000); // Umwandlung von Minuten in Millisekunden
                  }
                
                  if (entpreller == 0 && istAn == true && average > (threshold - devicePowerConsumption)) {
                    entpreller = 1;
                    setState('sonoff.0.Gosund_16A_3.POWER', false);
                    istAn = false;
                    console.log('PV Steckdose aus! Kein Stromüberschuss vorhanden.');
                    sendTo("telegram.0", "send", {
                      text: 'PV Steckdose aus! Kein Stromüberschuss vorhanden.'
                    });
                    setTimeout(() => {
                      entpreller = 0;
                    }, powerOffTimeoutMinutes * 60000); // Umwandlung von Minuten in Millisekunden
                  }
                });
                
                

                Gruß Alex

                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

                315

                Online

                32.6k

                Benutzer

                82.3k

                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