Weiter zum Inhalt
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Hell
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dunkel
  • 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. [gelöst] per falls deaktivierte Aktionen werden ausgeführt

NEWS

  • Neuer ioBroker-Blog online: Monatsrückblick März/April 2026
    BluefoxB
    Bluefox
    5
    1
    160

  • Verwendung von KI bitte immer deutlich kennzeichnen
    HomoranH
    Homoran
    8
    1
    183

  • Monatsrückblick Januar/Februar 2026 ist online!
    BluefoxB
    Bluefox
    18
    1
    879

[gelöst] per falls deaktivierte Aktionen werden ausgeführt

Geplant Angeheftet Gesperrt Verschoben Blockly
blockly
9 Beiträge 2 Kommentatoren 156 Aufrufe
  • Ä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.
  • HomoranH Nicht stören
    HomoranH Nicht stören
    Homoran
    Global Moderator Administrators
    schrieb am zuletzt editiert von Homoran
    #1

    Hallo zusammen.
    ich habe ein Blockly mit dem ich den Ladestrom für mein e-Auto Abhängig vom Überschuss steuere.
    Das klappt soweit auch ganz gut.

    car_override.png
    (weil abgeschnitten: getriggert wird auf die Einspeisung alle 6 Sekunden, und auf die Aktivierung des Laders)

    Zusätzlich habe ich für den "Schlechtwetter-Notfall" einen Knopf zum deaktivieren dieser überschussabhängigen Steuerung eingebaut und im Skript abgefragt.

    Eigentlich dürfte nach meinem Verständnis bei aktivem Knopf, keine Anpassung des Ladestroms stattfinden.
    passiert aber:

    ladestrom_override01.png

    um 10:36 wurde der state "manual_override" auf true gesetzt, trotzdem wird um 11:01 geregelt.


    var Neustart, Ladestrom_min, Ladestrom_geplant, Ladung, Messdauer, Ueberschussliste, Mindesteinspeisung, Ueberschuss, Ueberschusssumme, Ueberschuss_avg, Intervall;

    Neustart = false;
    Ladestrom_min = 6;
    Ladestrom_geplant = 6;
    Ladung = false;
    Messdauer = 60;
    Ueberschussliste = [];
    Mindesteinspeisung = 1050;
    Ueberschuss = 0;
    // Überwachung der Einspeisung
    on({id: new RegExp('smartmeter\.0\.1-0:16_7_0__255\.value' + "$|" + 'go-e\.0\.allow_charging' + "$"), change: "ne"}, async function (obj) {
    if (getState('go-e.0.allow_charging').val == true) {
    // Überschussberechnung
    Ueberschuss = getState('smartmeter.0.1-0:16_7_0__255.value').val * -1 + getState('hm-rpc.0.REQ0777349.2.POWER').val;
    // Mittelwertberechnung
    Ueberschussliste.push(Ueberschuss);
    if (Ueberschussliste.length > Messdauer) {
    Ueberschussliste.splice(0, 1);
    }
    // Überschuss prüfen
    }
    if (getState('Systemvariablen.0.Autoladen.manual_override').val == false) {
    Ueberschusssumme = Ueberschussliste.reduce(function(x, y) {return x + y;});
    Ueberschuss_avg = Ueberschusssumme / Ueberschussliste.length;
    if (Ueberschuss_avg > Mindesteinspeisung && (Ladung == false || Neustart == true)) {
    // ausreichend Überschuss
    Ladung = true;
    Neustart = false;
    // Laden starten
    Intervall = setInterval(async function () {
    // Ladestrom berechnen (bei 1-phasig)
    if (getState('zoe2.0.xxx.charge_level').val >= 98) {
    Ladestrom_min = 8;
    } else {
    Ladestrom_min = 6;
    }
    Ladestrom_geplant = getState("Messwerte.0.Wetterdaten.Sonnenaenderungen2").val < 4 ? Math.min(Math.max(Math.round(Ueberschuss_avg / 215), 0), 16) : Math.min(Math.max((-0.044 * getState("Messwerte.0.Wetterdaten.Sonnenaenderungen2").val + 1.175) * Math.round(Ueberschuss_avg / 215), 0), 16);
    if (Ladestrom_geplant < Ladestrom_min) {
    Ladestrom_geplant = Ladestrom_min;
    } else if (Ladestrom_geplant >= Ladestrom_min) {
    Ladestrom_geplant = Ladestrom_geplant;
    }
    // Überschussmenge laden
    if (Ladestrom_geplant != getState('go-e.0.amperePV').val && getState('go-e.0.allow_charging').val == true) {
    setStateDelayed('go-e.0.amperePV', Ladestrom_geplant, false, parseInt(((0) || "").toString(), 10), false);
    }
    }, 180000);
    // nicht mehr ausreichend Überschuss
    } else if (Ueberschuss_avg < Mindesteinspeisung * 0.8 && Ladung == true) {
    // Laden beenden
    Ladung = false;
    Ladestrom_geplant = 8;
    setStateDelayed('go-e.0.amperePV', Ladestrom_geplant, false, parseInt(((0) || "").toString(), 10), false);
    if (getState('go-e.0.allow_charging').val != 0) {
    setStateDelayed('go-e.0.allow_charging', 0, false, parseInt(((0) || "").toString(), 10), false);
    }
    (function () {if (Intervall) {clearInterval(Intervall); Intervall = null;}})();
    }
    }
    // Not-Aus - Laden beenden
    if (getState('smartmeter.0.1-0:16_7_0__255.value').val > 10000) {
    console.log('Not-Aus');
    Ladung = false;
    setStateDelayed('go-e.0.amperePV', 8, false, parseInt(((0) || "").toString(), 10), false);
    setStateDelayed('go-e.0.allow_charging', 0, false, parseInt(((0) || "").toString(), 10), false);
    Ladestrom_geplant = 0;
    (function () {if (Intervall) {clearInterval(Intervall); Intervall = null;}})();
    }
    });

    on({id: 'go-e.0.allow_charging', change: "ne"}, async function (obj) {
    var value = obj.state.val;
    var oldValue = obj.oldState.val;
    setStateDelayed('Systemvariablen.0.Autoladen.FlashCounter', (getState('Systemvariablen.0.Autoladen.FlashCounter').val + 1), true, parseInt(((0) || "").toString(), 10), false);
    });

    on({id: 'go-e.0.car', change: "ne"}, async function (obj) {
    var value = obj.state.val;
    var oldValue = obj.oldState.val;
    if ((obj.state ? obj.state.val : "") == 4 && (obj.oldState ? obj.oldState.val : "") == 2) {
    setStateDelayed('Systemvariablen.0.Auto_Akku_voll', true, true, parseInt(((0) || "").toString(), 10), false);
    // Batterie voll - Laden beenden
    console.log('Batterie voll');
    Ladung = false;
    setStateDelayed('go-e.0.amperePV', 8, false, parseInt(((0) || "").toString(), 10), false);
    setStateDelayed('go-e.0.allow_charging', 0, false, parseInt(((0) || "").toString(), 10), false);
    Ladestrom_geplant = 0;
    (function () {if (Intervall) {clearInterval(Intervall); Intervall = null;}})();
    }
    });

    Was übersehe ich?

    kein Support per PN! - Fragen im Forum stellen -
    Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.
    Das Forum freut sich über eine Spende. Benutzt dazu den Spendenbutton oben rechts. Danke!
    der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

    1 Antwort Letzte Antwort
    0
    • HomoranH Nicht stören
      HomoranH Nicht stören
      Homoran
      Global Moderator Administrators
      schrieb am zuletzt editiert von Homoran
      #2

      Ich hab die Ursache gefunden!

      das Prüfintervall, das im Script irrtümlich ausgeblendet war:
      ladestrom_interval.png

      wird bereits vorher gestartet und läuft durch, was auch beabsichtigt war.
      Allerdings sollten die Werte nur gesetzt werden, wenn manual_override falsch ist.

      Da muss ich noch mal dran schrauben.

      EDIT:
      habe jetzt die letzten beiden falls aus dem Intervall einfach mal darunter gesetzt

      EDIT2:
      scheint wie gewünscht zu klappen.
      Der Ladestrom wat jetzt "eingefroren". kurz den Button "manuell" deaktiviert - beim nächsten triggern sprang der Wertt von 10A auf 6A um. nach erneutem aktivieren hängt es jetzt da fest.

      kein Support per PN! - Fragen im Forum stellen -
      Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.
      Das Forum freut sich über eine Spende. Benutzt dazu den Spendenbutton oben rechts. Danke!
      der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

      1 Antwort Letzte Antwort
      1
      • HomoranH Nicht stören
        HomoranH Nicht stören
        Homoran
        Global Moderator Administrators
        schrieb am zuletzt editiert von Homoran
        #3

        Jetzt habe ich doch noch ein Problem :-(

        ich nutze den go-e Charger, bei dem vom Hersteller gewarnt wird "zu oft" in den Flashspeicher zu schreiben.
        Dieser würde nur etwa 100.000 Schreibzugriffe aushalten.
        Dafür hat er einen weiteren Datenpunkt hinzugefügt, damit bei Überschusssteuerung nicht jedesmal der Flashspeicher beschrieben wird.

        Dieses passiert z.B. beim Schalten des Datenpunktes alw allow_charging, also beim an und ausschalten eines Ladevorganges.

        Hochgerechnet müsste dann der Flashspeicher etwa 30 Jahre halten - gut!

        Jetzt habe ich trotzdem mal zur Überwachung die Änderungen des alw geloggt und mich eben erschrocken, als der bei minimale Nutzung nach 4 Monaten bereits auf 1200 stand.

        alw_go-e.png

        Dann habe ich noch etwas am Skript geändert und den Datenpunkt Flashcounter angefangen zu loggen.

        dabei fiel mir auf, dass dieser Wert beim Abschalten um mehr als 1 hochgezählt wird, und zwar anscheinend unterschiedlich
        flashcounter02.png

        Wenn es "nur" falsch hochgezählt wird ist es vertretbar, aber wenn tatsächlich so vile Schreibvorgänge stattfinden sind es einfach zu viele.

        Wie kann ich herausfinden, wo die Ursache ist?

        kein Support per PN! - Fragen im Forum stellen -
        Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.
        Das Forum freut sich über eine Spende. Benutzt dazu den Spendenbutton oben rechts. Danke!
        der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

        paul53P 1 Antwort Letzte Antwort
        0
        • HomoranH Homoran

          Jetzt habe ich doch noch ein Problem :-(

          ich nutze den go-e Charger, bei dem vom Hersteller gewarnt wird "zu oft" in den Flashspeicher zu schreiben.
          Dieser würde nur etwa 100.000 Schreibzugriffe aushalten.
          Dafür hat er einen weiteren Datenpunkt hinzugefügt, damit bei Überschusssteuerung nicht jedesmal der Flashspeicher beschrieben wird.

          Dieses passiert z.B. beim Schalten des Datenpunktes alw allow_charging, also beim an und ausschalten eines Ladevorganges.

          Hochgerechnet müsste dann der Flashspeicher etwa 30 Jahre halten - gut!

          Jetzt habe ich trotzdem mal zur Überwachung die Änderungen des alw geloggt und mich eben erschrocken, als der bei minimale Nutzung nach 4 Monaten bereits auf 1200 stand.

          alw_go-e.png

          Dann habe ich noch etwas am Skript geändert und den Datenpunkt Flashcounter angefangen zu loggen.

          dabei fiel mir auf, dass dieser Wert beim Abschalten um mehr als 1 hochgezählt wird, und zwar anscheinend unterschiedlich
          flashcounter02.png

          Wenn es "nur" falsch hochgezählt wird ist es vertretbar, aber wenn tatsächlich so vile Schreibvorgänge stattfinden sind es einfach zu viele.

          Wie kann ich herausfinden, wo die Ursache ist?

          paul53P Offline
          paul53P Offline
          paul53
          schrieb am zuletzt editiert von
          #4

          @homoran sagte: um mehr als 1 hochgezählt wird

          Wenn nicht jedes Hochzählen in die History geschrieben wird, ist es vermutlich ein Laufzeitproblem (schnelles Prellen?). Schreibe den Zählerstand besser bei Skriptstart in eine Variable und zähle diese hoch.

          Bild_2021-07-07_155247.png

          Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
          Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

          HomoranH 1 Antwort Letzte Antwort
          0
          • paul53P paul53

            @homoran sagte: um mehr als 1 hochgezählt wird

            Wenn nicht jedes Hochzählen in die History geschrieben wird, ist es vermutlich ein Laufzeitproblem (schnelles Prellen?). Schreibe den Zählerstand besser bei Skriptstart in eine Variable und zähle diese hoch.

            Bild_2021-07-07_155247.png

            HomoranH Nicht stören
            HomoranH Nicht stören
            Homoran
            Global Moderator Administrators
            schrieb am zuletzt editiert von Homoran
            #5

            Dankje
            @paul53 sagte in :

            Wenn nicht jedes Hochzählen in die History geschrieben wird, ist es vermutlich ein Laufzeitproblem (schnelles Prellen?). Schreibe den Zählerstand besser bei Skriptstart in eine Variable und zähle diese hoch.

            Daran hatte ich auch gedacht, es ist aber anders herum :-(

            Jedes Schalten wird gezählt, allerdings einiges mehrfach.
            Dadurch ergab sich für mich die Frage, ob ggf. auch mehrfach geschrieben wird.

            EDIT:
            Sorry, ich war unpräzise!
            es werden nicht mehrere Einträge erzeugt, sondern in einem Eintrag direkt um 2 oder 3 hochgezählt!

            kein Support per PN! - Fragen im Forum stellen -
            Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.
            Das Forum freut sich über eine Spende. Benutzt dazu den Spendenbutton oben rechts. Danke!
            der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

            paul53P 1 Antwort Letzte Antwort
            0
            • HomoranH Homoran

              Dankje
              @paul53 sagte in :

              Wenn nicht jedes Hochzählen in die History geschrieben wird, ist es vermutlich ein Laufzeitproblem (schnelles Prellen?). Schreibe den Zählerstand besser bei Skriptstart in eine Variable und zähle diese hoch.

              Daran hatte ich auch gedacht, es ist aber anders herum :-(

              Jedes Schalten wird gezählt, allerdings einiges mehrfach.
              Dadurch ergab sich für mich die Frage, ob ggf. auch mehrfach geschrieben wird.

              EDIT:
              Sorry, ich war unpräzise!
              es werden nicht mehrere Einträge erzeugt, sondern in einem Eintrag direkt um 2 oder 3 hochgezählt!

              paul53P Offline
              paul53P Offline
              paul53
              schrieb am zuletzt editiert von
              #6

              @homoran sagte: sondern in einem Eintrag direkt um 2 oder 3 hochgezählt!

              Genau das führte mich zu meiner Vermutung mit dem Laufzeitproblem.

              Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
              Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

              HomoranH 2 Antworten Letzte Antwort
              1
              • paul53P paul53

                @homoran sagte: sondern in einem Eintrag direkt um 2 oder 3 hochgezählt!

                Genau das führte mich zu meiner Vermutung mit dem Laufzeitproblem.

                HomoranH Nicht stören
                HomoranH Nicht stören
                Homoran
                Global Moderator Administrators
                schrieb am zuletzt editiert von
                #7

                @paul53 sagte:

                Genau das führte mich zu meiner Vermutung mit dem Laufzeitproblem.

                Danke, dann probiere ich es.

                kein Support per PN! - Fragen im Forum stellen -
                Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.
                Das Forum freut sich über eine Spende. Benutzt dazu den Spendenbutton oben rechts. Danke!
                der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

                1 Antwort Letzte Antwort
                0
                • paul53P paul53

                  @homoran sagte: sondern in einem Eintrag direkt um 2 oder 3 hochgezählt!

                  Genau das führte mich zu meiner Vermutung mit dem Laufzeitproblem.

                  HomoranH Nicht stören
                  HomoranH Nicht stören
                  Homoran
                  Global Moderator Administrators
                  schrieb am zuletzt editiert von
                  #8

                  @paul53 sagte :

                  Genau das führte mich zu meiner Vermutung mit dem Laufzeitproblem.

                  ich hatte ja auch an das Problem mit der asynchronen Verarbeitung gedacht, aber ich verstehe es nicht, dass/warum es dann zu zu hohen Werten kommt.
                  wenn bei schneller Abarabeitung nicht hochgezählt würde, wäre es für mich klar.

                  Aber langer Rede gar kein Sinn: zumindest jetzt hat es mit der Variablen geklappt und es wurde beim Abschalten nur um 1 hochgezählt.

                  Nochmals Danke!
                  ich werde es im Auge behalten.

                  kein Support per PN! - Fragen im Forum stellen -
                  Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.
                  Das Forum freut sich über eine Spende. Benutzt dazu den Spendenbutton oben rechts. Danke!
                  der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

                  HomoranH 1 Antwort Letzte Antwort
                  1
                  • HomoranH Homoran

                    @paul53 sagte :

                    Genau das führte mich zu meiner Vermutung mit dem Laufzeitproblem.

                    ich hatte ja auch an das Problem mit der asynchronen Verarbeitung gedacht, aber ich verstehe es nicht, dass/warum es dann zu zu hohen Werten kommt.
                    wenn bei schneller Abarabeitung nicht hochgezählt würde, wäre es für mich klar.

                    Aber langer Rede gar kein Sinn: zumindest jetzt hat es mit der Variablen geklappt und es wurde beim Abschalten nur um 1 hochgezählt.

                    Nochmals Danke!
                    ich werde es im Auge behalten.

                    HomoranH Nicht stören
                    HomoranH Nicht stören
                    Homoran
                    Global Moderator Administrators
                    schrieb am zuletzt editiert von
                    #9

                    @homoran sagte:

                    ich werde es im Auge behalten.

                    @paul53
                    das manuelle Ausschalten über die vis hatte gestern immer nur um 1 hochgezählt.

                    heute hat sich der Ladevorgang per Skript beendet und leider wieder direkt um 3 hochgezählt.
                    flashcounter03.png

                    Ich befürchte daher, dass dann auch tatsächlich 3x geschrieben wird.
                    Da ich aber anscheinend noch einige Bugs drin hatte, hatte ich heute morgen noch einiges verändert und wollte (irgendwann) das Skript komplett anders aufbauen :-(

                    Der früher verlinkte Code passt also nicht mehr.

                    Bei der Suche nach dem Datenpunkt Allow Charging habe ich nur das eine Skript und dort 7 Referenzen gefunden, von denen nur 2 mit einem setState einen Schreibvorgang bewirken sollten.
                    allow_charging.png

                    Habe es jetzt sicherheitshalber mal eine Verzögerung eingebaut.

                    Die Änderung des Datenpunkts triggert auch das Skript, sollte aber IMHO bei false nichts mehr machen:
                    allow_charging02.png

                    kein Support per PN! - Fragen im Forum stellen -
                    Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.
                    Das Forum freut sich über eine Spende. Benutzt dazu den Spendenbutton oben rechts. Danke!
                    der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

                    1 Antwort Letzte Antwort
                    0

                    Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.

                    Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.

                    Mit deinem Input könnte dieser Beitrag noch besser werden 💗

                    Registrieren Anmelden
                    Antworten
                    • In einem neuen Thema antworten
                    Anmelden zum Antworten
                    • Älteste zuerst
                    • Neuste zuerst
                    • Meiste Stimmen


                    Support us

                    ioBroker
                    Community Adapters
                    Donate

                    486

                    Online

                    32.8k

                    Benutzer

                    82.7k

                    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