Conçu et fabriqué en France
🚚 Toutes les commandes passées avant le 27 septembre ont été expédiées. Nous préparons maintenant les commandes suivantes (27, 28 septembre…). Nous ferons notre maximum pour livrer au plus vite.

Pylontech dans Home Assistant

Votre Pylon-Monitor parle Home Assistant nativement : pas de HACS, pas d'intégration personnalisée, rien à installer sur l'appareil. Remplissez 4 champs et les capteurs apparaissent tout seuls (auto-découverte MQTT), ou collez un bloc YAML REST tout prêt si vous n'avez pas de broker. Tout reste sur votre réseau local.

Ce qu'il vous faut

1Un Pylon-MonitorBranché sur le port CONSOLE de la batterie maître — n'importe quel modèle, avec écran ou Lite.
2Home AssistantToute installation récente : HA OS, Supervised, Container ou Core.
35 minutesPlus le module Mosquitto broker si vous choisissez l'option 1 (MQTT).
Panneau d'une batterie Pylontech maître : le câble RJ45 du port CONSOLE alimente le Pylon-Monitor, tandis que le câble de chaînage part du LINK PORT 1 vers la batterie esclave
Sur la batterie maître : CONSOLE vers le Pylon-Monitor, LINK PORT 1 vers la batterie esclave.
L'erreur que presque tout le monde fait : LINK PORT 1, pas LINK PORT 0
Le câble qui relie votre batterie maître à la première esclave doit partir du LINK PORT 1 de la maître — jamais du LINK PORT 0. Il se branche sur le LINK PORT 0 de l'esclave, et chaque batterie suivante répète le même schéma 1 → 0. Câblé à l'envers, la maître ne voit jamais le reste de la pile : le Pylon-Monitor n'affiche alors qu'une seule batterie, quel que soit leur nombre.

Choisissez votre intégration

Les deux options se règlent depuis la page Settings de l'appareil (http://pylon-monitor.local/settings ou http://<IP-APPAREIL>/settings). Choisissez-en une — elles sont indépendantes.

Option 2

API REST

Aucun broker nécessaire. Home Assistant lit directement le point d'accès JSON intégré /api.json. La page Settings de l'appareil écrit le YAML pour vous, avec votre IP et votre nombre de batteries déjà renseignés.

Vous faites : coller le YAML dans configuration.yaml et redémarrer
HA reçoit : 6 capteurs, plus SOH et cycles pour chaque batterie
Actualisation : Home Assistant interroge toutes les 30 s
Configurer l'option 2 ↓
Trouver votre appareil. Sur un modèle à écran, l'adresse IP et pylon-monitor.local s'affichent en bas de l'écran. Sur la Lite (sans écran), ouvrez http://pylon-monitor.local, ou cherchez « pylon-monitor » dans la liste des appareils connectés de votre box. Pour une intégration à toute épreuve, donnez-lui une adresse fixe : une réservation DHCP dans votre box (recommandé) ou la carte Static IP de la page Settings.

Option 1 — Auto-découverte MQTT

Recommandée si vous utilisez le module Mosquitto broker dans Home Assistant. Dès que l'appareil est connecté au broker, il publie les messages de découverte standard sur homeassistant/sensor/… et les capteurs apparaissent dans Paramètres → Appareils et services → MQTT en quelques secondes, regroupés sous un seul appareil nommé Pylon-Monitor.

1. Remplissez 4 champs sur l'appareil

Sur la page Settings de l'appareil, repérez la carte Home Assistant — MQTT et remplissez ces champs (libellés tels qu'ils apparaissent sur l'appareil) :

Broker IP<IP de votre Home Assistant>
Port1883
Usernamemqtt-pylon
New password•••••••• (son mot de passe)
Page Settings du Pylon-Monitor — carte Home Assistant MQTT avec Broker IP, Port, Username et mot de passe

