une petite contribution pour afficher dans Eedomus l'état de la batterie EcoFlow (inspiré de ce qui a été fait sur Home Assistant).
Après avoir demandé/obtenu votre "API Key" et "Secret" en envoyant un email à support@ecoflow.com en leur fournissant votre numéro de série et l'adresse email avec laquelle vous avez ouvert votre compte chez eux, voici un script à implémenter:
- Code : Tout sélectionner
<?php
// appel de eedomus http://localhost/script/?exec=Ecoflow.php&Serial=[VAR1]&APIKEY=[VAR2]&Secret=[VAR3]
$Serial = getArg('Serial');
$APIKEY = getArg('APIKEY');
$Secret = getArg('Secret');
$header = array(
"Content-Type: application/json",
"appKey: ".$APIKEY,
"secretKey: ".$Secret
);
$url ="https://api.ecoflow.com/iot-service/open/api/device/queryDeviceQuota?sn=".$Serial;
$http_result = httpQuery($url, 'GET', '','', $header);
$sortie = jsonToXML($http_result);
//Car sort un tableau Ou une string
$code = xpath($sortie,"//code");
$message = xpath($sortie,"//message");
if ($code == "0")
{
$datasoc = xpath($sortie,"//data/soc");
$dataremaintime = xpath($sortie,"//data/remainTime");
$dataOut = xpath($sortie,"//data/wattsOutSum");
$dataIn = xpath($sortie,"//data/wattsInSum");
$finalsortie = "<sortie>Batterie: ".$datasoc."% ".$dataremaintime."min. "."IN: ".$dataIn."W OUT: ".$dataOut."W </sortie>";
}
else {
$finalsortie = "<sortie>".$message."</sortie>";
}
echo $finalsortie
?>
Les explications du code:
on appelle le script en créant un capteur http avec comme VAR1: le numéro de série de la batterie, VAR2: l'API Key (fournie par le support), VAR3: le secret (aussi fourni par le support)
On construit le header de la requête http avec les paramètres.
On récupère la réponse de la requête et on transforme la sortie JSON en XML.
Pour la réponse, il y a deux possibilité:
- la batterie est connecté (code = 0 (Success)) et dans ce cas là la réponse à la requête est un array qu'on divise dans différentes variables textes et on reconstruit une sortie texte complète pour la sortie du script
- la batterie est deconnectée (code différent de 0 (Success)) et dans ce cas, le retour de la requête est une string qu'on formate en xml et qu'on renvoie à la sortie du script
- le capteur http doit avoir le XPATH suivant: //sortie et ne pas avoir le convert JSONTOXML de coché (puisqu'on le fait dans le script)
Autour du script, quelques suggestions:
- mettre le capteur http en update toutes les 60 min. en fonction de votre usage
- créer un device Ping qui ping si la batterie est connectée
- créer une règle qui demande une mise à jour du capteur http en redeclenchement toutes les 5min quand le device Ping batterie est connectée.
C'est quick, c'est dirty mais ça semble fonctionner
++
F.