Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. JavaScript
  5. Script Ladesteuerung PV Wallbox

NEWS

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    11
    1
    476

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    24
    1
    1.6k

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

Script Ladesteuerung PV Wallbox

Geplant Angeheftet Gesperrt Verschoben JavaScript
3 Beiträge 2 Kommentatoren 341 Aufrufe 3 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • N Offline
    N Offline
    nightdoom
    schrieb am zuletzt editiert von
    #1

    Hallo zusammen,
    habe ein Skript gefunden für die Ladesteuerung vom E-Auto (Überschussladen). Alles läuft im Iobroker über Modbus. Modbus 0 ist die Ladesteuerung (Phonix Contact EV Charge Control) und der Stromzähler ist über Modbus 1 angeschlossen. Werte von Ihm bekomme ich rein (Überschuss) und der Controller für das Auto ist auch da inkl. richtiger Werte. Allerdings habe ich zwei Probleme:

    1. Im Register 300 (diskreter Ausgang) versuche ich immer den Wert des Überschusses in Ampere zu übermitteln. Es wird auch der richtige Wert übermittelt (z.B. 6), er springt aber immer wieder auf 5 zurück (unter 6 keine Ladung). Keine Ahnung warum. Über Webif des Controllers klappt es ohne Probleme.
    2. Die Auswertung des Datenpunktes vom Stromzähler klappt nicht obwohl dort der richtige Wert ist und übertragen wird. Scheinbar immer=0.
      Hier das angepasst Skript für JavaSkript noch dazu:
      schedule("*/30 * * * * *", function () {
      if (getState("modbus.0.coils.400Ladefreigabe").val == false) {
      setState("modbus.0.coils.400_Ladefreigabe"/Ladefreigabe/, true);
      setStateDelayed("modbus.0.coils.400_Ladefreigabe"/Ladefreigabe/, true, 3000, false);
      }
      // Aktuellen Ladestrom in Variable schreiben
      Ladestrom_verfuegbar = 0;
      Ladestrom_verfuegbar = getState("modbus.1.inputRegisters.52_Ladestrom").val;
      Aktueller_Ladestrom = getState("modbus.0.inputRegisters.100_Strom").val;
      // Den neuen LS kennen wir noch nicht -> 0
      Neuer_Ladestrom = 0;
      if (Ladestrom_verfuegbar <= 1610) {
      if (Ladestrom_verfuegbar >= 1000 && Ladestrom_verfuegbar <= 1610) {
      // 6A ist Minimum, und da wir immer ein bisschen übrig haben wollen, gehen wir bis unter die Grenze von 7A hoch (1610W)
      Neuer_Ladestrom = 6;
      } else if (false) {
      }
      } else if (Ladestrom_verfuegbar >= 1611 && Ladestrom_verfuegbar <= 1840) {
      Neuer_Ladestrom = 7;
      } else if (Ladestrom_verfuegbar >= 1841 && Ladestrom_verfuegbar <= 2070) {
      Neuer_Ladestrom = 8;
      } else if (Ladestrom_verfuegbar >= 2071 && Ladestrom_verfuegbar <= 2300) {
      Neuer_Ladestrom = 9;
      } else if (Ladestrom_verfuegbar >= 2301 && Ladestrom_verfuegbar <= 2530) {
      Neuer_Ladestrom = 10;
      } else if (Ladestrom_verfuegbar >= 2531 && Ladestrom_verfuegbar <= 2760) {
      Neuer_Ladestrom = 11;
      } else if (Ladestrom_verfuegbar >= 2761 && Ladestrom_verfuegbar <= 2990) {
      Neuer_Ladestrom = 12;
      } else if (Ladestrom_verfuegbar >= 2991 && Ladestrom_verfuegbar <= 3220) {
      Neuer_Ladestrom = 13;
      } else if (Ladestrom_verfuegbar >= 3221 && Ladestrom_verfuegbar <= 3450) {
      Neuer_Ladestrom = 14;
      } else if (Ladestrom_verfuegbar >= 3451 && Ladestrom_verfuegbar <= 3680) {
      Neuer_Ladestrom = 15;
      } else if (Ladestrom_verfuegbar >= 3681 && Ladestrom_verfuegbar <= 3910) {
      Neuer_Ladestrom = 16;
      } else if (Ladestrom_verfuegbar >= 3911 && Ladestrom_verfuegbar <= 4140) {
      Neuer_Ladestrom = 17;
      } else if (Ladestrom_verfuegbar >= 4141 && Ladestrom_verfuegbar <= 4370) {
      Neuer_Ladestrom = 18;
      } else if (Ladestrom_verfuegbar >= 4371 && Ladestrom_verfuegbar <= 4600) {
      Neuer_Ladestrom = 19;
      } else if (Ladestrom_verfuegbar >= 4601) {
      Neuer_Ladestrom = 20;
      }
      // Jetzt wissen wir den neuen Ladestrom! Alt=neu?
      if (Aktueller_Ladestrom != Neuer_Ladestrom) {
      // Oh, was Neues! Gleich an PV_Ladestrom geben!
      console.log((['Ladestrom verändert, wird von ',Aktueller_Ladestrom,' verändert auf ',Neuer_Ladestrom].join('')));
      setState("modbus.0.holdingRegisters.300_Ladestromstaerke", Neuer_Ladestrom);
      } else {
      // Nix Neues, nix zu tun
      console.log((['Ladestrom gleichgeblieben, bleibt bei ',Aktueller_Ladestrom,' (neu wäre ',Neuer_Ladestrom,' gewesen)'].join('')));
      }
      } else {
      // Minimalerzeugung nicht erreicht, also wird nicht nach PV-Überschuss geladen!
      if (getState("modbus.0.coils.400_Ladefreigabe").val == true) {
      setState("modbus.0.coils.400_Ladefreigabe"/Ladefreigabe/, false);
      setStateDelayed("modbus.0.coils.400_Ladefreigabe"/Ladefreigabe/, false, 3000, false);
      }
      }
      } else {
      // Wir sind nicht im AUTO Modus des Ladereglers, nix zu tun
      }
      } else {
      // Wechselrichter schläft, nix zu tun.
      }
      });
      Eventuell kann hier mir jemand helfen. Sitze da ratlos davor und finde den Fehler nicht.

    Danke

    GlasfaserG 1 Antwort Letzte Antwort
    0
    • N nightdoom

      Hallo zusammen,
      habe ein Skript gefunden für die Ladesteuerung vom E-Auto (Überschussladen). Alles läuft im Iobroker über Modbus. Modbus 0 ist die Ladesteuerung (Phonix Contact EV Charge Control) und der Stromzähler ist über Modbus 1 angeschlossen. Werte von Ihm bekomme ich rein (Überschuss) und der Controller für das Auto ist auch da inkl. richtiger Werte. Allerdings habe ich zwei Probleme:

      1. Im Register 300 (diskreter Ausgang) versuche ich immer den Wert des Überschusses in Ampere zu übermitteln. Es wird auch der richtige Wert übermittelt (z.B. 6), er springt aber immer wieder auf 5 zurück (unter 6 keine Ladung). Keine Ahnung warum. Über Webif des Controllers klappt es ohne Probleme.
      2. Die Auswertung des Datenpunktes vom Stromzähler klappt nicht obwohl dort der richtige Wert ist und übertragen wird. Scheinbar immer=0.
        Hier das angepasst Skript für JavaSkript noch dazu:
        schedule("*/30 * * * * *", function () {
        if (getState("modbus.0.coils.400Ladefreigabe").val == false) {
        setState("modbus.0.coils.400_Ladefreigabe"/Ladefreigabe/, true);
        setStateDelayed("modbus.0.coils.400_Ladefreigabe"/Ladefreigabe/, true, 3000, false);
        }
        // Aktuellen Ladestrom in Variable schreiben
        Ladestrom_verfuegbar = 0;
        Ladestrom_verfuegbar = getState("modbus.1.inputRegisters.52_Ladestrom").val;
        Aktueller_Ladestrom = getState("modbus.0.inputRegisters.100_Strom").val;
        // Den neuen LS kennen wir noch nicht -> 0
        Neuer_Ladestrom = 0;
        if (Ladestrom_verfuegbar <= 1610) {
        if (Ladestrom_verfuegbar >= 1000 && Ladestrom_verfuegbar <= 1610) {
        // 6A ist Minimum, und da wir immer ein bisschen übrig haben wollen, gehen wir bis unter die Grenze von 7A hoch (1610W)
        Neuer_Ladestrom = 6;
        } else if (false) {
        }
        } else if (Ladestrom_verfuegbar >= 1611 && Ladestrom_verfuegbar <= 1840) {
        Neuer_Ladestrom = 7;
        } else if (Ladestrom_verfuegbar >= 1841 && Ladestrom_verfuegbar <= 2070) {
        Neuer_Ladestrom = 8;
        } else if (Ladestrom_verfuegbar >= 2071 && Ladestrom_verfuegbar <= 2300) {
        Neuer_Ladestrom = 9;
        } else if (Ladestrom_verfuegbar >= 2301 && Ladestrom_verfuegbar <= 2530) {
        Neuer_Ladestrom = 10;
        } else if (Ladestrom_verfuegbar >= 2531 && Ladestrom_verfuegbar <= 2760) {
        Neuer_Ladestrom = 11;
        } else if (Ladestrom_verfuegbar >= 2761 && Ladestrom_verfuegbar <= 2990) {
        Neuer_Ladestrom = 12;
        } else if (Ladestrom_verfuegbar >= 2991 && Ladestrom_verfuegbar <= 3220) {
        Neuer_Ladestrom = 13;
        } else if (Ladestrom_verfuegbar >= 3221 && Ladestrom_verfuegbar <= 3450) {
        Neuer_Ladestrom = 14;
        } else if (Ladestrom_verfuegbar >= 3451 && Ladestrom_verfuegbar <= 3680) {
        Neuer_Ladestrom = 15;
        } else if (Ladestrom_verfuegbar >= 3681 && Ladestrom_verfuegbar <= 3910) {
        Neuer_Ladestrom = 16;
        } else if (Ladestrom_verfuegbar >= 3911 && Ladestrom_verfuegbar <= 4140) {
        Neuer_Ladestrom = 17;
        } else if (Ladestrom_verfuegbar >= 4141 && Ladestrom_verfuegbar <= 4370) {
        Neuer_Ladestrom = 18;
        } else if (Ladestrom_verfuegbar >= 4371 && Ladestrom_verfuegbar <= 4600) {
        Neuer_Ladestrom = 19;
        } else if (Ladestrom_verfuegbar >= 4601) {
        Neuer_Ladestrom = 20;
        }
        // Jetzt wissen wir den neuen Ladestrom! Alt=neu?
        if (Aktueller_Ladestrom != Neuer_Ladestrom) {
        // Oh, was Neues! Gleich an PV_Ladestrom geben!
        console.log((['Ladestrom verändert, wird von ',Aktueller_Ladestrom,' verändert auf ',Neuer_Ladestrom].join('')));
        setState("modbus.0.holdingRegisters.300_Ladestromstaerke", Neuer_Ladestrom);
        } else {
        // Nix Neues, nix zu tun
        console.log((['Ladestrom gleichgeblieben, bleibt bei ',Aktueller_Ladestrom,' (neu wäre ',Neuer_Ladestrom,' gewesen)'].join('')));
        }
        } else {
        // Minimalerzeugung nicht erreicht, also wird nicht nach PV-Überschuss geladen!
        if (getState("modbus.0.coils.400_Ladefreigabe").val == true) {
        setState("modbus.0.coils.400_Ladefreigabe"/Ladefreigabe/, false);
        setStateDelayed("modbus.0.coils.400_Ladefreigabe"/Ladefreigabe/, false, 3000, false);
        }
        }
        } else {
        // Wir sind nicht im AUTO Modus des Ladereglers, nix zu tun
        }
        } else {
        // Wechselrichter schläft, nix zu tun.
        }
        });
        Eventuell kann hier mir jemand helfen. Sitze da ratlos davor und finde den Fehler nicht.

      Danke

      GlasfaserG Online
      GlasfaserG Online
      Glasfaser
      schrieb am zuletzt editiert von Glasfaser
      #2

      @nightdoom sagte in Script Ladesteuerung PV Wallbox:

      schedule("*/30 * * * * *", function () {
      if (getState("modbus.0.coils.400Ladefreigabe").val == false) {

      du hast den _ vergessen zwischen 400 und Ladefreigabe

      modbus.0.coils.400_Ladefreigabe
      

      EDIT :

      https://www.goingelectric.de/forum/viewtopic.php?f=105&t=33502

      Synology 918+ 16GB - ioBroker in Docker v9 , VISO auf Trekstor Primebook C13 13,3" , Hikvision Domkameras mit Surveillance Station .. CCU RaspberryMatic in Synology VM .. Zigbee CC2538+CC2592 .. Sonoff .. KNX .. Modbus ..

      N 1 Antwort Letzte Antwort
      0
      • GlasfaserG Glasfaser

        @nightdoom sagte in Script Ladesteuerung PV Wallbox:

        schedule("*/30 * * * * *", function () {
        if (getState("modbus.0.coils.400Ladefreigabe").val == false) {

        du hast den _ vergessen zwischen 400 und Ladefreigabe

        modbus.0.coils.400_Ladefreigabe
        

        EDIT :

        https://www.goingelectric.de/forum/viewtopic.php?f=105&t=33502

        N Offline
        N Offline
        nightdoom
        schrieb am zuletzt editiert von
        #3

        @glasfaser
        Habe das nun geändert. War das der einzige Fehler? Bei Goingelectric (da ist das angepasste her) habe ich nach was einfachem geschaut aber nix gefunden. Das genannte scheint ja noch komplizierter zu sein.

        schedule("*/30 * * * * *", function () {
                  if (getState("modbus.0.coils.400_Ladefreigabe").val == false) {
                  setState("modbus.0.coils.400_Ladefreigabe"/*Ladefreigabe*/, true);
                  setStateDelayed("modbus.0.coils.400_Ladefreigabe"/*Ladefreigabe*/, true, 3000, false);
                }
                // Aktuellen Ladestrom in Variable schreiben
                Ladestrom_verfuegbar = 0;
                Ladestrom_verfuegbar = getState("modbus.1.inputRegisters.52_Ladestrom").val;
                Aktueller_Ladestrom = getState("modbus.0.inputRegisters.100_Strom").val;
                // Den neuen LS kennen wir noch nicht -> 0
                Neuer_Ladestrom = 0;
                if (Ladestrom_verfuegbar <= 1610) {
                  if (Ladestrom_verfuegbar >= 1000 && Ladestrom_verfuegbar <= 1610) {
                    // 6A ist Minimum, und da wir immer ein bisschen übrig haben wollen, gehen wir bis unter die Grenze von 7A hoch (1610W)
                    Neuer_Ladestrom = 6;
                  } else if (false) {
                  }
                } else if (Ladestrom_verfuegbar >= 1611 && Ladestrom_verfuegbar <= 1840) {
                  Neuer_Ladestrom = 7;
                } else if (Ladestrom_verfuegbar >= 1841 && Ladestrom_verfuegbar <= 2070) {
                  Neuer_Ladestrom = 8;
                } else if (Ladestrom_verfuegbar >= 2071 && Ladestrom_verfuegbar <= 2300) {
                  Neuer_Ladestrom = 9;
                } else if (Ladestrom_verfuegbar >= 2301 && Ladestrom_verfuegbar <= 2530) {
                  Neuer_Ladestrom = 10;
                } else if (Ladestrom_verfuegbar >= 2531 && Ladestrom_verfuegbar <= 2760) {
                  Neuer_Ladestrom = 11;
                } else if (Ladestrom_verfuegbar >= 2761 && Ladestrom_verfuegbar <= 2990) {
                  Neuer_Ladestrom = 12;
                } else if (Ladestrom_verfuegbar >= 2991 && Ladestrom_verfuegbar <= 3220) {
                  Neuer_Ladestrom = 13;
                } else if (Ladestrom_verfuegbar >= 3221 && Ladestrom_verfuegbar <= 3450) {
                  Neuer_Ladestrom = 14;
                } else if (Ladestrom_verfuegbar >= 3451 && Ladestrom_verfuegbar <= 3680) {
                  Neuer_Ladestrom = 15;
                } else if (Ladestrom_verfuegbar >= 3681 && Ladestrom_verfuegbar <= 3910) {
                  Neuer_Ladestrom = 16;
                } else if (Ladestrom_verfuegbar >= 3911 && Ladestrom_verfuegbar <= 4140) {
                  Neuer_Ladestrom = 17;
                } else if (Ladestrom_verfuegbar >= 4141 && Ladestrom_verfuegbar <= 4370) {
                  Neuer_Ladestrom = 18;
                } else if (Ladestrom_verfuegbar >= 4371 && Ladestrom_verfuegbar <= 4600) {
                  Neuer_Ladestrom = 19;
                } else if (Ladestrom_verfuegbar >= 4601) {
                  Neuer_Ladestrom = 20;
                }
                // Jetzt wissen wir den neuen Ladestrom! Alt=neu?
                if (Aktueller_Ladestrom != Neuer_Ladestrom) {
                  // Oh, was Neues! Gleich an PV_Ladestrom geben!
                  console.log((['Ladestrom verändert, wird von ',Aktueller_Ladestrom,' verändert auf ',Neuer_Ladestrom].join('')));
                  setState("modbus.0.holdingRegisters.300_Ladestromstaerke", Neuer_Ladestrom);
                } else {
                  // Nix Neues, nix zu tun
                  console.log((['Ladestrom gleichgeblieben, bleibt bei ',Aktueller_Ladestrom,' (neu wäre ',Neuer_Ladestrom,' gewesen)'].join('')));
                }
              } else {
                // Minimalerzeugung nicht erreicht, also wird nicht nach PV-Überschuss geladen!
                if (getState("modbus.0.coils.400_Ladefreigabe").val == true) {
                  setState("modbus.0.coils.400_Ladefreigabe"/*Ladefreigabe*/, false);
                  setStateDelayed("modbus.0.coils.400_Ladefreigabe"/*Ladefreigabe*/, false, 3000, false);
                }
              }
            } else {
              // Wir sind nicht im AUTO Modus des Ladereglers, nix zu tun
            }
          } else {
            // Wechselrichter schläft, nix zu tun.
          }
        });
        
        1 Antwort Letzte Antwort
        0
        Antworten
        • In einem neuen Thema antworten
        Anmelden zum Antworten
        • Älteste zuerst
        • Neuste zuerst
        • Meiste Stimmen


        Support us

        ioBroker
        Community Adapters
        Donate

        566

        Online

        32.5k

        Benutzer

        81.8k

        Themen

        1.3m

        Beiträge
        Community
        Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
        ioBroker Community 2014-2025
        logo
        • Anmelden

        • Du hast noch kein Konto? Registrieren

        • Anmelden oder registrieren, um zu suchen
        • Erster Beitrag
          Letzter Beitrag
        0
        • Home
        • Aktuell
        • Tags
        • Ungelesen 0
        • Kategorien
        • Unreplied
        • Beliebt
        • GitHub
        • Docu
        • Hilfe