{"id":3565,"date":"2025-03-15T20:13:44","date_gmt":"2025-03-15T19:13:44","guid":{"rendered":"https:\/\/domo.rem81.com\/?p=3565"},"modified":"2026-01-15T17:27:13","modified_gmt":"2026-01-15T16:27:13","slug":"ha-integrer-et-superviser-un-systeme-victron-dans-home-assistant-configuration-mqtt-modbus-et-automatisation-vers-node-red","status":"publish","type":"post","link":"https:\/\/domo.rem81.com\/index.php\/2025\/03\/15\/ha-integrer-et-superviser-un-systeme-victron-dans-home-assistant-configuration-mqtt-modbus-et-automatisation-vers-node-red\/","title":{"rendered":"HA-Int\u00e9grer et superviser un syst\u00e8me Victron dans Home Assistant : Configuration MQTT, Modbus et Automatisation vers Node-RED (Obsol\u00e8te)"},"content":{"rendered":"\n\n\n\n<h1 class=\"wp-block-heading\">Update:<\/h1>\n\n\n\n<p>Voir mon nouvel article sur le sujet: <\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-wp-embed is-provider-domo-rem-81 wp-block-embed-domo-rem-81\"><div class=\"wp-block-embed__wrapper\">\n<blockquote class=\"wp-embedded-content\" data-secret=\"G2qbCFbgr5\"><a href=\"https:\/\/domo.rem81.com\/index.php\/2026\/01\/12\/ha-integrer-et-superviser-un-systeme-victron-dans-home-assistant-configuration-mqtt-v2026\/\">HA-Int\u00e9grer et superviser un syst\u00e8me Victron dans Home Assistant : Configuration MQTT -V2026<\/a><\/blockquote><iframe loading=\"lazy\" class=\"wp-embedded-content\" sandbox=\"allow-scripts\" security=\"restricted\" style=\"position: absolute; visibility: hidden;\" title=\"\u00ab\u00a0HA-Int\u00e9grer et superviser un syst\u00e8me Victron dans Home Assistant : Configuration MQTT -V2026\u00a0\u00bb &#8212; Domo Rem81\" src=\"https:\/\/domo.rem81.com\/index.php\/2026\/01\/12\/ha-integrer-et-superviser-un-systeme-victron-dans-home-assistant-configuration-mqtt-v2026\/embed\/#?secret=BNDwvzVsHF#?secret=G2qbCFbgr5\" data-secret=\"G2qbCFbgr5\" width=\"600\" height=\"338\" frameborder=\"0\" marginwidth=\"0\" marginheight=\"0\" scrolling=\"no\"><\/iframe>\n<\/div><\/figure>\n\n\n\n<h1 class=\"wp-block-heading\">Intro<\/h1>\n\n\n\n<p>Dans cet article, je vous partage la configuration .yaml que j\u2019ai mise en place dans Home Assistant pour superviser mon syst\u00e8me Victron, compos\u00e9 d\u2019un MultiPlus II, d\u2019un MPPT 250\/70, d\u2019un SmartShunt, et de compteurs d&rsquo;\u00e9nergie (ET112). Cette configuration utilise les protocoles MQTT et Modbus pour r\u00e9cup\u00e9rer et traiter les donn\u00e9es, et inclut des capteurs personnalis\u00e9s (via template) pour un affichage optimis\u00e9. En bonus, je vous pr\u00e9sente deux automatisations (une pour envoyer des informations \u00e0 Node-RED, une autre pour g\u00e9rer la charge forc\u00e9e en fonction de la couleur Tempo), ainsi que deux exemples de cartes Lovelace pour visualiser, contr\u00f4ler et programmer ces donn\u00e9es. Que vous souhaitiez suivre votre production solaire, l\u2019\u00e9tat de vos batteries ou votre consommation, ce guide vous donnera une base solide pour int\u00e9grer un syst\u00e8me Victron dans Home Assistant.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">La configuration .yaml<\/h1>\n\n\n\n<p>Voici le fichier de configuration que j\u2019ai ajout\u00e9 \u00e0 un fichier victron.yaml dans Home Assistant. Il est divis\u00e9 en trois sections principales : mqtt, modbus, et template.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">1. Section MQTT : R\u00e9cup\u00e9ration des donn\u00e9es via MQTT<\/h2>\n\n\n\n<p>Je commence par configurer des capteurs MQTT pour r\u00e9cup\u00e9rer les donn\u00e9es publi\u00e9es par mon syst\u00e8me Victron (via un broker MQTT, configur\u00e9 s\u00e9par\u00e9ment). Ces capteurs couvrent des m\u00e9triques cl\u00e9s comme la tension des batteries, la puissance, l\u2019\u00e9tat de charge (SOC), et les pr\u00e9visions de production.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>mqtt:\n  sensor:\n    # 1=Charger Only;2=Inverter Only;3=On;4=Off\n    - name: \"MP2 Mode Fonctionnement par MQTT\"\n      unique_id: \"mp2_mode_fonctionnement_par_mqtt\"\n      state_topic: \"mp2\/multiplus2\/mode\"\n\n    - name: \"MP2 Tension Batteries par MQTT\"\n      unique_id: \"mp2_tension_batteries_par_mqtt\"\n      state_topic: \"mp2\/batteries\/tension\"\n      unit_of_measurement: 'V'\n      device_class: voltage\n      state_class: measurement\n\n    - name: \"MP2 Pu Batteries par MQTT\"\n      unique_id: \"mp2_pu_batteries_par_mqtt\"\n      state_topic: \"mp2\/batteries\/puissance\"\n      unit_of_measurement: 'W'\n      device_class: power\n      state_class: measurement\n\n    - name: \"MP2 Prod VRM MO MQTT\"\n      unique_id: \"mp2_prod_vrm_mo_mqtt\"\n      state_topic: \"mp2\/prediction\/prod_onduleur\"\n      unit_of_measurement: 'kW'\n      device_class: power\n      state_class: measurement\n\n    - name: \"MP2 Prod VRM MPPT1 MQTT\"\n      unique_id: \"mp2_prod_vrm_mppt1_mqtt\"\n      state_topic: \"mp2\/prediction\/prod_mppt1\"\n      unit_of_measurement: 'kW'\n      device_class: power\n      state_class: measurement\n\n    - name: \"MP2 Prod VRM TOTAL MQTT\"\n      unique_id: \"mp2_prod_vrm_total_mqtt\"\n      state_topic: \"mp2\/prediction\/prod_total\"\n      unit_of_measurement: 'kW'\n      device_class: power\n      state_class: measurement\n\n    - name: \"MP2 Pu Grid L1 AC MQTT\"\n      unique_id: \"mp2_pu_grid_l1_mqtt\"\n      state_topic: \"mp2\/multiplus2\/grid_l1_ac\"\n      unit_of_measurement: 'W'\n      device_class: power\n      state_class: measurement\n\n    - name: \"MP2 Conso Out1 MQTT\"\n      unique_id: \"mp2_conso_ac_l1_mqtt\"\n      state_topic: \"mp2\/multiplus2\/conso_out1\"\n      unit_of_measurement: 'W'\n      device_class: power\n      state_class: measurement\n\n    - name: \"MP2 Prod Totale MQTT\"\n      unique_id: \"mp2_prod_totale_mqtt\"\n      state_topic: \"mp2\/multiplus2\/prod_totale\"\n      unit_of_measurement: 'W'\n      device_class: power\n      state_class: measurement\n\n    - name: \"MP2 Cible SOC par MQTT\"\n      unique_id: \"mp2_cible_soc_par_mqtt\"\n      state_topic: \"mp2\/batteries\/cible_soc\"\n      unit_of_measurement: '%'\n      device_class: battery\n      state_class: measurement\n\n    - name: \"MP2 SOC theorique par JWT\"\n      unique_id: \"mp2_soc_theorique_par_mqtt\"\n      state_topic: \"mp2\/batteries\/soc_theorique\"\n      unit_of_measurement: '%'\n      device_class: battery\n      state_class: measurement\n\n    - name: \"MP2 SOC MQTT\"\n      unique_id: \"mp2_soc_par_mqtt\"\n      state_topic: \"mp2\/batteries\/soc\"\n      unit_of_measurement: '%'\n      device_class: battery\n      state_class: measurement\n\n    - name: \"MP2 SOC MINI MQTT\"\n      unique_id: \"mp2_soc_mini_par_mqtt\"\n      state_topic: \"mp2\/multiplus2\/soc_mini\"\n      unit_of_measurement: '%'\n      device_class: battery\n      state_class: measurement\n\n    - name: \"MP2 Intensit\u00e9 Batteries MQTT\"\n      unique_id: \"mp2_intensite_batteries_mqtt\"\n      unit_of_measurement: \"A\"\n      state_topic: \"mp2\/batteries\/Courant\"\n      device_class: current\n      state_class: measurement<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">2. Section MODBUS : Communication directe avec les appareils Victron<\/h2>\n\n\n\n<p>Ensuite, j\u2019utilise le protocole Modbus pour communiquer directement avec mon Cerbo GX (adresse IP 192.168.0.86, port 502). Cette section r\u00e9cup\u00e8re des donn\u00e9es brutes des diff\u00e9rents appareils Victron, comme le MultiPlus II, le MPPT, le SmartShunt, et les compteurs ET112.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>modbus:\n  - name: cerbo\n    host: 192.168.0.86\n    type: tcp\n    port: 502\n    switches:\n      - name: \"MP2 cde\"\n        slave: 227\n        address: 33\n        command_on: 3\n        command_off: 4\n        verify:\n          input_type: holding\n          address: 33\n          state_on: 3\n          state_off: 4\n\n    sensors:\n      # Compteur Photovolta\u00efque ET112-1 - GRID METER\n      - name: \"MP2 Energy Total Energy from net\"\n        unique_id: \"mp2_total_energy_from_net\"\n        data_type: uint32\n        slave: 31\n        address: 2634\n        scale: 0.01\n        unit_of_measurement: \"kWh\"\n        device_class: \"energy\"\n        state_class: \"total\"\n\n      - name: \"MP2 Energy Total Energy to net\"\n        unique_id: \"mp2_total_energy_to_net\"\n        data_type: uint32\n        slave: 31\n        address: 2636\n        scale: 0.01\n        unit_of_measurement: \"kWh\"\n        device_class: \"energy\"\n        state_class: \"total\"\n\n      # Compteur Photovolta\u00efque ET112-2 - PVMETER\n      - name: \"MP2 Tension PV\"\n        unique_id: \"mp2_tension_pv\"\n        data_type: uint16\n        unit_of_measurement: \"V\"\n        slave: 32\n        address: 1027\n        scale: 0.1\n        device_class: voltage\n        state_class: measurement\n\n      - name: \"MP2 Intensit\u00e9 PV\"\n        unique_id: \"mp2_intensite_pv\"\n        data_type: int16\n        unit_of_measurement: \"A\"\n        slave: 32\n        address: 1028\n        scale: 0.1\n        device_class: current\n        state_class: measurement\n\n      - name: \"MP2 Puissance Production PV\"\n        unique_id: \"mp2_puissance_production_pv\"\n        data_type: uint16\n        unit_of_measurement: \"W\"\n        slave: 32\n        address: 1029\n        scale: 1\n        device_class: power\n        state_class: measurement\n\n      - name: \"MP2 Energy Produite PV\"\n        unique_id: \"mp2_energy_produite_pv\"\n        data_type: uint32\n        slave: 32\n        address: 1046\n        scale: 0.01\n        unit_of_measurement: \"kWh\"\n        device_class: \"energy\"\n        state_class: \"total\"\n\n      # MPPT 250\/70\n      - name: \"MP2 MPPT1 Tension PV\"\n        unique_id: \"mp2_mppt1_tension_pv\"\n        data_type: uint16\n        unit_of_measurement: \"V\"\n        slave: 226\n        address: 776\n        scale: 0.01\n        precision: 2\n        device_class: voltage\n        state_class: measurement\n\n      - name: \"MP2 MPPT1 Intensit\u00e9 PV\"\n        unique_id: \"mp2_mppt1_intensite_pv\"\n        data_type: int16\n        unit_of_measurement: \"A\"\n        slave: 226\n        address: 777\n        scale: 0.1\n        precision: 2\n        device_class: current\n        state_class: measurement\n\n      - name: \"MP2 MPPT1 Puissance Production PV\"\n        unique_id: \"mp2_mppt1_puissance_production_pv\"\n        data_type: uint16\n        unit_of_measurement: \"W\"\n        slave: 226\n        address: 789\n        scale: 0.1\n        device_class: power\n        state_class: measurement\n\n      # MultiPlus II\n      - name: \"MP2 PC AC Couplet on L1\"\n        unique_id: \"mp2_pv_ac_coupled_on_l1\"\n        data_type: uint16\n        unit_of_measurement: \"W\"\n        slave: 100\n        address: 811\n        scale: 1\n        device_class: power\n        state_class: measurement\n\n      - name: \"MP2 Conso AC L1\"\n        unique_id: \"mp2_conso_ac_l1\"\n        data_type: uint16\n        unit_of_measurement: \"W\"\n        slave: 100\n        address: 817\n        scale: 1\n        device_class: power\n        state_class: measurement\n\n      - name: \"MP2 Grid L1\"\n        unique_id: \"mp2_grid_l1\"\n        data_type: int16\n        unit_of_measurement: \"W\"\n        slave: 100\n        address: 820\n        scale: 1\n        device_class: power\n        state_class: measurement\n\n      - name: \"MP2 Source Puissance\"\n        unique_id: \"mp2_source_puissance\"\n        data_type: int16\n        slave: 100\n        address: 826\n        scale: 1\n\n      - name: \"MP2 Tension Batteries\"\n        unique_id: \"mp2_tension_batteries\"\n        data_type: uint16\n        unit_of_measurement: \"V\"\n        slave: 100\n        address: 840\n        scale: 0.1\n        precision: 2\n        device_class: voltage\n        state_class: measurement\n\n      - name: \"MP2 Intensit\u00e9 Batteries\"\n        unique_id: \"mp2_intensite_batteries\"\n        data_type: int16\n        unit_of_measurement: \"A\"\n        slave: 100\n        address: 841\n        scale: 0.1\n        precision: 2\n        device_class: current\n        state_class: measurement\n\n      - name: \"MP2 Puissance Batteries\"\n        unique_id: \"mp2_puissance_batteries\"\n        data_type: int16\n        unit_of_measurement: \"W\"\n        slave: 100\n        address: 842\n        scale: 1\n        device_class: power\n        state_class: measurement\n\n      - name: \"MP2 Status Batteries\"\n        unique_id: \"mp2_status_batteries\"\n        data_type: int16\n        slave: 100\n        address: 844\n        scale: 1\n\n      - name: \"MP2 Puissance PV\"\n        unique_id: \"mp2_puissance_pv\"\n        data_type: uint16\n        unit_of_measurement: \"W\"\n        slave: 100\n        address: 850\n        scale: 1\n        device_class: power\n        state_class: measurement\n\n      - name: \"MP2 Puissance reseau DC\"\n        unique_id: \"mp2_puissance_reseau_dc\"\n        data_type: int16\n        unit_of_measurement: \"W\"\n        slave: 100\n        address: 860\n        scale: 1\n        device_class: power\n        state_class: measurement\n\n      - name: 'MP2 P Max alim System'\n        unique_id: 'mp2_p_max_alim_system'\n        unit_of_measurement: \"W\"\n        device_class: power\n        state_class: measurement\n        slave: 100\n        address: 2700\n        data_type: int16\n\n      - name: 'MP2 ESS Puissance Decharge Max'\n        unique_id: 'mp2_ess_puissance_decharge_maximum'\n        unit_of_measurement: \"W\"\n        device_class: power\n        state_class: measurement\n        data_type: uint16\n        slave: 100\n        address: 2704\n        scale: 10\n\n      # SmartShunt\n      - name: \"MP2 SS Tension Batteries\"\n        unique_id: \"mp2_ss_tension_batteries\"\n        data_type: uint16\n        unit_of_measurement: \"V\"\n        slave: 223\n        address: 259\n        scale: 0.01\n        device_class: voltage\n        state_class: measurement\n\n      - name: \"MP2 SS Tension Start Batteries\"\n        unique_id: \"mp2_ss_tension_start_batteries\"\n        data_type: uint16\n        unit_of_measurement: \"V\"\n        slave: 223\n        address: 260\n        scale: 0.01\n        device_class: voltage\n        state_class: measurement\n\n      - name: \"MP2 SS Intensit\u00e9 Batteries\"\n        unique_id: \"mp2_ss_intensite_batteries\"\n        data_type: int16\n        unit_of_measurement: \"A\"\n        slave: 223\n        address: 261\n        scale: 0.1\n        device_class: current\n        state_class: measurement\n\n      - name: \"MP2 SS Conso Ah Batteries\"\n        unique_id: \"mp2_ss_conso_ah_batteries\"\n        data_type: int16\n        unit_of_measurement: \"Ah\"\n        slave: 223\n        address: 265\n        scale: 0.1\n        state_class: measurement\n\n      - name: \"MP2 Temps depuis derniere pleine batteries\"\n        unique_id: \"mp2_temps_depuis_derniere_batteries_pleines\"\n        data_type: uint16\n        unit_of_measurement: \"s\"\n        slave: 223\n        address: 289\n        scale: 100\n        device_class: duration\n        state_class: measurement\n\n      - name: \"MP2 Energy d\u00e9charge batteries\"\n        unique_id: \"mp2_energy_decharge_batteries\"\n        data_type: uint16\n        slave: 223\n        address: 301\n        scale: 0.1\n        unit_of_measurement: \"kWh\"\n        device_class: \"energy\"\n        state_class: \"total\"\n\n      - name: \"MP2 Energy charge batteries\"\n        unique_id: \"mp2_energy_charge_batteries\"\n        data_type: uint16\n        slave: 223\n        address: 302\n        scale: 0.1\n        unit_of_measurement: \"kWh\"\n        device_class: \"energy\"\n        state_class: \"total\"\n\n      - name: \"MP2 Temps restant batteries\"\n        unique_id: \"mp2_temps_restant_batteries\"\n        data_type: uint16\n        unit_of_measurement: \"s\"\n        slave: 223\n        address: 303\n        scale: 100\n        device_class: duration\n        state_class: measurement\n\n      # MultiPlus II (suite)\n      - name: \"MP2 Tension Entr\u00e9e L1\"\n        unique_id: \"mp2_tension_entree_l1\"\n        data_type: uint16\n        unit_of_measurement: \"V\"\n        slave: 227\n        address: 3\n        scale: 0.1\n        device_class: voltage\n        state_class: measurement\n\n      - name: \"MP2 Intensit\u00e9 Entr\u00e9e L1\"\n        unique_id: \"mp2_intensite_entree_l1\"\n        data_type: int16\n        unit_of_measurement: \"A\"\n        slave: 227\n        address: 6\n        scale: 0.1\n        device_class: current\n        state_class: measurement\n\n      - name: \"MP2 Fr\u00e9quence Entr\u00e9e L1\"\n        unique_id: \"mp2_frequence_entree_l1\"\n        data_type: int16\n        unit_of_measurement: \"Hz\"\n        slave: 227\n        address: 9\n        scale: 0.01\n        device_class: frequency\n        state_class: measurement\n\n      - name: \"MP2 Tension Sortie L1\"\n        unique_id: \"mp2_tension_sortie_l1\"\n        data_type: uint16\n        unit_of_measurement: \"V\"\n        slave: 227\n        address: 15\n        scale: 0.1\n        device_class: voltage\n        state_class: measurement\n\n      - name: \"MP2 Intensit\u00e9 Sortie L1\"\n        unique_id: \"mp2_intensite_sortie_l1\"\n        data_type: int16\n        unit_of_measurement: \"A\"\n        slave: 227\n        address: 18\n        scale: 0.1\n        device_class: current\n        state_class: measurement\n\n      - name: \"MP2 Fr\u00e9quence Sortie\"\n        unique_id: \"mp2_frequence_sortie\"\n        data_type: int16\n        unit_of_measurement: \"Hz\"\n        slave: 227\n        address: 21\n        scale: 0.01\n        device_class: frequency\n        state_class: measurement\n\n      - name: \"MP2 Puissance Sortie 1\"\n        unique_id: \"mp2_puissance_sortie_1\"\n        data_type: int16\n        unit_of_measurement: \"W\"\n        slave: 227\n        address: 23\n        scale: 10\n        device_class: power\n        state_class: measurement\n\n      - name: \"MP2 Status bus VE\"\n        unique_id: \"mp2_status_bus_ve\"\n        slave: 227\n        address: 31\n        data_type: uint16\n        scale: 1\n\n      - name: \"MP2 Mode ESS\"\n        unique_id: mp2_mode_ess\n        slave: 227\n        address: 33\n        data_type: uint16\n        scale: 1\n\n      - name: 'Mp2 Alarme perte r\u00e9seau'\n        unique_id: mp2_alarme_perte_reseau\n        data_type: uint16\n        slave: 227\n        address: 64\n        scale: 1<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">3. Section TEMPLATE : Capteurs personnalis\u00e9s pour un affichage optimis\u00e9<\/h2>\n\n\n\n<p>Enfin, j\u2019utilise des capteurs template pour transformer les donn\u00e9es brutes en informations plus lisibles et utiles. Par exemple, je convertis des codes num\u00e9riques en texte (comme le mode de fonctionnement ou l\u2019\u00e9tat des batteries) et je calcule des m\u00e9triques comme le temps restant avant que les batteries n\u2019atteignent leur SOC minimum.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>template:\n  - sensor:\n      # Alarme Perte R\u00e9seau\n      - name: \"MP2 Alarme Perte Reseau Affichage\"\n        unique_id: 'mp2_alarme_perte_reseau_affichage'\n        state: &gt;-\n          {% set st = states('sensor.mp2_alarme_perte_reseau') | int(default=0) %}\n          {% for num, text in &#091;(0,'Normal'),(2, 'Perte Reseau')] %}\n              {% if st == num %}\n                {{ text }}\n              {%endif%}\n          {% endfor %}\n\n      # Mode de fonctionnement\n      - name: \"MP2 Mode Fonctionnement Texte\"\n        unique_id: \"mp2_mode_fonctionnement_texte\"\n        state: &gt;-\n          {% set st = states('sensor.mp2_mode_fonctionnement_par_mqtt') | int(default=0) %}\n          {% for num, text in &#091;(0,'D\u00e9faut'),(1, 'Chargeur Seul'), (2, 'Convertisseur Seul'),(3, 'Normal'),(4, 'Arret')] %}\n              {% if st == num %}\n                {{ text }}\n              {%endif%}\n          {% endfor %}\n\n      # Charge AC\n      - name: MP2_ac_loads\n        unique_id: \"mp2_ac_loads\"\n        device_class: \"power\"\n        state_class: \"measurement\"\n        unit_of_measurement: \"W\"\n        state: &gt;-\n          {% set l1=states('sensor.mp2_conso_ac_l1')|int(default=0)%}\n          {% set out1=states('sensor.mp2_puissance_sortie_1')|int(default=0)%}\n          {{ l1-out1 }}\n\n      # Statut bus VE\n      - name: \"Mp2 Affichage Status Bus VE\"\n        unique_id: \"mp2_affichage_status_bus_ve\"\n        state: &gt;-\n          {% set st = states('sensor.mp2_status_bus_ve') | int(default=0) %}\n          {% for num, text in &#091;(0, 'Off'), (1, 'Low power'),(2, 'Defaut'),(3, 'Bulk'),(4, 'Absorption'),(5, 'Float'),(6, 'Stockage'),(7, 'Equalize'),(8, 'Traverse'),(9, 'Inverser'),(10, 'Power Assist'),(11, 'Power Supply'),(252, 'PControl externe')] %}\n              {% if st == num %}\n                {{ text }}\n              {%endif%}\n          {% endfor %}\n\n      # Statut charge batteries\n      - name: \"Mp2 Affichage Status Charge Batteries\"\n        unique_id: \"mp2_affichage_status_charge_batteries\"\n        state: &gt;-\n          {% set st = states('sensor.mp2_status_batteries') | int(default=0) %}\n          {% for num, text in &#091;(0, 'Off'), (1, 'Charge'),(2, 'DeCharge')] %}\n              {% if st == num %}\n                {{ text }}\n              {%endif%}\n          {% endfor %}\n\n      # Puissance de charge\/d\u00e9charge\n      - name: \"MP2 Pu charge batterie\"\n        unique_id: \"mp2_pu_charge_batterie\"\n        device_class: \"power\"\n        state_class: \"measurement\"\n        unit_of_measurement: \"W\"\n        state: &gt;-\n          {{ max(0, states('sensor.mp2_pu_batteries_par_mqtt') | float(default=0)) }}\n\n      - name: \"MP2 Pu decharge batterie\"\n        unique_id: \"mp2_pu_decharge_batterie\"\n        device_class: \"power\"\n        state_class: \"measurement\"\n        unit_of_measurement: \"W\"\n        state: &gt;-\n          {{ max(0, 0 - states('sensor.mp2_pu_batteries_par_mqtt') | float(default=0)) }}\n\n      # Puissance inject\u00e9e\/soutir\u00e9e\n      - name: \"MP2 Pu Grid Mqtt Soutir\u00e9e\"\n        unique_id: \"mp2_pu_grid_l1_mqtt_soutiree\"\n        device_class: \"power\"\n        state_class: \"measurement\"\n        unit_of_measurement: \"W\"\n        state: &gt;-\n          {{ max(0, states('sensor.mp2_pu_grid_l1_ac_mppt') | float(default=0)) }}\n\n      - name: \"MP2 Pu Grid Mqtt Inject\u00e9e\"\n        unique_id: \"mp2_pu_grid_l1_mqtt_injectee\"\n        device_class: \"power\"\n        state_class: \"measurement\"\n        unit_of_measurement: \"W\"\n        state: &gt;-\n          {{ max(0, 0 - states('sensor.mp2_pu_grid_l1_ac_mppt') | float(default=0)) }}\n\n      # Temps restant et dur\u00e9e depuis derni\u00e8re charge\n      - name: \"MP2 affichage Autonomie Restante Batteries\"\n        unique_id: mp2_affichage_autonomie_restante_batteries\n        state: &gt;-\n          {{ states('sensor.mp2_temps_restant_batteries')|int(default=0)|timestamp_custom('%H:%M:%S', false) }}\n\n      - name: \"MP2 affichage Temps Depuis Derniere Charge\"\n        unique_id: mp2_affichage_temps_depuis_derniere_charge\n        state: &gt;-\n          {{ states('sensor.mp2_temps_depuis_derniere_pleine_batteries')|int(default=0)|timestamp_custom('%H:%M:%S', false) }}\n\n      # Temps restant jusqu\u2019au SOC minimum\n      - name: \"MP2 Temps Restant Batteries Mini SOC\"\n        unique_id: \"mp2_temps_restant_batteries_mini_soc\"\n        unit_of_measurement: \"h\"\n        device_class: \"duration\"\n        icon: mdi:sort-clock-ascending\n        state: &gt;-\n          {% set battery_current = states('sensor.mp2_intensite_batteries')|float %}\n          {% set battery_soc = states('sensor.mp2_soc_mqtt')|float %}\n          {% set loads_current = states('sensor.mp2_conso_out1_mqtt')|float\/states('sensor.mp2_tension_batteries_par_mqtt')|float %}\n          {% set battery_min_soc = states('sensor.mp2_soc_mini_mqtt')|float %}\n          {% set battery_max_capacity = 300 %}\n          {% if (battery_soc-battery_min_soc) &lt; 0 %}\n            {{ 0 }}\n          {% else %}\n            {{ ((((battery_soc-battery_min_soc)*battery_max_capacity)\/100)\/loads_current | float ) | round(2) }}\n          {% endif %}<\/code><\/pre>\n\n\n\n<h1 class=\"wp-block-heading\">Automatisations<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">Envoi des informations de Home Assistant vers Node-RED<\/h2>\n\n\n\n<p>Pour aller plus loin dans l\u2019int\u00e9gration entre Home Assistant et Node-RED, j\u2019ai cr\u00e9\u00e9 une automatisation qui envoie des informations cl\u00e9s de Home Assistant vers Node-RED via MQTT. Cela permet \u00e0 Node-RED de prendre des d\u00e9cisions bas\u00e9es sur l\u2019\u00e9tat de mon syst\u00e8me, par exemple pour ajuster dynamiquement la charge des batteries ou le mode de fonctionnement du MultiPlus II. Voici l\u2019automatisation que j\u2019ai mise en place.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Code de l\u2019automatisation<\/h3>\n\n\n\n<p>Cette automatisation, nomm\u00e9e \u00ab\u00a0Recopie Etat HA vers NR MP2\u00a0\u00bb, est d\u00e9clench\u00e9e soit toutes les heures, soit lorsqu\u2019un des capteurs ou entr\u00e9es surveill\u00e9s change d\u2019\u00e9tat. Elle publie ensuite les valeurs correspondantes sur des topics MQTT que Node-RED peut \u00e9couter.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>alias: Recopie Etat HA vers NR MP2\ndescription: Lien entre HA et le Node-RED du MP2\nmode: single\ntriggers:\n  - id: mn\n    hours: \/1\n    trigger: time_pattern\n  - entity_id:\n      - input_boolean.mp2_valid_ess_charge_prog_1\n      - input_boolean.forcage_charge_pgm_mp2_100\n      - input_number.mp2_niveau_forcage_cp1\n      - sensor.linky_ptec\n    trigger: state\nconditions: &#091;]\nactions:\n  - action: mqtt.publish\n    metadata: {}\n    data:\n      evaluate_payload: false\n      qos: \"0\"\n      retain: false\n      topic: ha\/mp2\/cp\/validcp\n      payload: \"\\\"{{ states('input_boolean.mp2_valid_ess_charge_prog_1') }}\\\"\"\n  - action: mqtt.publish\n    metadata: {}\n    data:\n      evaluate_payload: false\n      qos: \"0\"\n      retain: false\n      topic: ha\/mp2\/cp\/forcage100\n      payload: \"\\\"{{ states('input_boolean.forcage_charge_pgm_mp2_100') }}\\\"\"\n  - action: mqtt.publish\n    metadata: {}\n    data:\n      evaluate_payload: false\n      qos: \"0\"\n      retain: false\n      topic: ha\/mp2\/cp\/niveauforcagecp1\n      payload: \"\\\"{{ states('input_number.mp2_niveau_forcage_cp1') }}\\\"\"\n  - action: mqtt.publish\n    metadata: {}\n    data:\n      evaluate_payload: false\n      qos: \"0\"\n      retain: false\n      topic: ha\/mp2\/cp\/hc\n      payload: \"\\\"{{ states('sensor.linky_ptec') }}\\\"\"<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Explications de l\u2019automatisation<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>D\u00e9clencheurs<\/strong> :\n<ul class=\"wp-block-list\">\n<li><strong>Toutes les heures<\/strong> (time_pattern: hours: \/1) : Cela garantit que Node-RED re\u00e7oit les informations m\u00eame si aucun changement d\u2019\u00e9tat n\u2019a lieu.<\/li>\n\n\n\n<li><strong>Changement d\u2019\u00e9tat<\/strong> (trigger: state) : L\u2019automatisation se d\u00e9clenche d\u00e8s qu\u2019un des capteurs ou entr\u00e9es suivants change :\n<ul class=\"wp-block-list\">\n<li>input_boolean.mp2_valid_ess_charge_prog_1 : Indique si le programme de charge ESS est valide.<\/li>\n\n\n\n<li>input_boolean.forcage_charge_pgm_mp2_100 : Indique si un for\u00e7age de charge \u00e0 100 % est activ\u00e9.<\/li>\n\n\n\n<li>input_number.mp2_niveau_forcage_cp1 : Niveau de for\u00e7age pour le programme de charge.<\/li>\n\n\n\n<li>sensor.linky_ptec : P\u00e9riode tarifaire en cours (par exemple, Heures Creuses ou Heures Pleines, via l\u2019int\u00e9gration Linky).<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Actions<\/strong> :\n<ul class=\"wp-block-list\">\n<li>L\u2019automatisation publie les valeurs des entit\u00e9s sur des topics MQTT sp\u00e9cifiques :\n<ul class=\"wp-block-list\">\n<li>ha\/mp2\/cp\/validcp : \u00c9tat du programme de charge ESS.<\/li>\n\n\n\n<li>ha\/mp2\/cp\/forcage100 : \u00c9tat du for\u00e7age \u00e0 100 %.<\/li>\n\n\n\n<li>ha\/mp2\/cp\/niveauforcagecp1 : Niveau de for\u00e7age.<\/li>\n\n\n\n<li>ha\/mp2\/cp\/hc : P\u00e9riode tarifaire (HC\/HP).<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Les messages sont envoy\u00e9s avec un QoS de 0 (pas de garantie de livraison) et sans r\u00e9tention (retain: false), pour \u00e9viter d\u2019encombrer le broker MQTT.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">Utilit\u00e9 de cette automatisation<\/h3>\n\n\n\n<p>Cette automatisation permet \u00e0 Node-RED de recevoir des informations en temps r\u00e9el (ou toutes les heures) sur l\u2019\u00e9tat de mon syst\u00e8me dans Home Assistant. Par exemple :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Node-RED peut ajuster le SOC cible du MultiPlus II en fonction des heures creuses (sensor.linky_ptec).<\/li>\n\n\n\n<li>Si un for\u00e7age de charge \u00e0 100 % est activ\u00e9 (input_boolean.forcage_charge_pgm_mp2_100), Node-RED peut d\u00e9clencher une logique sp\u00e9cifique, comme d\u00e9sactiver d\u2019autres automatisations.<\/li>\n\n\n\n<li>Le niveau de for\u00e7age (input_number.mp2_niveau_forcage_cp1) peut \u00eatre utilis\u00e9 pour moduler la charge des batteries.<\/li>\n<\/ul>\n\n\n\n<p>Dans mon cas, Node-RED utilise ces donn\u00e9es pour optimiser la gestion de la charge des batteries en fonction des tarifs \u00e9lectriques et des pr\u00e9visions de production solaire (comme vu dans mes articles pr\u00e9c\u00e9dents sur Node-RED et Victron).<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Activation de la charge forc\u00e9e en cas de Tempo Rouge<\/h2>\n\n\n\n<p>Pour optimiser encore davantage la gestion de la charge de mes batteries, j\u2019ai ajout\u00e9 une automatisation qui active ou d\u00e9sactive les programmations de charge forc\u00e9e en fonction de la couleur Tempo du lendemain, d\u00e9tect\u00e9e via le capteur sensor.rte_tempo_prochaine_couleur. Cette automatisation s\u2019assure que la charge forc\u00e9e (d\u00e9finie dans la carte custom:scheduler-card pr\u00e9sent\u00e9e plus loin) est activ\u00e9e uniquement les jours pr\u00e9c\u00e9dant une journ\u00e9e Tempo rouge, o\u00f9 les tarifs \u00e9lectriques sont plus \u00e9lev\u00e9s.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Code de l\u2019automatisation<\/h3>\n\n\n\n<p>Cette automatisation, nomm\u00e9e \u00ab\u00a0Activation Forcage Charge Programm\u00e9e 1 si tempo Rouge\u00a0\u00bb, est d\u00e9clench\u00e9e par un changement d\u2019\u00e9tat du capteur sensor.rte_tempo_prochaine_couleur. Elle active les programmations de charge forc\u00e9e si la couleur passe \u00e0 \u00ab\u00a0Rouge\u00a0\u00bb, et les d\u00e9sactive si la couleur n\u2019est plus \u00ab\u00a0Rouge\u00a0\u00bb.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>alias: Activation Forcage Charge Programm\u00e9e 1 si tempo Rouge\ndescription: \"\"\ntriggers:\n  - trigger: state\n    entity_id:\n      - sensor.rte_tempo_prochaine_couleur\n    to: Rouge\n    id: vers_rouge\n  - trigger: state\n    entity_id:\n      - sensor.rte_tempo_prochaine_couleur\n    id: sortie_rouge\n    from: Rouge\nconditions: &#091;]\nactions:\n  - choose:\n      - conditions:\n          - condition: trigger\n            id:\n              - vers_rouge\n        sequence:\n          - action: switch.turn_on\n            target:\n              entity_id:\n                - switch.schedule_e7a1a2\n                - switch.schedule_6aebea\n            data: {}\n      - conditions:\n          - condition: trigger\n            id:\n              - sortie_rouge\n        sequence:\n          - action: switch.turn_off\n            target:\n              entity_id:\n                - switch.schedule_e7a1a2\n                - switch.schedule_6aebea\n            data: {}\nmode: single<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Explications de l\u2019automatisation<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>D\u00e9clencheurs<\/strong> :\n<ul class=\"wp-block-list\">\n<li><strong>Passage \u00e0 Tempo Rouge<\/strong> (id: vers_rouge) : L\u2019automatisation se d\u00e9clenche lorsque sensor.rte_tempo_prochaine_couleur passe \u00e0 l\u2019\u00e9tat \u00ab\u00a0Rouge\u00a0\u00bb, indiquant que le lendemain sera une journ\u00e9e Tempo rouge.<\/li>\n\n\n\n<li><strong>Sortie de Tempo Rouge<\/strong> (id: sortie_rouge) : L\u2019automatisation se d\u00e9clenche lorsque sensor.rte_tempo_prochaine_couleur quitte l\u2019\u00e9tat \u00ab\u00a0Rouge\u00a0\u00bb, indiquant que le lendemain ne sera plus une journ\u00e9e Tempo rouge.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Actions<\/strong> :\n<ul class=\"wp-block-list\">\n<li><strong>Si passage \u00e0 Tempo Rouge<\/strong> : L\u2019action switch.turn_on active deux interrupteurs :\n<ul class=\"wp-block-list\">\n<li>switch.schedule_e7a1a2 : Correspond \u00e0 l\u2019interrupteur de la programmation d\u00e9finie dans la carte custom:scheduler-card (pr\u00e9sent\u00e9e plus loin).<\/li>\n\n\n\n<li>switch.schedule_6aebea : Un autre interrupteur de programmation, potentiellement pour une autre p\u00e9riode ou un autre sc\u00e9nario de charge.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Si sortie de Tempo Rouge<\/strong> : L\u2019action switch.turn_off d\u00e9sactive les m\u00eames interrupteurs, suspendant ainsi les programmations de charge forc\u00e9e.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Mode<\/strong> : mode: single garantit que l\u2019automatisation ne s\u2019ex\u00e9cute qu\u2019une seule fois par d\u00e9clencheur, \u00e9vitant des ex\u00e9cutions multiples en cas de changements rapides d\u2019\u00e9tat.<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">Utilit\u00e9 de cette automatisation<\/h3>\n\n\n\n<p>Cette automatisation est un compl\u00e9ment essentiel \u00e0 la carte custom:scheduler-card pr\u00e9sent\u00e9e plus haut, qui programme la charge forc\u00e9e pendant les heures creuses (22h00 \u00e0 6h00). En activant les programmations uniquement les jours pr\u00e9c\u00e9dant une journ\u00e9e Tempo rouge, je m\u2019assure que ma batterie est charg\u00e9e \u00e0 100 % (ou au niveau d\u00e9fini dans input_number.mp2_niveau_forcage_cp1) pour affronter les tarifs \u00e9lev\u00e9s du lendemain. Si le lendemain n\u2019est pas une journ\u00e9e Tempo rouge, les programmations sont d\u00e9sactiv\u00e9es pour \u00e9viter une charge inutile, optimisant ainsi l\u2019utilisation de l\u2019\u00e9nergie solaire et r\u00e9duisant les co\u00fbts.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">Visualisation dans Home Assistant :<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">Exemple de carte Lovelace<\/h2>\n\n\n\n<p>Pour rendre toutes ces donn\u00e9es et contr\u00f4les facilement accessibles, j\u2019ai cr\u00e9\u00e9 une carte dans Home Assistant en utilisant l\u2019interface Lovelace. Cette carte regroupe les informations cl\u00e9s et les entr\u00e9es utilisateur li\u00e9es \u00e0 mon MultiPlus II (MP2) et \u00e0 mes automatisations Node-RED. Voici le code YAML de la carte que j\u2019utilise :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>type: entities\nentities:\n  - entity: input_boolean.mp2_valid_ess_charge_prog_1\n    secondary_info: last-changed\n  - entity: sensor.mp2_prod_vrm_total_mqtt\n    secondary_info: last-updated\n  - entity: sensor.mp2_soc_mqtt\n    secondary_info: last-updated\n  - entity: sensor.mp2_cible_soc_par_mqtt\n    secondary_info: last-updated\n  - entity: input_number.mp2_memoire_estimation_production_jour\n    secondary_info: last-updated\n  - entity: sensor.mp2_total_energie_produite_jour\n  - entity: input_boolean.forcage_charge_pgm_mp2_100\n  - entity: input_number.mp2_niveau_forcage_cp1\ntitle: Automatismes MP2 NodeRed\nshow_header_toggle: false\nstate_color: true<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"407\" height=\"497\" src=\"https:\/\/domo.rem81.com\/wp-content\/uploads\/2025\/04\/image-2.png\" alt=\"\" class=\"wp-image-3581\" srcset=\"https:\/\/domo.rem81.com\/wp-content\/uploads\/2025\/04\/image-2.png 407w, https:\/\/domo.rem81.com\/wp-content\/uploads\/2025\/04\/image-2-246x300.png 246w\" sizes=\"auto, (max-width: 407px) 100vw, 407px\" \/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Explications de la carte<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Type de carte<\/strong> : J\u2019utilise une carte de type entities, qui permet d\u2019afficher une liste d\u2019entit\u00e9s avec leurs \u00e9tats et des options de contr\u00f4le.<\/li>\n\n\n\n<li><strong>Entit\u00e9s affich\u00e9es<\/strong> :\n<ul class=\"wp-block-list\">\n<li>input_boolean.mp2_valid_ess_charge_prog_1 : Un interrupteur pour activer\/d\u00e9sactiver le programme de charge ESS, avec l\u2019heure de la derni\u00e8re modification (last-changed).<\/li>\n\n\n\n<li>sensor.mp2_prod_vrm_total_mqtt : La production totale pr\u00e9vue (via VRM), mise \u00e0 jour avec l\u2019heure de la derni\u00e8re actualisation (last-updated).<\/li>\n\n\n\n<li>sensor.mp2_soc_mqtt : L\u2019\u00e9tat de charge (SOC) actuel des batteries.<\/li>\n\n\n\n<li>sensor.mp2_cible_soc_par_mqtt : Le SOC cible d\u00e9fini pour les batteries.<\/li>\n\n\n\n<li>input_number.mp2_memoire_estimation_production_jour : Une entr\u00e9e num\u00e9rique pour m\u00e9moriser l\u2019estimation de production journali\u00e8re.<\/li>\n\n\n\n<li>sensor.mp2_total_energie_produite_jour : L\u2019\u00e9nergie totale produite dans la journ\u00e9e (non d\u00e9fini dans la configuration pr\u00e9c\u00e9dente, mais ajout\u00e9 ici pour le suivi).<\/li>\n\n\n\n<li>input_boolean.forcage_charge_pgm_mp2_100 : Un interrupteur pour forcer la charge des batteries \u00e0 100 %.<\/li>\n\n\n\n<li>input_number.mp2_niveau_forcage_cp1 : Une entr\u00e9e num\u00e9rique pour d\u00e9finir le niveau de for\u00e7age de la charge.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Options<\/strong> :\n<ul class=\"wp-block-list\">\n<li>title: Automatismes MP2 NodeRed : Le titre de la carte, qui refl\u00e8te son objectif.<\/li>\n\n\n\n<li>show_header_toggle: false : D\u00e9sactive l\u2019interrupteur global dans l\u2019en-t\u00eate de la carte.<\/li>\n\n\n\n<li>state_color: true : Active la coloration des \u00e9tats (par exemple, les interrupteurs s\u2019affichent en vert lorsqu\u2019ils sont activ\u00e9s).<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Pourquoi cette carte ?<\/h3>\n\n\n\n<p>Cette carte me permet de visualiser rapidement les informations essentielles (SOC, production, \u00e9nergie produite) et de contr\u00f4ler les param\u00e8tres de charge (for\u00e7age, niveau de for\u00e7age) directement depuis mon tableau de bord. Les indications last-changed et last-updated sont utiles pour v\u00e9rifier la fra\u00eecheur des donn\u00e9es et des actions. C\u2019est un compl\u00e9ment parfait \u00e0 la configuration et \u00e0 l\u2019automatisation d\u00e9crites plus haut, car elle rend l\u2019ensemble interactif et visuel.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Gestion de la charge programm\u00e9e : Une carte pour les heures creuses<\/h2>\n\n\n\n<p>En compl\u00e9ment de la carte pr\u00e9c\u00e9dente, j\u2019utilise une autre carte personnalis\u00e9e, bas\u00e9e sur le composant custom:scheduler-card, pour programmer et valider la charge forc\u00e9e de mes batteries \u00e0 un niveau de SOC d\u00e9fini dans input_number.mp2_niveau_forcage_cp1 (souvent 100 %). Cette programmation est configur\u00e9e pour se d\u00e9clencher pendant les heures creuses, de 22h00 \u00e0 6h00, afin de commencer une journ\u00e9e Tempo rouge avec une batterie pleinement charg\u00e9e. Voici le code YAML de cette carte :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>type: custom:scheduler-card\ndiscover_existing: false\ndisplay_options:\n  icon: mdi:radiator\n  primary_info:\n    - &lt;b&gt;{entity} \/ {name}&lt;\/b&gt;\n    - \"&lt;b&gt;Next&lt;\/b&gt; : {relative-time} | &lt;b&gt;Action&lt;\/b&gt; : {action}\"\n    - additional-tasks\n  secondary_info:\n    - \"{days} {time}\"\ninclude:\n  - input_boolean.forcage_charge_pgm_mp2_100\ntitle: Forcage CP1\nhow_header_toggle: false\nstyle: |\n  ha-card {\n    border: solid 2px var(--primary-color);\n  }\nshow_header_toggle: true\nexclude: &#091;]<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"408\" height=\"324\" src=\"https:\/\/domo.rem81.com\/wp-content\/uploads\/2025\/04\/image-3.png\" alt=\"\" class=\"wp-image-3583\" srcset=\"https:\/\/domo.rem81.com\/wp-content\/uploads\/2025\/04\/image-3.png 408w, https:\/\/domo.rem81.com\/wp-content\/uploads\/2025\/04\/image-3-300x238.png 300w\" sizes=\"auto, (max-width: 408px) 100vw, 408px\" \/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Explications de la carte<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Type de carte<\/strong> : J\u2019utilise custom:scheduler-card, un composant personnalis\u00e9 qui permet de programmer des actions dans Home Assistant (il faut l\u2019installer via HACS ou manuellement si ce n\u2019est pas d\u00e9j\u00e0 fait).<\/li>\n\n\n\n<li><strong>Objectif<\/strong> : Cette carte g\u00e8re l\u2019activation de input_boolean.forcage_charge_pgm_mp2_100 pour forcer la charge des batteries \u00e0 un niveau de SOC d\u00e9fini dans input_number.mp2_niveau_forcage_cp1 (souvent 100 %). La programmation est configur\u00e9e pour les heures creuses (22h00 \u00e0 6h00), ce qui me permet d\u2019optimiser la charge avant une journ\u00e9e Tempo rouge, o\u00f9 les tarifs \u00e9lectriques sont plus \u00e9lev\u00e9s.<\/li>\n\n\n\n<li><strong>Options<\/strong> :\n<ul class=\"wp-block-list\">\n<li>discover_existing: false : D\u00e9sactive la d\u00e9couverte automatique des programmations existantes, pour un contr\u00f4le manuel.<\/li>\n\n\n\n<li>display_options : Personnalise l\u2019affichage de la carte :\n<ul class=\"wp-block-list\">\n<li>icon: mdi:radiator : Utilise une ic\u00f4ne de radiateur pour repr\u00e9senter la charge.<\/li>\n\n\n\n<li>primary_info : Affiche le nom de l\u2019entit\u00e9, l\u2019heure de la prochaine action, et les t\u00e2ches suppl\u00e9mentaires.<\/li>\n\n\n\n<li>secondary_info : Montre les jours et l\u2019heure de la programmation (par exemple, \u00ab\u00a0Tous les jours 22:00\u00a0\u00bb).<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>include: input_boolean.forcage_charge_pgm_mp2_100 : Seule cette entit\u00e9 est incluse dans la programmation.<\/li>\n\n\n\n<li>title: Forcage CP1 : Le titre de la carte, qui indique qu\u2019elle concerne le for\u00e7age de la charge programm\u00e9e (CP1).<\/li>\n\n\n\n<li>style : Ajoute une bordure color\u00e9e autour de la carte, en utilisant la couleur principale du th\u00e8me Home Assistant.<\/li>\n\n\n\n<li>show_header_toggle: true : Affiche un interrupteur dans l\u2019en-t\u00eate pour activer\/d\u00e9sactiver rapidement la programmation.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Pourquoi cette carte ?<\/h3>\n\n\n\n<p>Cette carte est essentielle pour g\u00e9rer automatiquement la charge de mes batteries pendant les heures creuses, en anticipant les journ\u00e9es Tempo rouge o\u00f9 l\u2019\u00e9lectricit\u00e9 est plus ch\u00e8re. En programmant le for\u00e7age de la charge \u00e0 100 % entre 22h00 et 6h00, je m\u2019assure que ma batterie est pr\u00eate \u00e0 alimenter ma maison d\u00e8s le matin, r\u00e9duisant ainsi ma d\u00e9pendance au r\u00e9seau pendant les heures co\u00fbteuses. La visualisation claire de la prochaine action et des horaires me permet de v\u00e9rifier facilement que tout est bien configur\u00e9.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">Ce que cette configuration m\u2019apporte<\/h1>\n\n\n\n<p>Gr\u00e2ce \u00e0 cette configuration, \u00e0 l\u2019automatisation, et \u00e0 la visualisation via Lovelace, j\u2019ai une vue compl\u00e8te et d\u00e9taill\u00e9e de mon syst\u00e8me Victron dans Home Assistant :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Production solaire<\/strong> : Je peux suivre la production de mes panneaux (via le MPPT et le compteur PV) et l\u2019\u00e9nergie totale produite.<\/li>\n\n\n\n<li><strong>Batteries<\/strong> : Je surveille le SOC, la tension, le courant, la puissance de charge\/d\u00e9charge, et m\u00eame le temps restant avant d\u2019atteindre le SOC minimum.<\/li>\n\n\n\n<li><strong>R\u00e9seau<\/strong> : Je vois l\u2019\u00e9nergie inject\u00e9e ou soutir\u00e9e du r\u00e9seau, ainsi que la consommation AC.<\/li>\n\n\n\n<li><strong>Supervision et contr\u00f4le<\/strong> : Les capteurs template me permettent d\u2019afficher des informations claires (par exemple, \u00ab\u00a0Charge\u00a0\u00bb au lieu d\u2019un simple 1) et de calculer des m\u00e9triques utiles comme l\u2019autonomie restante. L\u2019automatisation vers Node-RED ajoute une couche de contr\u00f4le dynamique, en permettant \u00e0 Node-RED de r\u00e9agir aux changements dans Home Assistant. L\u2019automatisation pour les jours Tempo rouge garantit que la charge forc\u00e9e est activ\u00e9e uniquement quand c\u2019est n\u00e9cessaire, optimisant les co\u00fbts. Enfin, les cartes Lovelace me donnent un acc\u00e8s rapide et visuel \u00e0 toutes ces donn\u00e9es, avec la possibilit\u00e9 de programmer des actions comme la charge forc\u00e9e pendant les heures creuses.<\/li>\n<\/ul>\n\n\n\n<p>Ces donn\u00e9es sont ensuite utilis\u00e9es dans des tableaux de bord Home Assistant (comme ceux montr\u00e9s ci-dessus) et dans Node-RED pour des automatisations, comme ajuster le SOC cible en fonction des pr\u00e9visions solaires ou des tarifs \u00e9lectriques.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">Pr\u00e9requis pour reproduire ce projet<\/h1>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Un syst\u00e8me Victron avec un Cerbo GX (ou \u00e9quivalent) connect\u00e9 \u00e0 votre r\u00e9seau.<\/li>\n\n\n\n<li>L\u2019int\u00e9gration MQTT configur\u00e9e dans Home Assistant, avec un broker MQTT actif.<\/li>\n\n\n\n<li>L\u2019int\u00e9gration Modbus activ\u00e9e dans Home Assistant (via modbus dans configuration.yaml).<\/li>\n\n\n\n<li>Les capteurs MQTT doivent \u00eatre publi\u00e9s par un autre syst\u00e8me (par exemple, un script ou Node-RED, comme mentionn\u00e9 dans mes articles pr\u00e9c\u00e9dents).<\/li>\n\n\n\n<li>Node-RED install\u00e9 et configur\u00e9 pour \u00e9couter les topics MQTT publi\u00e9s par l\u2019automatisation.<\/li>\n\n\n\n<li>Les entit\u00e9s comme input_boolean.mp2_valid_ess_charge_prog_1, input_boolean.forcage_charge_pgm_mp2_100, input_number.mp2_niveau_forcage_cp1, et sensor.linky_ptec doivent \u00eatre cr\u00e9\u00e9es dans Home Assistant (via des helpers ou des int\u00e9grations comme Linky).<\/li>\n\n\n\n<li>Pour l\u2019automatisation Tempo, l\u2019int\u00e9gration RTE Tempo doit \u00eatre configur\u00e9e pour fournir le capteur sensor.rte_tempo_prochaine_couleur.<\/li>\n\n\n\n<li>Les interrupteurs switch.schedule_e7a1a2 et switch.schedule_6aebea doivent exister et \u00eatre associ\u00e9s aux programmations de la carte custom:scheduler-card.<\/li>\n\n\n\n<li>Une compr\u00e9hension de base des registres Modbus (les adresses utilis\u00e9es ici sont sp\u00e9cifiques aux appareils Victron).<\/li>\n\n\n\n<li>Pour les cartes Lovelace, assurez-vous que toutes les entit\u00e9s list\u00e9es existent dans votre configuration Home Assistant.<\/li>\n\n\n\n<li>Pour la carte custom:scheduler-card, vous devez installer ce composant personnalis\u00e9 via HACS ou manuellement.<\/li>\n<\/ul>\n\n\n\n<h1 class=\"wp-block-heading\">Conclusion<\/h1>\n\n\n\n<p>Si vous avez un syst\u00e8me Victron, cette configuration est une excellente base pour l\u2019int\u00e9grer dans Home Assistant, interagir avec Node-RED, et visualiser vos donn\u00e9es dans un tableau de bord Lovelace. Vous pouvez l\u2019adapter \u00e0 vos appareils (en ajustant les adresses Modbus ou les topics MQTT) et personnaliser les capteurs template, les automatisations, et les cartes selon vos besoins. Ce projet m\u2019a permis de mieux comprendre et optimiser mon installation photovolta\u00efque, et j\u2019esp\u00e8re qu\u2019il vous inspirera ! N\u2019h\u00e9sitez pas \u00e0 partager vos propres configurations ou questions en commentaire.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">Liste des publications en lien avec cet article:<\/h1>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/domo.rem81.com\/index.php\/2025\/03\/27\/photovoltaique-gestion-de-mon-systeme-solaire-victron-avec-node-red-partie-1-collecte-des-donnees\/\" data-type=\"link\" data-id=\"https:\/\/domo.rem81.com\/index.php\/2025\/03\/27\/photovoltaique-gestion-de-mon-systeme-solaire-victron-avec-node-red-partie-1-collecte-des-donnees\/\" target=\"_blank\" rel=\"noreferrer noopener\">Partie 1: Collecte des donn\u00e9es<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/domo.rem81.com\/index.php\/2025\/03\/27\/photovoltaique-gestion-de-mon-systeme-solaire-victron-avec-node-red-partie-2-gestion-des-batteries\/\" data-type=\"link\" data-id=\"https:\/\/domo.rem81.com\/index.php\/2025\/03\/27\/photovoltaique-gestion-de-mon-systeme-solaire-victron-avec-node-red-partie-2-gestion-des-batteries\/\" target=\"_blank\" rel=\"noreferrer noopener\">Partie 2: Gestion des batteries<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/domo.rem81.com\/index.php\/2025\/03\/27\/photovoltaique-gestion-de-mon-systeme-solaire-victron-avec-node-red-partie-3-prevision-de-la-production-solaire\/\" data-type=\"link\" data-id=\"https:\/\/domo.rem81.com\/index.php\/2025\/03\/27\/photovoltaique-gestion-de-mon-systeme-solaire-victron-avec-node-red-partie-3-prevision-de-la-production-solaire\/\" target=\"_blank\" rel=\"noreferrer noopener\">Partie 3: Pr\u00e9vision de la production solaire<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/domo.rem81.com\/index.php\/2025\/03\/27\/photovoltaique-gestion-de-mon-systeme-solaire-victron-avec-node-red-partie-4-calcul-du-niveau-de-charge-batterie\/\" data-type=\"link\" data-id=\"https:\/\/domo.rem81.com\/index.php\/2025\/03\/27\/photovoltaique-gestion-de-mon-systeme-solaire-victron-avec-node-red-partie-4-calcul-du-niveau-de-charge-batterie\/\" target=\"_blank\" rel=\"noreferrer noopener\">Partie 4: Calcul du Niveau de charge batterie<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/domo.rem81.com\/index.php\/2025\/04\/07\/ha-integrer-et-superviser-un-systeme-victron-dans-home-assistant-configuration-mqtt-modbus-et-automatisation-vers-node-red\/\" data-type=\"link\" data-id=\"https:\/\/domo.rem81.com\/index.php\/2025\/04\/07\/ha-integrer-et-superviser-un-systeme-victron-dans-home-assistant-configuration-mqtt-modbus-et-automatisation-vers-node-red\/\" target=\"_blank\" rel=\"noreferrer noopener\">HA-Int\u00e9grer et superviser un syst\u00e8me Victron dans Home Assistant<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Update: Voir mon nouvel article sur le sujet: Intro Dans cet article, je vous partage la configuration .yaml que j\u2019ai mise en place dans Home Assistant pour superviser mon syst\u00e8me &hellip; <\/p>\n","protected":false},"author":1,"featured_media":3654,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4,6],"tags":[59,66,63],"class_list":["post-3565","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-homeassistant","category-photovoltaique","tag-mqtt","tag-nodered","tag-victron"],"_links":{"self":[{"href":"https:\/\/domo.rem81.com\/index.php\/wp-json\/wp\/v2\/posts\/3565","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/domo.rem81.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/domo.rem81.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/domo.rem81.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/domo.rem81.com\/index.php\/wp-json\/wp\/v2\/comments?post=3565"}],"version-history":[{"count":32,"href":"https:\/\/domo.rem81.com\/index.php\/wp-json\/wp\/v2\/posts\/3565\/revisions"}],"predecessor-version":[{"id":4245,"href":"https:\/\/domo.rem81.com\/index.php\/wp-json\/wp\/v2\/posts\/3565\/revisions\/4245"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/domo.rem81.com\/index.php\/wp-json\/wp\/v2\/media\/3654"}],"wp:attachment":[{"href":"https:\/\/domo.rem81.com\/index.php\/wp-json\/wp\/v2\/media?parent=3565"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/domo.rem81.com\/index.php\/wp-json\/wp\/v2\/categories?post=3565"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/domo.rem81.com\/index.php\/wp-json\/wp\/v2\/tags?post=3565"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}