Ecoflow Powerstream per MQTT in Loxone einbinden

Einklappen
X
 
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge
  • mister-dj
    Smart Home'r
    • 13.08.2023
    • 43

    #1

    Ecoflow Powerstream per MQTT in Loxone einbinden

    Seit Loxone einen integrierten MQTT-Client anbietet, habe ich mich mal auf den Weg gemacht, meine Ecoflow Powerstream direkt in Loxone einzubinden. Kein Loxberry, kein ioBroker und kein Home Assistant notwendig.

    Zur Information: Ich bin weder Script- noch Loxone-Profi; aber vielleicht hilft mein Vorgehen doch dem einen oder anderem. Ebenso bin ich ein Windows-PC-Nutzer; warum das wichtig ist, komm ich zurück. Auch habe ich noch keine Langzeiterfahrung mit der Anbindung; entsprechend ohne Gewähr. Des weiteren habe ich nur lesende Zugänge eingerichtet. Einstellungen mach ich vorerst noch über das Ecoflow-App. Leider ist auch die Dokumentation von Ecoflow etwas dürftig und etwas unpräzise.


    Vorgehensschritte (im Überblick; Details nachfolgend)
    1) Ecoflow Developer Account beantragen; EcoFlow Developer (Dauert ein paar Arbeitstage bis Antwort)
    2) AccessKey und SecretKey im Ecoflow Developer Portal erstellen
    3) MQTT-Client Zugangsdaten erzeugen (PowerShell-Skript)
    4) MQTT-Zugangsdaten in Loxone eintragen
    5) MQTT Topic (Subscripton) eröffnen
    6) Erhaltene Werte der Subscription mittels Baustein Befehlserkennung auswerten


    Generelle Anmerkung / Hinweise
    - Der MQTT-Dienst von Ecoflow ist ein Cloud-Dienst
    - Man braucht das Ecoflow Developer Portal um die MQTT-Zugangsdaten zu erzeugen
    - Bitte AccessKey und SecretKey NICHT auf eurem PC speichern; hierbei handelt es sich um Zugangsdaten, die auch von anderen verwendet werden können.


    Details zu Schritt 3) MQTT-Client Zugangsdaten erzeugen
    Powershell-Script im Anhang; in den "PowerShell ISE" kopieren, AccessKey und SecretKey einfügen und "Run"
    Was ist die Windows PowerShell ISE und wie kann man sie öffnen?
    Sofern das Script erfolgreich gelaufen ist, bekommt man die MQTT-Zugangsdaten:
    Klicke auf die Grafik für eine vergrößerte Ansicht  Name: image.png Ansichten: 0 Größe: 63,5 KB ID: 451407


    Details zu Schritt 4) MQTT in Loxone einrichten
    Die Werte aus dem Script sinngemäss in die Konfig übertragen:
    Klicke auf die Grafik für eine vergrößerte Ansicht  Name: image.png Ansichten: 0 Größe: 100,1 KB ID: 451408
    Client-ID: Einen beliebigen Wert eintragen. Er muss jedoch eineindeutig sein. z.B. Loxone_2as3afe2 (Darf glaub nicht länger als 23 Zeichen sein)


    Details zu Schritt 5) MQTT Subscription erstellen
    Sämtliche Werte, die ein Ecoflow Gerät - in meinem Fall die Powerstream, können mittels einer einzigen Subscription abgefragt werden. Sie lautet: /open/[CertificateAccount]/[Serienummer]/quota
    Die Serienummer des Gerätes findet ihr entweder in der Ecoflow App oder im my Ecoflow Portal (Login to EcoFlow | EcoFlow EU) - sofern du deine Geräte dort registriert hast (z.B. für Garantie etc.)
    Klicke auf die Grafik für eine vergrößerte Ansicht  Name: image.png Ansichten: 0 Größe: 158,6 KB ID: 451410


    Details zu Schritt 6) Erhaltene Werte auswerten
    Mit der MQTT-Subscription erhält man ein JSON-File, welches mit den Baustein "Befehlserkennung" - bzw. mit mehreren davon - ausgewertet werden kann.
    Im untenstehenden Beitrag #3 habe ich meine Variante der Befehlserkennung und Auswertung (inkl. Loxone-Config) - als mögliche Lösung - angefügt.


    WICHTIG zu Wissen:
    - Basierend dem MQTT-Verfahren, werden nur Daten übermittelt, die geändert werden. Entsprechend kann es sein, dass ein Wert ziemlich lange nicht gesendet wird. z.B. wenn kein Sonne, dann keine Aktualisierung der erzeugten Energie etc.
    - Ecoflow Geräte kennen den Standby-Modus, dann findet auch keine Aktualisierung statt.
    - Sämtliche Werte, die übergeben werden können, kann man im Ecoflow Developer Portal "gesucht und gefunden" werden; Dokumentation dazu im Ecoflow Developer Portal. EcoFlow Developer
    Zuletzt geändert von mister-dj; vor einer Woche.
  • Sunny
    Smart Home'r
    • 02.12.2015
    • 32

    #2
    Vielen Dank für die Anleitung, sowas hab ich schon immer gesucht.

    Die Anleitung auf Ecoflow ist leider für mich nicht so ganz verständlich und meine Programmierkenntnisse sind auch schon etwas eingestaubt, also echt tolle Arbeit von dir hier.

    Es hat auch alles erstmal geklappt.

    Leider kommen bei mir aber nch nicht alle Daten der Delta Pro rüber, insbesondere ist wichtigen Daten von ACout und solar-in und so weiter. Liegt aber scheinbar nicht an dem Weg hier, auch im MQTT Exploror unter Windows kommen die nicht an.
    Auch ist meine Powerstream noch vollstängig schweigsam.
    Da muss ich wohl mal Ecoflow anschreiben....

    Bisher habe ich werte über Homeassistant -> Loberry -Y Loxone geholt. Aber es immer wieder kleine Änderungen im HA und dann geht erstmal nichts mehr. Der Weg hier gefällt mir deutlich besser.

    Kommentar


    • mister-dj
      mister-dj kommentierte
      Kommentar bearbeiten
      Hallo Sunny. Ja, auch ich musste feststellen, dass der MQTT-Service von Ecoflow nicht wirklich zuverlässig arbeitet. So z.B.

      - hat meine Ecoflow Powerstream morgens immer wieder "Netzwerkverbindungsfehler"; Vor allem, wenn sie aus dem Standby kommt. Über diese "Netzwerkverbindungsfehler" gibt es in diversen Foren die Aussage, dass es hierbei nicht immer um einen effektives Netzwerkproblem handelt, sondern dass auch der MQTT-Service von Ecoflow seine schwächen hat. Und ehrlich, ich glaub, die WLAN-Antenne vom Powerstream ist zu kurz/zu schwach. Meine Delta Pro steht in der gleichen Ecke, und die hat immer Empfang.

      - werden einige Werte, die gemäss Beschreibung von Ecoflow Powerstream verfügbar sind, doch nicht geliefert.

      - "nullt" Ecoflow die Werte nicht, bevor die Powerstream in den Standby geht.

      Und manchmal geht es soweit, dass wenn ich etliche Änderungen in meiner Loxone-Config vornehme, ich keine Datenaktualisierung von Ecoflow mehr erhalte. Manchmal hilft einfach abwarten (bis 1 Std.) und manchmal muss ich richtig schütteln.

      Die Variante mit Homeassistant habe ich auch noch im Betrieb, jedoch übermittle ich die Werte direkt über virtuelle Eingänge auf Loxone (kein Loxberry). Bei Homeassistant ist halt so, dass dort keine Logik verbaut ist. So werden die Werte, wenn die Powerstream in den Standby geht, nicht genullt. Mit der Unzuverlässigkeit des MQTT-Services von Ecoflow und der fehlenden Logik im HA, wird bei mir auch schon mal in der Nacht Strom generiert ;-)

      Meine Kontakte zu Ecoflow waren bis dato nicht erfolgreich. Bestimmte Fehler habe ich bei Ecoflow schon gemeldet aber nie Feedback dazu bekommen. Hast du einen Kontakt, der funktioniert?
      Zuletzt geändert von mister-dj; In den letzten 2 Wochen.

    • Sunny
      Sunny kommentierte
      Kommentar bearbeiten
      Hallo mister-dj,

      Na was soll ich sagen, mein erster Versuch per email zu der angebenen Adresse ist scheinbar erstmal auch ohne Antwort geblieben, nicht mal eine Eingangsbestätigung ist gekommen. Ganz tolller Service....
      Werde noch mal unter Facebook das ansprechen...

      Unabhängig davon, kann ja die Integration unter HA ja auch über die Developer Zugänge die Daten per mqqt abholen, jedenfalls hab ich das so auch dem source code rauslesen lönnen bzw. vermute ich das so. Da kommen ja deulich mehr Werte an als die direkte Abfrage hier. Was machen die denn anders? Ich blicke da im Quelltext nicht durch....
  • mister-dj
    Smart Home'r
    • 13.08.2023
    • 43

    #3
    Hallo

    Für all die, noch eine Idee haben möchten, wie man die erhaltenen Werte auswerten kann. Im Anhang einen Auszug meiner Loxone-Config.

    Klicke auf die Grafik für eine vergrößerte Ansicht  Name: Ecoflow Werte interpretieren.png Ansichten: 10 Größe: 1,21 MB ID: 454539
    Und wie sich dies in der Loxone-App darstellt:
    Klicke auf die Grafik für eine vergrößerte Ansicht

