Einbindung einer EcoFlow River 2 max in das FHEM-System

Begonnen von Susis_Strolch, 24 April 2023, 12:31:54

Vorheriges Thema - Nächstes Thema

KölnSolar

Guten Morgen,
nach einem katastrophalen Defekt meiner Delta2, habe ich gestern ein Austauschgerät erhalten. Der erste Lade-/Entladetest sieht vielversprechend aus. Ich habe die Delta2 über MQTT UND die API-Modulvariante(98_Ecoflow) eingebunden. Funktioniert beides.

Die Firmwareversion ist 1.0.2.60. Die Äpp bietet ein Update auf 1.0.2.85 an. Weiß jemand, ob API- UND MQTT(Klartext und nicht protobuf) mit 1.0.2.85 noch funktionieren ?

Nur kurz wie sich der Defekt bemerkbar machte:
- SoC war nicht linear trotz linearem Laden/Entladen. Beim Entladen abrupter Abfall im unteren, beim Laden im oberen Bereich.
- Kapazität entsprach deutlich nicht mehr der nominellen Kilowattstunde.
- extreme Abweichung der Spannungen der 16 Batteriepacks; hoher maxVolDiff, sehr niedriger cellVol_x bei mindestens einem Batteriepack
- Absturz bei hoher Entladeleistung(> 500W) im unteren Bereich

Ich werde das Austauschgerät nun weiter analysieren und später ein paar Hinweise geben, auf welche Parameter man vorbeugend achten sollte.

Grüße
Markus
RPi5/3/2 Trixie-SamsungAV_E/N-RFXTRX-IT-RSL-NC5462-Oregon-CUL433-GT-TMBBQ-01e-CUL868-FS20-EMGZ-1W(GPIO)-DS18B20-CO2-USBRS232-USBRS422-Betty_Boop-EchoDot-OBIS(Easymeter-Q3/EMH-KW8)-PCA301(S'duino)-Deebot(mqtt2)-ecovacs(mqtt2)-zigbee2mqtt

Amok

Ich denke euer Problem mit den fehlenden MQTT Daten basiert auf der Tatsache, dass ihr die normalen Zugangsdaten verwendet (und somit die Handy-App simuliert).

Ich habe mir einen Developer-Account erstellt und verwende die dortigen Login-Informationen: https://developer-eu.ecoflow.com/us/security

Mittels eines kleinen python Scriptes habe ich mir dann die "Zertifikatsinfos" für den Dev-Login geholt:

import time
import hmac
import hashlib
import requests
import random

# HIER DIE DATEN AUS DEM DEV-PORTAL EINTRAGEN
ACCESS_KEY = "<access-key-aus-dem-dev-portal>"
SECRET_KEY = "<secret-key-aus-dem-dev-portal>"

# Zeitstempel und Zufallszahl generieren
timestamp = str(int(time.time() * 1000))
nonce = str(random.randint(100000, 999999))

# Signatur für EcoFlow berechnen
sign_params = f"accessKey={ACCESS_KEY}&nonce={nonce}&timestamp={timestamp}"
sign = hmac.new(SECRET_KEY.encode('utf-8'), sign_params.encode('utf-8'), hashlib.sha256).hexdigest()

headers = {
    "accessKey": ACCESS_KEY,
    "nonce": nonce,
    "timestamp": timestamp,
    "sign": sign
}

# Abruf der MQTT-Zertifikatsdaten (Europa-Server)
url = "https://api.ecoflow.com/iot-open/sign/certification"
response = requests.get(url, headers=headers)

print(response.json())

Damit werden die Infos ausgespuckt, die man zum erstellen des MQTT-Client in FEHM benötigt.
Einmal sind das die Zugangsdaten bestehend aus <certificateAccount> (beginnend mit open-) und dem Passwort <certificatePassword> sowie auch dem Server, den man verwenden sollte (auch wenn das aktuell überall noch die selbe IP ist).
Außerdem benötigt man noch die Seriennummer seines Gerätes für die Subscription (einfach aus der App auslesen).

Den Client habe ich dann wie folgt angelegt:

defmod ECOFLOW_MQTT_CLIENT MQTT2_CLIENT mqtt-e.ecoflow.com:8883
attr ECOFLOW_MQTT_CLIENT SSL 1
attr ECOFLOW_MQTT_CLIENT alias EcoFlow MQTT Client
attr ECOFLOW_MQTT_CLIENT autocreate complex
attr ECOFLOW_MQTT_CLIENT clientId EcoFlow-STREAM-Ultra
attr ECOFLOW_MQTT_CLIENT icon mqtt
attr ECOFLOW_MQTT_CLIENT mqttVersion 3.1.1
attr ECOFLOW_MQTT_CLIENT subscriptions /open/<certificateAccount>/<serialnumber>/quota
attr ECOFLOW_MQTT_CLIENT username <certificateAccount>

Nun noch das Passwort setzen:
set ECOFLOW_MQTT_CLIENT password <certificatePassword>
Und wenn man den Client dann connected, legt er ein Auto-Device an mit dem Namen, der im Parameter clientId angegeben wurde (eigentlich ist die clientId egal, sie darf sich aber bei einem Dev-Account an einem Tag nicht mehr als 10 mal ändern, also einfach eine ausdenken und so lassen).

Im Auto-Device laufen dann brav alle Werte ein (unabhängig davon, ob die App läuft oder nicht, da ja ein anderer Account verwendet wird)!


Warum ich das trotz Modul noch gemacht habe:
Per MQTT kommen erstens aktuell noch viel mehr Daten rein als aus dem Modul fallen und zweitens sind die Daten auch noch deutlich schneller da :)
Logisch, da sie hier gepushed werden, anstelle in Intervallen zu pullen.

Hoffe das hilft jemandem dabei, der wie ich gerade probiert, das ganze ans laufen zu bekommen.