Bonjour à tous
J’ai récemment passé le cap et acheté une petite batterie EcoFlow Stream AC PRO Avec un compteur EcoFlow Shelly
J’ai été assez surpris de ne trouver aucun moyen de couper la batterie (autre qu’une prise wifi) pour éviter qu’elle ne prenne la charge de mon routeur solaire et inversement qu’elle ne se décharge en journée.
J’ai trouvé un moyen, pas le plus propre j’avoue, mais qui a le mérite de fonctionner .
Le principe du compteur shelly et que au moment ou vous l’appairez avec la batterie, l’application pousse une configuration mqtt afin que le shelly communique avec leurs serveur mais ce qui est très intéressant c’est que la batterie fait elle meme les requêtes en HTTP Get sur le shelly, donc on peu supprimer le mqtt et mettre son propre serveur.
Le premier intérêt est de récupérer les mesures sur HA.
Le deuxième intérêt est de pouvoir commander le « gel » du shelly se qui à pour conséquence de bloquer la batterie en charge/décharge.
Pour réaliser ce « Gel » le moyen que j’ai trouvé est de créer un mot de passe sur le shelly.
Quand le mot de passe est actif, la batterie s’arrete, et l’inverse est vrai.
- 3 scripts à créer sur le shelly:
AuthON:
Shelly.call(
"Shelly.SetAuth",
{
user: "admin",
realm: "lenomdevotredevice",
ha1: "unhash256"
},
function (setAuthResult, set_auth_error_code, set_auth_error_message) {
if (set_auth_error_code === 0) {
console.log("SUCCÈS ! Authentification activée.");
} else {
console.log("Message d'erreur :", set_auth_error_message);
}
}
);
Shelly.call("Script.Stop", { id: Shelly.getCurrentScriptId() });
AuthOFF:
Shelly.call(
"Shelly.SetAuth",
{
user: "admin",
realm: "lenomdevotredevice",
ha1: null
},
function (setAuthResult, set_auth_error_code, set_auth_error_message) {
if (set_auth_error_code === 0) {
console.log("SUCCÈS ! ");
} else {
console.log("Message d'erreur :", set_auth_error_message);
}
}
);
Shelly.call("Script.Stop", { id: Shelly.getCurrentScriptId() });
Name
Shelly.call(
"Shelly.GetDeviceInfo",
{},
function (deviceInfo, error_code, error_message) {
console.log("Info : ID de l'appareil (realm) obtenu :", deviceInfo.id);
}
);
Shelly.call("Script.Stop", { id: Shelly.getCurrentScriptId() });
-
Le nom de votre device:
il vous est donné en lançant le script name -
Le Hash:
j’ai utilisé ce site: SHA256 - Online Tools
la syntaxe a respecter est:admin:lenomdevotremodule:votremotdepasse
Une fois les scripts opérationnels, vous pouvez tester en les lançant et le résultat est visible au bout de quelques secondes sur votre batterie. -
MQTT
Vous pouvez lancer ces scripts depuis HA en MQTT en publiant sur le topic:
shellies/lenomdushelly/rpc
et le payload:
{
"id": 3,
"src": "HA",
"method": "Script.Start",
"method": "Script.Stop",
"params": {
"id": 3
}
}
Pensez à changer les id avec le numéro de votre script indiqué sur le shelly
- HA
avec un petite entrée logique:
alias: Batterie ON/OFF
description: ""
triggers:
- trigger: state
entity_id:
- input_boolean.batterie
from: null
to: null
for:
hours: 0
minutes: 0
seconds: 5
conditions: []
actions:
- if:
- condition: state
entity_id: input_boolean.batterie
state: "on"
then:
- action: mqtt.publish
metadata: {}
data:
qos: "1"
payload: |-
{
"id": 3,
"src": "HA",
"method": "Script.Start",
"params": {
"id": 3
}
}
topic: shellies/lenomdushelly/rpc
else:
- action: mqtt.publish
metadata: {}
data:
qos: "1"
payload: |-
{
"id": 2,
"src": "HA",
"method": "Script.Start",
"params": {
"id": 2
}
}
topic: shellies/lenomdushelly/rpc
mode: single
- Routeur RTS solaire F1ATB – Ham Radio – Radioamateur – Domotique
j’ai créer un relais externe en plus de mon relais pour le chauffe eau :
La syntaxe est :
/api/webhook/laclefgenereha
et coté HA: j’utilise les webhooks
pour démarrer mon scénario
alias: Webhook Batterie
description: ""
triggers:
- trigger: webhook
allowed_methods:
- POST
- PUT
- GET
local_only: true
webhook_id: "-idgenereraprha1"
id: start
- trigger: webhook
allowed_methods:
- POST
- PUT
- GET
local_only: true
webhook_id: "-idgenereraprha2"
id: stop
conditions: []
actions:
- choose:
- conditions:
- condition: trigger
id:
- start
sequence:
- action: input_boolean.turn_on
metadata: {}
data: {}
target:
entity_id: input_boolean.batterie
- conditions:
- condition: trigger
id:
- stop
sequence:
- action: input_boolean.turn_off
metadata: {}
data: {}
target:
entity_id: input_boolean.batterie
mode: single
Pensez a rajouter la méthode GET
Voila, j’espere que ça vous servira.
Je suis encore en rodage avec les parametres du routeur mais le principe restera le même
Bon weekend