Enphase Graphique de la production, consommation, import, export

Il m’a été demandé de partager ma carte représentant une reproduction du graphique d’origine d’enphase (enlighten), notamment par @Plouf34 dernièrement sur un autre poste.

:warning: Je précise tout de suite que ce graphique n’est pas de moi à l’origine. Il y a de multiples sujet la dessus.

Voici donc le graphique :
image

Il se réalise avec :

  • une carte apexcharts
  • sensor.envoy_xxxxxxxxxxxx_current_power_consumption
  • sensor.envoy_xxxxxxxxxxxx_current_power_production
  • sensor.pv_puissance_net
  • sensor.pv_puissance_corrigee

Je précise aussi que tous mes sensors sont issus d’un fichier package (solaire.yaml)

Le sensor.envoy_xxxxxxxxxxxx_current_power_consumption est celui que vous avez dans l’intégration enphase. Il correspond à la consommation mesurée par la pince de votre installation.

Le sensor.envoy_xxxxxxxxxxxx_current_power_production est celui que vous avez dans l’intégration enphase. Il correspond à la production mesurée par la pince de votre installation.

Le sensor.pv_puissance_net est la puissance net produite par votre installation. (consommation - production corrigée)

Le sensor.pv_puissance_corrigee est la production coorigée comme ceci :

  • si la production est inférieur à 5W alors j’ai 0 (je considère que je ne produis pas vraiment à ce moment là issue d’observation)
  • si le soleil est sous l’horizon alors là il ne peut y avoir de production lunaire non plus
    Je l’ai obtenue avec ceci :
sensor.pv_puissance_net
      ##########################################################################
      ###                    Puissance net de la maison                      ####
      ##########################################################################
      - name: PV Puissance Net
        state_class: measurement
        unit_of_measurement: W
        device_class: power
        icon: >
          {% if (states("sensor.pv_puissance_net") | int > 0) -%} 
            mdi:solar-panel
          {%- elif (states("sensor.pv_puissance_net") | int < 0) -%}
            mdi:transmission-tower
          {%- else -%}
            mdi:power-off
          {%- endif %}
        state: >
          {% set prod = states('sensor.pv_puissance_corrigee') | int(0) %}
          {% set conso = states('sensor.envoy_xxxxxxxxxxxx_current_power_consumption') | int(0) %}
          {{prod - conso}}
      #####################
sensor.pv_puissance_corrigee
      ##########################################################################
      ###                 Puissance corrigée (0 forcé la nuit)               ####
      ##########################################################################
      - name: PV Puissance corrigée
        state_class: measurement
        icon: mdi:solar-panel
        unit_of_measurement: W
        device_class: power
        state: >
          {% set value = states('sensor.envoy_xxxxxxxxxxxx_current_power_production') | int(0) %}
          {% if value  <= 5 -%}
            0
          {% elif is_state("sun.sun", "below_horizon")%}
            0
          {%else%}
            {{value}}
          {%endif%}

Enfin voici la carte :

apexcharts-card
type: custom:apexcharts-card
graph_span: 24h
stacked: true
header:
  show: true
  title: Consommation Maison
series:
  - entity: sensor.pv_puissance_corrigee
    type: column
    name: Production
    color: '#01B4DE'
    group_by:
      func: avg
      duration: 5min
  - entity: sensor.envoy_xxxxxxxxxxxx_current_power_consumption
    transform: return x *-1
    type: column
    name: Consommation
    color: '#F37320'
    group_by:
      func: avg
      duration: 5min
  - entity: sensor.pv_puissance_net
    type: column
    name: Importée / Exportée
    transform: return x *-1
    color: '#545456'
    group_by:
      func: avg
      duration: 5min

J’espère n’avoir rien oublié sinon je l’ajouterais mes oublis

4 « J'aime »

Bonjour à toi @jerome6994,

Tout d’abord, merci, je cherche une solution sans être tombé sur ton poste jusque là.
Je tente de reproduire ta config seulement, ma config et éclaté entre plusieurs fichiers et quand je tente de créer les sensor comme indiqué j’ai plein d’erreurs

Avertissements de configuration
Invalid config for 'template' from integration 'sensor' at sensor.yaml, line 13: required key 'value_template' not provided
Invalid config for 'template' from integration 'sensor' at sensor.yaml, line 15: 'state_class' is an invalid option for 'sensor.template', check: sensors->pv_puissance_net->state_class
Invalid config for 'template' from integration 'sensor' at sensor.yaml, line 18: 'icon' is an invalid option for 'sensor.template', check: sensors->pv_puissance_net->icon
Invalid config for 'template' from integration 'sensor' at sensor.yaml, line 26: 'state' is an invalid option for 'sensor.template', check: sensors->pv_puissance_net->state
Invalid config for 'template' from integration 'sensor' at sensor.yaml, line 31: required key 'value_template' not provided
Invalid config for 'template' from integration 'sensor' at sensor.yaml, line 33: 'state_class' is an invalid option for 'sensor.template', check: sensors->pv_puissance_corrigee->state_class
Invalid config for 'template' from integration 'sensor' at sensor.yaml, line 34: 'icon' is an invalid option for 'sensor.template', check: sensors->pv_puissance_corrigee->icon
Invalid config for 'template' from integration 'sensor' at sensor.yaml, line 37: 'state' is an invalid option for 'sensor.template', check: sensors->pv_puissance_corrigee->state

Je dois mal l’implémenter voici le fichier sensor.yaml

- platform: template
  sensors:

    # Suivi de la consommation des panneaux solaires
    pv_puissance_net:
      friendly_name: PV Puissance Net
      state_class: measurement
      unit_of_measurement: W
      device_class: power
      icon: >
        {% if (states("sensor.pv_puissance_net") | int > 0) -%} 
          mdi:solar-panel
        {%- elif (states("sensor.pv_puissance_net") | int < 0) -%}
          mdi:transmission-tower
        {%- else -%}
          mdi:power-off
        {%- endif %}
      state: >
        {% set prod = states('sensor.pv_puissance_corrigee') | int(0) %}
        {% set conso = states('sensor.envoy_122250018513_current_power_consumption') | int(0) %}
        {{prod - conso}}

    pv_puissance_corrigee:
      friendly_name: PV Puissance corrigée
      state_class: measurement
      icon: mdi:solar-panel
      unit_of_measurement: W
      device_class: power
      state: >
        {% set value = states('sensor.envoy_122250018513_current_power_production') | int(0) %}
        {% if value  <= 5 -%}
          0
        {% elif is_state("sun.sun", "below_horizon")%}
          0
        {%else%}
          {{value}}
        {%endif%}

Peux-tu m’aider à corriger le souci. je pense pour la valeur de platform mais je ne sais pas trop?

Merci à toi pour ton aide

Ce sont les sources de mon fichier package dans lequel j’ai mis

template:
  - sensor:
    - name:
      …

Donc au lieu de mettre ça dans ton fichier sensor peut être qu’il vaut mieux le mettre dans un fichier template

- sensor:
  - name:
    …

Le résultat est superbe ! Bravo.

Bonjour,

Merci pour ce superbe travail.

Est-il possible d’ajouter un sélecteur de période au graphique journalier ? cela permettrait de visualiser les jours précédents comme sur l’appli Enphase.

Merci