Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. MarkusM

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Profile
    • Following 0
    • Followers 0
    • Topics 1
    • Posts 4
    • Best 0
    • Groups 1

    MarkusM

    @MarkusM

    Starter

    0
    Reputation
    7
    Profile views
    4
    Posts
    0
    Followers
    0
    Following
    Joined Last Online

    MarkusM Follow
    Starter

    Latest posts made by MarkusM

    • RE: PV Vario Heizer 0,5 - 3,5kW Blocky Script

      @paul53

      var Stufe, delayon, delayoff;
      
      // Beschreibe diese Funktion …
      async function Warmwasser() {
       setState('0_userdata.0.Datenpunkte.Relais_500W' /* Relais 500W */, (Stufe == 1 || Stufe == 3 || Stufe == 5 || Stufe == 7));
       setState('0_userdata.0.Datenpunkte.Relais_1000W' /* Relais 1000W */, (Stufe == 2 || Stufe == 3 || Stufe == 6 || Stufe == 7));
       setState('0_userdata.0.Datenpunkte.Relais_2000W' /* Relais 2000W */, (Stufe == 4 || Stufe == 5 || Stufe == 6 || Stufe == 7));
       await wait(10000);
      }
      
      
      Stufe = (getState('0_userdata.0.Datenpunkte.Relais_500W').val ? 1 : 0) + (getState('0_userdata.0.Datenpunkte.Relais_1000W').val ? 2 : 0) + (getState('0_userdata.0.Datenpunkte.Relais_2000W').val ? 4 : 0);
      on({ id: [].concat(['0_userdata.0.Datenpunkte.Einspeisung']), change: 'ne' }, async (obj) => {
       let value = obj.state.val;
       let oldValue = obj.oldState.val;
       if (getState('0_userdata.0.Datenpunkte.Einspeisung').val > 600) {
         (() => { if (delayon) { clearTimeout(delayon); delayon = null; }})();
       } else if (!delayon) {
         delayon = setTimeout(async () => {
           delayon = null;
           if (Stufe < 7) {
             Stufe = (typeof Stufe === 'number' ? Stufe : 0) + 1;
             await Warmwasser();
             (() => { if (delayon) { clearTimeout(delayon); delayon = null; }})();
           }
         }, 120000);
       }
       if (getState('0_userdata.0.Datenpunkte.Einspeisung').val < 10) {
         (() => { if (delayoff) { clearTimeout(delayoff); delayoff = null; }})();
       } else if (!delayoff) {
         delayoff = setTimeout(async () => {
           delayoff = null;
           if (Stufe > 0) {
             Stufe = (typeof Stufe === 'number' ? Stufe : 0) + -1;
             await Warmwasser();
             (() => { if (delayoff) { clearTimeout(delayoff); delayoff = null; }})();
           }
         }, 120000);
       }
      });
      

      Habe die Stufen ergänzt.
      Die Einspeisung ist bei mir positiv, da Netzbezug negativ.
      Oder meinst du damit was anders ?
      Timer hab ich auch schon entdeckt.

      posted in Blockly
      MarkusM
      MarkusM
    • RE: PV Vario Heizer 0,5 - 3,5kW Blocky Script

      @paul53 Zeile 42 habe ich entfernt, die lag da ausversehen noch rum.

      Die 5 Sekunden hatte ich eingestellt, da ich selbst über Datenpunkte die aktuelle Einspeisung simulieren wollte. Nur schalten die "Schalter Datenpunkte" nicht mehr ab.

      Hier noch mal in korrigiert:

      var Stufe, delayon, delayoff;
      
      // Beschreibe diese Funktion …
      async function Warmwasser() {
       setState('0_userdata.0.Datenpunkte.Relais_500W' /* Relais 500W */, (Stufe == 1 || Stufe == 3 || Stufe == 7));
       setState('0_userdata.0.Datenpunkte.Relais_1000W' /* Relais 1000W */, (Stufe == 2 || Stufe == 6 || Stufe == 7));
       setState('0_userdata.0.Datenpunkte.Relais_2000W' /* Relais 2000W */, (Stufe == 4 || Stufe == 5 || Stufe == 6 || Stufe == 7));
       await wait(10000);
      }
      
      
      Stufe = (getState('0_userdata.0.Datenpunkte.Relais_500W').val ? 1 : 0) + (getState('0_userdata.0.Datenpunkte.Relais_1000W').val ? 2 : 0) + (getState('0_userdata.0.Datenpunkte.Relais_2000W').val ? 4 : 0);
      on({ id: [].concat(['0_userdata.0.Datenpunkte.Einspeisung']), change: 'ne' }, async (obj) => {
       let value = obj.state.val;
       let oldValue = obj.oldState.val;
       if (getState('0_userdata.0.Datenpunkte.Einspeisung').val > 600) {
         (() => { if (delayon) { clearTimeout(delayon); delayon = null; }})();
       } else if (!delayon) {
         delayon = setTimeout(async () => {
           delayon = null;
           if (Stufe < 7) {
             Stufe = (typeof Stufe === 'number' ? Stufe : 0) + 1;
             await Warmwasser();
             (() => { if (delayon) { clearTimeout(delayon); delayon = null; }})();
           }
         }, 120000);
       }
       if (getState('0_userdata.0.Datenpunkte.Einspeisung').val < 10) {
         (() => { if (delayoff) { clearTimeout(delayoff); delayoff = null; }})();
       } else if (!delayoff) {
         delayoff = setTimeout(async () => {
           delayoff = null;
           if (Stufe > 0) {
             Stufe = (typeof Stufe === 'number' ? Stufe : 0) + -1;
             await Warmwasser();
             (() => { if (delayon) { clearTimeout(delayon); delayon = null; }})();
           }
         }, 120000);
       }
      });
      

      Als Blocky:


      Screenshot 2023-11-13 175552.png

      Danke auf jeden fall für deine Hilfe. Ich setze das Projekt dann in Zukunft mal um und werde berichten.

      posted in Blockly
      MarkusM
      MarkusM
    • RE: PV Vario Heizer 0,5 - 3,5kW Blocky Script

      @paul53 Danke fürs raus suchen.
      Seit Tagen hab ich sowas gesucht aber nicht gefunden.
      Hab das mal folgendermaßen angepasst

      var Stufe, delayon, delayoff;
      
      // Beschreibe diese Funktion …
      async function Warmwasser() {
       setState('0_userdata.0.Datenpunkte.Relais_500W' /* Relais 500W */, (Stufe == 1 || Stufe == 3 || Stufe == 7));
       setState('0_userdata.0.Datenpunkte.Relais_1000W' /* Relais 1000W */, (Stufe == 2 || Stufe == 6 || Stufe == 7));
       setState('0_userdata.0.Datenpunkte.Relais_2000W' /* Relais 2000W */, (Stufe == 4 || Stufe == 5 || Stufe == 6 || Stufe == 7));
       await wait(3000);
      }
      
      
      Stufe = (getState('0_userdata.0.Datenpunkte.Relais_500W').val ? 1 : 0) + (getState('0_userdata.0.Datenpunkte.Relais_1000W').val ? 2 : 0) + (getState('0_userdata.0.Datenpunkte.Relais_2000W').val ? 4 : 0);
      on({ id: [].concat(['0_userdata.0.Datenpunkte.Einspeisung']), change: 'ne' }, async (obj) => {
       let value = obj.state.val;
       let oldValue = obj.oldState.val;
       if (getState('0_userdata.0.Datenpunkte.Einspeisung').val > 600) {
         (() => { if (delayon) { clearTimeout(delayon); delayon = null; }})();
       } else if (!delayon) {
         delayon = setTimeout(async () => {
           delayon = null;
           if (Stufe < 7) {
             Stufe = (typeof Stufe === 'number' ? Stufe : 0) + 1;
             await Warmwasser();
             (() => { if (delayon) { clearTimeout(delayon); delayon = null; }})();
           }
         }, 5000);
       }
       if (getState('0_userdata.0.Datenpunkte.Einspeisung').val < 10) {
         (() => { if (delayoff) { clearTimeout(delayoff); delayoff = null; }})();
       } else if (!delayoff) {
         delayoff = setTimeout(async () => {
           delayoff = null;
           if (Stufe < 0) {
             Stufe = (typeof Stufe === 'number' ? Stufe : 0) + -1;
             await Warmwasser();
             (() => { if (delayon) { clearTimeout(delayon); delayon = null; }})();
           }
         }, 5000);
       }
      });
      
      Stufe == 7;
      

      Kann ich das jetzt irgendwie testen, da aktuell ja keine Einspeisung stattfindet?

      posted in Blockly
      MarkusM
      MarkusM
    • PV Vario Heizer 0,5 - 3,5kW Blocky Script

      Hallo zusammen,

      ich versuche gerade ein Script für ein Projekt zu erstellen.
      Und zwar geht es darum den PV Vario Heizer mit 3 Shelly Relais in jeweils 500 Watt Schritten zu steuern.
      Der Heizstab läuft mit 230 V und hat 3 einzelne Heizstäbe mit 0,5kW, 1kW und 2kW.
      Gerne würde ich die Möglichkeit nutzen mit 500 Watt mehr Netzeinspeisung auch 500 Watt mehr zu verbrauchen.
      Gemessen wird die tatsächliche Einspeisung. Somit würde sich beim zuschalten immer der Wert wieder reduzieren.
      Was ich bis jetzt habe in Blocky erstellt habe funktioniert leider nicht. Ich setze mir aktuell wegen dem Wetter ein Datenpunkt mit einer "Einspeisung" um zu testen. Aktuell ändert sich leider nichts mehr. Ich hatte es aber auch schon mal so weit, dass die Relais geschaltet haben, dann wurde aber wieder nicht abgeschaltet wenn der Wert der Einspeisung auf 0 fällt.

      Vielleicht gibt es hier jemanden der sowas schon umgesetzt hat oder besser mit Blocky umgehen kann als ich.

      Hier einmal ein Bild vom Schaltplan des Heizstabs

      Schaltplan-PV-Vario-Heizer-500-3500W-Stufen.jpg

      Hier mein Script soweit

      var my_500, my_1000, my_3500, my_1500, my_2000, my_2500, my_3000;
      
      
      my_500 = false;
      my_1000 = false;
      my_1500 = false;
      my_2000 = false;
      my_2500 = false;
      my_3000 = false;
      my_3500 = false;
      
      on({ id: [].concat(['0_userdata.0.Datenpunkte.Einspeisung']), change: 'ne' }, async (obj) => {
        let value = obj.state.val;
        let oldValue = obj.oldState.val;
        if (getState('0_userdata.0.Datenpunkte.Einspeisung').val > 800) {
          my_500 = true;
          if (getObject('0_userdata.0.Datenpunkte.Relais_500W')) {
            // 1000W
            my_1000 = true;
            my_500 = false;
          }
          if (getObject('0_userdata.0.Datenpunkte.Relais_1000W')) {
            // 1500W
            my_1500 = true;
            my_500 = true;
          }
          if (getObject('0_userdata.0.Datenpunkte.Relais_500W') && getObject('0_userdata.0.Datenpunkte.Relais_1000W')) {
            // 2000W
            my_500 = false;
            my_1000 = false;
            my_2000 = true;
          }
          if (getObject('0_userdata.0.Datenpunkte.Relais_2000W')) {
            // 2500W
            my_500 = true;
            my_1000 = false;
            my_2000 = true;
          }
          if (getObject('0_userdata.0.Datenpunkte.Relais_500W') && getObject('0_userdata.0.Datenpunkte.Relais_2000W')) {
            // 3000W
            my_500 = false;
            my_1000 = true;
            my_2000 = true;
          }
          if (getObject('0_userdata.0.Datenpunkte.Relais_1000W') && getObject('0_userdata.0.Datenpunkte.Relais_2000W')) {
            // 3500W
            my_500 = true;
            my_1000 = true;
            my_2000 = true;
          }
        } else if (getState('0_userdata.0.Datenpunkte.Einspeisung').val < 100) {
          my_3500 = false;
          if (!my_3000) {
            my_2500 = false;
          }
          if (!my_2500) {
            my_2000 = false;
          }
          if (!my_2000) {
            my_1500 = false;
          }
          if (!my_1500) {
            my_1000 = false;
          }
          if (!my_1000) {
            my_500 = false;
          }
        } else {
          my_500 = false;
          my_1000 = false;
          my_1500 = false;
          my_2000 = false;
          my_2500 = false;
          my_3000 = false;
          my_3500 = false;
        }
        if (my_500 == true) {
          setState('0_userdata.0.Datenpunkte.Relais_500W' /* Relais 500W */, my_500);
        }
        if (my_1000 == true) {
          setState('0_userdata.0.Datenpunkte.Relais_1000W' /* Relais 1000W */, my_1000);
        }
        if (my_1500 == true) {
          setState('0_userdata.0.Datenpunkte.Relais_500W' /* Relais 500W */, my_1500);
          setState('0_userdata.0.Datenpunkte.Relais_1000W' /* Relais 1000W */, my_1500);
        }
        if (my_2000 == true) {
          setState('0_userdata.0.Datenpunkte.Relais_2000W' /* Relais 2000W */, my_2000);
        }
        if (my_2500 == true) {
          setState('0_userdata.0.Datenpunkte.Relais_2000W' /* Relais 2000W */, my_2500);
          setState('0_userdata.0.Datenpunkte.Relais_500W' /* Relais 500W */, my_2500);
        }
        if (my_3000 == true) {
          setState('0_userdata.0.Datenpunkte.Relais_2000W' /* Relais 2000W */, my_3000);
          setState('0_userdata.0.Datenpunkte.Relais_1000W' /* Relais 1000W */, my_3000);
        }
        if (my_3500 == true) {
          setState('0_userdata.0.Datenpunkte.Relais_2000W' /* Relais 2000W */, my_3500);
          setState('0_userdata.0.Datenpunkte.Relais_1000W' /* Relais 1000W */, my_3500);
          setState('0_userdata.0.Datenpunkte.Relais_500W' /* Relais 500W */, my_3500);
        }
      });
      


      Danke schon einmal im voraus.

      posted in Blockly
      MarkusM
      MarkusM
    Community
    Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
    The ioBroker Community 2014-2023
    logo