Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Einsteigerfragen
    4. Einbindung von Geräten
    5. Adapter für Ecoflow Einbindung

    NEWS

    • ioBroker goes Matter ... Matter Adapter in Stable

    • 15. 05. Wartungsarbeiten am ioBroker Forum

    • Monatsrückblick - April 2025

    Adapter für Ecoflow Einbindung

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

      @vespagaming @Waly_de
      Ich bin mir nicht ganz sicher evtl. komm ich noch dahinter.
      Jedoch wenn man die .java Dateien der Ecoflow .apk sich ansieht könnte das Protbuf sein.

      "import com.google.protobuf.CodedInputStream;"
      625beb3a-9bf9-4508-9ed7-05a44086cef7-image.png

      hmm...

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

        @vespagaming

        ja, ich hab immer nur den Wert für "Leistungsbedarf am AC Ausgang" geändert.
        Hier mal frische Daten, mit den entsprechenden Wattangaben die ich eingestellt habe:

        100w: 0a3d0a0308fd-07-10201835200128013803401448fd015003580170fdfd7b06fd0113fd0101fd0103696f73fd0110485735315a4f4834 XXXXXXXXXXXXXXXX
        200w: 0a3d0a0308fd-0f-10201835200128013803401448fd015003580170  73bb06fd0113fd0101fd0103696f73fd0110485735315a4f4834 XXXXXXXXXXXXXXXX
        250w: 0a3d0a0308fd-13-10201835200128013803401448fd015003580170fdfdfb06fd0113fd0101fd0103696f73fd0110485735315a4f4834 XXXXXXXXXXXXXXXX
        350w: 0a3d0a0308fd-1b-10201835200128013803401448fd015003580170fdfd3b06fd0113fd0101fd0103696f73fd0110485735315a4f4834 XXXXXXXXXXXXXXXX
        400w: 0a3d0a0308fd-1f-10201835200128013803401448fd015003580170fdfd7b06fd0113fd0101fd0103696f73fd0110485735315a4f4834 XXXXXXXXXXXXXXXX
        550w: 0a3d0a0308fd-2a-10201835200128013803401448fd015003580170fdfdfb06fd0113fd0101fd0103696f73fd0110485735315a4f4834 XXXXXXXXXXXXXXXX
        600w: 0a3d0a0308fd-2e-10201835200128013803401448fd015003580170  5c3b06fd0113fd0101fd0103696f73fd0110485735315a4f4834 XXXXXXXXXXXXXXXX
        
        
        1 Reply Last reply Reply Quote 0
        • W
          Waly_de @xNodKane last edited by

          @xnodkane
          hmm das ist interessant!

          Braucht man dazu nicht eine .proto Datei oder sowas?

          Wüsste auch nicht wie ich die Daten aus dem Stringfeld im MQTT-Client in ein gültiges Format bringen soll.
          Ich glaub es braucht hier ein Uint8Array...

          Ich hab wenig Ahnung von Protbuf 😕

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

            @vespagaming

            interessant auch, wenn ich andere Dinge verstelle ist die Nachricht fast identisch und es ändern sich wieder nur die gleichen Stellen:

            Beleuchtung
            30%   0a3d0a0308fd 02 10201835200128013803401448fd015003580170 fdfdfdfd 06fd0113fd0101fd0103696f73fd0110485735315a4f4834 XXXXXXXXXXXXXXXX
            50%   0a3d0a0308fd 03 10201835200128013803401448fd015003580170   fdfdbc 06fd0113fd0101fd0103696f73fd0110485735315a4f4834 XXXXXXXXXXXXXXXX
            20%   0a3d0a0308fd 01 10201835200128013803401448fd015003580170   fdfd7c 06fd0113fd0101fd0103696f73fd0110485735315a4f4834 XXXXXXXXXXXXXXXX
            Entladezustand
            7%    0a3c0a0208 07   10201835200128013803401448fd015002580170     6efd 06fd0113fd0101fd0103696f73fd0110485735315a4f4834 XXXXXXXXXXXXXXXX
            9%    0a3c0a0208 09   10201835200128013803401448fd015002580170   fdfdfd 06fd0113fd0101fd0103696f73fd0110485735315a4f4834 XXXXXXXXXXXXXXXX
            
            
            1 Reply Last reply Reply Quote 0
            • xNodKane
              xNodKane @Waly_de last edited by xNodKane

              @waly_de
              Ich konnte bisher nicht viel entschlüssel, jedoch mit etwas ausprobieren bin ich schon mal soweit.
              Dies betrifft die Einstellungen der PowerStream.
              Habe die Website: https://protobuf-decoder.netlify.app/ benutzt um HEX in ein Proto umzuwandeln.
              Nun kann ich die Klasse auslesen und erhalte z.B.
              {{ "item": [ { "meta": { "value": 1 }, "function": 130, "timestamp": 905534, "serialNumber": "HW51XXXXXXXXXX" } ] }}

              function ist die Funktion, z.B. "Leistungsbedarf am AC..." die man einstellt.
              value ist der Wert der Einstellung

              message PowerItem {
                Meta meta = 1;
                int32 function = 9;
                uint32 timestamp = 14;
                string serialNumber = 25;
              }
              
              message PowerMessage {
                PowerItem item = 1;
              }
              
              message Meta {
                int32 value = 1;
              }
              
              W 1 Reply Last reply Reply Quote 1
              • W
                Waly_de @xNodKane last edited by

                @xnodkane wow .. das ist großartig. Hast du meine Daten verwendet? Ich bekomme damit nämlich nichts sinnvolles bei https://protobuf-decoder.netlify.app/ angezeigt.

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

                  @waly_de
                  Habe meine eigenen Daten genommen, da man alle hex stellen benötigt um etwas lesen zu können.
                  Das empfangene ByteArray in HEX umwandeln und als string ausgeben ohne Sonderzeichen (zusammenhängende kette).

                  Danach in die App werfen und nun versuchen zu interpretieren was da für eine Proto Datei das sein könnte.
                  Nun muss man die proto als Klasse erstellen und das auf die Klasse "mergen".
                  Nutze dafür halt .NET mit MQTTnet und Google.Protobuf.
                  In der message steht dann der lesbare string.

                  var payload = e.ApplicationMessage.PayloadSegment.ToArray();
                      var inputStream = new CodedInputStream(payload);
                      PowerMessage message = new();
                      message.MergeFrom(inputStream);
                  

                  Wie oben gezeigt habe ich manche Felder schon identifizieren können.

                  7eca80da-71ee-409e-a5c4-0464ce778fb7-image.png

                  Habe noch weiter herumprobiert und habe mir auch die .java Dateien der .apk angesehen um zu schlussfolgern wie die Daten zusammenhängen.

                   C4231d.m10767h().mo33598m(this.f29190c, Common.Send_Header_Msg.newBuilder().addMsg(Common.Header.newBuilder().setSrc(32).setDest(53).setSeq(291).setNeedAck(1).setCmdFunc(20).setCmdId(129).setDeviceSn(this.f29190c).setDataLen(build8.toByteString().size()).setPdata(build8.toByteString()).build()).build().toByteArray());
                  

                  Hier die neuste .proto

                  syntax = "proto3";
                  
                  message PowerItem {
                    optional Meta meta = 1;
                    uint32 src = 2;
                    uint32 dest = 3;
                    uint32 cmdFunc = 8;
                    CmdFunction cmdId = 9;
                    uint32 unknown = 10;
                    uint32 needAck = 11;
                    uint64 timestamp = 14;
                    string serialNumber = 25;
                  }
                  
                  message PowerMessage {
                    PowerItem item = 1;
                  }
                  
                  message Meta {
                    int32 value = 1;
                  }
                  
                  enum CmdFunction {
                  	Unknown = 0;
                  	PermanentWattsPack = 129;
                  	SupplyPriorityPack = 130;
                  }
                  
                  1 Reply Last reply Reply Quote 2
                  • A
                    applepro last edited by

                    Hi zusammen,
                    bis eben habe ich immer nur fleißig mitgelesen und zu Hause selber getüftelt. Aktuell auch leider nur mit ernüchternden Ergebnissen. Ich habe mal dem Support geschrieben und diese Antwort erhalten…
                    IMG_2133.jpeg
                    Da ich ebenfalls die Einspeisemenge des Powerstreams mit dem Hausverbrauch abgleichen und dementsprechend einstellen will, hoffe ich, dass wir hier vorher eine Lösung hinbekommen, bis Ecoflow etwas „einfacheres und offizielleres“ freigibt….richtig Lust haben die darauf ja nicht.

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

                      @applepro Es sieht ganz gut aus 🙂 Dank xNodKane's Arbeit hab ich es inzwischen geschafft sowohl einige der Statusmeldungen (PV1 und PV2 Watt sowie Leistung zum Haus) auszulesen, als auch den Wert für "Leistungsbedarf am AC..." zu schreiben.
                      Allerdings gibt es noch einige Probleme.

                      Das wichtigste ist, die entsprechenden Felder im MQTT auf den Typ "file" zu stellen und dann den Adapter neu zu starten...

                      Danach könnt ihr mit diesem Script den Inhalt auslesen und mit https://protobuf-decoder.netlify.app/ entschlüsseln.

                      getBinaryState('mqtt.<Instanznummer>.app.<USER_ID>.<SERIENNUMMER>.thing.property.set', function (err, data) {
                        log("frisch ausgelesen:"+ data.toString("hex"))
                      });
                      

                      Senden geht dann so:

                      sendTo('mqtt.<Instanznummer>', 'sendMessage2Client', {topic: '/app/.<USER_ID>/<SERIENNUMMER>/thing/property/set', message:<buffer>});
                      

                      die Daten müssen als Buffer object übergeben werden.

                      Viel Erfolg 🙂

                      Ein Problem, wofür vielleicht einer von Euch eine Lösung weiß:
                      Wenn ich den STATE im MQTT auf 'file' umstelle, kann ich keine Änderungen mehr Monitoren.

                      on({id: /mqtt.2.app.device.property.HWXXXXXXXXXXXX/, change: 'any'}, function (obj) {
                          log("EVENT!")
                      });
                      

                      ...da kommt nach der Umstellung nichts mehr. Hat jemand eine Idee?

                      VG
                      Markus

                      xNodKane A 3 Replies Last reply Reply Quote 3
                      • xNodKane
                        xNodKane @Waly_de last edited by xNodKane

                        @waly_de @applepro
                        Habe gerade noch mal etwas probiert:
                        Wenn man auf folgendes Topic hört bekommt man alle Powerstream Daten (in .proto format).

                        /app/device/property/{serialNumber}
                        

                        Dann das Proto PowerMessage benutzen und dann kommt im Feld 38 der Wert für PV Sum (muss man durch 10 teilen um den Wert in W zu erhalten).
                        Für alle SmartPlug user, diese können über PlugPower Feld 10 die Leistungsaufnahme messen. Auch hier wieder durch 10 teilen.

                        syntax = "proto3";
                        message PowerMessage {
                          PowerItem item = 1;
                        }
                        message PowerItem {
                          optional Meta meta = 1;
                          string serialNumber = 25;
                        }
                        message Meta {
                          int32 value = 1;
                          int32 pvPowerSum = 38;
                          int32 plugPower = 10;
                        }
                        

                        Da jedoch noch viele weitere verschiedene Daten hier in das Topic kommen, weiß ich noch nicht nach was ich filtern muss.
                        Vielleicht weiß da jemand schon mehr.

                        W 1 Reply Last reply Reply Quote 2
                        • A
                          applepro last edited by applepro


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

                            @waly_de Ich habe folgenden Code benutzt:

                            on({id: 'mqtt.<Instanznummer>.app.<USER_ID>.<SERIENNUMMER>.thing.property.set', change: 'any'}, async function (obj) {
                                log("EVENT!")
                            });
                            

                            Damit läuft das Monitoring!

                            VG
                            Jannick

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

                              @applepro hmm bei mir leider nicht ... welche Version vom js-controller und welche node.js nutzt Du?

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

                                @xnodkane sehr gut ... hab auch ein wenig geforscht. Meinst du nicht das 38 der wert für "Andere Verbraucher" ist?
                                Und kann man nicht eine .proto für alles machen. Die anderen Felder scheint es da ja auch zu geben.
                                Ich hatte das hier erstellt. Spricht da etwas gegen?

                                syntax = "proto3";
                                
                                message PowerItem {
                                  optional Meta meta = 1;
                                  uint32 src = 2;
                                  uint32 dest = 3;
                                  uint32 cmdFunc = 8;
                                  CmdFunction cmdId = 9;
                                  uint32 unknown = 10;
                                  uint32 needAck = 11;
                                  uint64 timestamp = 14;
                                  string serialNumber = 25;
                                }
                                
                                message PowerMessage {
                                  PowerItem item = 1;
                                }
                                
                                message Meta {
                                  optional int32 value = 1;
                                  optional int32 PV1_Watt = 19;
                                  optional int32 PV2_Watt = 24;
                                  optional int32 ToHome_Watt = 38;
                                }
                                
                                enum CmdFunction {
                                    Unknown = 0;
                                    PermanentWattsPack = 129;
                                    SupplyPriorityPack = 130;
                                }
                                
                                xNodKane 1 Reply Last reply Reply Quote 1
                                • A
                                  applepro @Waly_de last edited by

                                  @waly_de js-controller: 4.0.24 und node.js: v16.17.1, hier werde ich gleich mal updaten

                                  1 Reply Last reply Reply Quote 0
                                  • A
                                    applepro last edited by applepro

                                    auch nach update auf v16.20.1 läuft es weiterhin, es funktioniert nur dann nicht mehr, wenn man auf file umstellt, so wie du beschrieben hast, man sollte vlt richtig lesen....

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

                                      @applepro Das ist seltsam. Bist Du sicher das du das Feld auf "File" umgestellt hast? Hab einen Bug dazu gemeldet und es wurde bestätigt das das so ist, und uns leider auch noch ziemlich lange erhalten bleibt...

                                      https://github.com/ioBroker/ioBroker.mqtt/issues/369

                                      Waly-de created this issue in ioBroker/ioBroker.mqtt

                                      closed no events if a field is configured as a file. #369

                                      haus-automatisierung 1 Reply Last reply Reply Quote 1
                                      • haus-automatisierung
                                        haus-automatisierung Developer Most Active @Waly_de last edited by haus-automatisierung

                                        @waly_de sagte in Adapter für Ecoflow Einbindung:

                                        Bist Du sicher das du das Feld auf "File" umgestellt hast?

                                        File / Binary states sind doch eh deprecated (und müssen auch ganz anders geschrieben werden als normale states). Das wird niemand mehr implementieren, da es gerade aus allen Adaptern rausfliegt.

                                        Eine Lösung wäre ja, dass der Wert als base64 oder hex geschrieben wird, falls Binärdaten kommen.

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

                                          @haus-automatisierung sagte in Adapter für Ecoflow Einbindung:

                                          Eine Lösung wäre ja, dass der Wert als base64 oder hex geschrieben wird, falls Binärdaten kommen.

                                          Gute Idee... müsste dann in den MQTT implementiert werden... magst Du einen Request stellen, oder gibt es den schon?

                                          @haus-automatisierung sagte in Adapter für Ecoflow Einbindung:

                                          File / Binary states sind doch eh deprecated (und müssen auch ganz anders geschrieben werden als normale states). Das wird niemand mehr implementieren, da es gerade aus allen Adaptern rausfliegt.

                                          Es gibt aber auch noch keine funktionierende Alternative, oder? File wird ja implementiert, aber das Handling ist noch nicht eingebaut. Soweit ich weiss braucht es dazu js-controller 5.0.x

                                          haus-automatisierung 1 Reply Last reply Reply Quote 0
                                          • haus-automatisierung
                                            haus-automatisierung Developer Most Active @Waly_de last edited by

                                            @waly_de sagte in Adapter für Ecoflow Einbindung:

                                            File wird ja implementiert, aber das Handling ist noch nicht eingebaut. Soweit ich weiss braucht es dazu js-controller 5.0.x

                                            Doch, das ist alles in den Adaptern soweit vorbereitet. Im JavaScript-Adapter gibt es schon "onFile" usw. Das funktioniert aber nur mit der js-controller 5.x beta. Die gibts ja schon.

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            930
                                            Online

                                            31.6k
                                            Users

                                            79.5k
                                            Topics

                                            1.3m
                                            Posts

                                            42
                                            212
                                            42852
                                            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