Cliquez sur Save changes. Quelques secondes plus tard, la ligne Home Assistant (MQTT) du tableau de bord de l'appareil affiche Connected et les capteurs ci-dessous sont créés — aucune entité à configurer à la main. Pour couper MQTT, videz Broker IP et enregistrez.

Quel utilisateur et quel mot de passe ? Le module Mosquitto accepte les comptes utilisateurs de Home Assistant. Créez-en un dédié (Paramètres → Personnes → Ajouter une personne, activez « Autoriser la connexion », par ex. mqtt-pylon) et utilisez-le ici plutôt que votre compte administrateur. L'IP du broker est tout simplement celle de votre Home Assistant quand Mosquitto tourne dessus.

2. Les capteurs créés dans Home Assistant

Le nom de l'appareil (par défaut pylon-monitor, modifiable dans Settings) sert de préfixe aux topics. Si vous l'avez changé, remplacez pylon-monitor ci-dessous par le vôtre.

Capteur dans Home AssistantTopic de découverteUnité / type
Battery SOChomeassistant/sensor/pylon-monitor/soc/config% · battery
Battery SOHhomeassistant/sensor/pylon-monitor/soh/config% · mdi:battery-heart-variant
Battery voltagehomeassistant/sensor/pylon-monitor/voltage/configV · voltage
Battery currenthomeassistant/sensor/pylon-monitor/current/configA · current
Battery powerhomeassistant/sensor/pylon-monitor/power/configW · power
Battery temphomeassistant/sensor/pylon-monitor/temp/config°C · temperature
MOSFET temphomeassistant/sensor/pylon-monitor/mostemp/config°C · temperature
Charge cycleshomeassistant/sensor/pylon-monitor/cycles/configmdi:counter
Battery statehomeassistant/sensor/pylon-monitor/state/configmdi:battery-sync
Cell imbalancehomeassistant/sensor/pylon-monitor/celldelta/configmV · mdi:scale-balance
Battery counthomeassistant/sensor/pylon-monitor/units/configmdi:battery-multiple

Tous lisent leur valeur dans un seul topic d'état (retenu), mis à jour après chaque lecture de la batterie :

pylon-monitor/state

Le message combiné ressemble à ceci :

{
  "soc": 94,
  "soh": 96,
  "voltage": 48.62,
  "current": -7.20,
  "power": -350.1,
  "temp": 23.4,
  "mostemp": 28.1,
  "cycles": 486,
  "celldelta": 12,
  "units": 2,
  "state": "Discharging",
  "hw": "gen2",
  "pack": "lv"
}

3. Plusieurs batteries ? Des capteurs pour chacune

Dès que votre pack compte plus d'une batterie Pylontech, l'appareil crée en plus 5 capteurs par batterie — Battery 1 SOC, Battery 1 SOH, Battery 1 cycles, Battery 1 voltage, Battery 1 state, puis Battery 2, 3… — chacun sur son propre topic (pylon-monitor/battery1/state, pylon-monitor/battery2/state…). Idéal pour repérer la batterie qui vieillit plus vite que les autres.

pylon-monitor/battery1/state
{ "voltage": 48.61, "current": -3.60, "power": -175.0, "soc": 94, "soh": 97,
  "cycles": 480, "charge_cnt": 391, "discharge_cnt": 0, "state": "Discharging",
  "model": "US3000C", "bms_sw": "…", "serial": "…",
  "cell_min_mv": 3238, "cell_max_mv": 3247, "cell_delta_mv": 9, "cell_count": 15 }

Ces capteurs portent aussi des attributs, visibles dans la fiche de chaque capteur : modèle de la batterie, version du BMS, numéro de série et — une fois les cellules lues — tension de cellule la plus basse, la plus haute et l'écart entre les deux. C'est ce qui permet de distinguer « Battery 3 » de « Battery 4 » sans entités supplémentaires.

