Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Blockly
    5. Batterieladest. mit Intervall - skript verändert sich

    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

    Batterieladest. mit Intervall - skript verändert sich

    This topic has been deleted. Only users with topic management privileges can see it.
    • C
      ChrisWitt last edited by 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 1 Reply Last reply Reply Quote 0
      • C
        ChrisWitt @ChrisWitt last edited by ChrisWitt

        Ihr braucht nicht mehr zu Antworten. Fehler gefunden.

        Zyklus nicht beendet ich depp....

        1 Reply Last reply Reply Quote 0
        • First post
          Last post

        Support us

        ioBroker
        Community Adapters
        Donate

        455
        Online

        31.9k
        Users

        80.2k
        Topics

        1.3m
        Posts

        1
        2
        156
        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