Name: Ecoflow App.png
Ansichten: 179
Größe: 81,9 KB
ID: 454540

    Leider muss ich an dieser Stelle erwähnen, dass der MQTT-Service von Ecoflow nicht wirklich ein High-Light ist. So z.B. werden die Werte nicht repetitiv/wiederholend gesendet. Insbesonders für die Statuswerte (Idle, Init, Sync, Online etc.) wäre das wünschenswert. Ebenso werden nicht alle Werte, die gemäss Dokumentation von Ecoflow übermittelt werden sollten, auch wirklich übermittelt. So z.B. wird der Lade-/Entladestrom (A) der Batterie oder die Spannung (V) vom Inverter nicht übermittelt.

    Was relativ stimmig ist, sind sämtliche Leistungen (W). Ich glaub das liegt daran, dass dies auch die Werte sind, die in der Ecoflow App im Fokus/Vordergrund stehen.
    Zuletzt geändert von mister-dj; vor einer Woche.

    Kommentar

    • Sunny
      Smart Home'r
      • 02.12.2015
      • 32

      #4
      Leider ist bisher NULL Anwort von Ecoflow gekommen, weder per mail noch in FB. Trauriges Kapitel.

      mister-dj Ich abe mal dein script von oben mit einer http-Abfrage bei Ecoflow erweitert, da kommen alle Werte an:
      Code:
      Invoke-RestMethod -Uri https://api-e.ecoflow.com/iot-open/sign/device/quota/all?sn=HW***** -Method Get -ContentType 'application/json; charset=utf-8' -Headers $headers
      Code:
      @{20_1.pv2Temp=290; 20_1.invOutputWatts=0; 20_1.pv2RelayStatus=0; 20_1.mqttTlsLastErr=32774; 20_1.batInputVolt=496; 20_1.invDemandWatts=3000; 20_1.wifiEncryptMode=3; 20_1.pv2OpVolt=0; 20_1.consNum=0; 20_1.invOnOff=1; 20_1.invOpVolt=2343;
                        20_1.installCountry=16724; 20_1.batErrorInvLoadLimit=8000; 20_1.acSetWatts=8000; 20_1.feedProtect=0; 20_1.rstSdio=0; 20_1.espTempsensor=35; 20_1.mqttSockErrno=0; 20_1.historyInvOutputWatts=0; 20_1.pvToInvWatts=0; 20_1.pv1ErrCode=384;
                        20_1.invLoadLimitFlag=2; 20_1.batLoadLimitFlag=0; 20_1.geneNum=1; 20_1.invToPlugWatts=0; 20_134.task10=; 20_1.eventInfo.cpu=160; 20_134.task11=; 20_1.meshId=43792277; 20_1.eventInfo.wifiSuccessCount=49; 20_1.batOpVolt=540;
                        20_1.utcTime=1739728687; 20_1.permanentWatts=3000; 20_1.bpType=2; 20_1.llcWarningCode=0; 20_1.mqttConnectReturnCode=135; 20_1.invOutputCur=53; 20_1.lowerLimit=0; 20_1.mqttTlsStackErr=0; 20_1.llcStatue=5; 20_1.pv1WarnCode=0;
                        20_1.batOutputLoadLimit=6000; 20_1.rstWdt=0; 20_1.batWarningCode=0; 20_1.acOffFlag=8224; 20_1.mqttErrTime=1739667574; 20_1.eventInfo.communicationChannel=0; 20_1.batInputWatts=40; 20_1.eventInfo.bssidCount=0; 20_1.pv2Statue=1;
                        20_1.staIpAddr=2058528960; 20_1.uwlowLightFlag=0; 20_1.consWatt=0; 20_1.fisoRxyz=-3453025,5; 20_1.eventInfo.bandwith=2; 20_1.batErrCode=0; 20_1.meshLayel=1; 20_1.dsgRemainTime=741; 20_1.batSoc=39; 20_1.historyBatInputWatts=40;
                        20_1.invBrightness=678; 20_134.task7=; 20_1.pv2ErrCode=128; 20_1.invWarnCode=0; 20_134.task6=; 20_1.parentMac=4259481798; 20_134.task9=; 20_134.task8=; 20_1.eventInfo.mqttErrorCount=907; 20_1.rstExt=0; 20_134.task3=; 20_134.task2=;
                        20_134.task5=; 20_134.task4=; 20_134.task1=; 20_1.pv2CtrlMpptOffFlag=0; 20_1.uwloadLimitFlag=4; 20_1.floadLimitOut=500; 20_1.pv1Statue=7; 20_134.updateTime=2025-02-16 08:59:50; 20_1.pv1InputCur=2; 20_1.eventInfo.connectTime=3680;
                        20_1.rssiThreshold=-31; 20_1.wifiErrTime=1739110297; 20_1.pv2InputWatts=0; 20_1.historyInvToPlugWatts=0; 20_1.eventInfo.btState=0; 20_1.pv2WarningCode=0; 20_1.pv2InputVolt=0; 20_1.wifiConnectChannel=1; 20_1.rstDeepsleep=0; 20_1.batSystem=0;
                        20_1.wirelessWarnCode=0; 20_1.invErrCode=0; 20_1.dynamicWatts=0; 20_1.batStatue=5; 20_1.eventInfo.mqttSuccessCount=311; 20_1.eventInfo.type=6; 20_1.heartbeatType2Frequency=10; 20_1.stackMinFree=33; 20_1.resetCount=3; 20_1.mqttLastDisReason=0;
                        20_1.uwsocFlag=0; 20_1.llcOpVolt=24; 20_1.timeZone=3600; 20_1.batTemp=270; 20_1.upperLimit=100; 20_1.rstIntWdt=0; 20_1.rssiVariance=0; 20_1.gridOvpCnt=0; 20_1.historyGridConsWatts=3000; 20_1.eventInfo.isHidden=1; 20_1.plugTotalWatts=0;
                        20_1.resetReason=3; 20_1.llcOffFlag=2048; 20_1.invInputVolt=0; 20_1.stackFree=74; 20_1.pv1InputVolt=0; 20_1.eventInfo.wifiErrorCount=0; 20_1.invFreq=500; 20_1.invToOtherWatts=0; 20_1.heartbeatFrequency=15; 20_1.selfMac=3395392476;
                        20_1.dstTime=0; 20_1.chgRemainTime=741; 20_1.eventInfo.adjacentChannelCount=0; 20_1.llcTemp=290; 20_1.rstPoweron=0; 20_1.pv1Temp=290; 20_1.pv2InputCur=0; 20_1.pv1InputWatts=0; 20_1.noiseFloor=0; 20_1.eventInfo.wifiStandard=7;
                        20_1.gridConsWatts=3000; 20_1.historyPlugTotalWatts=0; 20_1.geneWatt=0; 20_1.rstBrownout=0; 20_1.invTemp=0; 20_1.rstSw=2; 20_1.wirelessErrCode=0; 20_1.eventInfo.channelCount=0; 20_1.rstTaskWdt=0; 20_1.pv1RelayStatus=0;
                        20_1.bmsReqChgVol=528500; 20_1.invOutputLoadLimit=6000; 20_1.interfaceConnFlag=3; 20_1.llcErrCode=0; 20_1.invStatue=1; 20_1.spaceDemandWatts=3000; 20_1.rstUnknow=0; 20_1.pv1CtrlMpptOffFlag=0; 20_1.historyPvToInvWatts=0;
                        20_1.bmsReqChgAmp=10000; 20_1.invRelayStatus=16; 20_1.historyPermanentWatts=3000; 20_1.antiBackFlowFlag=6000; 20_1.batOffFlag=0; 20_1.llcInputVolt=0; 20_1.updateTime=2025-02-17 01:58:08; 20_1.mqttErr=17; 20_1.supplyPriority=1; 20_1.wifiErr=8;
                        20_1.ratedPower=8000; 20_1.batInputCur=0; 20_1.pv1OpVolt=1142; 20_1.rstPanic=0; 20_1.wifiRssi=-33; 20_1.pvPowerLimitAcPower=5997; 20_1.installTown=0; 20_1.wifiFirmwareVersion=11505}
      Wenn ich jetzt nur noch Ahnung hätte, wie daraus ein Plugin für den Loxberry machen könnte! Wäre dann wenigstens eine Instanz weniger in der Datenstrecke.... Und die http Abfrage den Miniserver aufbürden würde wahrscheinlich doch zu viel Rechenkapazität kosten.

      Kommentar

      • FloriWanKenobi
        Dumb Home'r
        • 21.12.2024
        • 11

        #5
        Lieber Sunny, mister-dj , ich bin nun auch "weniger" stolzer Besitzer einer Ecoflow Umgebung. Danke erstmal für die wichtigen Hinweise hinsichtlich einer MQTT-Anbindung. Ich hätte mich jetzt sonst angesetzt eine auf HTTP-Request-Basis zu erstellen. Habt ihr bei euren Tests diese generell auch beleuchtet oder seit ihr direkt auf MQTT gegangen? Mich würde vor allem die Latenz interessieren. Denn wenn tatsächlich eine HTTP-Variante einen Vorteil bieten würde, so würde ich gern den Aufwand betreiben um diese Entsprechend zu entwickeln. Gern natürlich auch gemeinsam.

        Daher interessiert mich eure Meinung dazu besonders.

        Besten Dank im Voraus
        Florian

        Kommentar

        Lädt...