Navigation

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

    NEWS

    • Monatsrückblick - April 2025

    • Minor js-controller 7.0.7 Update in latest repo

    • Save The Date: ioBroker@Smart Living Forum Solingen, 14.06.

    • Profile
    • Following 0
    • Followers 0
    • Topics 0
    • Posts 36
    • Best 2
    • Groups 1

    Alex Warkentin

    @Alex Warkentin

    Starter

    2
    Reputation
    12
    Profile views
    36
    Posts
    0
    Followers
    0
    Following
    Joined Last Online

    Alex Warkentin Follow
    Starter

    Best posts made by Alex Warkentin

    • RE: Easee Wallbox mit iobroker

      Zwischendurch kommen dann solche Fehlermeldungen.

      host.ioBroker
      2023-04-12 22:11:36.531	error	instance system.adapter.easee.0 terminated with code 6 (UNCAUGHT_EXCEPTION)
      
      easee.0
      2023-04-12 22:11:35.923	error	Easee API error on charger site - stop refresh
      
      easee.0
      2023-04-12 22:11:35.923	error	Error: Easee API error on charger site - stop refresh at /opt/iobroker/node_modules/iobroker.easee/main.js:489:19 at runMicrotasks (<anonymous>) at processTicksAndRejections (internal/process/task_queues.js:95:5) at async Easee.getChargerSite (/opt/iobroker/node_modules/iobroker.easee/main.js:481:16)
      
      easee.0
      2023-04-12 22:11:35.922	error	unhandled promise rejection: Easee API error on charger site - stop refresh
      
      easee.0
      2023-04-12 22:11:35.921	error	Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch().
      
      easee.0
      2023-04-12 22:11:35.920	error	Error: Request failed with status code 504
      
      easee.0
      2023-04-12 22:11:28.713	error	Error: Request failed with status code 504
      
      easee.0
      2023-04-12 22:10:59.247	error	Easee API error on charger config - stop refresh
      
      easee.0
      2023-04-12 22:10:59.247	error	Error: Request failed with status code 504
      
      easee.0
      2023-04-12 22:10:29.536	error	Easee API error on charger config - stop refresh
      
      easee.0
      2023-04-12 22:10:29.536	error	Error: Request failed with status code 504
      
      easee.0
      2023-04-12 22:08:28.436	error	Easee API error on charger config - stop refresh
      
      easee.0
      2023-04-12 22:08:28.436	error	Error: Request failed with status code 504
      
      posted in ioBroker Allgemein
      Alex Warkentin
      Alex Warkentin
    • RE: Easee Wallbox mit iobroker

      Nachdem ich die letzten Tage einige Tests mache konnte, bin ich mit der ersten Versions meines Scripts recht zufrieden. Ausgangslage war das Script von hardy. Da ich aber kein Fan von Blockly bin und mir die Möglichkeit fehlte, das Auto auch mal ohne Sonne vollzuladen, habe ich es in Javascript angepasst. Das Script nutzt den Telegram Adapter, um Nachrichten über den Status zu versenden und um zwischen Überschuss und voller Leistung zu wählen. Würde mich freuen, wenn ihr es ausprobiert und bei Bedarf mit mir zusammen optimiert.

      var stateTimer, timerDreiphasig, timerStop, overageList, pvOverage, overageSum, pvOverageKWh, timeout, socLevelLast, maxSocLevel, currentP1, currentP2, currentP3, overageCurrent, chargerOPmode, smartCharge;
      
      // ### Wallbox Garage ###
      timerDreiphasig = 0;                    // Timer für Start für dreiphasiges Laden
      timerStop = 0;                          // Timer für Ladestop, wenn zu wenig Leistung von der PV-Anlage
      const reservePower = 200;               // Leistung die für den Haushalt reserviert bleibt
      overageList = [];                       // Array für den gleitenden Mittelwert
      const scheduleInterval = 12;            // Aktualisierungsintervall in Sekunden  
      
      
      
      // ----------------------------------------------------------------------------------------------
      // Funktion zum Anlegen und Beschreiben eines Datenpunkts
      // ----------------------------------------------------------------------------------------------
      function ForceSetState(objectname, value, options) 
      {
          if (!existsState(objectname)) createState(objectname, value, options);
          else setState(objectname, value);
      }
      
      
      
      // ----------------------------------------------------------------------------------------------
      // Funktion: Message über Telegram
      // ----------------------------------------------------------------------------------------------
      function Telegram (sText, sValue,  blPing, blQuestion)
      {
          if (blQuestion)
          {
              sendTo('telegram.0', 
              {
                  text: sText + sValue,
                  disable_notification: blPing,
                  reply_markup: 
                  {
                      keyboard: 
                      [
                          ['Volle Power', 'Überschuss'],
                      ],
                      resize_keyboard:   true,
                      one_time_keyboard: true
                  }
              });
              const Sleep = setInterval(()=>
              {
                  // Warten auf eine Auswahl des Lademodus
                  on({id: "javascript.0.Wallbox.Garage.Überschussladen", change: "any"}, async function (obj) 
                  {
                      clearInterval(Sleep);
                  });
              },300000);
          }
          else
          {
              sendTo('telegram.0', 
              {
                  text: sText + sValue,
                  disable_notification: blPing,
              });
          }
      };
      
      
      
      // ----------------------------------------------------------------------------------------------
      // Easee und VW Adapter neustarten falls offline
      // ----------------------------------------------------------------------------------------------
      on({id: "easee.0.info.connection", change: "lt"}, async function (obj) 
      {
          var value = obj.state.val;
          (function () {if (timeout) {clearTimeout(timeout); timeout = null;}})();
          timeout = setTimeout(function () 
          {
              if (!value) 
              {
                  setState("system.adapter.easee.0.alive", false);
                  setStateDelayed("system.adapter.easee.0.alive", true, 5000, false);
              }
          }, 20000);
      });
      
      on({id: "system.adapter.easee.0.connected", change: "lt"}, async function (obj) 
      {
          var value = obj.state.val;
          (function () {if (timeout) {clearTimeout(timeout); timeout = null;}})();
          timeout = setTimeout(function () 
          {
              if (!value) 
              {
                  setState("system.adapter.easee.0.alive", false);
                  setStateDelayed("system.adapter.easee.0.alive", true, 5000, false);
              }
          }, 20000);
      });
      
      on({id: "vw-connect.0.info.connection", change: "ne"}, async function (obj) 
      {
          var value = obj.state.val;
          (function () {if (timeout) {clearTimeout(timeout); timeout = null;}})();
          timeout = setTimeout(function () 
          {
              if (!value) 
              {
                  setState("system.adapter.vw-connect.0.alive", false);
              setStateDelayed("system.adapter.vw-connect.0.alive", true, 5000, false);
              }
          }, 20000);
      });
      
      on({id: "system.adapter.vw-connect.0.connected", change: "ne"}, async function (obj) 
      {
          var value = obj.state.val;
          (function () {if (timeout) {clearTimeout(timeout); timeout = null;}})();
          timeout = setTimeout(function () 
          {
              if (!value) 
              {
                  setState("system.adapter.vw-connect.0.alive", false);
              setStateDelayed("system.adapter.vw-connect.0.alive", true, 5000, false);
              }
          }, 20000);
      });
      
      
      
      // ----------------------------------------------------------------------------------------------
      // Führt die Abfrage in regelmäßigen Zeitabständen durch
      // ----------------------------------------------------------------------------------------------
      schedule(`*/${scheduleInterval} * * * * *`, async function () 
      {
          stateTimer++;
          // Variablen einlesen
          socLevelLast = getState("Datenpunkt.AktuellerBatteriestand").val;
          maxSocLevel = getState("Datenpunkt.ZielBatteriestand").val;
          currentP1 = getState("easee.0.XXXXXXXX.config.dynamicCircuitCurrentP1").val;
          currentP2 = getState("easee.0.XXXXXXXX.config.dynamicCircuitCurrentP2").val;
          currentP3 = getState("easee.0.XXXXXXXX.config.dynamicCircuitCurrentP3").val; 
          chargerOPmode = getState("easee.0.XXXXXXXX.status.chargerOpMode").val;
          smartCharge = getState("javascript.0.Wallbox.Garage.Überschussladen").val;
      
      
          // ----------------------------------------------------------------------------------------------
          // PV Überschuss ermitteln = Import/Export - Offset + aktuelle Leistung Wallbox
          // ----------------------------------------------------------------------------------------------
          pvOverage = Math.round((parseFloat(getState("Datenpunkt.AktuellerÜberschuss").val) - reservePower) + parseFloat(getState("easee.0.XXXXXXXX.status.totalPower").val) * 1000);
          console.log('PV Überschuss = ' + pvOverage);
          // Gleitender Mittelwert innerhalb 3 Minuten berechnen, gerundet auf 100er
          overageList.unshift(pvOverage);
          if (overageList.length > 180/scheduleInterval) 
          {
              overageSum = overageList.reduce(function(x, y) {return x + y;});
              pvOverageKWh = Math.round(parseFloat(overageSum) / overageList.length);
              overageCurrent = Math.round(pvOverageKWh / getState("easee.0.XXXXXXXX.status.voltage").val);
              overageList.pop();
              // Logging
              ForceSetState("javascript.0.Wallbox.Garage.pvOverageKWh", pvOverageKWh, {name: "", unit: "kWh"});
              console.log(('Überschuss Leistung gemittelt = ' + String(pvOverageKWh)));
              console.log(('Überschuss Strom gemittelt = ' + String(overageCurrent)));  
          }
      
      
          // ----------------------------------------------------------------------------------------------
          // Timer 3-phasig laden: Erhöhe den Timer sekundengenau, wenn PV-Überschuss >18 Ampere
          // ----------------------------------------------------------------------------------------------
          if (socLevelLast < maxSocLevel && overageCurrent >= 18) 
          {
              timerDreiphasig = (typeof timerDreiphasig == 'number' ? timerDreiphasig : 0) + scheduleInterval;
              console.log((['Timer 3-phasig = ',timerDreiphasig,'Sekunden'].join('')));
          } 
          // Andernfalls Timer zurücksetzen
          else timerDreiphasig = 0;
      
      
          // ----------------------------------------------------------------------------------------------
          // Timer Ladeabbruch: Erhöhe den Timer sekundengenau, wenn PV-Überschuss <6 Ampere
          // ----------------------------------------------------------------------------------------------
          if (overageCurrent < 6) 
          {
              timerStop = (typeof timerStop == 'number' ? timerStop : 0) + scheduleInterval;
              console.log((['Timer Ladeabbruch = ',timerStop,'Sekunden'].join('')));
          }
          // Andernfalls Timer zurücksetzen
          else timerStop = 0;
      
      
          // ----------------------------------------------------------------------------------------------
          // Wenn Überschussladen aktiviert ist
          // ----------------------------------------------------------------------------------------------
          if (smartCharge == true)
          {                       
              console.debug(('Überschussladen ist aktiv' + ''));
                  
              // 1-phasig laden: Wenn PV Überschuss größer als minimale Ladeleistung für eine Phase und kleiner als minimale Ladeleistung für drei Phases
              if (socLevelLast < maxSocLevel && overageCurrent >= 6 && (overageCurrent < 18 || timerDreiphasig < 300)) 
              {
                  console.log((['Einphasiges Laden mit ',overageCurrent,' Ampere'].join('')));
                  setState("easee.0.XXXXXXXX.config.dynamicChargerCurrent", 16);
                  setState("easee.0.XXXXXXXX.config.dynamicCircuitCurrentP1", overageCurrent);
                  setState("easee.0.XXXXXXXX.config.dynamicCircuitCurrentP2", 0);
                  setState("easee.0.XXXXXXXX.config.dynamicCircuitCurrentP3", 0);
              }
                      
              // 3-phasig laden: Wenn PV Überschuss 5 Minuten konstant größer als 18 Ampere war
              if (timerDreiphasig >= 300) 
              {
                  console.log((['Dreiphasiges Laden mit ',Math.round(overageCurrent / 3),' Ampere'].join('')));
                  setState("easee.0.XXXXXXXX.config.dynamicChargerCurrent", 16);
                  setState("easee.0.XXXXXXXX.config.dynamicCircuitCurrentP1", Math.round(overageCurrent / 3));
                  setState("easee.0.XXXXXXXX.config.dynamicCircuitCurrentP2", Math.round(overageCurrent / 3));
                  setState("easee.0.XXXXXXXX.config.dynamicCircuitCurrentP3", Math.round(overageCurrent / 3));
              }
                      
              // Stoppe Laden, wenn nach 5 Minuten nicht genug PV-Überschuss vorhanden ist. Stoppe Timeout wenn während 5 Minuten doch wieder genug PV-Überschuss vorhanden ist
              if (timerStop >= 60 && currentP1 > 0) 
              {
                  console.warn(('Pausiere Laden, weil kein PV-Überschuss' + ''));
                  setState("easee.0.XXXXXXXX.config.dynamicChargerCurrent", 16);
                  setState("easee.0.XXXXXXXX.config.dynamicCircuitCurrentP1", 0);
                  setState("easee.0.XXXXXXXX.config.dynamicCircuitCurrentP2", 0);
                  setState("easee.0.XXXXXXXX.config.dynamicCircuitCurrentP3", 0);
                  //setState("easee.0.XXXXXXXX.control.pause", true);
                  //setState("easee.0.XXXXXXXX.control.stop", true);
              }
          }
          
          
          // ----------------------------------------------------------------------------------------------
          // Wenn Laden mit voller Leistung aktiv ist
          // ----------------------------------------------------------------------------------------------
          else
          {
              console.debug('Dreiphasiges Laden mit voller Leistung');
              setState("easee.0.XXXXXXXX.config.dynamicChargerCurrent", 16);
              setState("easee.0.XXXXXXXX.config.dynamicCircuitCurrentP1", 16);
              setState("easee.0.XXXXXXXX.config.dynamicCircuitCurrentP2", 16);
              setState("easee.0.XXXXXXXX.config.dynamicCircuitCurrentP3", 16);
          }
      });
              
      
      
      // ----------------------------------------------------------------------------------------------
      // Trigger beim Einstecken des Ladekabels
      // ----------------------------------------------------------------------------------------------
      on({id: "easee.0.XXXXXXXX.status.chargerOpMode", change: "ne"}, async function (obj) 
      {
          var value = obj.state.val;
          var oldValue = obj.oldState.val;
          stateTimer = 0;
          // Ladekabel wurde angeschlossen
          if (oldValue == 1) 
          {
              console.warn(('Ladekabel wurde an das Fahrzeug angeschlossen' + ''));
              Telegram("Der Akkustand beträgt: ", socLevelLast, false, true);
          }
          // Ladekabel wurde entfernt
          if (value == 1)
          {
              console.warn(('Ladekabel wurde vom Fahrzeug getrennt' + ''));
              Telegram("Ladekabel wurde vom Fahrzeug getrennt. Der Akkustand beträgt: ", socLevelLast, false, false);
          }
          // Auto angeschlossen, aber lädt nicht
          if (value == 2)
          {
              console.log(('Ladevorgang gestoppt. Wallbox bereits zum Laden' + ''));
              Telegram("Ladevorgang gestoppt. Wallbox bereit zum Laden. Der Akkustand beträgt: ", socLevelLast, false, false);
              if (currentP1 > 0 && maxSocLevel > socLevelLast) 
              {
                  if (smartCharge == true) console.warn(('PV Überschussladen gestartet' + ''));
                  else console.warn(('Laden mit voller Leistung gestartet' + ''));
                  //setState("easee.0.XXXXXXXX.control.resume", true);
                  setState("easee.0.XXXXXXXX.control.start", true);
                  Telegram("Ladevorgang gestartet.", "", false, false);
              }
              else if (maxSocLevel <= socLevelLast)
              {
                  console.log(('Ladevorgang gestoppt. Ladeziel erreicht' + ''));
                  Telegram("Ladevorgang gestoppt. Ladeziel erreicht. Der Akkustand beträgt: ", socLevelLast, false, false);
              }
          }
          if (value == 4)
          {
              console.log(('Ladevorgang gestoppt. Batterie vollgeladen' + ''));
              Telegram("Ladevorgang gestoppt. Batterie vollgeladen.", "", false, false);
          }
          if (value == 5)
          {
              console.log(('Ladevorgang gestoppt. Es ist ein Fehler aufgetreten' + ''));
              Telegram("Ladevorgang gestoppt. Es ist ein Fehler aufgetreten. Der Akkustand beträgt: ", socLevelLast, false, false);
          }
          
      });
      
      // ----------------------------------------------------------------------------------------------
      // Wenn Auto bis Sonnenuntergang nicht geladen, fragen ob über Netz vollgeladen werden soll
      // ----------------------------------------------------------------------------------------------
      schedule({astro: "sunset", shift: 0}, async function () 
              {
                  if (maxSocLevel > socLevelLast && chargerOPmode != 1)
                  {
                      Telegram("Der Akkustand beträgt: ", socLevelLast, true, false);
                  }
              });
      
      posted in ioBroker Allgemein
      Alex Warkentin
      Alex Warkentin

    Latest posts made by Alex Warkentin

    • RE: Easee Wallbox mit iobroker

      @bishop9191 Ich habe bisher SignalR aus gehabt und das Interval auf 120 Sekunden. Seitdem das mit dem Fehler 429 angefangen hat, hab ich SignalR aktiviert und das Interval auf 2 mal täglich erhöht. Wenn ich die Log-Daten des Currents anschau, sieht man, dass Wert auf jeden Fall vom Easee Adapter und nicht vom Script aus auf 0 gesetzt wird. Es wäre echt gut sich hier mal mit Newan auszutauschen.

      posted in ioBroker Allgemein
      Alex Warkentin
      Alex Warkentin
    • RE: Easee Wallbox mit iobroker

      @gargano Ich habe die Geschichte heute über einen kurzen Zeitraum beobachtet und konnte keine Auffälligkeiten feststellen. Vermutlich lag es mal wieder an einer fehlerhaften Kommunikation mit der Cloud. Wobei ich keinerlei Fehler in den Log-Daten hatte. Ich kann mir vorstellen, dass vielleicht eins der Currents nicht korrekt übertragen wurde und somit der Fallback auf 0A aktiviert wurde. Das Fehlen der lokalen API ist und bleibt das große Problem dieser Wallbox.

      posted in ioBroker Allgemein
      Alex Warkentin
      Alex Warkentin
    • RE: Easee Wallbox mit iobroker

      @gargano Naja, ich hab den Adapter und das Script seit 2 Jahren am Laufen und es gab nie ein Problem damit. Wie oft ich zwischen einphasig und dreiphasig umschalte liegt an der Sonne und dem derzeitigen Verbrauch. Kommt also sicher nicht selten vor.
      Haben die denn schon wieder etwas an der API geändert?

      posted in ioBroker Allgemein
      Alex Warkentin
      Alex Warkentin
    • RE: Easee Wallbox mit iobroker

      Ich habe mal wieder ein Problem mit dieser Kiste und hoffe auf den richtigen Tipp. Seit vielen Monaten steuere ich schon das Überschussladen per Script. Nun hat sich ein Thema aufgetan, welches mir zuvor noch nicht aufgefallen ist.
      Ich setze dynamicCircuitCurrentP1 in 12 Sekunden-Abständen. Gleichzeitig setze ich auch P2 und P3 auf 0 (beim einphasigen Laden). Die Werte werden auch problemlos übertragen. Allerdings setzt sich das Limit gefühlt jede Minute wieder auf 0 zurück. Das kommt nicht von meinem Script, sondern durch Easee. Dadurch wird das Laden kurz unterbrochen, bis das Script einen neuen Wert übermittelt. Gibt es da schon wieder irgendwelche neuen Totzeiten, die man beachten muss?

      posted in ioBroker Allgemein
      Alex Warkentin
      Alex Warkentin
    • RE: Easee Wallbox mit iobroker

      @sandmanyz Werden denn in der Zeit dazwischen deine Objekte aktualisiert?

      Ich hatte vor ca. einem Jahr das gleiche Problem. Damals wurde mir vom Support empfohlen den Adapter für 24h zu deaktivieren, weil mein Account wohl aufgrund der vielen Anfragen gesperrt wurde. Danach habe ich das Interval auf 120 Sekunden eingestellt und seitdem nur die üblichen Abbrüche aufgrund der Serverprobleme gehabt.

      posted in ioBroker Allgemein
      Alex Warkentin
      Alex Warkentin
    • RE: Easee Wallbox mit iobroker

      Hi @Newan , arbeitest du noch an dem Adapter?

      Ich habe einen Firmenwagen, den ich monatlich mithilfe der Easee-Verbrauchsübersicht mit meinem Arbeitgeber abrechne. Nun steht privat eine Anschaffung eines weiteren E-Autos an. Ich möchte auch weiterhin auf die RFID-Tags verzichten, aber auch keine Statistik darüber führen, wann ich welches Auto angeschlossen hatte. Ich habe mir die Übersicht angeschaut und die Idee gehabt, den Namen des Roboters variabel zu überschreiben, je nach dem welches Auto angeschlossen ist, da dieser bei jedem Ladevorgang in der Tabelle auftaucht. Damit könnte ich die privaten Zeilen relativ unkompliziert entfernen. Leider ist dieser Datenpunkt aber read only. Da ich den Namen über die App ändern kann, dachte ich mir, dass dies doch sicher auch über den Adapter gehen könnte, oder?

      posted in ioBroker Allgemein
      Alex Warkentin
      Alex Warkentin
    • RE: Easee Wallbox mit iobroker

      Ich habe schon ein Request bei Github eröffnet. Habe auch die 10er Version installiert und im Sommer lief alles bestens. Seitdem die Sonne aus Deutschland verschwunden ist, lade ich übers Netz und habe gar nicht mitbekommen, das erwas nicht stimmt. Habe jetzt mein Script gestoppt und den Adapter mehrere Tage pausiert gelassen, aber es hilft nix. Anmeldung in der Cloud funktioniert problemlos.

      posted in ioBroker Allgemein
      Alex Warkentin
      Alex Warkentin
    • RE: Easee Wallbox mit iobroker

      Ist die Entwicklung dieses Adapters eingestellt worden? Die Anmeldung funktioniert bei mir auch nicht mehr, wie beim Vorredner.

      posted in ioBroker Allgemein
      Alex Warkentin
      Alex Warkentin
    • RE: Easee Wallbox mit iobroker

      Nachdem ich die letzten Tage einige Tests mache konnte, bin ich mit der ersten Versions meines Scripts recht zufrieden. Ausgangslage war das Script von hardy. Da ich aber kein Fan von Blockly bin und mir die Möglichkeit fehlte, das Auto auch mal ohne Sonne vollzuladen, habe ich es in Javascript angepasst. Das Script nutzt den Telegram Adapter, um Nachrichten über den Status zu versenden und um zwischen Überschuss und voller Leistung zu wählen. Würde mich freuen, wenn ihr es ausprobiert und bei Bedarf mit mir zusammen optimiert.

      var stateTimer, timerDreiphasig, timerStop, overageList, pvOverage, overageSum, pvOverageKWh, timeout, socLevelLast, maxSocLevel, currentP1, currentP2, currentP3, overageCurrent, chargerOPmode, smartCharge;
      
      // ### Wallbox Garage ###
      timerDreiphasig = 0;                    // Timer für Start für dreiphasiges Laden
      timerStop = 0;                          // Timer für Ladestop, wenn zu wenig Leistung von der PV-Anlage
      const reservePower = 200;               // Leistung die für den Haushalt reserviert bleibt
      overageList = [];                       // Array für den gleitenden Mittelwert
      const scheduleInterval = 12;            // Aktualisierungsintervall in Sekunden  
      
      
      
      // ----------------------------------------------------------------------------------------------
      // Funktion zum Anlegen und Beschreiben eines Datenpunkts
      // ----------------------------------------------------------------------------------------------
      function ForceSetState(objectname, value, options) 
      {
          if (!existsState(objectname)) createState(objectname, value, options);
          else setState(objectname, value);
      }
      
      
      
      // ----------------------------------------------------------------------------------------------
      // Funktion: Message über Telegram
      // ----------------------------------------------------------------------------------------------
      function Telegram (sText, sValue,  blPing, blQuestion)
      {
          if (blQuestion)
          {
              sendTo('telegram.0', 
              {
                  text: sText + sValue,
                  disable_notification: blPing,
                  reply_markup: 
                  {
                      keyboard: 
                      [
                          ['Volle Power', 'Überschuss'],
                      ],
                      resize_keyboard:   true,
                      one_time_keyboard: true
                  }
              });
              const Sleep = setInterval(()=>
              {
                  // Warten auf eine Auswahl des Lademodus
                  on({id: "javascript.0.Wallbox.Garage.Überschussladen", change: "any"}, async function (obj) 
                  {
                      clearInterval(Sleep);
                  });
              },300000);
          }
          else
          {
              sendTo('telegram.0', 
              {
                  text: sText + sValue,
                  disable_notification: blPing,
              });
          }
      };
      
      
      
      // ----------------------------------------------------------------------------------------------
      // Easee und VW Adapter neustarten falls offline
      // ----------------------------------------------------------------------------------------------
      on({id: "easee.0.info.connection", change: "lt"}, async function (obj) 
      {
          var value = obj.state.val;
          (function () {if (timeout) {clearTimeout(timeout); timeout = null;}})();
          timeout = setTimeout(function () 
          {
              if (!value) 
              {
                  setState("system.adapter.easee.0.alive", false);
                  setStateDelayed("system.adapter.easee.0.alive", true, 5000, false);
              }
          }, 20000);
      });
      
      on({id: "system.adapter.easee.0.connected", change: "lt"}, async function (obj) 
      {
          var value = obj.state.val;
          (function () {if (timeout) {clearTimeout(timeout); timeout = null;}})();
          timeout = setTimeout(function () 
          {
              if (!value) 
              {
                  setState("system.adapter.easee.0.alive", false);
                  setStateDelayed("system.adapter.easee.0.alive", true, 5000, false);
              }
          }, 20000);
      });
      
      on({id: "vw-connect.0.info.connection", change: "ne"}, async function (obj) 
      {
          var value = obj.state.val;
          (function () {if (timeout) {clearTimeout(timeout); timeout = null;}})();
          timeout = setTimeout(function () 
          {
              if (!value) 
              {
                  setState("system.adapter.vw-connect.0.alive", false);
              setStateDelayed("system.adapter.vw-connect.0.alive", true, 5000, false);
              }
          }, 20000);
      });
      
      on({id: "system.adapter.vw-connect.0.connected", change: "ne"}, async function (obj) 
      {
          var value = obj.state.val;
          (function () {if (timeout) {clearTimeout(timeout); timeout = null;}})();
          timeout = setTimeout(function () 
          {
              if (!value) 
              {
                  setState("system.adapter.vw-connect.0.alive", false);
              setStateDelayed("system.adapter.vw-connect.0.alive", true, 5000, false);
              }
          }, 20000);
      });
      
      
      
      // ----------------------------------------------------------------------------------------------
      // Führt die Abfrage in regelmäßigen Zeitabständen durch
      // ----------------------------------------------------------------------------------------------
      schedule(`*/${scheduleInterval} * * * * *`, async function () 
      {
          stateTimer++;
          // Variablen einlesen
          socLevelLast = getState("Datenpunkt.AktuellerBatteriestand").val;
          maxSocLevel = getState("Datenpunkt.ZielBatteriestand").val;
          currentP1 = getState("easee.0.XXXXXXXX.config.dynamicCircuitCurrentP1").val;
          currentP2 = getState("easee.0.XXXXXXXX.config.dynamicCircuitCurrentP2").val;
          currentP3 = getState("easee.0.XXXXXXXX.config.dynamicCircuitCurrentP3").val; 
          chargerOPmode = getState("easee.0.XXXXXXXX.status.chargerOpMode").val;
          smartCharge = getState("javascript.0.Wallbox.Garage.Überschussladen").val;
      
      
          // ----------------------------------------------------------------------------------------------
          // PV Überschuss ermitteln = Import/Export - Offset + aktuelle Leistung Wallbox
          // ----------------------------------------------------------------------------------------------
          pvOverage = Math.round((parseFloat(getState("Datenpunkt.AktuellerÜberschuss").val) - reservePower) + parseFloat(getState("easee.0.XXXXXXXX.status.totalPower").val) * 1000);
          console.log('PV Überschuss = ' + pvOverage);
          // Gleitender Mittelwert innerhalb 3 Minuten berechnen, gerundet auf 100er
          overageList.unshift(pvOverage);
          if (overageList.length > 180/scheduleInterval) 
          {
              overageSum = overageList.reduce(function(x, y) {return x + y;});
              pvOverageKWh = Math.round(parseFloat(overageSum) / overageList.length);
              overageCurrent = Math.round(pvOverageKWh / getState("easee.0.XXXXXXXX.status.voltage").val);
              overageList.pop();
              // Logging
              ForceSetState("javascript.0.Wallbox.Garage.pvOverageKWh", pvOverageKWh, {name: "", unit: "kWh"});
              console.log(('Überschuss Leistung gemittelt = ' + String(pvOverageKWh)));
              console.log(('Überschuss Strom gemittelt = ' + String(overageCurrent)));  
          }
      
      
          // ----------------------------------------------------------------------------------------------
          // Timer 3-phasig laden: Erhöhe den Timer sekundengenau, wenn PV-Überschuss >18 Ampere
          // ----------------------------------------------------------------------------------------------
          if (socLevelLast < maxSocLevel && overageCurrent >= 18) 
          {
              timerDreiphasig = (typeof timerDreiphasig == 'number' ? timerDreiphasig : 0) + scheduleInterval;
              console.log((['Timer 3-phasig = ',timerDreiphasig,'Sekunden'].join('')));
          } 
          // Andernfalls Timer zurücksetzen
          else timerDreiphasig = 0;
      
      
          // ----------------------------------------------------------------------------------------------
          // Timer Ladeabbruch: Erhöhe den Timer sekundengenau, wenn PV-Überschuss <6 Ampere
          // ----------------------------------------------------------------------------------------------
          if (overageCurrent < 6) 
          {
              timerStop = (typeof timerStop == 'number' ? timerStop : 0) + scheduleInterval;
              console.log((['Timer Ladeabbruch = ',timerStop,'Sekunden'].join('')));
          }
          // Andernfalls Timer zurücksetzen
          else timerStop = 0;
      
      
          // ----------------------------------------------------------------------------------------------
          // Wenn Überschussladen aktiviert ist
          // ----------------------------------------------------------------------------------------------
          if (smartCharge == true)
          {                       
              console.debug(('Überschussladen ist aktiv' + ''));
                  
              // 1-phasig laden: Wenn PV Überschuss größer als minimale Ladeleistung für eine Phase und kleiner als minimale Ladeleistung für drei Phases
              if (socLevelLast < maxSocLevel && overageCurrent >= 6 && (overageCurrent < 18 || timerDreiphasig < 300)) 
              {
                  console.log((['Einphasiges Laden mit ',overageCurrent,' Ampere'].join('')));
                  setState("easee.0.XXXXXXXX.config.dynamicChargerCurrent", 16);
                  setState("easee.0.XXXXXXXX.config.dynamicCircuitCurrentP1", overageCurrent);
                  setState("easee.0.XXXXXXXX.config.dynamicCircuitCurrentP2", 0);
                  setState("easee.0.XXXXXXXX.config.dynamicCircuitCurrentP3", 0);
              }
                      
              // 3-phasig laden: Wenn PV Überschuss 5 Minuten konstant größer als 18 Ampere war
              if (timerDreiphasig >= 300) 
              {
                  console.log((['Dreiphasiges Laden mit ',Math.round(overageCurrent / 3),' Ampere'].join('')));
                  setState("easee.0.XXXXXXXX.config.dynamicChargerCurrent", 16);
                  setState("easee.0.XXXXXXXX.config.dynamicCircuitCurrentP1", Math.round(overageCurrent / 3));
                  setState("easee.0.XXXXXXXX.config.dynamicCircuitCurrentP2", Math.round(overageCurrent / 3));
                  setState("easee.0.XXXXXXXX.config.dynamicCircuitCurrentP3", Math.round(overageCurrent / 3));
              }
                      
              // Stoppe Laden, wenn nach 5 Minuten nicht genug PV-Überschuss vorhanden ist. Stoppe Timeout wenn während 5 Minuten doch wieder genug PV-Überschuss vorhanden ist
              if (timerStop >= 60 && currentP1 > 0) 
              {
                  console.warn(('Pausiere Laden, weil kein PV-Überschuss' + ''));
                  setState("easee.0.XXXXXXXX.config.dynamicChargerCurrent", 16);
                  setState("easee.0.XXXXXXXX.config.dynamicCircuitCurrentP1", 0);
                  setState("easee.0.XXXXXXXX.config.dynamicCircuitCurrentP2", 0);
                  setState("easee.0.XXXXXXXX.config.dynamicCircuitCurrentP3", 0);
                  //setState("easee.0.XXXXXXXX.control.pause", true);
                  //setState("easee.0.XXXXXXXX.control.stop", true);
              }
          }
          
          
          // ----------------------------------------------------------------------------------------------
          // Wenn Laden mit voller Leistung aktiv ist
          // ----------------------------------------------------------------------------------------------
          else
          {
              console.debug('Dreiphasiges Laden mit voller Leistung');
              setState("easee.0.XXXXXXXX.config.dynamicChargerCurrent", 16);
              setState("easee.0.XXXXXXXX.config.dynamicCircuitCurrentP1", 16);
              setState("easee.0.XXXXXXXX.config.dynamicCircuitCurrentP2", 16);
              setState("easee.0.XXXXXXXX.config.dynamicCircuitCurrentP3", 16);
          }
      });
              
      
      
      // ----------------------------------------------------------------------------------------------
      // Trigger beim Einstecken des Ladekabels
      // ----------------------------------------------------------------------------------------------
      on({id: "easee.0.XXXXXXXX.status.chargerOpMode", change: "ne"}, async function (obj) 
      {
          var value = obj.state.val;
          var oldValue = obj.oldState.val;
          stateTimer = 0;
          // Ladekabel wurde angeschlossen
          if (oldValue == 1) 
          {
              console.warn(('Ladekabel wurde an das Fahrzeug angeschlossen' + ''));
              Telegram("Der Akkustand beträgt: ", socLevelLast, false, true);
          }
          // Ladekabel wurde entfernt
          if (value == 1)
          {
              console.warn(('Ladekabel wurde vom Fahrzeug getrennt' + ''));
              Telegram("Ladekabel wurde vom Fahrzeug getrennt. Der Akkustand beträgt: ", socLevelLast, false, false);
          }
          // Auto angeschlossen, aber lädt nicht
          if (value == 2)
          {
              console.log(('Ladevorgang gestoppt. Wallbox bereits zum Laden' + ''));
              Telegram("Ladevorgang gestoppt. Wallbox bereit zum Laden. Der Akkustand beträgt: ", socLevelLast, false, false);
              if (currentP1 > 0 && maxSocLevel > socLevelLast) 
              {
                  if (smartCharge == true) console.warn(('PV Überschussladen gestartet' + ''));
                  else console.warn(('Laden mit voller Leistung gestartet' + ''));
                  //setState("easee.0.XXXXXXXX.control.resume", true);
                  setState("easee.0.XXXXXXXX.control.start", true);
                  Telegram("Ladevorgang gestartet.", "", false, false);
              }
              else if (maxSocLevel <= socLevelLast)
              {
                  console.log(('Ladevorgang gestoppt. Ladeziel erreicht' + ''));
                  Telegram("Ladevorgang gestoppt. Ladeziel erreicht. Der Akkustand beträgt: ", socLevelLast, false, false);
              }
          }
          if (value == 4)
          {
              console.log(('Ladevorgang gestoppt. Batterie vollgeladen' + ''));
              Telegram("Ladevorgang gestoppt. Batterie vollgeladen.", "", false, false);
          }
          if (value == 5)
          {
              console.log(('Ladevorgang gestoppt. Es ist ein Fehler aufgetreten' + ''));
              Telegram("Ladevorgang gestoppt. Es ist ein Fehler aufgetreten. Der Akkustand beträgt: ", socLevelLast, false, false);
          }
          
      });
      
      // ----------------------------------------------------------------------------------------------
      // Wenn Auto bis Sonnenuntergang nicht geladen, fragen ob über Netz vollgeladen werden soll
      // ----------------------------------------------------------------------------------------------
      schedule({astro: "sunset", shift: 0}, async function () 
              {
                  if (maxSocLevel > socLevelLast && chargerOPmode != 1)
                  {
                      Telegram("Der Akkustand beträgt: ", socLevelLast, true, false);
                  }
              });
      
      posted in ioBroker Allgemein
      Alex Warkentin
      Alex Warkentin
    • RE: Easee Wallbox mit iobroker

      @newan Sag mal bitte, schreibt dein Adapter zufällig den Datenpunkt "easee.0.XXXXXX.config.dynamicChargerCurrent" bei irgendwelchen Zuständen? Zum Beispiel bei einer Neuverbindung des Adapters? Ich habe das Problem, dass dieser Wert immer mal wieder auf 6 steht, obwohl ich ihn 100% nicht beschreibe. Ich kriege dieses Problem leider nicht aus der Welt. Die Sonne ballert, auf den "dynamicCircuitCurrentPn" liegen 3x10 A an und das Auto wird trotzdem nur mit 6A geladen.

      posted in ioBroker Allgemein
      Alex Warkentin
      Alex Warkentin
    Community
    Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
    The ioBroker Community 2014-2023
    logo