Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Blockly
    5. Ist mein Script richtig und effizient ?

    NEWS

    • Wir empfehlen: Node.js 22.x

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker goes Matter ... Matter Adapter in Stable

    Ist mein Script richtig und effizient ?

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

      Hallo zusammen,

      ich bin mir irgendwie nicht sicher ob mein Script wirklich richtig ist und glaube das ich zu oft Prüfe bzw. dadurch das System unnötig belastet.

      Eigentlich ist der Fall sehr einfach. Ich möchte von meiner PV Batterie den SoC prüfen und möchte ab gleich oder größer 55% das intelligente Batterie Management Anschalten und wenn sie unter = oder kleiner 54% ausschalten. Und es soll bei Start des Scripts der aktuelle zustand geprüft werden, da ich nicht jeden % Änderung diese Funktion aus und anschalte. Deswegen die Variable.

      Hier der Blocky Code da für Bild das zuviel ist.

      var var_batteryint_mode;
      
      var_batteryint_mode = false;
      on({id: 'plenticore.0.devices.local.battery.SmartBatteryControl', val: true}, function (obj) {
       var value = obj.state.val;
       var oldValue = obj.oldState.val;
       var_batteryint_mode = true;
      });
      on({id: 'plenticore.0.devices.local.battery.SoC', change: "ne"}, function (obj) {
       var value = obj.state.val;
       var oldValue = obj.oldState.val;
       if ((obj.state ? obj.state.val : "") >= 55 && var_batteryint_mode == false) {
         setStateDelayed('plenticore.0.devices.local.battery.SmartBatteryControl', true, false, parseInt(0, 10), false);
         var_batteryint_mode = true;
         console.log((['Intelligente Batteriesteuerung aktivert','\n','Aktueller SoC Wert','\n',(obj.state ? obj.state.val : ""),'\n',formatDate(new Date(), "TT.MM.JJJJ SS:mm")].join('')));
       } else if ((obj.state ? obj.state.val : "") <= 54 && var_batteryint_mode == true) {
         setStateDelayed('plenticore.0.devices.local.battery.SmartBatteryControl', false, false, parseInt(0, 10), false);
         var_batteryint_mode = false;
         console.log((['Intelligente Batteriesteuerung deaktivert','\n','Aktueller SoC Wert','\n',(obj.state ? obj.state.val : ""),'\n',formatDate(new Date(), "TT.MM.JJJJ SS:mm")].join('')));
       }
      });
      
      paul53 1 Reply Last reply Reply Quote 0
      • paul53
        paul53 @Bluppylein last edited by paul53

        @Bluppylein sagte:

        gleich oder größer 55% das intelligente Batterie Management Anschalten und wenn sie unter = oder kleiner 54% ausschalten.

        Vorschlag:

        Blockly_temp.JPG

        Bluppylein 2 Replies Last reply Reply Quote 0
        • Bluppylein
          Bluppylein @paul53 last edited by

          @paul53 Wenn ich das aber jetzt verstehe setzt du den wer immer bei jeden Change?

          Genau das will ich etwas verhindern da ich angst habe durch das dauernde setzen gibt es irgendwann zuviel last. Der Wert wird alle 10 sec angefragt und wird teilweise innerhalb von 15 min je nach Stromlast geändert da der Akku nur 6,4 kwh hat und wenn herd läuft ist der in 2 std. leer

          Homoran paul53 2 Replies Last reply Reply Quote 0
          • Homoran
            Homoran Global Moderator Administrators @Bluppylein last edited by

            @Bluppylein sagte in Ist mein Script richtig und effizient ?:

            setzt du den wer immer bei jeden Change?

            Nur die variable

            Den state nur wenn er nicht identisch ist

            1 Reply Last reply Reply Quote 0
            • paul53
              paul53 @Bluppylein last edited by

              @Bluppylein sagte:

              wird teilweise innerhalb von 15 min je nach Stromlast geändert

              Da langweilt sich jede CPU.

              @Bluppylein sagte in Ist mein Script richtig und effizient ?:

              setzt du den wer immer bei jeden Change?

              Das verhindert der Vergleich der Variablen control mit dem Wert des Datenpunktes.

              1 Reply Last reply Reply Quote 0
              • Bluppylein
                Bluppylein @paul53 last edited by

                @paul53

                Also ich habe das jetzt umgesetzt. Nun läuft es aber nicht er setzt die Harken nicht sauber in der Software. Oder habe ich Denkfehler drin? Weil ich setze Provokativ zb. nun bei 60% das Int. Steuern aus und sehe auch IO Broker hat den Wert auf False erkannt. Setze hier temporär sogar statt wurde geändert auf wurde aktualisiert. Dann müsste ja eigentlich sofort bei nächsten Lauf es wieder auf true gesetzt werden

                669ddd19-7f45-4f1d-b24a-f0184c442b10-grafik.png

                var control, aktiv;
                
                
                on({id: 'plenticore.0.devices.local.battery.SoC', change: "ne"}, function (obj) {
                  var value = obj.state.val;
                  var oldValue = obj.oldState.val;
                  if ((obj.state ? obj.state.val : "") >= 55) {
                    control = true;
                    aktiv = 'aktiviert';
                  } else if ((obj.state ? obj.state.val : "") <= 54) {
                    control = false;
                    aktiv = 'deaktiviert';
                  }
                  if ((obj.state ? obj.state.val : "") != getState("plenticore.0.devices.local.battery.SoC").val) {
                    setState("plenticore.0.devices.local.battery.SmartBatteryControl"/*Smart battery control*/, control);
                    console.log((['Intelligente Batteriesteuerung',aktiv,'\n','Aktueller SoC Wert:',(obj.state ? obj.state.val : ""),'\n',formatDate(new Date(), "TT.MM.JJJJ SS:mm")].join('')));
                  }
                });
                
                
                Bluppylein 1 Reply Last reply Reply Quote 0
                • Bluppylein
                  Bluppylein @Bluppylein last edited by

                  Fehler gefunden ^^

                  Manchmal sieht man nicht mehr den Wald voller Bäume auch wenn das echt Basic ist aber ich fange ja erst mit Blockly an 🙂

                  var control, aktiv;
                  
                  
                  on({id: 'plenticore.0.devices.local.battery.SoC', change: "any"}, function (obj) {
                    var value = obj.state.val;
                    var oldValue = obj.oldState.val;
                    if ((obj.state ? obj.state.val : "") >= 55) {
                      control = true;
                      aktiv = 'aktiviert';
                    } else if ((obj.state ? obj.state.val : "") <= 54) {
                      control = false;
                      aktiv = 'deaktiviert';
                    }
                    if (control != getState("plenticore.0.devices.local.battery.SmartBatteryControl").val) {
                      setState("plenticore.0.devices.local.battery.SmartBatteryControl"/*Smart battery control*/, control);
                      console.log((['Intelligente Batteriesteuerung',aktiv,'\n','Aktueller SoC Wert:',(obj.state ? obj.state.val : ""),'\n',formatDate(new Date(), "TT.MM.JJJJ SS:mm")].join('')));
                    }
                  });
                  
                  control;
                  
                  
                  1 Reply Last reply Reply Quote 0
                  • First post
                    Last post

                  Support us

                  ioBroker
                  Community Adapters
                  Donate

                  912
                  Online

                  32.0k
                  Users

                  80.4k
                  Topics

                  1.3m
                  Posts

                  3
                  7
                  527
                  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