Ich habe schon länger einige Ecoflow Geräte und mich hat es gestört, dass es nicht wirklich eine offene API von Ecoflow gegeben hat. Doch kürzlich ist dann doch etwas veröffentlich worden und wir können die Werte der Geräte aus der Ecoflow API abfragen.

Ihr müsst euch mit eurem bereits bestehenden Ecoflow Account den Ihr mit euren Geräten habt, bei der Ecoflow Developer API anmelden. Hier geht es zur Developer API (HIER). Die Freigabe der Anmeldung kann ein paar Tage dauern. Danach solltet Ihr aber einen Access Key und Security Key erstellen können und erste Daten abfragen.

Die API bietet zwei Optionen an. Einmal alles via HTTP/s oder über das MQTT Protokoll. Ich zeige euch nun den Weg über die HTTPS Schnittstelle und zwar mit einem PHP Skript. Mit dieser Abfrage zieht Ihr euch in ein PHP Array alle Abfragewerte, welche man über das Gerät erhält. Ihr könnt beliebige Geräte Abfragen, achtet aber dabei darauf das die Key Werte unterschiedlich sind.

Ecoflow API Script – Powerstream & Delta 2 Daten abfragen

<?php 

$sn1 = 'Seriennummer eures Gerätes';
$accessKey = '1234567890987abcde';
$secretKey = '1234567890987abcde';

$timestamp = (string)intval(microtime(true) * 1000);
$nonce = substr(base64_encode(hash("sha256", $timestamp, True)), 0, -1);
$str = 'accessKey='.$accessKey.'&nonce='.$nonce.'&time stamp='.$timestamp;
$sign = hash_hmac('sha256', $str, $secretKey);

$url_eco = 'https://api-e.ecoflow.com/iot-open/sign/device/quota/all?sn='.$sn1;

$curl = curl_init($url_eco);
curl_setopt($curl, CURLOPT_URL, $url_eco);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'GET');

$headers = array(
    'Content-Type: application/json',
    'accessKey:'.$accessKey,
    'nonce:'.$nonce,
    'timestamp:'.$timestamp,
    'sign:'.$sign,

);
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
$resp = json_decode(curl_exec($curl));
curl_close($curl);

print_r($resp);
?>
root@api-calls:~# php test.php
stdClass Object
(
    [code] => 0
    [message] => Success
    [data] => stdClass Object
        (
            [mppt.faultCode] => 0
            [bms_emsStatus.maxChargeSoc] => 0
            [bms_bmsInfo.bsmCycles] => 111
            [bms_bmsStatus.designCap] => 20000
            [pd.bpPowerSoc] => 30
            [bms_bmsStatus.outputWatts] => 0
[...]
[...]

Wenn man nun die einzelnen Abfragewerte im PHP weiter verwenden möchte, dann kann man diese aus dem Object auslesen und dann in Variablen speichern. Ich z.B. schiebe dann die ausgelesenen Werte in eine InfluxDB2 rein.

# Delta 2 Werte - Beispiel
$soc = $resp->data->{'bms_bmsStatus.f32ShowSoc'}.PHP_EOL;
$temp = $resp->data->{'bms_bmsStatus.temp'}.PHP_EOL;

# Powerstream Werte - Beispiel
$ac_out = $resp2->data->{'20_1.invOutputWatts'}.PHP_EOL;
$ac_out = $ac_out / 10;
$pvinput = $resp2->data->{'20_1.pvToInvWatts'}.PHP_EOL;
$pvinput = $pvinput / 10;