Ecoflow Stream AC Pro vs routeur solaire vs HA

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
/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