L'appareil entretient aussi un topic de disponibilité avec un « Last Will » : s'il perd l'alimentation ou le WiFi, chaque capteur passe à « indisponible » dans Home Assistant au lieu de rester figé en silence sur sa dernière valeur.

pylon-monitor/status  →  "online" (retained)  |  "offline" (Last Will, retained)

Option 2 — API REST

Aucun broker MQTT nécessaire. L'intégration rest intégrée à Home Assistant lit l'appareil toutes les 30 secondes. Le plus simple : copiez le bloc de la carte Home Assistant — REST de la page Settings de l'appareil — il contient déjà votre IP et une paire SOH + cycles pour chaque batterie réellement détectée. La version ci-dessous est le même modèle, pour un pack de 2 batteries. Depuis le firmware 3.4.0 (Lite 1.1.0, génération 1 : 3.1), /api.json exige votre clé d'accès — le bloc copié depuis l'appareil contient déjà ?key=…. Si vous avez configuré REST avant la mise à jour, ajoutez ?key=<votre clé d'accès> (Settings → Public JSON access) à la ligne resource:. MQTT n'est pas concerné.

Page Settings du Pylon-Monitor — bloc YAML REST généré avec l'adresse IP de l'appareil

Le JSON renvoyé par l'appareil

GET http://<DEVICE-IP>/api.json?key=<ACCESS-KEY>

{
  "system": "pylon-monitor",
  "firmware": "3.3.2",
  "hw": "gen2",
  "battery_link": true,
  "summary": {
    "soc": 94,
    "voltage": 48.62,
    "current": -7.20,
    "power": -350.10,
    "state": "Discharging",
    "units": 2
  },
  "health": {
    "soh": 96,
    "cycles": 486,
    "charge_cnt": 782,
    "discharge_cnt": 0
  },
  "unitsDetail": [
    { "soc": 94, "soh": 97, "cycles": 480, "model": "US3000C", "...": "..." },
    { "soc": 94, "soh": 95, "cycles": 492, "model": "US3000C", "...": "..." }
  ]
}

Raccourci pour la lisibilité : la réponse complète contient aussi temps, cells, alarms et net, et unitsDetail donne tension, courant, SOC, SOH, cycles, modèle et numéro de série de chaque batterie (présent quand le pack en compte plusieurs). Attention : le SOH est sous health, pas sous summary — une erreur de copier-coller classique.

Collez ceci dans configuration.yaml

# Access key: device Settings > Public JSON access (required since
# firmware 3.4.0 / Lite 1.1.0 / gen. 1 3.1). The block generated by the
# device's own Settings page already contains it.
rest:
  - resource: http://<DEVICE-IP>/api.json?key=<ACCESS-KEY>
    scan_interval: 30
    sensor:
      - name: "Pylontech SOC"
        unique_id: pylontech_soc
        value_template: "{{ value_json.summary.soc }}"
        unit_of_measurement: "%"
        device_class: battery
        state_class: measurement
      - name: "Pylontech SOH"
        unique_id: pylontech_soh
        value_template: "{{ value_json.health.soh }}"
        unit_of_measurement: "%"
        state_class: measurement
      - name: "Pylontech Voltage"
        unique_id: pylontech_voltage
        value_template: "{{ value_json.summary.voltage }}"
        unit_of_measurement: "V"
        device_class: voltage
        state_class: measurement
      - name: "Pylontech Current"
        unique_id: pylontech_current
        value_template: "{{ value_json.summary.current }}"
        unit_of_measurement: "A"
        device_class: current
        state_class: measurement
      - name: "Pylontech Power"
        unique_id: pylontech_power
        value_template: "{{ value_json.summary.power }}"
        unit_of_measurement: "W"
        device_class: power
        state_class: measurement
      - name: "Pylontech State"
        unique_id: pylontech_state
        value_template: "{{ value_json.summary.state }}"
      # One SOH + cycles pair per battery (only on a pack of 2 or more):
      - name: "Pylontech Battery 1 SOH"
        unique_id: pylontech_battery1_soh
        value_template: "{{ value_json.unitsDetail[0].soh }}"
        unit_of_measurement: "%"
        state_class: measurement
      - name: "Pylontech Battery 1 cycles"
        unique_id: pylontech_battery1_cycles
        value_template: "{{ value_json.unitsDetail[0].cycles }}"
        state_class: measurement
      - name: "Pylontech Battery 2 SOH"
        unique_id: pylontech_battery2_soh
        value_template: "{{ value_json.unitsDetail[1].soh }}"
        unit_of_measurement: "%"
        state_class: measurement
      - name: "Pylontech Battery 2 cycles"
        unique_id: pylontech_battery2_cycles
        value_template: "{{ value_json.unitsDetail[1].cycles }}"
        state_class: measurement
configuration.yaml de Home Assistant avec les capteurs REST du Pylon-Monitor

Redémarrez Home Assistant (Outils de développement → Redémarrer). Les capteurs apparaissent dans Paramètres → Appareils et services → Entités — cherchez pylontech.

Carte jauge Home Assistant affichant le capteur SOC Pylontech
N'utilisez pas les options 1 et 2 en même temps : vous auriez chaque valeur en double. MQTT couvre déjà tout ce que fait REST, et plus ; choisissez-en une et gardez-la.

Tableau de bord Énergie

Pour une batterie, le tableau de bord Énergie de Home Assistant attend deux compteurs en kWh : l'énergie chargée et l'énergie déchargée. Le Pylon-Monitor fournit la puissance de la batterie en W (positive = charge, négative = décharge) : vous les créez une fois pour toutes avec des entrées (helpers) :

  1. Séparez la puissance en deux avec deux capteurs « modèle » (template) : puissance de charge = la partie positive, puissance de décharge = la partie négative rendue positive.
  2. Transformez chacun en kWh avec une entrée Intégrale (somme de Riemann), préfixe « k », méthode « Gauche ».
  3. Dans Paramètres → Tableaux de bord → Énergie, section Stockage sur batterie, ajoutez les deux compteurs : énergie entrante, énergie sortante.

La même chose en YAML (noms des entités MQTT ; avec l'option 2, utilisez sensor.pylontech_power) :

template:
  - sensor:
      - name: "Battery charge power"
        unique_id: pylontech_charge_power
        unit_of_measurement: "W"
        device_class: power
        state_class: measurement
        state: "{{ [states('sensor.pylon_monitor_battery_power') | float(0), 0] | max }}"
      - name: "Battery discharge power"
        unique_id: pylontech_discharge_power
        unit_of_measurement: "W"
        device_class: power
        state_class: measurement
        state: "{{ [0 - (states('sensor.pylon_monitor_battery_power') | float(0)), 0] | max }}"

sensor:
  - platform: integration
    source: sensor.battery_charge_power
    name: "Battery energy in"
    unique_id: pylontech_energy_in
    unit_prefix: k
    round: 2
    method: left
  - platform: integration
    source: sensor.battery_discharge_power
    name: "Battery energy out"
    unique_id: pylontech_energy_out
    unit_prefix: k
    round: 2
    method: left

Vérifiez le nom exact de votre capteur de puissance dans Paramètres → Entités (cherchez « power ») : il diffère si vous avez renommé l'appareil ou si vous avez plusieurs Pylon-Monitor.

Alerte batterie faible

Une notification sur votre téléphone dès que la batterie passe sous 20 % :

alias: "Pylontech batterie faible"
triggers:
  - trigger: numeric_state
    entity_id: sensor.pylon_monitor_battery_soc
    below: 20
actions:
  - action: notify.notify
    data:
      message: "Batterie Pylontech à {{ states('sensor.pylon_monitor_battery_soc') }} %"

Même principe avec Battery state, Cell imbalance (par exemple au-dessus de 50 mV) ou des capteurs indisponibles depuis plus de 10 minutes — signe que l'appareil est hors ligne.

Node-RED, Jeedom et les autres

Node-RED — un nœud http request, méthode GET, URL http://<IP-APPAREIL>/api.json?key=<ACCESS-KEY>, retour « a parsed JSON object », puis lisez msg.payload.summary.soc (ou tout autre champ). Avec MQTT configuré, un nœud mqtt in sur pylon-monitor/state est encore plus simple : aucune interrogation.

Jeedom — installez le plugin JSON, pointez un équipement vers http://<IP-APPAREIL>/api.json?key=<ACCESS-KEY> et associez les chemins à des commandes (ex. summary>soc, summary>voltage, summary>state).

Tout le reste — openHAB, ioBroker, Domoticz, EVCC ou vos propres scripts : tout ce qui lit du MQTT ou un point d'accès JSON en HTTP fonctionne, avec les mêmes topics et le même /api.json.

Questions

Est-ce que ça marche avec la Lite (sans écran) ?

Oui. L'auto-découverte MQTT et l'API REST font partie du firmware de tous les modèles : avec écran, Lite, première et deuxième génération. Seule la façon de trouver l'IP change : pylon-monitor.local ou la liste des appareils de votre box.

Mes capteurs REST sont devenus indisponibles après une mise à jour du firmware — pourquoi ?

Depuis le firmware 3.4.0 (Lite 1.1.0, génération 1 : 3.1), l'appareil demande un mot de passe que vous créez au premier accès, et <code>/api.json</code> exige votre clé d'accès : la réglementation européenne sur la cybersécurité des objets connectés (directive RED, norme EN 18031) impose désormais de protéger chaque appareil. Ouvrez une fois l'appareil dans un navigateur pour créer votre mot de passe, puis ajoutez <code>?key=&lt;clé d'accès&gt;</code> (<em>Settings → Public JSON access</em>) à votre ligne <code>resource:</code> et redémarrez Home Assistant. Les capteurs MQTT continuent de fonctionner sans changement.

Faut-il internet ou le Cloud Pylon-Monitor ?

Non. Home Assistant dialogue directement avec l'appareil sur votre réseau local. Le Cloud gratuit est facultatif : il ajoute seulement l'accès à distance et l'historique long terme.

J'ai plusieurs batteries : est-ce que je vois chacune ?

Oui. Avec MQTT, l'appareil crée 5 capteurs par batterie (SOC, SOH, cycles, tension, état), avec le modèle et le numéro de série en attributs. Avec REST, le YAML généré ajoute SOH et cycles pour chaque batterie.

À quelle fréquence les valeurs sont-elles mises à jour ?

Après chaque lecture de la batterie : toutes les 60 secondes par défaut, réglable de 30 à 300 secondes avec le réglage Battery polling de la page Settings. Avec REST, Home Assistant interroge toutes les 30 secondes.

Mes capteurs affichent « indisponible » : que vérifier ?

C'est le signal de disponibilité qui fait son travail : l'appareil n'est plus connecté au broker (coupure de courant, WiFi, broker redémarré). Ouvrez la page de l'appareil : la ligne Home Assistant (MQTT) indique Connected ou Offline. Il retente tout seul toutes les 10 secondes.

Home Assistant peut-il piloter la batterie ?

Non, et c'est voulu : l'intégration n'expose que des capteurs en lecture seule. Rien dans Home Assistant ne peut modifier un réglage de votre batterie ou de son BMS.

Faut-il HACS ou une intégration personnalisée ?

Non. L'auto-découverte MQTT et l'intégration REST font partie de Home Assistant lui-même. Seul le module Mosquitto est à installer, et uniquement si vous choisissez MQTT.

Pas encore de Pylon-Monitor ?

Branchez-le sur le port CONSOLE, connectez-le à votre WiFi, et votre Pylontech apparaît dans Home Assistant. V2 avec écran 59 €, Lite sans écran 49 €.

Guide complet MQTT et REST →