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. Blockly
  5. Batterieladest. mit Intervall - skript verändert sich

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    17
    1
    3.9k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    1.2k

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.5k

Batterieladest. mit Intervall - skript verändert sich

Geplant Angeheftet Gesperrt Verschoben Blockly
2 Beiträge 1 Kommentatoren 270 Aufrufe 1 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.
  • C Offline
    C Offline
    ChrisWitt
    schrieb am zuletzt editiert von ChrisWitt
    #1

    Hallo zusammen,

    habe ein Blockly geschrieben, welches abhängig vom SoC des Batteriespeiechers die Ladeleistung reduzieren soll.

    Dazu müssen nach Modbus-Doku des WR (SMA SBS 2.5) alle 6 Register zyklisch geschrieben werden. Nach Erfahrungen anderer User so alle 15-25 sek.
    Sonst verfällt der WR in den Automatikmodus.

    Das funktioniert auch soweit so gut, WR lässt sich steuern.

    Nun ändert aber das Skript einige Sachen von sich aus.

    z.b. aktualisiert er die Werte nach einer gewissen zeit auf einmal alle 5 Sekunden , und nach einem Wechsel der Leistung , also z.b. der Sprung von SoC 79 auf 80 (was eine Leistungsänderung haben sollte) schreibt er dann beide Werte , also 2200 W und 1950 W ins Register 40795.

    Wo habe ich hier den Fehler, dass sich der Zyklus "aufhängt" ?

    Ich danke für eure Hilfe

    var my_1, my_2, my_3, my_4;
    
    
    on({ id: [].concat(['modbus.0.inputRegisters.30845_BAT_SoC']), change: 'ne' }, async (obj) => {
      let value = obj.state.val;
      let oldValue = obj.oldState.val;
      if (((obj.state ? obj.state.val : '') <= 99) && ((obj.state ? obj.state.val : '') >= 98)) {
        my_1 = setInterval(async () => {
          setStateDelayed('modbus.0.holdingRegisters.40236_CmpBMSOpMod' /* Betriebsart des BMS */, 2424, 250, false);
          setStateDelayed('modbus.0.holdingRegisters.40793_BatChaMinW' /* Minimale Batterieladeleistung */, 0, 250, false);
          setStateDelayed('modbus.0.holdingRegisters.40795_BatChaMaxW' /* Maximale Batterieladeleistung */, 500, 250, false);
          setStateDelayed('modbus.0.holdingRegisters.40797_BatDschMinW' /* Minimale Batterieentladeleistung */, 0, 250, false);
          setStateDelayed('modbus.0.holdingRegisters.40799_BatDschMaxW' /* Maximale Batterieentladeleistung */, 2650, 250, false);
          setStateDelayed('modbus.0.holdingRegisters.40801_GridWSpt' /* Sollwert der Netzaustauschleistung */, 0, 250, false);
        }, 15000);
      } else if (((obj.state ? obj.state.val : '') <= 97) && ((obj.state ? obj.state.val : '') >= 90)) {
        my_2 = setInterval(async () => {
          setStateDelayed('modbus.0.holdingRegisters.40236_CmpBMSOpMod' /* Betriebsart des BMS */, 2424, 250, false);
          setStateDelayed('modbus.0.holdingRegisters.40793_BatChaMinW' /* Minimale Batterieladeleistung */, 0, 250, false);
          setStateDelayed('modbus.0.holdingRegisters.40795_BatChaMaxW' /* Maximale Batterieladeleistung */, 1650, 250, false);
          setStateDelayed('modbus.0.holdingRegisters.40797_BatDschMinW' /* Minimale Batterieentladeleistung */, 0, 250, false);
          setStateDelayed('modbus.0.holdingRegisters.40799_BatDschMaxW' /* Maximale Batterieentladeleistung */, 2650, 250, false);
          setStateDelayed('modbus.0.holdingRegisters.40801_GridWSpt' /* Sollwert der Netzaustauschleistung */, 0, 250, false);
        }, 15000);
      } else if (((obj.state ? obj.state.val : '') <= 89) && ((obj.state ? obj.state.val : '') >= 80)) {
        my_3 = setInterval(async () => {
          setStateDelayed('modbus.0.holdingRegisters.40236_CmpBMSOpMod' /* Betriebsart des BMS */, 2424, 250, false);
          setStateDelayed('modbus.0.holdingRegisters.40793_BatChaMinW' /* Minimale Batterieladeleistung */, 0, 250, false);
          setStateDelayed('modbus.0.holdingRegisters.40795_BatChaMaxW' /* Maximale Batterieladeleistung */, 1950, 250, false);
          setStateDelayed('modbus.0.holdingRegisters.40797_BatDschMinW' /* Minimale Batterieentladeleistung */, 0, 250, false);
          setStateDelayed('modbus.0.holdingRegisters.40799_BatDschMaxW' /* Maximale Batterieentladeleistung */, 2650, 250, false);
          setStateDelayed('modbus.0.holdingRegisters.40801_GridWSpt' /* Sollwert der Netzaustauschleistung */, 0, 250, false);
        }, 15000);
      } else if (((obj.state ? obj.state.val : '') <= 79) && ((obj.state ? obj.state.val : '') >= 70)) {
        my_4 = setInterval(async () => {
          setStateDelayed('modbus.0.holdingRegisters.40236_CmpBMSOpMod' /* Betriebsart des BMS */, 2424, 250, false);
          setStateDelayed('modbus.0.holdingRegisters.40793_BatChaMinW' /* Minimale Batterieladeleistung */, 0, 250, false);
          setStateDelayed('modbus.0.holdingRegisters.40795_BatChaMaxW' /* Maximale Batterieladeleistung */, 2200, 250, false);
          setStateDelayed('modbus.0.holdingRegisters.40797_BatDschMinW' /* Minimale Batterieentladeleistung */, 0, 250, false);
          setStateDelayed('modbus.0.holdingRegisters.40799_BatDschMaxW' /* Maximale Batterieentladeleistung */, 2650, 250, false);
          setStateDelayed('modbus.0.holdingRegisters.40801_GridWSpt' /* Sollwert der Netzaustauschleistung */, 0, 250, false);
        }, 15000);
      } else if ((obj.state ? obj.state.val : '') <= 69) {
        (() => { if (my_1) { clearInterval(my_1); my_1 = null; }})();
        (() => { if (my_2) { clearInterval(my_2); my_2 = null; }})();
        (() => { if (my_3) { clearInterval(my_3); my_3 = null; }})();
        (() => { if (my_4) { clearInterval(my_4); my_4 = null; }})();
        setStateDelayed('modbus.0.holdingRegisters.40236_CmpBMSOpMod' /* Betriebsart des BMS */, 2424, 250, false);
        setStateDelayed('modbus.0.holdingRegisters.40793_BatChaMinW' /* Minimale Batterieladeleistung */, 0, 250, false);
        setStateDelayed('modbus.0.holdingRegisters.40795_BatChaMaxW' /* Maximale Batterieladeleistung */, 2500, 250, false);
        setStateDelayed('modbus.0.holdingRegisters.40797_BatDschMinW' /* Minimale Batterieentladeleistung */, 0, 250, false);
        setStateDelayed('modbus.0.holdingRegisters.40799_BatDschMaxW' /* Maximale Batterieentladeleistung */, 2650, 250, false);
        setStateDelayed('modbus.0.holdingRegisters.40801_GridWSpt' /* Sollwert der Netzaustauschleistung */, 0, 250, false);
      }
    });
    
    

    Ich danke euch :)

    Edit , nun gerad ebei 90% SoC schreibt er tatsächlich beide Werte gleichzeitig.

    C 1 Antwort Letzte Antwort
    0
    • C ChrisWitt

      Hallo zusammen,

      habe ein Blockly geschrieben, welches abhängig vom SoC des Batteriespeiechers die Ladeleistung reduzieren soll.

      Dazu müssen nach Modbus-Doku des WR (SMA SBS 2.5) alle 6 Register zyklisch geschrieben werden. Nach Erfahrungen anderer User so alle 15-25 sek.
      Sonst verfällt der WR in den Automatikmodus.

      Das funktioniert auch soweit so gut, WR lässt sich steuern.

      Nun ändert aber das Skript einige Sachen von sich aus.

      z.b. aktualisiert er die Werte nach einer gewissen zeit auf einmal alle 5 Sekunden , und nach einem Wechsel der Leistung , also z.b. der Sprung von SoC 79 auf 80 (was eine Leistungsänderung haben sollte) schreibt er dann beide Werte , also 2200 W und 1950 W ins Register 40795.

      Wo habe ich hier den Fehler, dass sich der Zyklus "aufhängt" ?

      Ich danke für eure Hilfe

      var my_1, my_2, my_3, my_4;
      
      
      on({ id: [].concat(['modbus.0.inputRegisters.30845_BAT_SoC']), change: 'ne' }, async (obj) => {
        let value = obj.state.val;
        let oldValue = obj.oldState.val;
        if (((obj.state ? obj.state.val : '') <= 99) && ((obj.state ? obj.state.val : '') >= 98)) {
          my_1 = setInterval(async () => {
            setStateDelayed('modbus.0.holdingRegisters.40236_CmpBMSOpMod' /* Betriebsart des BMS */, 2424, 250, false);
            setStateDelayed('modbus.0.holdingRegisters.40793_BatChaMinW' /* Minimale Batterieladeleistung */, 0, 250, false);
            setStateDelayed('modbus.0.holdingRegisters.40795_BatChaMaxW' /* Maximale Batterieladeleistung */, 500, 250, false);
            setStateDelayed('modbus.0.holdingRegisters.40797_BatDschMinW' /* Minimale Batterieentladeleistung */, 0, 250, false);
            setStateDelayed('modbus.0.holdingRegisters.40799_BatDschMaxW' /* Maximale Batterieentladeleistung */, 2650, 250, false);
            setStateDelayed('modbus.0.holdingRegisters.40801_GridWSpt' /* Sollwert der Netzaustauschleistung */, 0, 250, false);
          }, 15000);
        } else if (((obj.state ? obj.state.val : '') <= 97) && ((obj.state ? obj.state.val : '') >= 90)) {
          my_2 = setInterval(async () => {
            setStateDelayed('modbus.0.holdingRegisters.40236_CmpBMSOpMod' /* Betriebsart des BMS */, 2424, 250, false);
            setStateDelayed('modbus.0.holdingRegisters.40793_BatChaMinW' /* Minimale Batterieladeleistung */, 0, 250, false);
            setStateDelayed('modbus.0.holdingRegisters.40795_BatChaMaxW' /* Maximale Batterieladeleistung */, 1650, 250, false);
            setStateDelayed('modbus.0.holdingRegisters.40797_BatDschMinW' /* Minimale Batterieentladeleistung */, 0, 250, false);
            setStateDelayed('modbus.0.holdingRegisters.40799_BatDschMaxW' /* Maximale Batterieentladeleistung */, 2650, 250, false);
            setStateDelayed('modbus.0.holdingRegisters.40801_GridWSpt' /* Sollwert der Netzaustauschleistung */, 0, 250, false);
          }, 15000);
        } else if (((obj.state ? obj.state.val : '') <= 89) && ((obj.state ? obj.state.val : '') >= 80)) {
          my_3 = setInterval(async () => {
            setStateDelayed('modbus.0.holdingRegisters.40236_CmpBMSOpMod' /* Betriebsart des BMS */, 2424, 250, false);
            setStateDelayed('modbus.0.holdingRegisters.40793_BatChaMinW' /* Minimale Batterieladeleistung */, 0, 250, false);
            setStateDelayed('modbus.0.holdingRegisters.40795_BatChaMaxW' /* Maximale Batterieladeleistung */, 1950, 250, false);
            setStateDelayed('modbus.0.holdingRegisters.40797_BatDschMinW' /* Minimale Batterieentladeleistung */, 0, 250, false);
            setStateDelayed('modbus.0.holdingRegisters.40799_BatDschMaxW' /* Maximale Batterieentladeleistung */, 2650, 250, false);
            setStateDelayed('modbus.0.holdingRegisters.40801_GridWSpt' /* Sollwert der Netzaustauschleistung */, 0, 250, false);
          }, 15000);
        } else if (((obj.state ? obj.state.val : '') <= 79) && ((obj.state ? obj.state.val : '') >= 70)) {
          my_4 = setInterval(async () => {
            setStateDelayed('modbus.0.holdingRegisters.40236_CmpBMSOpMod' /* Betriebsart des BMS */, 2424, 250, false);
            setStateDelayed('modbus.0.holdingRegisters.40793_BatChaMinW' /* Minimale Batterieladeleistung */, 0, 250, false);
            setStateDelayed('modbus.0.holdingRegisters.40795_BatChaMaxW' /* Maximale Batterieladeleistung */, 2200, 250, false);
            setStateDelayed('modbus.0.holdingRegisters.40797_BatDschMinW' /* Minimale Batterieentladeleistung */, 0, 250, false);
            setStateDelayed('modbus.0.holdingRegisters.40799_BatDschMaxW' /* Maximale Batterieentladeleistung */, 2650, 250, false);
            setStateDelayed('modbus.0.holdingRegisters.40801_GridWSpt' /* Sollwert der Netzaustauschleistung */, 0, 250, false);
          }, 15000);
        } else if ((obj.state ? obj.state.val : '') <= 69) {
          (() => { if (my_1) { clearInterval(my_1); my_1 = null; }})();
          (() => { if (my_2) { clearInterval(my_2); my_2 = null; }})();
          (() => { if (my_3) { clearInterval(my_3); my_3 = null; }})();
          (() => { if (my_4) { clearInterval(my_4); my_4 = null; }})();
          setStateDelayed('modbus.0.holdingRegisters.40236_CmpBMSOpMod' /* Betriebsart des BMS */, 2424, 250, false);
          setStateDelayed('modbus.0.holdingRegisters.40793_BatChaMinW' /* Minimale Batterieladeleistung */, 0, 250, false);
          setStateDelayed('modbus.0.holdingRegisters.40795_BatChaMaxW' /* Maximale Batterieladeleistung */, 2500, 250, false);
          setStateDelayed('modbus.0.holdingRegisters.40797_BatDschMinW' /* Minimale Batterieentladeleistung */, 0, 250, false);
          setStateDelayed('modbus.0.holdingRegisters.40799_BatDschMaxW' /* Maximale Batterieentladeleistung */, 2650, 250, false);
          setStateDelayed('modbus.0.holdingRegisters.40801_GridWSpt' /* Sollwert der Netzaustauschleistung */, 0, 250, false);
        }
      });
      
      

      Ich danke euch :)

      Edit , nun gerad ebei 90% SoC schreibt er tatsächlich beide Werte gleichzeitig.

      C Offline
      C Offline
      ChrisWitt
      schrieb am zuletzt editiert von ChrisWitt
      #2

      Ihr braucht nicht mehr zu Antworten. Fehler gefunden.

      Zyklus nicht beendet ich depp....

      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

      517

      Online

      32.7k

      Benutzer

      82.4k

      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