Batterie Beem Energy

Hello!
Je partage ici le package que j’ai fait pour récupérer les informations de ma batterie Beem Energy. C’est loin d’être parfait parce qu’il faut pouvoir récupérer son identifiant de batterie pour que ça fonctionne (change le <id>, le <email> et le <password>). Il doit y avoir moyen d’automatiser la récupération de l’ID de la batterie, mais je préfère creuser le MQTT que l’appli a l’air d’appeler pour voir son peut récupérer les données en temps réel. Faudra aussi que je scanne les ports de la batterie pour voir si on peut pas s’y connecter localement.

rest:
  - resource_template: https://api-x.beem.energy/beemapp/batteries/<id>/live-data
    headers:
      Content-type: "application/json"
      Authorization: !secret beem_token
    scan_interval: 60
    sensor:
      - name: "Battery power"
        unique_id: beem_battery_power
        force_update: true
        device_class: power
        unit_of_measurement: "W"
        icon: mdi:battery-charging-100
        value_template: "{{ value_json['batteryPower'] }}"
      - name: "Beem meter power"
        force_update: true
        unique_id: beem_meter_power
        device_class: power
        unit_of_measurement: "W"
        icon: mdi:meter-electric
        value_template: "{{ value_json['meterPower'] }}"
      - name: "Beem solar power"
        unique_id: beem_solar_power
        force_update: true
        device_class: power
        unit_of_measurement: "W"
        icon: mdi:solar-panel
        value_template: "{{ value_json['solarPower'] }}"
      - name: "Beem active power"
        unique_id: beem_active_power
        force_update: true
        device_class: power
        unit_of_measurement: "W"
        icon: mdi:lightning-bolt
        value_template: "{{ value_json['activePower'] }}"
      - name: "Charge batterie"
        unique_id: beem_soc
        force_update: true
        device_class: battery
        unit_of_measurement: "%"
        value_template: "{{ value_json['soc'] }}"
      - name: "Beem énergie exportée"
        unique_id: beem_total_energy_exported
        force_update: true
        device_class: energy
        state_class: total
        unit_of_measurement: "kWh"
        icon: mdi:home-export-outline
        value_template: "{{ value_json['totalEnergyExported'] }}"
      - name: "Beem énergie importée"
        unique_id: beem_total_energy_imported
        force_update: true
        device_class: energy
        state_class: total
        unit_of_measurement: "kWh"
        icon: mdi:home-import-outline
        value_template: "{{ value_json['totalEnergyImported'] }}"
      - name: "Beem énergie chargée"
        unique_id: beem_total_energy_charged
        force_update: true
        device_class: energy
        state_class: total
        unit_of_measurement: "kWh"
        icon: mdi:battery-charging-100
        value_template: "{{ value_json['totalChargedEnergy'] }}"
      - name: "Beem énergie déchargée"
        unique_id: beem_total_energy_discharged
        force_update: true
        device_class: energy
        state_class: total
        unit_of_measurement: "kWh"
        icon: mdi:battery-charging-20
        value_template: "{{ value_json['totalDischargedEnergy'] }}"
      - name: "Statut batterie"
        unique_id: beem_working_mode_label
        value_template: "{{ value_json['workingModeLabel'] }}"
    binary_sensor:
      - name: "Battery working mode"
        unique_id: beem_is_battery_working_mode_ok
        device_class: running
        icon: mdi:battery-check
        value_template: "{{ value_json['isBatteryWorkingModeOk'] }}"
      - name: "Battery backup mode"
        unique_id: beem_is_battery_in_backup_mode
        device_class: power
        icon: mdi:transmission-tower
        value_template: "{{ value_json['isBatteryInBackupMode'] }}"

command_line:
   - sensor:
       command: 'token=$(curl https://api-x.beem.energy/beemapp/user/login -X POST -H "Content-Type: application/json" --data-raw "{\"email\":\"<email>\",\"password\":\"<password>\"}" | jq .accessToken) && token=${token//\"} && echo $token && sed -i "s/\(beem_token:\)\(.*\)/\1 Bearer $token/" /config/secrets.yaml'
       name: beem_token
       scan_interval: 84600

shell_command:
  beem: sed -i "s/\({{cmd}}:\)\(.*\)/\1 '{{ states.sensor.post_data.state|to_json }}'/" /config/configuration.yaml

Bonjour,
Je suis très intéressé par votre post.
J’aimerais pouvoir récupérer les données de mon installation beem roof + battery dans home assistant.
Complètement débutant.
Pouvez-vous me coacher ?

Bonjour,
Estce que vos panneaux photovoltaiques sont connectés directement à votre batterie ? Si oui, une petite modification du script permettrea de recuperer les infos. Je vous fais un tuto mardi lorsque je suis devant mon ordinateur.

Il est important de noter que cette solution n’est pas parfaite et n’est pas évidente à installer. Elle ne se met à jour que toutes les minutes et ne permet pas de récupérer l’information de la totalité de la production photovoltaique. Mais il y a déjà assez d’informations pour démarrer.

Pour réaliser l’installation, il faut modifier le fichier de configuration de Home Assistant comme cela est décrit dans cette procédure : Configuration.yaml - Home Assistant
Dans ce fichier de configuration, il faut rajouter les lignes indiquées dans le premier message de ce thread et en prenant soin de remplacer les valeurs suivantes : <id> , <email> et <password>. Email et password sont l’email et le mot de passe du compte Beem à utiliser.

L’identifiant <id> est le plus compliqué à trouver. Il faut se rendre sur le site https://beem.energy depuis un navigateur web sur un PC. Ensuite il faut s’identifier. Ouvrir la console développeur du navigateur web. Aller dans l’onglet réseau. Recharger la page web. Rechercher l’appel « devices » dans l’onglet réseau de la console développeur et dans la réponse REST se trouve l’identifiant de la batterie.

J’aimerais bien avoir le temps de développeur une intégration et un module complémentaire pour améliorer tout ça. J’ai déjà reverse engineerer le serveur MQTT de Beem afin de récupérer en direct les données. Il y a malheureusement des dizaines d’heures de travail afin de faire quelque chose de propre et je n’ai pas tout ce temps à ma disposition en ce moment.

Bonjour @ChristopheHD
Tu as réussi à faire quelque chose avec la partie MQTT ?
ça m’interesse fortement :smiley: