Comment faire la somme de tous les panneaux solaires

Bonjour,
Je voudrais faire la somme des productions de tous mes panneaux solaires dans un modèle.
Je essayé ce code

{% set total = 0 %}
{% for state in states.sensor %}
    {% if "inverter" in state.entity_id %}
      {{- state.entity_id }} - {{ state.state-}}
        {% set total = total + state.state | float %}
    {% endif %}
{% endfor %}
Total: {{ total }}

Les panneaux sont bien listés avec la valeur de production mais le résultat est toujours égal à 0…
Quelqu’un saurait-il ou est mon erreur?
Merci

Salut,

Il y a pleins de trucs à améliorer dans ce code, mais ta problématique directe c’est que tu n’utilise pas de namespace pour stocker ton total… Donc à la sortie de boucle, la somme est oubliée et donc affiche 0
Un exemple (autre) d’utilisation du namespace

Après quelques remarques:

  • faire toute la liste de tous tes sensors, c’est long, passe par un groupe ou un liste, ça sera plus efficace.
  • les float tout court sans valeur par défaut, ça va te poser des soucis. C’est obligatoire depuis au moins 3 ans dans HA
  • Faire la somme de la production c’es taussi faisable dans la carte energy…

Tu n’es pas obligé de faire une boucle toi-même.

Dans Home Assistant, section Settings > Devices & Services > Helpers (en anglais chez moi, mais je pense que tu situes si tu as l’interface en français), tu peux créer un nouveau « Helper » en bas à droite. Le type qui t’intéresse, c’est « Combiner l’état de plusieurs capteurs »:

Une fois dans la fenêtre de création tu comprendras tout de suite, tu choisis « Somme » comme type de combinaison, et plus qu’à choisir tes panneaux. Tu peux même le faire en 2 fois si tu veux des sous-totaux, par exemple si tu as plusieurs champs.

Le résultat sera un « faux capteur » qui représente à tout moment la somme de tes panneaux. Tu pourras donc l’utiliser partout où tu mettrais un capteur normal. Je pense même que HA infère l’unité, donc tu n’as pas besoin de la mettre.

Merci à tous
Mon code était aussi du ChatGPT lol
Comme quoi il faut s’en méfier.
J’avais fait la somme des panneaux existants dans un modele. Le problème est que si je rajoute d’autres panneaux je vais devoir modifier ce modèle alors qu’avec une boucle il n’y en a pas besoin.
La somme dans un capteur qui combine plusieurs capteurs ne garde pas la classe et ne peut pas être utilisé dans le tableau énergie.
Je vais creuser cette histoire du namespace et reste avec le modèle pour l’instant.

Dans la même veine, je fais la somme de tous les capteurs qui ont un label particulier. Du coup pour ajouter un capteur dans la somme, il suffit de lui mettre un label. C’est ultra-pratique :

sensor:
    - name: "Total puissance chargeur EV"
      icon: mdi:ev-station
      unique_id: total_puissance_chargeur_ev
      unit_of_measurement: "W"
      state_class: "measurement"
      device_class: power
      state: >
        {%- set ns = namespace(sensors=[], total_power=0)  -%}
        {%- set list = label_entities('puissance_chargeur_ev') -%}
        {%- for item in list -%}
            {%- if is_number(states(item) | float(0)) -%}
                  {%- set ns.total_power = ns.total_power + [(states(item) | float(0)), 0] | max -%}
            {%- endif -%}
        {%- endfor -%}
        {{ ns.total_power }}

La ligne qui fait tout:
{%- set list = label_entities(‹ puissance_chargeur_ev ›) -%}

C’est exactement ce que je veux faire
Merci

1 « J'aime »