Skip to content
  • 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
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. JavaScript
  5. ecoflow-connector-Script zur dynamischen Leistungsanpassung

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.2k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    1.9k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    15
    1
    2.2k

ecoflow-connector-Script zur dynamischen Leistungsanpassung

Geplant Angeheftet Gesperrt Verschoben JavaScript
1.6k Beiträge 127 Kommentatoren 742.0k Aufrufe 127 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.
  • P pasch

    Ich habe jetzt das ganze Objekt 0_userdata.0.ecoflow gelöscht und neu mit dem Skript 1142 angefangen. Leider ohne großen erfolg.

    2023-09-28 17:01:03.157 - info: javascript.0 (186) Start javascript script.js.ps1142
    2023-09-28 17:01:03.210 - info: javascript.0 (186) script.js.ps1142: registered 0 subscriptions, 0 schedules, 0 messages, 0 logs and 0 file subscriptions
    2023-09-28 17:01:03.376 - info: javascript.0 (186) script.js.ps1142: Neues Writeable angelegt. Gerät:PowerStream Typ:PS Wert: SetDisplayBrightness
    2023-09-28 17:01:03.378 - info: javascript.0 (186) script.js.ps1142: Neues Writeable angelegt. Gerät:PowerStream Typ:PS Wert: SetPrio
    2023-09-28 17:01:03.382 - info: javascript.0 (186) script.js.ps1142: Neues Writeable angelegt. Gerät:PowerStream Typ:PS Wert: SetBatLimitLow
    2023-09-28 17:01:03.384 - info: javascript.0 (186) script.js.ps1142: Neues Writeable angelegt. Gerät:PowerStream Typ:PS Wert: SetBatLimitHigh
    2023-09-28 17:01:03.385 - info: javascript.0 (186) script.js.ps1142: Neues Writeable angelegt. Gerät:PowerStream Typ:PS Wert: SetAC
    2023-09-28 17:01:03.537 - info: javascript.0 (186) script.js.ps1142: Verbunden mit dem Ecoflow MQTT-Broker
    2023-09-28 17:01:13.219 - info: javascript.0 (186) script.js.ps1142: PowerStream [PowerStream] Batteriestand unter Limit:15% (0%). Limitiere Einspeiseleistung auf: 150W
    2023-09-28 17:08:17.120 - info: javascript.0 (186) script.js.ps1142: Verbunden mit dem Ecoflow MQTT-Broker
    2023-09-28 17:10:43.382 - info: javascript.0 (186) script.js.ps1142: PowerStream [PowerStream] Batteriestand ist jetzt über Limit:20% (98%). Maximale Einspeisung wieder bei: 600W
    2023-09-28 17:20:50.530 - info: javascript.0 (186) script.js.ps1142: PeakSkip Delta: 212
    

    setAC unter writeables ist auch nach 20 Minuten noch auf null
    332edcc8-a165-4034-983d-add4414626ea-grafik.png

    Ich werde später versuchen den Punkt zu finden weshalb setAC nicht gesetzt wird. Vielleicht hab ich ja Glück. 🙂

    W Offline
    W Offline
    Waly_de
    schrieb am zuletzt editiert von Waly_de
    #557

    @pasch Ich denke du hast mitgelesen?
    Bitte prüfe noch mal ob Du den History-Adapter installiert hast und dieses auch läuft.

    umeleU P 2 Antworten Letzte Antwort
    0
    • W Waly_de

      @pasch Ich denke du hast mitgelesen?
      Bitte prüfe noch mal ob Du den History-Adapter installiert hast und dieses auch läuft.

      umeleU Offline
      umeleU Offline
      umele
      schrieb am zuletzt editiert von
      #558

      Ich brauche bitte auch noch mal Hilfe.

      • Das Script Version 1.1.4 läuft auf einem Raspi 4.
      • Ein PowerStream mit Delta Pro und Zusatzakku.
      • RealPower wird korrekt angelegt. History aktiv.
      • 0_userdata.0.ecoflow.app_device_property_HW51ZOxxxxxxxxxxxx.data.InverterHeartbeat.batSoc ist auch nach mehreren Stunden noch auf "0" und entsprechend bekomme ich auch die Nachricht "Batteriestand unter Limit" => entsprechend ist SetAC auch immer = 0
      • Die Kommunikation an sich klappt - wenn ich die Einspeisung in der App manuell auf z.B. 200 Watt stelle, ist sie eine Minute später wieder auf 0...

      Was kann ich noch nachprüfen?
      raspi batsoc.png
      raspi 1.png

      W 1 Antwort Letzte Antwort
      0
      • umeleU umele

        Ich brauche bitte auch noch mal Hilfe.

        • Das Script Version 1.1.4 läuft auf einem Raspi 4.
        • Ein PowerStream mit Delta Pro und Zusatzakku.
        • RealPower wird korrekt angelegt. History aktiv.
        • 0_userdata.0.ecoflow.app_device_property_HW51ZOxxxxxxxxxxxx.data.InverterHeartbeat.batSoc ist auch nach mehreren Stunden noch auf "0" und entsprechend bekomme ich auch die Nachricht "Batteriestand unter Limit" => entsprechend ist SetAC auch immer = 0
        • Die Kommunikation an sich klappt - wenn ich die Einspeisung in der App manuell auf z.B. 200 Watt stelle, ist sie eine Minute später wieder auf 0...

        Was kann ich noch nachprüfen?
        raspi batsoc.png
        raspi 1.png

        W Offline
        W Offline
        Waly_de
        schrieb am zuletzt editiert von
        #559

        @umele das sieht nach Kommunikationsproblemen zwischen PS und Delta aus. Der Wert batSoc wird selten, u.U. nur nach Änderung aktualisiert. Das kann also etwas dauern. Wenn er aber immer auf 0 steht, stimmt da was auf der EcoFlow Seite nicht.

        Die PS muss mit dem Eingang 1 der Delta verbunden sein, der Zusatzakku mit Eingang 2.

        umeleU 1 Antwort Letzte Antwort
        0
        • W Waly_de

          @umele das sieht nach Kommunikationsproblemen zwischen PS und Delta aus. Der Wert batSoc wird selten, u.U. nur nach Änderung aktualisiert. Das kann also etwas dauern. Wenn er aber immer auf 0 steht, stimmt da was auf der EcoFlow Seite nicht.

          Die PS muss mit dem Eingang 1 der Delta verbunden sein, der Zusatzakku mit Eingang 2.

          umeleU Offline
          umeleU Offline
          umele
          schrieb am zuletzt editiert von
          #560

          @waly_de Danke für die schnelle Antwort. Habe gleich mal die Ports geprüft - sieht so aus, als wäre der Zusatzakku auf Port 1. Ich änder das gleich mal und melde mich wieder.
          Delta Ports.jpg

          umeleU 1 Antwort Letzte Antwort
          0
          • umeleU umele

            @waly_de Danke für die schnelle Antwort. Habe gleich mal die Ports geprüft - sieht so aus, als wäre der Zusatzakku auf Port 1. Ich änder das gleich mal und melde mich wieder.
            Delta Ports.jpg

            umeleU Offline
            umeleU Offline
            umele
            schrieb am zuletzt editiert von
            #561

            @Waly_de - passt 👍
            Vielen lieben Dank!!

            Das bedeutet dann im Umkehrschluss wohl, dass nur Port 1 ein "echter" Kommunikationsport ist - richtig? Dann muss ich bei einem Firmware-Update PowerStream und Zusatzakku kurzfristig wieder tauschen?

            Super Arbeit!!

            1 Antwort Letzte Antwort
            0
            • W Waly_de

              @pasch Ich denke du hast mitgelesen?
              Bitte prüfe noch mal ob Du den History-Adapter installiert hast und dieses auch läuft.

              P Offline
              P Offline
              pasch
              schrieb am zuletzt editiert von
              #562

              @waly_de Danke das du mich noch mal mit der Nase darauf gestoßen hast. 🙂
              Das war auch bei mir die Lösung. Ich hatte es nicht mit meinem Problem in Verbindung gebracht, weil ich keine Fehlermeldung in dieser Richtung bekommen hatte.

              1 Antwort Letzte Antwort
              0
              • K Offline
                K Offline
                kaiausBrieselang
                schrieb am zuletzt editiert von
                #563

                Hallo,
                ich habe mal eine Verständnisfrage:
                wozu benötige ich die Parameter:
                lowBatLimitPozOn: 30,
                lowBatLimitPozOff:40,
                lowBatLimit: 150,

                Bei mir wird der Akku bis zum letzten % "leer" gezogen. Ich hätte erwartet, dass zumindest ab 30% "nur" noch auf 150W reduziert wird. Das klappt bei mir gar nicht.
                Aber ich verstehe auch den Hintergrund nicht so ganz. Warum sollte ich "kurz vor Leer" die Ausgabeleistung "nur" auf 150W (oder einen beliebigen Wert) reduzieren. Entweder ich möchte die volle benötigte Leistung bis zur definierten Restladung haben oder nicht, aber was bringt eine reduzierte Abgabe?
                Vielleicht verstehe ich das auch nicht richtig.

                Dann habe ich noch eine weitere Frage.
                Der Ladestand der Batterie wird ja hier angezeigt:
                0_userdata.0.ecoflow.app_device_property_R351xxxxD2Mxxx.data.params.bms_bmsStatus.f32ShowSoc
                0_userdata.0.ecoflow.app_device_property_R351xxxxD2Mxxx.data.params.bms_bmsStatus.soc
                0_userdata.0.ecoflow.app_device_property_R351xxxxD2Mxxx.data.params.bms_emsStatus.f32LcdShowSoc
                0_userdata.0.ecoflow.app_device_property_R351xxxxD2Mxxx.data.params.bms_emsStatus.lcdShowSoc

                Aber um an die Werte heran zu kommen muss ich ja den D2M abfragen. Das wiederum erzeugt ja viel Datenstrom.
                In den Einstellungen des PS in der APP wird ja auch der Batteriestand angezeigt.
                Finde ich vielleicht den Wert irgendwo versteckt in den "userdaten" wieder ohne de D2M abzufragen?

                vielen Lieben Dank für eure Hilfe.
                Und vor allen für das tolle Script.

                gruß Kai

                P 1 Antwort Letzte Antwort
                0
                • K kaiausBrieselang

                  Hallo,
                  ich habe mal eine Verständnisfrage:
                  wozu benötige ich die Parameter:
                  lowBatLimitPozOn: 30,
                  lowBatLimitPozOff:40,
                  lowBatLimit: 150,

                  Bei mir wird der Akku bis zum letzten % "leer" gezogen. Ich hätte erwartet, dass zumindest ab 30% "nur" noch auf 150W reduziert wird. Das klappt bei mir gar nicht.
                  Aber ich verstehe auch den Hintergrund nicht so ganz. Warum sollte ich "kurz vor Leer" die Ausgabeleistung "nur" auf 150W (oder einen beliebigen Wert) reduzieren. Entweder ich möchte die volle benötigte Leistung bis zur definierten Restladung haben oder nicht, aber was bringt eine reduzierte Abgabe?
                  Vielleicht verstehe ich das auch nicht richtig.

                  Dann habe ich noch eine weitere Frage.
                  Der Ladestand der Batterie wird ja hier angezeigt:
                  0_userdata.0.ecoflow.app_device_property_R351xxxxD2Mxxx.data.params.bms_bmsStatus.f32ShowSoc
                  0_userdata.0.ecoflow.app_device_property_R351xxxxD2Mxxx.data.params.bms_bmsStatus.soc
                  0_userdata.0.ecoflow.app_device_property_R351xxxxD2Mxxx.data.params.bms_emsStatus.f32LcdShowSoc
                  0_userdata.0.ecoflow.app_device_property_R351xxxxD2Mxxx.data.params.bms_emsStatus.lcdShowSoc

                  Aber um an die Werte heran zu kommen muss ich ja den D2M abfragen. Das wiederum erzeugt ja viel Datenstrom.
                  In den Einstellungen des PS in der APP wird ja auch der Batteriestand angezeigt.
                  Finde ich vielleicht den Wert irgendwo versteckt in den "userdaten" wieder ohne de D2M abzufragen?

                  vielen Lieben Dank für eure Hilfe.
                  Und vor allen für das tolle Script.

                  gruß Kai

                  P Offline
                  P Offline
                  Ponti92
                  schrieb am zuletzt editiert von
                  #564

                  @kaiausbrieselang ja das geht auch über

                  *.data.InverterHeartbeat.batSoc
                  
                  K 1 Antwort Letzte Antwort
                  0
                  • P Offline
                    P Offline
                    pasch
                    schrieb am zuletzt editiert von
                    #565

                    Läuft super bisher. 🙂

                    Mir ist aufgefallen, dass "Other Loads" bei mir oft um 1-3 Watt schwankt. Gibt es die Möglichkeit zu sagen, nur bei Änderungen größer X den neuen Wert setzten? In den Einstellungen habe ich nichts gefunden.

                    Grüße
                    Patrick

                    1 Antwort Letzte Antwort
                    0
                    • R Offline
                      R Offline
                      resilient
                      schrieb am zuletzt editiert von
                      #566

                      Gestern Abend ist mir was aufgefallen, das eventuell noch ein Bug sein könnte. Der erste PS mit Speicher war leer und der 2. hatte noch 60% aber das Script wollte/konnte
                      dem 2. PS die angeforderte Leistung nicht zuweisen er wollte immer den ersten bei dem die Batterie bereits leer war. Half nur das script zu stoppen und es manuell über die app zu machen.
                      Aber ansonsten läuft die Regelung ziemlich gut auch bei Echtzeit-Regelung.

                      1 Antwort Letzte Antwort
                      0
                      • P Ponti92

                        @kaiausbrieselang ja das geht auch über

                        *.data.InverterHeartbeat.batSoc
                        
                        K Offline
                        K Offline
                        kaiausBrieselang
                        schrieb am zuletzt editiert von
                        #567

                        @ponti92
                        wieder was gelernt 🙂
                        Danke dir!!

                        1 Antwort Letzte Antwort
                        0
                        • S Offline
                          S Offline
                          sirdir
                          schrieb am zuletzt editiert von sirdir
                          #568

                          Hm, das neue Script funktioniert für mich nicht. Es regelt überhaupt nichts. Der Debug Modus gibt leider auch keine sinnvollen Meldungen mehr aus sondern im Prinzip nur MQTT geschnatter. Disregard, beim cut&paste ist bei der Smartmeter ID was schief gegangen.

                          1 Antwort Letzte Antwort
                          0
                          • umeleU Offline
                            umeleU Offline
                            umele
                            schrieb am zuletzt editiert von
                            #569

                            Hallo zusammen,

                            Ich habe mal für mich selber zusätzlich zum Script mit Blockly was entworfen, was mir erlaubt, den täglichen Strombezug vom Netz zu monitoren.
                            blockly Strombezug.png

                            Die dafür nötigen Objekte habe ich manuell erstellt:
                            neue Objekte.png

                            Falls das interessant erscheint - vielleicht mag ja jemand das ins Script integrieren?

                            1 Antwort Letzte Antwort
                            0
                            • umeleU Offline
                              umeleU Offline
                              umele
                              schrieb am zuletzt editiert von umele
                              #570

                              Hallo zusammen,

                              Das Script läuft bei mir inzwischen reibungslos - vielen Dank @Waly_de für die super Arbeit!

                              Ich möchte "lowBatLimitPozOn" von der Wettervorhersage abhängig machen.
                              Wenn der kommende Tag sonnig wird, dann soll lowBatLimitPozOn = 10 sein, sonst lowBatLimitPozOn = 30 (möchte genügend Reserve für Stromausfälle behalten).
                              Die Wettervorhersage bekomme ich vom Adapter "DasWetter". Über die Objekte

                              • daswetter.0.NextDays.Location_1.Day_1.Wetter_Symbol_id

                              und

                              • daswetter.0.NextDays.Location_1.Day_1.Wetter_Symbol_id2

                              kommt die Info, ob Vormittag, bzw. Nachmittag sonnig werden.

                              Darauf basierend habe ich ein Objekt ("AkkuReserve") erstellt, das den gewünschten Wert für lowBatLimitPozOn enthält.

                              "AkkuReserve" soll an lowBatLimitPozOn übergeben werden.

                              Leider kann ich wirklich kein JavaScript...
                              Kann mir bitte jemand dabei helfen?
                              7535bac0-4d05-422e-a372-1de59c654df7-image.png

                              Vielen Dank!

                              W 1 Antwort Letzte Antwort
                              0
                              • umeleU umele

                                Hallo zusammen,

                                Das Script läuft bei mir inzwischen reibungslos - vielen Dank @Waly_de für die super Arbeit!

                                Ich möchte "lowBatLimitPozOn" von der Wettervorhersage abhängig machen.
                                Wenn der kommende Tag sonnig wird, dann soll lowBatLimitPozOn = 10 sein, sonst lowBatLimitPozOn = 30 (möchte genügend Reserve für Stromausfälle behalten).
                                Die Wettervorhersage bekomme ich vom Adapter "DasWetter". Über die Objekte

                                • daswetter.0.NextDays.Location_1.Day_1.Wetter_Symbol_id

                                und

                                • daswetter.0.NextDays.Location_1.Day_1.Wetter_Symbol_id2

                                kommt die Info, ob Vormittag, bzw. Nachmittag sonnig werden.

                                Darauf basierend habe ich ein Objekt ("AkkuReserve") erstellt, das den gewünschten Wert für lowBatLimitPozOn enthält.

                                "AkkuReserve" soll an lowBatLimitPozOn übergeben werden.

                                Leider kann ich wirklich kein JavaScript...
                                Kann mir bitte jemand dabei helfen?
                                7535bac0-4d05-422e-a372-1de59c654df7-image.png

                                Vielen Dank!

                                W Offline
                                W Offline
                                Waly_de
                                schrieb am zuletzt editiert von
                                #571

                                @umele hehe das ist eine tolle Idee 👍😊

                                Vorschlag: wenn du schon ein Objekt selbst anlegst, dann scheib doch da den gewünschten wert für dein Limit rein, und wir ersetzen die entsprechende Variable im Script mit diesem Object…

                                umeleU 1 Antwort Letzte Antwort
                                0
                                • W Waly_de

                                  @umele hehe das ist eine tolle Idee 👍😊

                                  Vorschlag: wenn du schon ein Objekt selbst anlegst, dann scheib doch da den gewünschten wert für dein Limit rein, und wir ersetzen die entsprechende Variable im Script mit diesem Object…

                                  umeleU Offline
                                  umeleU Offline
                                  umele
                                  schrieb am zuletzt editiert von
                                  #572

                                  @waly_de - bist ein Schatz 🙂

                                  Ich habe es für mich jetzt erst mal so probiert - hoffe, damit zerschiesse ich mir das Script nicht:

                                  59c8603e-858d-41b1-a3bf-417a2e9e9b7f-image.png

                                  W 1 Antwort Letzte Antwort
                                  0
                                  • umeleU umele

                                    @waly_de - bist ein Schatz 🙂

                                    Ich habe es für mich jetzt erst mal so probiert - hoffe, damit zerschiesse ich mir das Script nicht:

                                    59c8603e-858d-41b1-a3bf-417a2e9e9b7f-image.png

                                    W Offline
                                    W Offline
                                    Waly_de
                                    schrieb am zuletzt editiert von
                                    #573

                                    @umele das könnte gehen, allerdings greift das nur beim starten des Scripts und nicht während der Laufzeit.

                                    Ich hab mir dazu was flexibles überlegt, das ich auch in die nächste Version fest einbaue.
                                    Damit kann man das easy für jeden Punkt der Config machen und es ist auch während der Laufzeit alles änderbar:

                                    Füge das hier unmittelbar nach der "ConfigData" definition ein:

                                    //  EXTERNE STATES zum Manipulieren von Configurationsvariablen 
                                    var externConfig = [
                                        //############# Diesen Abschnitt für jeden einzelne Wert anlegen ################
                                        {
                                            VarName: "seriennummern[0].lowBatLimitPozOn",       //Variabelname aus "ConfigData" bei Aufzählungen [0...X] in der Reigenfolge der Angaben 
                                            id: "0_userdata.0.ecoflow.ExStateTest"              //Das Objekt (State) das den Wert für diese variable enthalten soll 
                                        },
                                        //#######################################################################
                                    ];
                                    //#######################################################################
                                    
                                    // Funktion zum Setzen einer verschachtelten Eigenschaft in einem Objekt
                                    function setNestedProperty(obj, path, value) {
                                        let keys = path.split('.');
                                        let lastKey = keys.pop();
                                        let tempObj = obj;
                                    
                                        keys.forEach(key => {
                                            if (key.match(/\[\d+\]/)) {
                                                let index = parseInt(key.match(/\[(\d+)\]/)[1]);
                                                key = key.split('[')[0];
                                                tempObj = tempObj[key][index];
                                            } else {
                                                tempObj = tempObj[key];
                                            }
                                        });
                                    
                                        tempObj[lastKey] = value;
                                    }
                                    
                                    function setConfigValueFromId(VarName, id) {
                                        if (isState2(id)) {
                                            let value = getState(id).val;  // Wert von ioBroker abrufen
                                            setNestedProperty(ConfigData, VarName, value);  // Wert in ConfigData setzen
                                        }
                                    }
                                    
                                    // Initialisierung bei Programmstart
                                    externConfig.forEach(config => {
                                        setConfigValueFromId(config.VarName, config.id);
                                    });
                                    
                                    // Änderungen während der Laufzeit überwachen
                                    externConfig.forEach(config => {
                                        if (isState2(config.id)) {
                                            on(config.id, function (obj) {
                                                setConfigValueFromId(config.VarName, obj.id);
                                                //log("ExternesEvent:" + obj.id + " : " + config.VarName + ":" + obj.state.val)
                                            });
                                        }
                                    });
                                    //#######################################################################
                                    
                                    

                                    solle sich selbst erklären 😉

                                    umeleU 2 Antworten Letzte Antwort
                                    0
                                    • W Waly_de

                                      @umele das könnte gehen, allerdings greift das nur beim starten des Scripts und nicht während der Laufzeit.

                                      Ich hab mir dazu was flexibles überlegt, das ich auch in die nächste Version fest einbaue.
                                      Damit kann man das easy für jeden Punkt der Config machen und es ist auch während der Laufzeit alles änderbar:

                                      Füge das hier unmittelbar nach der "ConfigData" definition ein:

                                      //  EXTERNE STATES zum Manipulieren von Configurationsvariablen 
                                      var externConfig = [
                                          //############# Diesen Abschnitt für jeden einzelne Wert anlegen ################
                                          {
                                              VarName: "seriennummern[0].lowBatLimitPozOn",       //Variabelname aus "ConfigData" bei Aufzählungen [0...X] in der Reigenfolge der Angaben 
                                              id: "0_userdata.0.ecoflow.ExStateTest"              //Das Objekt (State) das den Wert für diese variable enthalten soll 
                                          },
                                          //#######################################################################
                                      ];
                                      //#######################################################################
                                      
                                      // Funktion zum Setzen einer verschachtelten Eigenschaft in einem Objekt
                                      function setNestedProperty(obj, path, value) {
                                          let keys = path.split('.');
                                          let lastKey = keys.pop();
                                          let tempObj = obj;
                                      
                                          keys.forEach(key => {
                                              if (key.match(/\[\d+\]/)) {
                                                  let index = parseInt(key.match(/\[(\d+)\]/)[1]);
                                                  key = key.split('[')[0];
                                                  tempObj = tempObj[key][index];
                                              } else {
                                                  tempObj = tempObj[key];
                                              }
                                          });
                                      
                                          tempObj[lastKey] = value;
                                      }
                                      
                                      function setConfigValueFromId(VarName, id) {
                                          if (isState2(id)) {
                                              let value = getState(id).val;  // Wert von ioBroker abrufen
                                              setNestedProperty(ConfigData, VarName, value);  // Wert in ConfigData setzen
                                          }
                                      }
                                      
                                      // Initialisierung bei Programmstart
                                      externConfig.forEach(config => {
                                          setConfigValueFromId(config.VarName, config.id);
                                      });
                                      
                                      // Änderungen während der Laufzeit überwachen
                                      externConfig.forEach(config => {
                                          if (isState2(config.id)) {
                                              on(config.id, function (obj) {
                                                  setConfigValueFromId(config.VarName, obj.id);
                                                  //log("ExternesEvent:" + obj.id + " : " + config.VarName + ":" + obj.state.val)
                                              });
                                          }
                                      });
                                      //#######################################################################
                                      
                                      

                                      solle sich selbst erklären 😉

                                      umeleU Offline
                                      umeleU Offline
                                      umele
                                      schrieb am zuletzt editiert von
                                      #574

                                      @waly_de - super Danke!! 😊 😊 👍 👍

                                      1 Antwort Letzte Antwort
                                      0
                                      • W Waly_de

                                        @umele das könnte gehen, allerdings greift das nur beim starten des Scripts und nicht während der Laufzeit.

                                        Ich hab mir dazu was flexibles überlegt, das ich auch in die nächste Version fest einbaue.
                                        Damit kann man das easy für jeden Punkt der Config machen und es ist auch während der Laufzeit alles änderbar:

                                        Füge das hier unmittelbar nach der "ConfigData" definition ein:

                                        //  EXTERNE STATES zum Manipulieren von Configurationsvariablen 
                                        var externConfig = [
                                            //############# Diesen Abschnitt für jeden einzelne Wert anlegen ################
                                            {
                                                VarName: "seriennummern[0].lowBatLimitPozOn",       //Variabelname aus "ConfigData" bei Aufzählungen [0...X] in der Reigenfolge der Angaben 
                                                id: "0_userdata.0.ecoflow.ExStateTest"              //Das Objekt (State) das den Wert für diese variable enthalten soll 
                                            },
                                            //#######################################################################
                                        ];
                                        //#######################################################################
                                        
                                        // Funktion zum Setzen einer verschachtelten Eigenschaft in einem Objekt
                                        function setNestedProperty(obj, path, value) {
                                            let keys = path.split('.');
                                            let lastKey = keys.pop();
                                            let tempObj = obj;
                                        
                                            keys.forEach(key => {
                                                if (key.match(/\[\d+\]/)) {
                                                    let index = parseInt(key.match(/\[(\d+)\]/)[1]);
                                                    key = key.split('[')[0];
                                                    tempObj = tempObj[key][index];
                                                } else {
                                                    tempObj = tempObj[key];
                                                }
                                            });
                                        
                                            tempObj[lastKey] = value;
                                        }
                                        
                                        function setConfigValueFromId(VarName, id) {
                                            if (isState2(id)) {
                                                let value = getState(id).val;  // Wert von ioBroker abrufen
                                                setNestedProperty(ConfigData, VarName, value);  // Wert in ConfigData setzen
                                            }
                                        }
                                        
                                        // Initialisierung bei Programmstart
                                        externConfig.forEach(config => {
                                            setConfigValueFromId(config.VarName, config.id);
                                        });
                                        
                                        // Änderungen während der Laufzeit überwachen
                                        externConfig.forEach(config => {
                                            if (isState2(config.id)) {
                                                on(config.id, function (obj) {
                                                    setConfigValueFromId(config.VarName, obj.id);
                                                    //log("ExternesEvent:" + obj.id + " : " + config.VarName + ":" + obj.state.val)
                                                });
                                            }
                                        });
                                        //#######################################################################
                                        
                                        

                                        solle sich selbst erklären 😉

                                        umeleU Offline
                                        umeleU Offline
                                        umele
                                        schrieb am zuletzt editiert von umele
                                        #575

                                        @waly_de - gerade getestet. Bekomme diese Fehler:
                                        95c9f581-6368-4ac9-90e4-032f6a02e043-image.png

                                        Weil mein Objekt eine andere ID hat, habe ich die für den Test im Script angepasst:
                                        9faaa1f3-0ceb-48b1-a25e-b535b86054b4-image.png

                                        In Zeile 282 und 283 steht das hier:
                                        6b4ad1f8-ddef-45a0-ac6f-a44a841c8838-image.png

                                        Zeile 2513 gibt es gar nicht:
                                        7e532ff0-f540-4923-9762-ada27f1fcfdd-image.png

                                        W 1 Antwort Letzte Antwort
                                        0
                                        • umeleU umele

                                          @waly_de - gerade getestet. Bekomme diese Fehler:
                                          95c9f581-6368-4ac9-90e4-032f6a02e043-image.png

                                          Weil mein Objekt eine andere ID hat, habe ich die für den Test im Script angepasst:
                                          9faaa1f3-0ceb-48b1-a25e-b535b86054b4-image.png

                                          In Zeile 282 und 283 steht das hier:
                                          6b4ad1f8-ddef-45a0-ac6f-a44a841c8838-image.png

                                          Zeile 2513 gibt es gar nicht:
                                          7e532ff0-f540-4923-9762-ada27f1fcfdd-image.png

                                          W Offline
                                          W Offline
                                          Waly_de
                                          schrieb am zuletzt editiert von
                                          #576

                                          @umele hmmm guck noch mal, ob du es an der richtigen Stelle eingefügt hast. Es muss hinter der. Letzten }; der ConfigData Definition eingesetzt werden

                                          umeleU 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

                                          387

                                          Online

                                          32.4k

                                          Benutzer

                                          81.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
                                          • Aktuell
                                          • Tags
                                          • Ungelesen 0
                                          • Kategorien
                                          • Unreplied
                                          • Beliebt
                                          • GitHub
                                          • Docu
                                          • Hilfe