Skip to content
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • 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

  • Default (No Skin)
  • No Skin
Collapse
Logo
  1. ioBroker Community Home
  2. Deutsch
  3. ioBroker Allgemein
  4. Easee Wallbox mit iobroker

NEWS

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

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

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

Easee Wallbox mit iobroker

Scheduled Pinned Locked Moved ioBroker Allgemein
easeewallboxadapter
529 Posts 61 Posters 131.4k Views 54 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • K k_b

    @souhl
    Sorry, ist vielleicht eine Anfängerfrage ...:
    Seht Ihr eine Möglichkeit den Status "car connected" über die easee-cloud zu erhalten (und damit - wenn man auf SoC verzichten würde - von den Auto-Adaptern unabhängig zu werden)?
    In der Doku der easee-API habe ich nichts gefunden, aber andere "Kollegen" scheinen hier einen Weg gefunden zu haben (z.B. als Feature in einer homey-app: https://community.athom.com/t/app-easee-charger/31647 bzw. auf Github https://github.com/ricott/homey-no.easee)

    K Offline
    K Offline
    K_o_bold
    wrote on last edited by
    #169

    @k_b ,

    es gibt den chargerOpMode, damit kannst du erkennen ob ein Auto angeschlossen ist.

    1= KAbel nicht gesteckt
    2=Kabel gesteckt
    3=Ladevorgang aktiv
    4=Ladevorgang beendet

    1 Reply Last reply
    0
    • S Offline
      S Offline
      stonemaan
      wrote on last edited by
      #170

      Info: die dynamicChargerCurrent funktioniert wieder. Damit kann man also dynamisch die maximale Stromstärke einstellen. Falls jemand eine PV Überschusssteuerung machen will...

      A 1 Reply Last reply
      0
      • S stonemaan

        Info: die dynamicChargerCurrent funktioniert wieder. Damit kann man also dynamisch die maximale Stromstärke einstellen. Falls jemand eine PV Überschusssteuerung machen will...

        A Offline
        A Offline
        Aiouh
        wrote on last edited by
        #171

        @stonemaan Wie funktioniert denn dynamic charge genau? Hast Du da Infos oder kann man das irgendwo nachlesen? Nachdem die Wallbox jetzt endlich offiziell in Betrieb und beim Versorger angemeldet ist, bin ich dabei irgendwie eine Überschussladung zu basteln, vielleicht hilft das dynamic charge feature ja. Nehme Infos dankend entgegen 😊

        1 Reply Last reply
        0
        • hg6806H Offline
          hg6806H Offline
          hg6806
          Most Active
          wrote on last edited by
          #172

          Guten Morgen,

          bin auch seit einiger Zeit am Suchen von 2 Wallboxen und auf diesen Thread hier gestoßen.
          Ich habe auch eine 10kWp PV Anlage und würde gerne Überschussladen.
          Kann man das eigentlich nicht in den Adapter integrieren? Einfach als Quelle Modbus/SMA/Smartmeter/etc. wählen, oder ist das doch komplizierter?
          Geht das eigentlich schon bei anderen Boxen? Ich meine damit keine HW Lösung SMA WR zu SMA Wallbox sondern eine (ioBroker-) SW Lösung.

          A 1 Reply Last reply
          0
          • hg6806H hg6806

            Guten Morgen,

            bin auch seit einiger Zeit am Suchen von 2 Wallboxen und auf diesen Thread hier gestoßen.
            Ich habe auch eine 10kWp PV Anlage und würde gerne Überschussladen.
            Kann man das eigentlich nicht in den Adapter integrieren? Einfach als Quelle Modbus/SMA/Smartmeter/etc. wählen, oder ist das doch komplizierter?
            Geht das eigentlich schon bei anderen Boxen? Ich meine damit keine HW Lösung SMA WR zu SMA Wallbox sondern eine (ioBroker-) SW Lösung.

            A Offline
            A Offline
            Aiouh
            wrote on last edited by
            #173

            @hg6806 schau mal da rein, das gibt es auch Überlegungen dazu
            Überschussladen

            @stonemaan hat auch schon was für sich gebaut

            Was auch ganz interessant ist, ist die Solaranzeige, da gibt es schon die Funktion des Überschussladens für bestimmten Wallboxen.
            "Die" Lösung hab ich noch nicht gefunden, vielleicht. Oder es greift jemand die Idee eines Adapters auf der von der Wallbox unabhängig ist und mit Parametern versehen werden kann.

            Ich habe dazu mal einen Adapter Request eröffnet
            Generischer Adapter zur PV Überschussladung

            1 Reply Last reply
            0
            • S Offline
              S Offline
              stonemaan
              wrote on last edited by
              #174

              Ich hab das per blockly Script gemacht. Ich berechne über den KOSTAL Adapter den PV Überschuss und setze dann entsprechend die dynamicchargercurrent auf den Wert, den ich brauche. Abfrage läuft minütlich. War ein ziemliches gefummel bis dahin, aber es funktioniert einwandfrei. Jetzt fehlt nur noch die Sonne 😉

              A K Uli977U 3 Replies Last reply
              0
              • S stonemaan

                Ich hab das per blockly Script gemacht. Ich berechne über den KOSTAL Adapter den PV Überschuss und setze dann entsprechend die dynamicchargercurrent auf den Wert, den ich brauche. Abfrage läuft minütlich. War ein ziemliches gefummel bis dahin, aber es funktioniert einwandfrei. Jetzt fehlt nur noch die Sonne 😉

                A Offline
                A Offline
                Aiouh
                wrote on last edited by
                #175

                @stonemaan 🙂 das hört sich sehr gut an. Den PV Überschuss bekomme ich direkt über den Netzbezugszähler.
                Würdest Du denn das script auch mit uns "Leidensgenossen" hier teilen? 😉 Wobei mir noch immer unklar ist was der dynamicchargecurrent bewirkt...

                1 Reply Last reply
                0
                • S Offline
                  S Offline
                  stonemaan
                  wrote on last edited by
                  #176

                  Kann ich die Tage mal machen..
                  die dynamic Charger current passt die Stromstärke an, die maximal durch die Wallbox geht. Also dynamicchargercurrent x Spannung = maximale Leistung mit der geladen wird. Ich habe das allerdings nur für eine Phase programmiert, weil ich nur nen Plugin Hybriden habe

                  A 1 Reply Last reply
                  0
                  • S stonemaan

                    Kann ich die Tage mal machen..
                    die dynamic Charger current passt die Stromstärke an, die maximal durch die Wallbox geht. Also dynamicchargercurrent x Spannung = maximale Leistung mit der geladen wird. Ich habe das allerdings nur für eine Phase programmiert, weil ich nur nen Plugin Hybriden habe

                    A Offline
                    A Offline
                    Aiouh
                    wrote on last edited by
                    #177

                    @stonemaan Danke Dir!
                    Weisst Du was daran dann "dynamic" ist? Wenn ich "CircuitMaxCurrentP1" setze begrenzt der mir ja auch den Strom, und damit die Leistung. Soweit sehe ich da keinen Unterschied.
                    Kann es sein, dass das normalerweise verwendet wird wenn man mehrere vernetzte Easee Wallboxen hat die dann eine Summenbegrenzung auf den Maximalstrom der Phase(n) machen?

                    1 Reply Last reply
                    0
                    • S Offline
                      S Offline
                      stonemaan
                      wrote on last edited by
                      #178

                      Wenn du nur eine Wallbox hast, kannst du die CircuitMaxCurrentP1 verwenden. Die Dynamic Charger bezieht sich auf die einzelne Wallbox und die circuit current auf den Stromkreis - sofern du mehrere easees hast 😉
                      Daher ist bei mehreren die Dynamic Charger zu bevorzugen. Sonst regelst du den Strom aller wallboxen herunter.

                      A 2 Replies Last reply
                      1
                      • S stonemaan

                        Wenn du nur eine Wallbox hast, kannst du die CircuitMaxCurrentP1 verwenden. Die Dynamic Charger bezieht sich auf die einzelne Wallbox und die circuit current auf den Stromkreis - sofern du mehrere easees hast 😉
                        Daher ist bei mehreren die Dynamic Charger zu bevorzugen. Sonst regelst du den Strom aller wallboxen herunter.

                        A Offline
                        A Offline
                        Aiouh
                        wrote on last edited by
                        #179

                        @stonemaan Dann ists jetzt klar, txs

                        1 Reply Last reply
                        0
                        • S stonemaan

                          Ich hab das per blockly Script gemacht. Ich berechne über den KOSTAL Adapter den PV Überschuss und setze dann entsprechend die dynamicchargercurrent auf den Wert, den ich brauche. Abfrage läuft minütlich. War ein ziemliches gefummel bis dahin, aber es funktioniert einwandfrei. Jetzt fehlt nur noch die Sonne 😉

                          K Offline
                          K Offline
                          K_o_bold
                          wrote on last edited by
                          #180

                          @stonemaan ,

                          ich bin auch gerade dabei mir ein Skript aufzubauen um PV-Überschuss zu laden.
                          Jetzt beschäftige ich mich mit der Frage, wie ich an wechselhaften Tagen damit umgehe. Wenn Sonne/Wolken sich abwechseln, kann es ja mal passieren, dass es über längere Zeit wolkig ist und dann würde die Ladung des Fahrzeuges u.U. zu lange dauern.
                          Ziel ist bei mir, dass das Auto zu einer Zeit x voll ist unabhängig von PV Überschuss.
                          Hier scheitere ich an den Ideen für Blockly...
                          Hast du sowas umgesetzt?

                          S 1 Reply Last reply
                          0
                          • K K_o_bold

                            @stonemaan ,

                            ich bin auch gerade dabei mir ein Skript aufzubauen um PV-Überschuss zu laden.
                            Jetzt beschäftige ich mich mit der Frage, wie ich an wechselhaften Tagen damit umgehe. Wenn Sonne/Wolken sich abwechseln, kann es ja mal passieren, dass es über längere Zeit wolkig ist und dann würde die Ladung des Fahrzeuges u.U. zu lange dauern.
                            Ziel ist bei mir, dass das Auto zu einer Zeit x voll ist unabhängig von PV Überschuss.
                            Hier scheitere ich an den Ideen für Blockly...
                            Hast du sowas umgesetzt?

                            S Offline
                            S Offline
                            stonemaan
                            wrote on last edited by
                            #181

                            @k_o_bold
                            Über sowas habe ich auch nachgedacht. Ich habe es noch nicht umgesetzt. Was ich gemacht habe ist, die Bedingung „Ladetimer Fahrzeug aktiv“ (bekomme ich über den VW Connect Adapter) auszulesen. Und wenn also der Ladetimer aktiv ist, wird nicht per PV Überschuss geladen, sondern ich stelle die volle Leistung zur Verfügung. Was man machen könnte: wenn Timer aktiv, die prognostizierte Ladedauer abfragen oder berechnen. Und wenn diese größer ist als die Zeit bis zur geplanten Abfahrtszeit, dann per Überschuss laden, ansonsten volle Leistung. Das war mir aber bisher zu viel Aufwand 😉
                            War das einigermaßen verständlich? 🤔 😉

                            K 1 Reply Last reply
                            0
                            • S stonemaan

                              @k_o_bold
                              Über sowas habe ich auch nachgedacht. Ich habe es noch nicht umgesetzt. Was ich gemacht habe ist, die Bedingung „Ladetimer Fahrzeug aktiv“ (bekomme ich über den VW Connect Adapter) auszulesen. Und wenn also der Ladetimer aktiv ist, wird nicht per PV Überschuss geladen, sondern ich stelle die volle Leistung zur Verfügung. Was man machen könnte: wenn Timer aktiv, die prognostizierte Ladedauer abfragen oder berechnen. Und wenn diese größer ist als die Zeit bis zur geplanten Abfahrtszeit, dann per Überschuss laden, ansonsten volle Leistung. Das war mir aber bisher zu viel Aufwand 😉
                              War das einigermaßen verständlich? 🤔 😉

                              K Offline
                              K Offline
                              K_o_bold
                              wrote on last edited by
                              #182

                              @stonemaan ,

                              ja danke für deinen Input. Das war verständlich und ungefähr das was ich mir auch grob üerlegt habe. Nur scheitere ich am Skript dazu. Ich glaube die Umsetzung wäre besser zu lösen mir einem Java-Skript und da bin ich noch nicht fit genug.

                              Ein Adapter für PV Überschuss Ladung wäre echt super für so eine Anwendung...

                              1 Reply Last reply
                              0
                              • S Offline
                                S Offline
                                stonemaan
                                wrote on last edited by
                                #183

                                ich habe mal mein Blockly Script unten eingefügt. Es funktioniert für meinen Anwendungszweck super. Es geht bedingt durch die Timerabfrage aber nur für "das Eine" Auto. Wer also das Auto vom Freund aufladen möchte, muss den Schalter an machen.

                                Die eigentliche Überschusssteuerung findet ihr ab Zeile 57. Davor habe ich nur einen kleinen (sehr ungenauen) Zähler eingebaut.

                                Randnotiz: ich bin kein Programmierer und hab mit Informatik wenig am Hut, falls da dinge doppelt oder schwachsinnig drin sind, sagst mir bitte 😉 Ich habe mich bemüht, die Seriennummer von der Easee zu ersetzen und die Fahrgestellnummer vom Auto auch. Falls ich noch was persönliches übersehen habe, auch hier kurze Meldung 😉

                                Vielleicht hilft es dem Ein oder Anderen trotzdem..

                                var PVUeberschuss;
                                
                                
                                // Easee adapter Neustarten falls offline
                                on({id: "system.adapter.easee.0.alive"/*easee.0 alive*/, change: "ne"}, async function (obj) {
                                  var value = obj.state.val;
                                  var oldValue = obj.oldState.val;
                                  if (getState("system.adapter.easee.0.alive").val == false) {
                                    setState("system.adapter.easee.0.alive"/*easee.0 alive*/, false);
                                    setStateDelayed("system.adapter.easee.0.alive"/*easee.0 alive*/, true, 5000, false);
                                  }
                                });
                                // Easee adapter Neustarten falls offline
                                on({id: "system.adapter.easee.0.connected"/*easee.0 is connected*/, change: "ne"}, async function (obj) {
                                  var value = obj.state.val;
                                  var oldValue = obj.oldState.val;
                                  if (getState("system.adapter.easee.0.connected").val == false) {
                                    setState("system.adapter.easee.0.alive"/*easee.0 alive*/, false);
                                    setStateDelayed("system.adapter.easee.0.alive"/*easee.0 alive*/, true, 5000, false);
                                  }
                                });
                                // einfacher Zähler zum ermitteln der PV Überschussladung oder Ladung per Netzbezug (ungenau, Werte nur zur Orientierung)
                                schedule("*/10 * * * * *", async function () {
                                  if (getState("plenticore.0.devices.local.Pv_P").val - (getState("plenticore.0.devices.local.Home_P").val - getState("easee.0.XXXX1234.status.totalPower").val * 1000) > 0) {
                                    PVUeberschuss = getState("plenticore.0.devices.local.Pv_P").val - (getState("plenticore.0.devices.local.Home_P").val - getState("easee.0.XXXX1234.status.totalPower").val * 1000);
                                  } else {
                                    PVUeberschuss = 0;
                                  }
                                  if (getState("easee.0.XXXX1234.status.totalPower").val * 1000 > 100 && getState("easee.0.XXXX1234.status.totalPower").val * 1000 <= PVUeberschuss) {
                                    setState("0_userdata.0.Stromverbrauch.LadeleistungMitPvÜberschuss"/*LadeleistungMitPvÜberschuss*/, (getState("0_userdata.0.Stromverbrauch.LadeleistungMitPvÜberschuss").val + (getState("easee.0.XXXX1234.status.totalPower").val * 1000) / 360));
                                    setState("0_userdata.0.Stromverbrauch.LadeleistungMitPvUeberschussTag"/*LadeleistungMitPvUeberschussTag*/, (getState("0_userdata.0.Stromverbrauch.LadeleistungMitPvUeberschussTag").val + (getState("easee.0.XXXX1234.status.totalPower").val * 1000) / 360));
                                    setState("0_userdata.0.Stromverbrauch.LadeleistungMitPvUeberschussMonat"/*LadeleistungMitPvUeberschussMonat*/, (getState("0_userdata.0.Stromverbrauch.LadeleistungMitPvUeberschussMonat").val + (getState("easee.0.XXXX1234.status.totalPower").val * 1000) / 360));
                                  }
                                  if (getState("easee.0.XXXX1234.status.totalPower").val * 1000 > 100 && getState("easee.0.XXXX1234.status.totalPower").val * 1000 > PVUeberschuss) {
                                    setState("0_userdata.0.Stromverbrauch.LadeleistungMitPvÜberschuss"/*LadeleistungMitPvÜberschuss*/, (getState("0_userdata.0.Stromverbrauch.LadeleistungMitPvÜberschuss").val + PVUeberschuss / 360));
                                    setState("0_userdata.0.Stromverbrauch.LadeleistungMitPvUeberschussTag"/*LadeleistungMitPvUeberschussTag*/, (getState("0_userdata.0.Stromverbrauch.LadeleistungMitPvUeberschussTag").val + PVUeberschuss / 360));
                                    setState("0_userdata.0.Stromverbrauch.LadeleistungMitPvUeberschussMonat"/*LadeleistungMitPvUeberschussMonat*/, (getState("0_userdata.0.Stromverbrauch.LadeleistungMitPvUeberschussMonat").val + PVUeberschuss / 360));
                                    setState("0_userdata.0.Stromverbrauch.LadeleistungMitNetzbezug"/*LadeleistungMitNetzbezug*/, (getState("0_userdata.0.Stromverbrauch.LadeleistungMitNetzbezug").val + (getState("easee.0.XXXX1234.status.totalPower").val * 1000 - PVUeberschuss) / 360));
                                    setState("0_userdata.0.Stromverbrauch.LadeleistungMitNetzbezugTag"/*LadeleistungMitNetzbezugTag*/, (getState("0_userdata.0.Stromverbrauch.LadeleistungMitNetzbezugTag").val + (getState("easee.0.XXXX1234.status.totalPower").val * 1000 - PVUeberschuss) / 360));
                                    setState("0_userdata.0.Stromverbrauch.LadeleistungMitNetzbezugMonat"/*LadeleistungMitNetzbezugMonat*/, (getState("0_userdata.0.Stromverbrauch.LadeleistungMitNetzbezugMonat").val + (getState("easee.0.XXXX1234.status.totalPower").val * 1000 - PVUeberschuss) / 360));
                                    console.log(('Ladeleistung' + String(getState("easee.0.XXXX1234.status.totalPower").val * 1000)));
                                    console.log(('PV Leistung' + String(getState("plenticore.0.devices.local.Pv_P").val)));
                                    console.log(('Leistung Über PV' + String(PVUeberschuss)));
                                    console.log(('Leistung Netzbezug' + String(getState("easee.0.XXXX1234.status.totalPower").val * 1000 - PVUeberschuss)));
                                  }
                                });
                                // Zurücksetzen des Tageszählers
                                schedule("0 0 * * *", async function () {
                                  setState("0_userdata.0.Stromverbrauch.LadeleistungMitPvUeberschussTag"/*LadeleistungMitPvUeberschussTag*/, 0);
                                  setState("0_userdata.0.Stromverbrauch.LadeleistungMitNetzbezugTag"/*LadeleistungMitNetzbezugTag*/, 0);
                                });
                                // Zurücksetzen des Monatszählers
                                schedule("0 0 1 * *", async function () {
                                  setState("0_userdata.0.Stromverbrauch.LadeleistungMitPvUeberschussMonat"/*LadeleistungMitPvUeberschussMonat*/, 0);
                                  setState("0_userdata.0.Stromverbrauch.LadeleistungMitNetzbezugMonat"/*LadeleistungMitNetzbezugMonat*/, 0);
                                });
                                schedule("*/30 * * * * *", async function () {
                                  // PV Überschuss ermitteln
                                  PVUeberschuss = getState("plenticore.0.devices.local.Pv_P").val - (getState("plenticore.0.devices.local.Home_P").val - getState("easee.0.XXXX1234.status.totalPower").val * 1000);
                                  // wenn PV Überschuss größer als minimale Ladeleistung (6A) und ... setze DynamicChargerCurrent auf den Wert des PV Überschusses
                                  if (getState("vw-connect.0.XXXZZZXXXXXX12345.charger.status.batteryStatusData.stateOfCharge.content").val < 100 && getState("easee.0.XXXX1234.config.dynamicChargerCurrent").val != Math.round(PVUeberschuss / getState("easee.0.XXXX1234.status.voltage").val) && getState("0_userdata.0.Manuelles_laden").val != true && Math.round(PVUeberschuss / getState("easee.0.XXXX1234.status.voltage").val) >= 6 && getState("easee.0.XXXX1234.status.chargerOpMode").val != 1 && getState("vw-connect.0.XXXZZZXXXXXX12345.timer.timersAndProfiles.timerList.timer01.timerProgrammedStatus").val == 'notProgrammed' && getState("vw-connect.0.XXXZZZXXXXXX12345.timer.timersAndProfiles.timerList.timer02.timerProgrammedStatus").val == 'notProgrammed') {
                                    console.log(('Setze Dynamic Chargercurrent auf: ' + String(Math.round(PVUeberschuss / getState("easee.0.XXXX1234.status.voltage").val))));
                                    setState("easee.0.XXXX1234.config.dynamicChargerCurrent"/*Dynamic max current this charger is allowed to offer to car (A)*/, (Math.round(PVUeberschuss / getState("easee.0.XXXX1234.status.voltage").val)));
                                    if (getState("easee.0.XXXX1234.status.chargerOpMode").val != 3) {
                                      console.log(('PV Überschussladen' + ''));
                                      getState("easee.0.XXXX1234.control.resume", function (err, state) {
                                          setState("easee.0.XXXX1234.control.resume"/*Resume charging*/, state ? !state.val : true);
                                      });
                                    }
                                    // wenn Timer aktiv, oder manuelles Laden (HomeKit Schalter) aktiv, setze DynamicChargerCurrent auf 16A und starte das Laden
                                  } else if (getState("easee.0.XXXX1234.status.chargerOpMode").val != 1 && getState("0_userdata.0.Manuelles_laden").val == true || getState("easee.0.XXXX1234.status.chargerOpMode").val != 1 && (getState("vw-connect.0.XXXZZZXXXXXX12345.timer.timersAndProfiles.timerList.timer01.timerProgrammedStatus").val == 'programmed' || getState("vw-connect.0.XXXZZZXXXXXX12345.timer.timersAndProfiles.timerList.timer02.timerProgrammedStatus").val == 'programmed' || getState("vw-connect.0.XXXZZZXXXXXX12345.timer.timersAndProfiles.timerList.timer03.timerProgrammedStatus").val == 'programmed')) {
                                    console.log(('Timer/manuelles Laden gestartet' + ''));
                                    setState("easee.0.XXXX1234.config.dynamicChargerCurrent"/*Dynamic max current this charger is allowed to offer to car (A)*/, 16);
                                    if (getState("easee.0.XXXX1234.status.chargerOpMode").val != 3) {
                                      console.log(('Time Charging gestartet' + ''));
                                      getState("easee.0.XXXX1234.control.resume", function (err, state) {
                                          setState("easee.0.XXXX1234.control.resume"/*Resume charging*/, state ? !state.val : true);
                                      });
                                    }
                                    // Nicht laden wenn kein Timer, kein PV Überschuss und Schalter aktiv
                                  } else if (getState("easee.0.XXXX1234.status.chargerOpMode").val != 1 && getState("easee.0.XXXX1234.status.chargerOpMode").val != 2 && Math.round(PVUeberschuss / getState("easee.0.XXXX1234.status.voltage").val) < 6 && getState("0_userdata.0.Manuelles_laden").val == false && (getState("vw-connect.0.XXXZZZXXXXXX12345.timer.timersAndProfiles.timerList.timer01.timerProgrammedStatus").val == 'notProgrammed' || getState("vw-connect.0.XXXZZZXXXXXX12345.timer.timersAndProfiles.timerList.timer02.timerProgrammedStatus").val == 'notProgrammed' || getState("vw-connect.0.XXXZZZXXXXXX12345.timer.timersAndProfiles.timerList.timer03.timerProgrammedStatus").val == 'notProgrammed')) {
                                    console.log(('Pause Charging weil kein PV, kein Timer und kein manueller start' + ''));
                                    setState("easee.0.XXXX1234.config.dynamicChargerCurrent"/*Dynamic max current this charger is allowed to offer to car (A)*/, 16);
                                    getState("easee.0.XXXX1234.control.pause", function (err, state) {
                                        setState("easee.0.XXXX1234.control.pause"/*Pause charging*/, state ? !state.val : true);
                                    });
                                  }
                                });
                                // Wenn Kabel raus, manuelles Laden-Schalter auf "false"
                                on({id: "easee.0.XXXX1234.status.chargerOpMode"/*Charger operation mode according to charger mode table*/, change: "ne"}, async function (obj) {
                                  var value = obj.state.val;
                                  var oldValue = obj.oldState.val;
                                  if (getState("easee.0.XXXX1234.status.chargerOpMode").val == 1) {
                                    setState("0_userdata.0.Manuelles_laden"/*Manuelles laden*/, false);
                                  }
                                });
                                
                                A 1 Reply Last reply
                                0
                                • S stonemaan

                                  ich habe mal mein Blockly Script unten eingefügt. Es funktioniert für meinen Anwendungszweck super. Es geht bedingt durch die Timerabfrage aber nur für "das Eine" Auto. Wer also das Auto vom Freund aufladen möchte, muss den Schalter an machen.

                                  Die eigentliche Überschusssteuerung findet ihr ab Zeile 57. Davor habe ich nur einen kleinen (sehr ungenauen) Zähler eingebaut.

                                  Randnotiz: ich bin kein Programmierer und hab mit Informatik wenig am Hut, falls da dinge doppelt oder schwachsinnig drin sind, sagst mir bitte 😉 Ich habe mich bemüht, die Seriennummer von der Easee zu ersetzen und die Fahrgestellnummer vom Auto auch. Falls ich noch was persönliches übersehen habe, auch hier kurze Meldung 😉

                                  Vielleicht hilft es dem Ein oder Anderen trotzdem..

                                  var PVUeberschuss;
                                  
                                  
                                  // Easee adapter Neustarten falls offline
                                  on({id: "system.adapter.easee.0.alive"/*easee.0 alive*/, change: "ne"}, async function (obj) {
                                    var value = obj.state.val;
                                    var oldValue = obj.oldState.val;
                                    if (getState("system.adapter.easee.0.alive").val == false) {
                                      setState("system.adapter.easee.0.alive"/*easee.0 alive*/, false);
                                      setStateDelayed("system.adapter.easee.0.alive"/*easee.0 alive*/, true, 5000, false);
                                    }
                                  });
                                  // Easee adapter Neustarten falls offline
                                  on({id: "system.adapter.easee.0.connected"/*easee.0 is connected*/, change: "ne"}, async function (obj) {
                                    var value = obj.state.val;
                                    var oldValue = obj.oldState.val;
                                    if (getState("system.adapter.easee.0.connected").val == false) {
                                      setState("system.adapter.easee.0.alive"/*easee.0 alive*/, false);
                                      setStateDelayed("system.adapter.easee.0.alive"/*easee.0 alive*/, true, 5000, false);
                                    }
                                  });
                                  // einfacher Zähler zum ermitteln der PV Überschussladung oder Ladung per Netzbezug (ungenau, Werte nur zur Orientierung)
                                  schedule("*/10 * * * * *", async function () {
                                    if (getState("plenticore.0.devices.local.Pv_P").val - (getState("plenticore.0.devices.local.Home_P").val - getState("easee.0.XXXX1234.status.totalPower").val * 1000) > 0) {
                                      PVUeberschuss = getState("plenticore.0.devices.local.Pv_P").val - (getState("plenticore.0.devices.local.Home_P").val - getState("easee.0.XXXX1234.status.totalPower").val * 1000);
                                    } else {
                                      PVUeberschuss = 0;
                                    }
                                    if (getState("easee.0.XXXX1234.status.totalPower").val * 1000 > 100 && getState("easee.0.XXXX1234.status.totalPower").val * 1000 <= PVUeberschuss) {
                                      setState("0_userdata.0.Stromverbrauch.LadeleistungMitPvÜberschuss"/*LadeleistungMitPvÜberschuss*/, (getState("0_userdata.0.Stromverbrauch.LadeleistungMitPvÜberschuss").val + (getState("easee.0.XXXX1234.status.totalPower").val * 1000) / 360));
                                      setState("0_userdata.0.Stromverbrauch.LadeleistungMitPvUeberschussTag"/*LadeleistungMitPvUeberschussTag*/, (getState("0_userdata.0.Stromverbrauch.LadeleistungMitPvUeberschussTag").val + (getState("easee.0.XXXX1234.status.totalPower").val * 1000) / 360));
                                      setState("0_userdata.0.Stromverbrauch.LadeleistungMitPvUeberschussMonat"/*LadeleistungMitPvUeberschussMonat*/, (getState("0_userdata.0.Stromverbrauch.LadeleistungMitPvUeberschussMonat").val + (getState("easee.0.XXXX1234.status.totalPower").val * 1000) / 360));
                                    }
                                    if (getState("easee.0.XXXX1234.status.totalPower").val * 1000 > 100 && getState("easee.0.XXXX1234.status.totalPower").val * 1000 > PVUeberschuss) {
                                      setState("0_userdata.0.Stromverbrauch.LadeleistungMitPvÜberschuss"/*LadeleistungMitPvÜberschuss*/, (getState("0_userdata.0.Stromverbrauch.LadeleistungMitPvÜberschuss").val + PVUeberschuss / 360));
                                      setState("0_userdata.0.Stromverbrauch.LadeleistungMitPvUeberschussTag"/*LadeleistungMitPvUeberschussTag*/, (getState("0_userdata.0.Stromverbrauch.LadeleistungMitPvUeberschussTag").val + PVUeberschuss / 360));
                                      setState("0_userdata.0.Stromverbrauch.LadeleistungMitPvUeberschussMonat"/*LadeleistungMitPvUeberschussMonat*/, (getState("0_userdata.0.Stromverbrauch.LadeleistungMitPvUeberschussMonat").val + PVUeberschuss / 360));
                                      setState("0_userdata.0.Stromverbrauch.LadeleistungMitNetzbezug"/*LadeleistungMitNetzbezug*/, (getState("0_userdata.0.Stromverbrauch.LadeleistungMitNetzbezug").val + (getState("easee.0.XXXX1234.status.totalPower").val * 1000 - PVUeberschuss) / 360));
                                      setState("0_userdata.0.Stromverbrauch.LadeleistungMitNetzbezugTag"/*LadeleistungMitNetzbezugTag*/, (getState("0_userdata.0.Stromverbrauch.LadeleistungMitNetzbezugTag").val + (getState("easee.0.XXXX1234.status.totalPower").val * 1000 - PVUeberschuss) / 360));
                                      setState("0_userdata.0.Stromverbrauch.LadeleistungMitNetzbezugMonat"/*LadeleistungMitNetzbezugMonat*/, (getState("0_userdata.0.Stromverbrauch.LadeleistungMitNetzbezugMonat").val + (getState("easee.0.XXXX1234.status.totalPower").val * 1000 - PVUeberschuss) / 360));
                                      console.log(('Ladeleistung' + String(getState("easee.0.XXXX1234.status.totalPower").val * 1000)));
                                      console.log(('PV Leistung' + String(getState("plenticore.0.devices.local.Pv_P").val)));
                                      console.log(('Leistung Über PV' + String(PVUeberschuss)));
                                      console.log(('Leistung Netzbezug' + String(getState("easee.0.XXXX1234.status.totalPower").val * 1000 - PVUeberschuss)));
                                    }
                                  });
                                  // Zurücksetzen des Tageszählers
                                  schedule("0 0 * * *", async function () {
                                    setState("0_userdata.0.Stromverbrauch.LadeleistungMitPvUeberschussTag"/*LadeleistungMitPvUeberschussTag*/, 0);
                                    setState("0_userdata.0.Stromverbrauch.LadeleistungMitNetzbezugTag"/*LadeleistungMitNetzbezugTag*/, 0);
                                  });
                                  // Zurücksetzen des Monatszählers
                                  schedule("0 0 1 * *", async function () {
                                    setState("0_userdata.0.Stromverbrauch.LadeleistungMitPvUeberschussMonat"/*LadeleistungMitPvUeberschussMonat*/, 0);
                                    setState("0_userdata.0.Stromverbrauch.LadeleistungMitNetzbezugMonat"/*LadeleistungMitNetzbezugMonat*/, 0);
                                  });
                                  schedule("*/30 * * * * *", async function () {
                                    // PV Überschuss ermitteln
                                    PVUeberschuss = getState("plenticore.0.devices.local.Pv_P").val - (getState("plenticore.0.devices.local.Home_P").val - getState("easee.0.XXXX1234.status.totalPower").val * 1000);
                                    // wenn PV Überschuss größer als minimale Ladeleistung (6A) und ... setze DynamicChargerCurrent auf den Wert des PV Überschusses
                                    if (getState("vw-connect.0.XXXZZZXXXXXX12345.charger.status.batteryStatusData.stateOfCharge.content").val < 100 && getState("easee.0.XXXX1234.config.dynamicChargerCurrent").val != Math.round(PVUeberschuss / getState("easee.0.XXXX1234.status.voltage").val) && getState("0_userdata.0.Manuelles_laden").val != true && Math.round(PVUeberschuss / getState("easee.0.XXXX1234.status.voltage").val) >= 6 && getState("easee.0.XXXX1234.status.chargerOpMode").val != 1 && getState("vw-connect.0.XXXZZZXXXXXX12345.timer.timersAndProfiles.timerList.timer01.timerProgrammedStatus").val == 'notProgrammed' && getState("vw-connect.0.XXXZZZXXXXXX12345.timer.timersAndProfiles.timerList.timer02.timerProgrammedStatus").val == 'notProgrammed') {
                                      console.log(('Setze Dynamic Chargercurrent auf: ' + String(Math.round(PVUeberschuss / getState("easee.0.XXXX1234.status.voltage").val))));
                                      setState("easee.0.XXXX1234.config.dynamicChargerCurrent"/*Dynamic max current this charger is allowed to offer to car (A)*/, (Math.round(PVUeberschuss / getState("easee.0.XXXX1234.status.voltage").val)));
                                      if (getState("easee.0.XXXX1234.status.chargerOpMode").val != 3) {
                                        console.log(('PV Überschussladen' + ''));
                                        getState("easee.0.XXXX1234.control.resume", function (err, state) {
                                            setState("easee.0.XXXX1234.control.resume"/*Resume charging*/, state ? !state.val : true);
                                        });
                                      }
                                      // wenn Timer aktiv, oder manuelles Laden (HomeKit Schalter) aktiv, setze DynamicChargerCurrent auf 16A und starte das Laden
                                    } else if (getState("easee.0.XXXX1234.status.chargerOpMode").val != 1 && getState("0_userdata.0.Manuelles_laden").val == true || getState("easee.0.XXXX1234.status.chargerOpMode").val != 1 && (getState("vw-connect.0.XXXZZZXXXXXX12345.timer.timersAndProfiles.timerList.timer01.timerProgrammedStatus").val == 'programmed' || getState("vw-connect.0.XXXZZZXXXXXX12345.timer.timersAndProfiles.timerList.timer02.timerProgrammedStatus").val == 'programmed' || getState("vw-connect.0.XXXZZZXXXXXX12345.timer.timersAndProfiles.timerList.timer03.timerProgrammedStatus").val == 'programmed')) {
                                      console.log(('Timer/manuelles Laden gestartet' + ''));
                                      setState("easee.0.XXXX1234.config.dynamicChargerCurrent"/*Dynamic max current this charger is allowed to offer to car (A)*/, 16);
                                      if (getState("easee.0.XXXX1234.status.chargerOpMode").val != 3) {
                                        console.log(('Time Charging gestartet' + ''));
                                        getState("easee.0.XXXX1234.control.resume", function (err, state) {
                                            setState("easee.0.XXXX1234.control.resume"/*Resume charging*/, state ? !state.val : true);
                                        });
                                      }
                                      // Nicht laden wenn kein Timer, kein PV Überschuss und Schalter aktiv
                                    } else if (getState("easee.0.XXXX1234.status.chargerOpMode").val != 1 && getState("easee.0.XXXX1234.status.chargerOpMode").val != 2 && Math.round(PVUeberschuss / getState("easee.0.XXXX1234.status.voltage").val) < 6 && getState("0_userdata.0.Manuelles_laden").val == false && (getState("vw-connect.0.XXXZZZXXXXXX12345.timer.timersAndProfiles.timerList.timer01.timerProgrammedStatus").val == 'notProgrammed' || getState("vw-connect.0.XXXZZZXXXXXX12345.timer.timersAndProfiles.timerList.timer02.timerProgrammedStatus").val == 'notProgrammed' || getState("vw-connect.0.XXXZZZXXXXXX12345.timer.timersAndProfiles.timerList.timer03.timerProgrammedStatus").val == 'notProgrammed')) {
                                      console.log(('Pause Charging weil kein PV, kein Timer und kein manueller start' + ''));
                                      setState("easee.0.XXXX1234.config.dynamicChargerCurrent"/*Dynamic max current this charger is allowed to offer to car (A)*/, 16);
                                      getState("easee.0.XXXX1234.control.pause", function (err, state) {
                                          setState("easee.0.XXXX1234.control.pause"/*Pause charging*/, state ? !state.val : true);
                                      });
                                    }
                                  });
                                  // Wenn Kabel raus, manuelles Laden-Schalter auf "false"
                                  on({id: "easee.0.XXXX1234.status.chargerOpMode"/*Charger operation mode according to charger mode table*/, change: "ne"}, async function (obj) {
                                    var value = obj.state.val;
                                    var oldValue = obj.oldState.val;
                                    if (getState("easee.0.XXXX1234.status.chargerOpMode").val == 1) {
                                      setState("0_userdata.0.Manuelles_laden"/*Manuelles laden*/, false);
                                    }
                                  });
                                  
                                  A Offline
                                  A Offline
                                  Aiouh
                                  wrote on last edited by
                                  #184

                                  @stonemaan Ich wollte mich gerade mal mit Deinem script beschäftigen, kann es aber leider nicht importieren. Kannst Du die Blöcke bitte nochmal exportieren?

                                  1 Reply Last reply
                                  0
                                  • S stonemaan

                                    Wenn du nur eine Wallbox hast, kannst du die CircuitMaxCurrentP1 verwenden. Die Dynamic Charger bezieht sich auf die einzelne Wallbox und die circuit current auf den Stromkreis - sofern du mehrere easees hast 😉
                                    Daher ist bei mehreren die Dynamic Charger zu bevorzugen. Sonst regelst du den Strom aller wallboxen herunter.

                                    A Offline
                                    A Offline
                                    Aiouh
                                    wrote on last edited by
                                    #185

                                    @stonemaan Hallo, ich bin gerade noch auf einen post dazu gestoßen der interessant ist
                                    hier. Insbesondere finde ich interessant:

                                    "...We are in contact with the easee engineers, so they have explained a few things to us that are not obvious. Among these are the fact that settings are generally stored in flash in the charger and we should not change these to often because it can wear out... For instance a setting like the max charger current will write to flash, while the dynamic charger current and circuit dynamic currents are safe to update as often as you like since they are not stored in flash....
                                    But nevertheless, I think using the dynamic circuit current is what easee recommends for user/integrator control and then let the charger do its decisions based on that.
                                    Anyway, using dynamic circuit current also allows you to control which phase to use, not only to switch between 3 and 1 phase."

                                    Ich werde also versuchen dynamic verwenden womit ich auch noch die Phase bestimmen kann, was bei meiner einpghasigen PV von Vorteil ist. Ich lade mit der Phase, in die auch die PV eingespeisst wird.

                                    S 1 Reply Last reply
                                    0
                                    • A Aiouh

                                      @stonemaan Hallo, ich bin gerade noch auf einen post dazu gestoßen der interessant ist
                                      hier. Insbesondere finde ich interessant:

                                      "...We are in contact with the easee engineers, so they have explained a few things to us that are not obvious. Among these are the fact that settings are generally stored in flash in the charger and we should not change these to often because it can wear out... For instance a setting like the max charger current will write to flash, while the dynamic charger current and circuit dynamic currents are safe to update as often as you like since they are not stored in flash....
                                      But nevertheless, I think using the dynamic circuit current is what easee recommends for user/integrator control and then let the charger do its decisions based on that.
                                      Anyway, using dynamic circuit current also allows you to control which phase to use, not only to switch between 3 and 1 phase."

                                      Ich werde also versuchen dynamic verwenden womit ich auch noch die Phase bestimmen kann, was bei meiner einpghasigen PV von Vorteil ist. Ich lade mit der Phase, in die auch die PV eingespeisst wird.

                                      S Offline
                                      S Offline
                                      stonemaan
                                      wrote on last edited by
                                      #186

                                      @aiouh sehr interessante Info, mein Script läuft ja mit der DynamicChargerCurrent. von daher auf der sicheren Seite.
                                      Hier noch mein Script als Blockly export. ich habe es mal als html gespeichert. hoffe man kann damit was anfangen:

                                      Script.html

                                      A S 2 Replies Last reply
                                      1
                                      • S stonemaan

                                        @aiouh sehr interessante Info, mein Script läuft ja mit der DynamicChargerCurrent. von daher auf der sicheren Seite.
                                        Hier noch mein Script als Blockly export. ich habe es mal als html gespeichert. hoffe man kann damit was anfangen:

                                        Script.html

                                        A Offline
                                        A Offline
                                        Aiouh
                                        wrote on last edited by
                                        #187

                                        @stonemaan Import hat geklappt, Danke, nun mach ich mich ans Verstehen 😉

                                        S 1 Reply Last reply
                                        0
                                        • A Aiouh

                                          @stonemaan Import hat geklappt, Danke, nun mach ich mich ans Verstehen 😉

                                          S Offline
                                          S Offline
                                          stonemaan
                                          wrote on last edited by
                                          #188

                                          @aiouh Viel erfolg 😉

                                          A 1 Reply Last reply
                                          0
                                          Reply
                                          • Reply as topic
                                          Log in to reply
                                          • Oldest to Newest
                                          • Newest to Oldest
                                          • Most Votes


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate
                                          FAQ Cloud / IOT
                                          HowTo: Node.js-Update
                                          HowTo: Backup/Restore
                                          Downloads
                                          BLOG

                                          528

                                          Online

                                          32.4k

                                          Users

                                          81.4k

                                          Topics

                                          1.3m

                                          Posts
                                          Community
                                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                          ioBroker Community 2014-2025
                                          logo
                                          • Login

                                          • Don't have an account? Register

                                          • Login or register to search.
                                          • First post
                                            Last post
                                          0
                                          • Recent
                                          • Tags
                                          • Unread 0
                                          • Categories
                                          • Unreplied
                                          • Popular
                                          • GitHub
                                          • Docu
                                          • Hilfe