F1ATB forum
Intégration du RMS VE à HomeAssistant - Version imprimable

+- F1ATB forum (https://f1atb.fr/forum_f1atb)
+-- Forum : Forum de F1ATB (https://f1atb.fr/forum_f1atb/forum-3.html)
+--- Forum : Routeur Photovoltaïque (https://f1atb.fr/forum_f1atb/forum-4.html)
+---- Forum : Adaptation aux chargeurs VE (https://f1atb.fr/forum_f1atb/forum-16.html)
+---- Sujet : Intégration du RMS VE à HomeAssistant (/thread-2468.html)

Pages : 1 2


RE: Intégration du RMS VE à HomeAssistant - grostoto - 27-03-2026

bon, j'ai essayé d'aller chercher automatiquement les valeurs min et max dans le data pour le slider, mais sans succès...

dans le fichier c'est défini à 0 et 32, chez moi à 4.9 et 16: mais cela ne va pas les chercher.

si j'édite dans le fichier directement cela fonctionne, mais cela serait mieux de manière automatique.. (plus adaptif).


RE: Intégration du RMS VE à HomeAssistant - Geosr - 27-03-2026

(27-03-2026, 03:45 PM)grostoto a écrit : bon, j'ai essayé d'aller chercher automatiquement les valeurs min et max dans le data pour le slider, mais sans succès...

dans le fichier c'est défini à 0 et 32, chez moi à 4.9 et 16: mais cela ne va pas les chercher.

si j'édite dans le fichier directement cela fonctionne, mais cela serait mieux de manière automatique.. (plus adaptif).

je viens de comprendre...

Remplace le fichier par ce contenu. attention au adresse IP.
Code :
rest_command:
  ve_set_mode:
    url: "http://192.168.1.175/setMode?mode={{ mode }}"
    method: GET

  ve_set_current:
    url: "http://192.168.1.175/setCurrent?amp={{ amp }}"
    method: GET


script:
  ve_mode_arret:
    alias: "VE mode arrêt"
    sequence:
      - service: rest_command.ve_set_mode
        data:
          mode: 3

  ve_mode_semi_auto:
    alias: "VE mode semi-auto"
    sequence:
      - service: rest_command.ve_set_mode
        data:
          mode: 1

  ve_mode_auto:
    alias: "VE mode auto"
    sequence:
      - service: rest_command.ve_set_mode
        data:
          mode: 0

  ve_mode_manuel:
    alias: "VE mode manuel"
    sequence:
      - service: rest_command.ve_set_mode
        data:
          mode: 2


sensor:
  - platform: rest
    name: "Borne VE API"
    resource: "http://192.168.1.175/data"
    scan_interval: 1
    timeout: 10
    value_template: "{{ value_json.state | default('unknown') }}"
    json_attributes:
      - I_charge
      - state
      - cp_pwm_charging
      - EnergieChargee_Wh
      - mode
      - I_min_c
      - I_max
      - I_charge_manual
      - fact_Icharge
      - TempsCharge_ms
      - enab
      - nb_depassement_soft
      - nb_depassement_hard

template:
  - number:
      - name: "Courant borne VE dynamique"
        unique_id: courant_borne_ve_dynamique
        min: "{{ state_attr('sensor.borne_ve_api', 'I_min_c') | float(6) }}"
        max: "{{ state_attr('sensor.borne_ve_api', 'I_max') | float(16) }}"
        step: 1
        unit_of_measurement: "A"
        icon: mdi:ev-plug-ccs2
        state: "{{ state_attr('sensor.borne_ve_api', 'I_charge_manual') | float(0) }}"
        set_value:
          service: rest_command.ve_set_current
          data:
            amp: "{{ value }}"

  - sensor:
      - name: "État de la liaison VE"
        unique_id: etat_liaison_ve
        state: >
          {% set s = states('sensor.borne_ve_api') %}
          {% if s == 'A' %}
            A - Pas de véhicule
          {% elif s == 'B' %}
            B - Véhicule connecté
          {% elif s == 'C' %}
            C - Charge en cours
          {% elif s == 'F' %}
            F - Défaut
          {% else %}
            Inconnu
          {% endif %}
        icon: mdi:ev-station

      - name: "Courant de charge VE"
        unique_id: courant_charge_ve
        state: >
          {{ state_attr('sensor.borne_ve_api', 'I_charge') | float(0) }}
        unit_of_measurement: "A"
        device_class: current
        icon: mdi:current-ac

      - name: "Recharge cumulée VE"
        unique_id: recharge_cumulee_ve
        state: >
          {{ state_attr('sensor.borne_ve_api', 'EnergieChargee_Wh') | float(0) }}
        unit_of_measurement: "Wh"
        device_class: energy
        state_class: total_increasing
        icon: mdi:battery-charging

      - name: "Temps de charge VE"
        unique_id: temps_charge_ve
        state: >
          {% set ms = state_attr('sensor.borne_ve_api', 'TempsCharge_ms') | int(0) %}
          {% set total_s = (ms / 1000) | int %}
          {% set h = total_s // 3600 %}
          {% set m = (total_s % 3600) // 60 %}
          {% set s = total_s % 60 %}
          {{ '%02d:%02d:%02d' | format(h, m, s) }}
        icon: mdi:timer-outline

      - name: "PWM borne VE"
        unique_id: pwm_borne_ve
        state: >
          {{ state_attr('sensor.borne_ve_api', 'cp_pwm_charging') | float(0) }}
        unit_of_measurement: "%"
        icon: mdi:sine-wave

      - name: "Mode de fonctionnement borne VE"
        unique_id: mode_fonctionnement_borne_ve
        state: >
          {% set m = state_attr('sensor.borne_ve_api', 'mode') | int(-1) %}
          {% if m == 0 %}
            Auto
          {% elif m == 1 %}
            Semi-auto
          {% elif m == 2 %}
            Manuel
          {% else %}
            Arrêt
          {% endif %}
        icon: mdi:cog

      - name: "I charge manuel borne VE"
        unique_id: i_charge_manuel_borne_ve
        state: >
          {{ state_attr('sensor.borne_ve_api', 'I_charge_manual') | float(0) }}
        unit_of_measurement: "A"
        device_class: current
        icon: mdi:lightning-bolt

      - name: "Courant minimum borne VE"
        unique_id: i_min_borne_ve
        state: >
          {{ state_attr('sensor.borne_ve_api', 'I_min_c') | float(0) }}
        unit_of_measurement: "A"
        device_class: current
        icon: mdi:current-dc

      - name: "Courant maximum borne VE"
        unique_id: i_max_borne_ve
        state: >
          {{ state_attr('sensor.borne_ve_api', 'I_max') | float(0) }}
        unit_of_measurement: "A"
        device_class: current
        icon: mdi:current-ac

      - name: "Facteur I charge borne VE"
        unique_id: facteur_i_charge_borne_ve
        state: >
          {{ state_attr('sensor.borne_ve_api', 'fact_Icharge') | float(0) }}
        icon: mdi:tune

      - name: "Dépassements soft borne VE"
        unique_id: depassements_soft_borne_ve
        state: >
          {{ state_attr('sensor.borne_ve_api', 'nb_depassement_soft') | int(0) }}
        icon: mdi:alert-outline

      - name: "Dépassements hard borne VE"
        unique_id: depassements_hard_borne_ve
        state: >
          {{ state_attr('sensor.borne_ve_api', 'nb_depassement_hard') | int(0) }}
        icon: mdi:alert

  - binary_sensor:
      - name: "Borne VE activée"
        unique_id: borne_ve_activee
        state: >
          {{ state_attr('sensor.borne_ve_api', 'enab') | int(0) == 1 }}
        icon: mdi:check-circle-outline

(27-03-2026, 08:58 AM)H3rv3 a écrit : Bravo, sans modification du code.
Ça devrait faire des heureux.

J'ai pas HA donc pas de tests de mon côté.

Merci à toute l'équipe pour le developpement et le code.

Tu as pas mal d'informations en tapant http://IProuteur/data
Cela peut vous etre utilise pour debug peut etre.. ou intégration dans un autres systeme domotique!!!

Et oui sans modification du code comme ca pas de soucis pour les maj futur.....


RE: Intégration du RMS VE à HomeAssistant - Rakibou - 27-03-2026

(26-03-2026, 11:03 PM)Geosr a écrit : Loin d’être un expert en programmation, et encore moins en explications, je vous partage ma solution pour intégrer le routeur à Home Assistant.
[...]
Petit bonus : le fichier card.txt est prêt à être collé dans votre dashboard.

Bravo et merci pour cette belle contribution !
Si tu veux on peut ajouter une doc pour les utilisateurs de HA (il n'y en a pas dans l'équipe de développement).


RE: Intégration du RMS VE à HomeAssistant - grostoto - 27-03-2026

ok cool.

tu n'as pas corrigé l'erreur:
'"EnergieChargee_Wh", il faut mettre "EnergieCharge_Wh"

d'autre part, la modif du fichier plus haut implique la modif de la card (j'ai ajouté une ligne pour afficherle pwm).

Code :
type: vertical-stack
cards:
  - square: false
    type: grid
    columns: 4
    cards:
      - type: custom:button-card
        name: Arrêt
        icon: mdi:stop-circle
        tap_action:
          action: call-service
          service: script.ve_mode_arret
        styles:
          card:
            - border-radius: 16px
            - padding: 12px
            - font-size: 14px
            - border: 2px solid
            - border-color: |
                [[[
                  return states['sensor.borne_ve_api']?.attributes?.mode == 3
                    ? 'var(--error-color)'
                    : 'rgba(150,150,150,0.25)';
                ]]]
            - background-color: |
                [[[
                  return states['sensor.borne_ve_api']?.attributes?.mode == 3
                    ? 'rgba(244, 67, 54, 0.18)'
                    : 'var(--card-background-color)';
                ]]]
            - box-shadow: |
                [[[
                  return states['sensor.borne_ve_api']?.attributes?.mode == 3
                    ? '0 0 10px rgba(244,67,54,0.45)'
                    : 'none';
                ]]]
          icon:
            - color: |
                [[[
                  return states['sensor.borne_ve_api']?.attributes?.mode == 3
                    ? 'var(--error-color)'
                    : 'var(--primary-text-color)';
                ]]]
          name:
            - font-weight: |
                [[[
                  return states['sensor.borne_ve_api']?.attributes?.mode == 3
                    ? '700'
                    : '500';
                ]]]
      - type: custom:button-card
        name: Auto
        icon: mdi:flash-auto
        tap_action:
          action: call-service
          service: script.ve_mode_auto
        styles:
          card:
            - border-radius: 16px
            - padding: 12px
            - font-size: 14px
            - border: 2px solid
            - border-color: |
                [[[
                  return states['sensor.borne_ve_api']?.attributes?.mode == 0
                    ? 'var(--primary-color)'
                    : 'rgba(150,150,150,0.25)';
                ]]]
            - background-color: |
                [[[
                  return states['sensor.borne_ve_api']?.attributes?.mode == 0
                    ? 'rgba(33, 150, 243, 0.18)'
                    : 'var(--card-background-color)';
                ]]]
            - box-shadow: |
                [[[
                  return states['sensor.borne_ve_api']?.attributes?.mode == 0
                    ? '0 0 10px rgba(33,150,243,0.45)'
                    : 'none';
                ]]]
          icon:
            - color: |
                [[[
                  return states['sensor.borne_ve_api']?.attributes?.mode == 0
                    ? 'var(--primary-color)'
                    : 'var(--primary-text-color)';
                ]]]
          name:
            - font-weight: |
                [[[
                  return states['sensor.borne_ve_api']?.attributes?.mode == 0
                    ? '700'
                    : '500';
                ]]]
      - type: custom:button-card
        name: Semi-auto
        icon: mdi:sync
        tap_action:
          action: call-service
          service: script.ve_mode_semi_auto
        styles:
          card:
            - border-radius: 16px
            - padding: 12px
            - font-size: 14px
            - border: 2px solid
            - border-color: |
                [[[
                  return states['sensor.borne_ve_api']?.attributes?.mode == 1
                    ? 'var(--primary-color)'
                    : 'rgba(150,150,150,0.25)';
                ]]]
            - background-color: |
                [[[
                  return states['sensor.borne_ve_api']?.attributes?.mode == 1
                    ? 'rgba(33, 150, 243, 0.18)'
                    : 'var(--card-background-color)';
                ]]]
            - box-shadow: |
                [[[
                  return states['sensor.borne_ve_api']?.attributes?.mode == 1
                    ? '0 0 10px rgba(33,150,243,0.45)'
                    : 'none';
                ]]]
          icon:
            - color: |
                [[[
                  return states['sensor.borne_ve_api']?.attributes?.mode == 1
                    ? 'var(--primary-color)'
                    : 'var(--primary-text-color)';
                ]]]
          name:
            - font-weight: |
                [[[
                  return states['sensor.borne_ve_api']?.attributes?.mode == 1
                    ? '700'
                    : '500';
                ]]]
      - type: custom:button-card
        name: Manuel
        icon: mdi:hand-back-right
        tap_action:
          action: call-service
          service: script.ve_mode_manuel
        styles:
          card:
            - border-radius: 16px
            - padding: 12px
            - font-size: 14px
            - border: 2px solid
            - border-color: |
                [[[
                  return states['sensor.borne_ve_api']?.attributes?.mode == 2
                    ? 'var(--primary-color)'
                    : 'rgba(150,150,150,0.25)';
                ]]]
            - background-color: |
                [[[
                  return states['sensor.borne_ve_api']?.attributes?.mode == 2
                    ? 'rgba(33, 150, 243, 0.18)'
                    : 'var(--card-background-color)';
                ]]]
            - box-shadow: |
                [[[
                  return states['sensor.borne_ve_api']?.attributes?.mode == 2
                    ? '0 0 10px rgba(33,150,243,0.45)'
                    : 'none';
                ]]]
          icon:
            - color: |
                [[[
                  return states['sensor.borne_ve_api']?.attributes?.mode == 2
                    ? 'var(--primary-color)'
                    : 'var(--primary-text-color)';
                ]]]
          name:
            - font-weight: |
                [[[
                  return states['sensor.borne_ve_api']?.attributes?.mode == 2
                    ? '700'
                    : '500';
                ]]]
  - type: custom:mushroom-number-card
    entity: number.courant_borne_ve_dynamique
    fill_container: false
    layout: horizontal
    secondary_info: state
    primary_info: name
    grid_options:
      columns: 12
      rows: 3
    icon_type: icon
    visibility:
      - condition: state
        entity: sensor.mode_de_fonctionnement_borne_ve
        state: Manuel
  - type: gauge
    entity: sensor.courant_de_charge_ve
    min: 5
    max: 20
    needle: false
    severity:
      green: 0
      yellow: 16
      red: 25
  - type: entities
    entities:
      - entity: sensor.mode_de_fonctionnement_borne_ve
      - entity: binary_sensor.borne_ve_activee
      - entity: sensor.etat_de_la_liaison_ve
      - entity: sensor.recharge_cumulee_ve
      - entity: sensor.temps_de_charge_ve
      - entity: sensor.pwm_borne_ve


il reste un point: en mode SEMI-AUTO, il faut aussi affcher le slidde, car la valeur mini du courant est celle réglé dans le slide.
je vais essayer de le faire.

voici le code pour la card afin que le slidder s'affiche également en mode Semi-auto:


Code :
type: vertical-stack
cards:
  - square: false
    type: grid
    columns: 4
    cards:
      - type: custom:button-card
        name: Arrêt
        icon: mdi:stop-circle
        tap_action:
          action: call-service
          service: script.ve_mode_arret
        styles:
          card:
            - border-radius: 16px
            - padding: 12px
            - font-size: 14px
            - border: 2px solid
            - border-color: |
                [[[
                  return states['sensor.borne_ve_api']?.attributes?.mode == 3
                    ? 'var(--error-color)'
                    : 'rgba(150,150,150,0.25)';
                ]]]
            - background-color: |
                [[[
                  return states['sensor.borne_ve_api']?.attributes?.mode == 3
                    ? 'rgba(244, 67, 54, 0.18)'
                    : 'var(--card-background-color)';
                ]]]
            - box-shadow: |
                [[[
                  return states['sensor.borne_ve_api']?.attributes?.mode == 3
                    ? '0 0 10px rgba(244,67,54,0.45)'
                    : 'none';
                ]]]
          icon:
            - color: |
                [[[
                  return states['sensor.borne_ve_api']?.attributes?.mode == 3
                    ? 'var(--error-color)'
                    : 'var(--primary-text-color)';
                ]]]
          name:
            - font-weight: |
                [[[
                  return states['sensor.borne_ve_api']?.attributes?.mode == 3
                    ? '700'
                    : '500';
                ]]]
      - type: custom:button-card
        name: Auto
        icon: mdi:flash-auto
        tap_action:
          action: call-service
          service: script.ve_mode_auto
        styles:
          card:
            - border-radius: 16px
            - padding: 12px
            - font-size: 14px
            - border: 2px solid
            - border-color: |
                [[[
                  return states['sensor.borne_ve_api']?.attributes?.mode == 0
                    ? 'var(--primary-color)'
                    : 'rgba(150,150,150,0.25)';
                ]]]
            - background-color: |
                [[[
                  return states['sensor.borne_ve_api']?.attributes?.mode == 0
                    ? 'rgba(33, 150, 243, 0.18)'
                    : 'var(--card-background-color)';
                ]]]
            - box-shadow: |
                [[[
                  return states['sensor.borne_ve_api']?.attributes?.mode == 0
                    ? '0 0 10px rgba(33,150,243,0.45)'
                    : 'none';
                ]]]
          icon:
            - color: |
                [[[
                  return states['sensor.borne_ve_api']?.attributes?.mode == 0
                    ? 'var(--primary-color)'
                    : 'var(--primary-text-color)';
                ]]]
          name:
            - font-weight: |
                [[[
                  return states['sensor.borne_ve_api']?.attributes?.mode == 0
                    ? '700'
                    : '500';
                ]]]
      - type: custom:button-card
        name: Semi-auto
        icon: mdi:sync
        tap_action:
          action: call-service
          service: script.ve_mode_semi_auto
        styles:
          card:
            - border-radius: 16px
            - padding: 12px
            - font-size: 14px
            - border: 2px solid
            - border-color: |
                [[[
                  return states['sensor.borne_ve_api']?.attributes?.mode == 1
                    ? 'var(--primary-color)'
                    : 'rgba(150,150,150,0.25)';
                ]]]
            - background-color: |
                [[[
                  return states['sensor.borne_ve_api']?.attributes?.mode == 1
                    ? 'rgba(33, 150, 243, 0.18)'
                    : 'var(--card-background-color)';
                ]]]
            - box-shadow: |
                [[[
                  return states['sensor.borne_ve_api']?.attributes?.mode == 1
                    ? '0 0 10px rgba(33,150,243,0.45)'
                    : 'none';
                ]]]
          icon:
            - color: |
                [[[
                  return states['sensor.borne_ve_api']?.attributes?.mode == 1
                    ? 'var(--primary-color)'
                    : 'var(--primary-text-color)';
                ]]]
          name:
            - font-weight: |
                [[[
                  return states['sensor.borne_ve_api']?.attributes?.mode == 1
                    ? '700'
                    : '500';
                ]]]
      - type: custom:button-card
        name: Manuel
        icon: mdi:hand-back-right
        tap_action:
          action: call-service
          service: script.ve_mode_manuel
        styles:
          card:
            - border-radius: 16px
            - padding: 12px
            - font-size: 14px
            - border: 2px solid
            - border-color: |
                [[[
                  return states['sensor.borne_ve_api']?.attributes?.mode == 2
                    ? 'var(--primary-color)'
                    : 'rgba(150,150,150,0.25)';
                ]]]
            - background-color: |
                [[[
                  return states['sensor.borne_ve_api']?.attributes?.mode == 2
                    ? 'rgba(33, 150, 243, 0.18)'
                    : 'var(--card-background-color)';
                ]]]
            - box-shadow: |
                [[[
                  return states['sensor.borne_ve_api']?.attributes?.mode == 2
                    ? '0 0 10px rgba(33,150,243,0.45)'
                    : 'none';
                ]]]
          icon:
            - color: |
                [[[
                  return states['sensor.borne_ve_api']?.attributes?.mode == 2
                    ? 'var(--primary-color)'
                    : 'var(--primary-text-color)';
                ]]]
          name:
            - font-weight: |
                [[[
                  return states['sensor.borne_ve_api']?.attributes?.mode == 2
                    ? '700'
                    : '500';
                ]]]
  - type: custom:mushroom-number-card
    entity: number.courant_borne_ve_dynamique
    fill_container: false
    layout: horizontal
    secondary_info: state
    primary_info: name
    grid_options:
      columns: 12
      rows: 3
    icon_type: icon
    visibility:
      - condition: or
        conditions:
          - condition: state
            entity: sensor.mode_de_fonctionnement_borne_ve
            state: Manuel
          - condition: state
            entity: sensor.mode_de_fonctionnement_borne_ve
            state: Semi-auto
    display_mode: slider
  - type: gauge
    entity: sensor.courant_de_charge_ve
    min: 5
    max: 20
    needle: false
    severity:
      green: 0
      yellow: 16
      red: 25
  - type: entities
    entities:
      - entity: sensor.mode_de_fonctionnement_borne_ve
      - entity: binary_sensor.borne_ve_activee
      - entity: sensor.etat_de_la_liaison_ve
      - entity: sensor.recharge_cumulee_ve
      - entity: sensor.temps_de_charge_ve
      - entity: sensor.pwm_borne_ve



RE: Intégration du RMS VE à HomeAssistant - Geosr - 27-03-2026

Je t'avoue que j'avais pas passer au mode semi...

Apres cela donne au moins une piste au expert....

Cela fonctionne chez toi?


RE: Intégration du RMS VE à HomeAssistant - grostoto - 27-03-2026

oui, cela fonctionne.

reste un truc que je ne me dépatouille pas:
le pas de réglage est de 1, mais j'aimerais le mettre à 0.1, sauf que cela me met plein de chiffres après la virgule si je met "step: 0.1" dans le fichier yaml.


RE: Intégration du RMS VE à HomeAssistant - Geosr - 27-03-2026

Dans le yaml. Change step: 1 on 0.1

(27-03-2026, 05:33 PM)Rakibou a écrit :
(26-03-2026, 11:03 PM)Geosr a écrit : Loin d’être un expert en programmation, et encore moins en explications, je vous partage ma solution pour intégrer le routeur à Home Assistant.
[...]
Petit bonus : le fichier card.txt est prêt à être collé dans votre dashboard.

Bravo et merci pour cette belle contribution !
Si tu veux on peut ajouter une doc pour les utilisateurs de HA (il n'y en a pas dans l'équipe de développement).

Bah oui avec plaisir. Je vous le refait au propre.... et je vous l'envoie.


RE: Intégration du RMS VE à HomeAssistant - grostoto - 27-03-2026

step: 1 on 0.1
c'est ce que j'ai fais, mais j'ai un comportement étrange de la valeur indiqué par le curseur quand on le bouge.
je vais essayer de limiter l'affichage de la valeur à une décimal (parfois il y en a 10..)


RE: Intégration du RMS VE à HomeAssistant - grostoto - 27-03-2026

en fait il y a besoin du slider aussi en mode auto.. car si on programme les heures creuses, il faut régler le courant..