Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. Script Ladesteuerung PV Wallbox

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    Script Ladesteuerung PV Wallbox

    This topic has been deleted. Only users with topic management privileges can see it.
    • N
      nightdoom last edited by

      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

      Glasfaser 1 Reply Last reply Reply Quote 0
      • Glasfaser
        Glasfaser @nightdoom last edited by 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 1 Reply Last reply Reply Quote 0
        • N
          nightdoom @Glasfaser last edited by

          @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 Reply Last reply Reply Quote 0
          • First post
            Last post

          Support us

          ioBroker
          Community Adapters
          Donate

          438
          Online

          31.8k
          Users

          80.0k
          Topics

          1.3m
          Posts

          2
          3
          318
          Loading More Posts
          • Oldest to Newest
          • Newest to Oldest
          • Most Votes
          Reply
          • Reply as topic
          Log in to reply
          Community
          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
          The ioBroker Community 2014-2023
          logo