Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. ecoflow-connector-Script zur dynamischen Leistungsanpassung

    NEWS

    • Monatsrückblick - April 2025

    • Minor js-controller 7.0.7 Update in latest repo

    • Save The Date: ioBroker@Smart Living Forum Solingen, 14.06.

    ecoflow-connector-Script zur dynamischen Leistungsanpassung

    This topic has been deleted. Only users with topic management privileges can see it.
    • F
      foxthefox Developer @sirdir last edited by

      @sirdir
      kannst du den originalen hex string mal durch https://protobuf-decoder.netlify.app entschlüsseln.
      Was kommt dort für die erste Stelle?
      0801 ist ein komischer Wert

      W 1 Reply Last reply Reply Quote 0
      • W
        Waly_de @sirdir last edited by

        @sirdir sagte in ecoflow-connector-Script zur dynamischen Leistungsanpassung:

        Es ist schon seltsam. Die 1.1.6.1 funktioniert jeden Tag bis 1 Uhr wo ich die Batterie wieder auflade und nix einspeise, aber morgens um 7 wo wieder eingespeist werden sollte tut das script einfach nix mehr. Ein Neustart hilft nix, aber wenn ch das alte Script starte funktioniert’s und wenn ich dann zum 1.1.6.1 zurück gehe geht das auch wieder… Hab jetzt endlich gesehen was die mlog funktion tut und kann das vielleicht morgen anschauen… wobei ich keine Lust habe da wieder um 7 rumzudebuggen, vielleicht lass ich das alte Script laufen…

        Das Problem hat bisher keiner reportet. Du sagst du lädst um 1. stellst du dann das script mit regulate state ab? Keine Meldungen im Log?

        @sirdir sagte in ecoflow-connector-Script zur dynamischen Leistungsanpassung:

        Aber um noch etwas sinnvolles beizutragen, da noch niemand davon geschrieben hat und Waly das Update ja vielleicht nicht bekommen hat, wer weiss. Es gibt die neue Funktion ‘Feed-in control’, die festlegt, ob bei vollem Akku die ganze Solarleistung eingespeist werden soll (control off) oder nur was eingestellt ist (control on):

        Oh, cool. Nein, ich hab das Update nicht bekommen. 0801 als payload? Das ist wirklich schräg.... ich bau es mal in die Writeables...

        S 1 Reply Last reply Reply Quote 0
        • W
          Waly_de @foxthefox last edited by

          @foxthefox sagte in ecoflow-connector-Script zur dynamischen Leistungsanpassung:

          0801 ist ein komischer Wert

          ach Quatsch... jetzt fällt es mir wieder ein. Der Payload ist ja auch protobuf codiert.... das ist ein HEXString und heisst einfach value:1

          F 1 Reply Last reply Reply Quote 0
          • F
            foxthefox Developer @Waly_de last edited by

            @waly_de sagte in ecoflow-connector-Script zur dynamischen Leistungsanpassung:

            @foxthefox sagte in ecoflow-connector-Script zur dynamischen Leistungsanpassung:

            0801 ist ein komischer Wert

            ach Quatsch... jetzt fällt es mir wieder ein. Der Payload ist ja auch protobuf codiert.... das ist ein HEXString und heisst einfach value:1

            ich bin beruhigt 🙂

            W 1 Reply Last reply Reply Quote 1
            • W
              Waly_de @foxthefox last edited by

              @foxthefox Wenn du das im Heartbeat findest, sag bitte bescheid 😉

              F 1 Reply Last reply Reply Quote 0
              • F
                foxthefox Developer @Waly_de last edited by

                @waly_de sagte in ecoflow-connector-Script zur dynamischen Leistungsanpassung:

                @foxthefox Wenn du das im Heartbeat findest, sag bitte bescheid 😉

                das war einfach, ist auf Position 61 vom inverter_heartbeat 💪

                W 1 Reply Last reply Reply Quote 1
                • W
                  Waly_de @foxthefox last edited by Waly_de

                  @foxthefox wie nennen wir es ?.... "FeedInControl" oder besser "feed_in_control" damit es zu den anderen passt ?

                  F 1 Reply Last reply Reply Quote 0
                  • F
                    foxthefox Developer @Waly_de last edited by

                    @waly_de sagte in ecoflow-connector-Script zur dynamischen Leistungsanpassung:

                    @foxthefox wie nennen wir es ?.... "FeedInControl" ?

                    Ich denke "feedPriority" trifft es ganz gut, ähnlich zu "supplyPriority"
                    0-prio auf alle Sonne in Leistung
                    1-prio auf festgelegte Leistung

                    W 1 Reply Last reply Reply Quote 0
                    • W
                      Waly_de @foxthefox last edited by

                      @foxthefox sagte in ecoflow-connector-Script zur dynamischen Leistungsanpassung:

                      Ich denke "feedPriority" trifft es ganz gut, ähnlich zu "supplyPriority"

                      ich schreib jetzt feed_priority in die Definition ... das ist dann im Format konsistent.

                      Super Danke 👍

                      W 1 Reply Last reply Reply Quote 0
                      • W
                        Waly_de @Waly_de last edited by Waly_de

                        Neue Version:

                          • (1.1.6.2) 4.11.2023
                          • Neues PowerStream-Writeable "feed_priority" eingebaut 0: Wenn Batt voll, alle PV-Power einspeisen 1: Nur was eingestellt ist
                          • Konfiguration wird jetzt für Module in einem State unter Settings gespeichert

                        ecoflow-connector_v1162_04.11.2023.txt

                        1 Reply Last reply Reply Quote 0
                        • S
                          sirdir @Waly_de last edited by

                          @waly_de Nein ich änder nichts an deinem Script. Mein ‘Zählersimulator’ meldet einfach zwischen 1 und 7 Uhr, dass nix eingespeist werden muss. Hat immer funktioniert bis ich 1.1.6.1 installiert habe. Kann aber auch Zufall sein… Nein im Log hab ich gar nichts gefunden, aber im Log sieht man ja auch nicht soo viel, wenn logM nicht an ist(warum hast du das eigentlich aufgetrennt mit logM und debug? Debug steuer ich einen externen state, mit logM geht das natürlich nicht. Naja könnte es ja auch ändern im script.

                          W 1 Reply Last reply Reply Quote 0
                          • W
                            Waly_de @sirdir last edited by

                            @sirdir mlog war eigentlich nur für mich gedacht, damit ich gezielt Stellen debugen kann, ohne zugemüllt zu werden 😉

                            Zu deinem Problem fällt mir so leider nichts mehr ein. Guck halt mal, ob das Script überhaupt noch was macht, oder ob es vielleicht vom Adapter gestoppt wurde.
                            Mit Debug oder mlog sollte das ja einfach festzustellen sein.

                            Kannst Du vielleicht mal testen, ob das neue Writeable funktioniert? Ich hab ja leider noch kein Update bekommen.

                            S 1 Reply Last reply Reply Quote 0
                            • S
                              sirdir @Waly_de last edited by

                              @waly_de ja vielleicht schau ich heut nacht/morgen früh, aber vielleicht bin ich auch zu faul. An gestopptem Script kann's nicht liegen, da ein neustert nicht hilft, seltsamerweise.
                              Das writeable ist 0_userdata.0.ecoflow.app_device_property_xxx.data.InverterHeartbeat.feedPriority? Oder hab ich was übersehen? Der Status wird korrekt angezeigt, aber wenn ich ihn dort überschreibe ändert sich sich nichts in der App.

                              W 1 Reply Last reply Reply Quote 0
                              • W
                                Waly_de @sirdir last edited by Waly_de

                                @sirdir ne die writeables stehen ja unter
                                0_userdata.0.ecoflow.app_XXXXX_XXXXX_thing_property_set.writeables...

                                sollte feed_priority heissen

                                S 1 Reply Last reply Reply Quote 0
                                • S
                                  sirdir @Waly_de last edited by

                                  @waly_de d'oh, hab ich nicht gefunden… war aber auch sehr in Eile. Ja, hab's jetzt gesehen, funktioniert.

                                  1 Reply Last reply Reply Quote 0
                                  • K
                                    karo2204 @Waly_de last edited by

                                    @waly_de Mmh, heute Nachmittag hat alles noch gut funktioniert, und jetzt arbeitet das Script nicht mehr richtig 😞

                                    In den Logs bekomme ich nach Neustart von iob folgendes:

                                    State value to set for "0_userdata.0.ecoflow.Settings.ConfigData" has to be one of type "string", "number", "boolean" but received type "object"

                                    ConfigData ist auch rot in den Objects.

                                    Was kann ich machen? Ich war so happy, dass es funktioniert.

                                    1 Reply Last reply Reply Quote 0
                                    • K
                                      karo2204 @karo2204 last edited by

                                      @karo2204 said in ecoflow-connector-Script zur dynamischen Leistungsanpassung:

                                      @waly_de said in ecoflow-connector-Script zur dynamischen Leistungsanpassung:

                                                                                                                                                                  //*************************************************************                                                                                                                                                                            // Tibber Modul                                                                                                                                                                            //*************************************************************                                                                                                                                                                            // Schaltet die Regelung der Powerstation ab, wenn der Strom billig ist                                                                                                                                                                             // und einen beliebigen Schalter zum Aktivieren der AC-Ladung ein, bis die Batterie                                                                                                                                                                             // den durch der "BatMax" festgelegten Ladestand in % erreicht hat                                                                                                                                                                            //                                                                                                                                                                             // Diese Parameter aus dem Hauptscript sind wichtig:                                                                                                                                                                            // RegulationOffPower: -2 // Wird die Regulation per State abgestellt, wird die Einspeiseleistung des ersten Powerstreams auf diesen Wert gesetzt (-1 = keine Änderung, -2 = Batterie Priomodus)                                                                                                                                                                            // RegulationState: "Regulate" // Erzeugt der State zum Ein und Aus-Schalten der Regulation.                                                                                                                                                                            //                                                                                                                                                                            // Das Script versucht selbst die ID's für den TibberStatus und den Batteriestand zu ermitteln.                                                                                                                                                                            // Wenn das nicht klappt bitte einfach die richtigen ID's hinter "batSocID" und "tibberID" angeben.                                                                                                                                                                            //                                                                                                                                                                            //*************************************************************                                                                                                                                                                                                                                                                                                                                                         //*************************************************************                                                                                                                                                                            // Konfiguration laden, wenn nicht im Originalscript eingefügt                                                                                                                                                                            //*************************************************************                                                                                                                                                                            var ConfigData = {                                                                                                                                                                                statesPrefix: '0_userdata.0.ecoflow',                                                                                                                                                                                RegulationState: "Regulate"                                                                                                                                                                            }                                                                                                                                                                            if (typeof ConfigData.email === 'undefined') {                                                                                                                                                                                if (getState("0_userdata.0.ecoflow.Settings.ConfigData").val.email !== undefined) {                                                                                                                                                                                    ConfigData = getState("0_userdata.0.ecoflow.Settings.ConfigData").val;                                                                                                                                                                                }                                                                                                                                                                            }                                                                                                                                                                                                                                                                                                                                                         /***************************************                                                                                                                                                                            **********  YOUR DATA HERE  ************                                                                                                                                                                             ****************************************/                                                                                                                                                                            var tibberConfig = {                                                                                                                                                                                BatMax: 99,                                  //Bei diesem Ladestand stoppt die AC-Ladung und das Script wird wieder eingeschaltet                                                                                                                                                                                 BatMin: 95,                                  //Der Ladestand der Batterie muss kleiner sein als BatMin , damit der Akku per AC-Ladung geladen wird                                                                                                                                                                                 SwitchID: "sonoff.0.NOUS-DVES_F0A844.POWER", //ID des Schalters, der die AC-Ladung einschaltet. "true" und "false" werden gesetzt                                                                                                                                                                                LevelToSwitch: [                             //Hier die Werte definieren, bei denen die AC-Ladung eingeschaltet werden soll                                                                                                                                                                                    //"NORMAL",                                                                                                                                                                                    "CHEAP",                                 //Einkommentieren falls gewüscht                                                                                                                                                                                     "VERY_CHEAP"                                                                                                                                                                                ],                                                                                                                                                                            }                                                                                                                                                                            //***************************************/                                                                                                                                                                            // Nur angeben, wenn automatische Ermittlung fehlschlägt                                                                                                                                                                            //***************************************/                                                                                                                                                                            let batSocID = getState(ConfigData.statesPrefix + ".Settings.Tibber.tibberBatSocID").val                                                                                                                                                                            let tibberID = getState(ConfigData.statesPrefix + ".Settings.Tibber.tibberID").val                                                                                                                                                                            //***************************************/                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      var idOK = false                                                                                                                                                                            if (!batSocID || !tibberID) {                                                                                                                                                                                log("Versuche die IDs für Tibber und Batterielevel zu finden")                                                                                                                                                                                $("tibberlink.*.Homes.*.CurrentPrice.level").each(function (id, i) {                                                                                                                                                                                    tibberID = id                                                                                                                                                                                    createState(ConfigData.statesPrefix + ".Settings.Tibber.tibberID", tibberID, false)                                                                                                                                                                                    log("TibberID gefunden und gespeichert:" + id)                                                                                                                                                                                })                                                                                                                                                                                $(ConfigData.statesPrefix + ".app_device_property_*.data.InverterHeartbeat.batSoc").each(function (id, i) {                                                                                                                                                                                    if (getState(id).val > 0) {                                                                                                                                                                                        batSocID = id                                                                                                                                                                                        createState(ConfigData.statesPrefix + ".Settings.Tibber.tibberBatSocID", batSocID, false)                                                                                                                                                                                        log("batSocID gefunden und gespeichert:" + id)                                                                                                                                                                                    }                                                                                                                                                                                })                                                                                                                                                                                if (!batSocID || !tibberID) {                                                                                                                                                                                    log("Fehler bei der Ermittlung der IDs. Bitte händisch ins Script eintragen", 'error')                                                                                                                                                                                } else {                                                                                                                                                                                    idOK = true                                                                                                                                                                                }                                                                                                                                                                            } else {                                                                                                                                                                                idOK = true                                                                                                                                                                            }                                                                                                                                                                            if (idOK) {                                                                                                                                                                                checkTibber()                                                                                                                                                                                on({ id: tibberID, change: "ne" }, function (obj) {                                                                                                                                                                                    //log("Tibber Modul. tibberID Event:" + obj.state.val)                                                                                                                                                                                    checkTibber()                                                                                                                                                                                });                                                                                                                                                                                on({ id: batSocID, change: "ne" }, function (obj) {                                                                                                                                                                                    //log("Tibber Modul. batSocID Event:" + obj.state.val + "%")                                                                                                                                                                                    checkTibber()                                                                                                                                                                                });                                                                                                                                                                            }                                                                                                                                                                            function checkTibber() {                                                                                                                                                                                if (tibberID && batSocID) {                                                                                                                                                                                    const RegulateID = ConfigData.statesPrefix + "." + ConfigData.RegulationState                                                                                                                                                                                    let priceLevel = getState(tibberID).val;                                                                                                                                                                                    let batsoc = Number(getState(batSocID).val)                                                                                                                                                                                    let OldRegulate = toBoolean(getState(RegulateID).val)                                                                                                                                                                                    //log("Tibber Preislevel: " + priceLevel + " OldRegulate: " + OldRegulate + " batsoc: " + (batsoc))                                                                                                                                                                                    if ((tibberConfig.LevelToSwitch.includes(priceLevel))) {                                                                                                                                                                                        if (OldRegulate) {                                                                                                                                                                                            if (batsoc <= tibberConfig.BatMin) {                                                                                                                                                                                                setState(RegulateID, false);  // Regulierung aus                                                                                                                                                                                                setState(tibberConfig.SwitchID, true) //Schalter einschalten                                                                                                                                                                                                log("Script abgeschaltet AC-Ladung Ein, weil priceLevel:" + priceLevel + " batsoc:" + batsoc + "%")                                                                                                                                                                                            }                                                                                                                                                                                        } else {                                                                                                                                                                                            if (batsoc >= tibberConfig.BatMax) {                                                                                                                                                                                                setState(RegulateID, true);  // Regulierung an                                                                                                                                                                                                setState(tibberConfig.SwitchID, false) //Schalter ausschalten                                                                                                                                                                                                log(" Batterie bei BatMax. Script eingeschaltet AC-Ladung Aus. priceLevel:" + priceLevel + " batsoc:" + batsoc + "%")                                                                                                                                                                                            }                                                                                                                                                                                        }                                                                                                                                                                                    } else {                                                                                                                                                                                        if (!OldRegulate) {                                                                                                                                                                                            setState(RegulateID, true);  // Regulierung an                                                                                                                                                                                            setState(tibberConfig.SwitchID, false) //Schalter ausschalten                                                                                                                                                                                            log("Script eingeschaltet AC-Ladung Aus. priceLevel:" + priceLevel + " batsoc:" + batsoc + "%")                                                                                                                                                                                        }                                                                                                                                                                                    }                                                                                                                                                                                } else {                                                                                                                                                                                    //log("checkTibber skip. batsocID und/oder tibberID fehlen.")                                                                                                                                                                                }                                                                                                                                                                            }                                                                                                                                                                            //*************************************************************                                            
                                      

                                      Ich bekomme hier den Fehler angezeigt:

                                      javascript.0 (52431) script.js.Ecoflow-Tibber: TypeError: Cannot read properties of null (reading 'email')
                                      07:11:14.323	error	javascript.0 (52431) at script.js.Ecoflow-Tibber:25:65
                                      07:11:14.324	error	javascript.0 (52431) at script.js.Ecoflow-Tibber:119:3
                                      

                                      Was kann ich da machen?

                                      W 1 Reply Last reply Reply Quote 0
                                      • W
                                        Waly_de last edited by

                                        @sirdir sagte in ecoflow-connector-Script zur dynamischen Leistungsanpassung:

                                        @waly_de d'oh, hab ich nicht gefunden… war aber auch sehr in Eile. Ja, hab's jetzt gesehen, funktioniert.

                                        Top! Danke

                                        1 Reply Last reply Reply Quote 0
                                        • W
                                          Waly_de @karo2204 last edited by

                                          @karo2204 ist das eine rote oder eine Orange Meldung? Wenn orange müsste es dennoch laufen. Ich guck mir das morgen noch mal an.

                                          K 1 Reply Last reply Reply Quote 0
                                          • K
                                            karo2204 @Waly_de last edited by karo2204

                                            @waly_de Die Meldung war gelb, aber jetzt bekomme ich solche Meldungen in rot. Habe Dein neustes Script drin von gestern:

                                            at processTimers (node:internal/timers:512:7)

                                            javascript.0
                                            2023-11-05 06:00:17.177 error at listOnTimeout (node:internal/timers:569:17)

                                            javascript.0
                                            2023-11-05 06:00:17.177 error at Timeout._onTimeout (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:2743:34)

                                            javascript.0
                                            2023-11-05 06:00:17.177 error at Object.<anonymous> (script.js.Ecoflow-1162:919:9)

                                            javascript.0
                                            2023-11-05 06:00:17.176 error at CheckforReconnect (script.js.Ecoflow-1162:1299:9)

                                            javascript.0
                                            2023-11-05 06:00:17.176 error at script.js.Ecoflow-1162:921:13

                                            javascript.0
                                            2023-11-05 06:00:17.175 error at SetBasePower (script.js.Ecoflow-1162:1925:43)

                                            javascript.0
                                            2023-11-05 06:00:17.174 error Error in callback: TypeError: Cannot set properties of undefined (setting 'regulieren')

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            822
                                            Online

                                            31.6k
                                            Users

                                            79.4k
                                            Topics

                                            1.3m
                                            Posts

                                            126
                                            1630
                                            500617
                                            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