Compteur pas correct

Bonjour,

Voici mon code :

utility_meter:
  daily_energy:
    source: sensor.shelly_compteur_total_active_energy
    name: "Consommation Énergie Quotidienne"
    cycle: daily
    tariffs:
      - peak
      - offpeak

  monthly_energy:
    source: sensor.shelly_compteur_total_active_energy
    name: "Consommation Énergie Mensuelle"
    cycle: monthly
    tariffs:
      - peak
      - offpeak

template:
  - sensor:
    - name: "Compteur jour (kWh)"
      unit_of_measurement: "kWh"
      device_class: "energy"
      state_class: "total_increasing"
      state: >
        {% if is_state('select.daily_energy', 'peak') %}
          {{ (states('sensor.shelly_compteur_total_active_energy') | float(0) | round(3)) }}
        {% else %}
          {{ (states('sensor.compteur_jour') | float(0) | round(3)) }}  # Ne pas changer la valeur si ce n'est pas un jour peak
        {% endif %}
      availability: "{{ states('sensor.shelly_compteur_total_active_energy') not in ['none', 'unknown', 'unavailable', 'Inconnu'] }}"
    - name: "Compteur nuit (kWh)"
      unit_of_measurement: "kWh"
      device_class: "energy"
      state_class: "total_increasing"
      state: >
        {% if is_state('select.daily_energy', 'offpeak') %}
          {{ (states('sensor.shelly_compteur_total_active_energy') | float(0) | round(3)) }}
        {% else %}
          {{ (states('sensor.compteur_nuit') | float(0) | round(3)) }}  # Ne pas changer la valeur si ce n'est pas un jour offpeak
        {% endif %}
      availability: "{{ states('sensor.shelly_compteur_total_active_energy') not in ['none', 'unknown', 'unavailable', 'Inconnu'] }}"
[/details]

Les compteurs fonctionnent correctement avec les changements peak et nopeak.
Le problème est le suivant :
Le compteur jour va enregistrer pendant le peak. Lors du changement vers le nopeak, le compteur jour devrait avoir la valeur X et le compteur nuit, une valeur Y. Au changement, c’est la valeur Y qui commence à augmenter et la valeur X qui est figée jusqu’au prochain changement.

Sauf, qu’en réalité, ce qu’il se passe est tout autre.
La valeur X est transférée vers le compteur nuit et continue à augmenter sur le compteur nuit au lieu du jour.

Comment faire pour qu’au changement peak/nopeak, la valeur X du jour se fige et que le compteur nuit reprenne là où il s’était arrêté avec la valeur Y ?

J’espère être clair dans ma demande, sinon, n’hésitez pas à demander plus de précisions.

Merci pour votre aide.


Mon système :

System Information

version core-2025.5.3
installation_type Home Assistant OS
dev false
hassio true
docker true
user root
virtualenv false
python_version 3.13.3
os_name Linux
os_version 6.12.23-haos
arch x86_64
timezone Europe/Brussels
config_dir /config
Home Assistant Community Store
GitHub API ok
GitHub Content ok
GitHub Web ok
HACS Data ok
GitHub API Calls Remaining 5000
Installed Version 2.0.5
Stage running
Available Repositories 2012
Downloaded Repositories 18
Home Assistant Cloud
logged_in false
can_reach_cert_server ok
can_reach_cloud_auth ok
can_reach_cloud ok
Home Assistant Supervisor
host_os Home Assistant OS 15.2
update_channel stable
supervisor_version supervisor-2025.05.3
agent_version 1.7.2
docker_version 28.0.4
disk_total 70.2 GB
disk_used 19.7 GB
healthy true
supported true
host_connectivity true
supervisor_connectivity true
ntp_synchronized true
virtualization kvm
board ova
supervisor_api ok
version_api ok
installed_addons Samba Backup (5.2.0), Studio Code Server (5.19.3), Terminal & SSH (9.17.0), Matter Server (8.0.0), OpenThread Border Router (2.13.0), UniFi Network Application (4.1.0), Node-RED (19.0.2), ESPHome Device Builder (2025.5.2), Cloudflared (5.3.2)
Dashboards
dashboards 5
resources 10
views 16
mode storage
Network Configuration
adapters lo (disabled), enp0s18 (enabled, default, auto), docker0 (disabled), hassio (disabled), veth1698358 (disabled), vethcf0f17d (disabled), vethaf1c3b5 (disabled), veth154e78d (disabled), veth8db1d30 (disabled), veth117fa11 (disabled), veth908eba8 (disabled), vethb94a62c (disabled), vethfe7002d (disabled), veth536cd10 (disabled), vetheec3b71 (disabled)
ipv4_addresses lo (127.0.0.1/8), enp0s18 (192.168.48.170/24), docker0 (172.30.232.1/23), hassio (172.30.32.1/23), veth1698358 (), vethcf0f17d (), vethaf1c3b5 (), veth154e78d (), veth8db1d30 (), veth117fa11 (), veth908eba8 (), vethb94a62c (), vethfe7002d (), veth536cd10 (), vetheec3b71 ()
ipv6_addresses lo (::1/128), enp0s18 (fd77:531f:42a1:e549:fd61:f595:1c11:c718/64, fe80::243e:549b:3668:eb93/64), docker0 (fe80::a84b:9fff:fe44:910a/64), hassio (fe80::80ce:47ff:fe49:ef7d/64), veth1698358 (fe80::2c9c:9aff:fe19:e727/64), vethcf0f17d (fe80::6cc2:55ff:fe09:1686/64), vethaf1c3b5 (fe80::cab:e1ff:fe61:ad9c/64), veth154e78d (fe80::6450:2cff:fe25:745b/64), veth8db1d30 (fe80::1418:2ff:fe1b:d2f9/64), veth117fa11 (fe80::4c3d:10ff:fe88:413e/64), veth908eba8 (fe80::7073:c9ff:fe62:4aab/64), vethb94a62c (fe80::f4e5:9eff:fe6d:7fae/64), vethfe7002d (fe80::2c83:4dff:fef0:6d6b/64), veth536cd10 (fe80::d86b:10ff:fe1b:b7cb/64), vetheec3b71 (fe80::3cdb:83ff:fe2a:983/64)
announce_addresses 192.168.48.170, fd77:531f:42a1:e549:fd61:f595:1c11:c718, fe80::243e:549b:3668:eb93
Recorder
oldest_recorder_run 25 mai 2025 à 15:14
current_recorder_run 4 juin 2025 à 16:28
estimated_db_size 1145.70 MiB
database_engine sqlite
database_version 3.48.0

salut,

il semble que tu besoin de maintenir l’état des compteurs jour et nuit indépendamment l’un de l’autre, de sorte que lorsque tu passe de « peak » à « offpeak » (ou vice versa), le compteur qui devient inactif conserve sa dernière valeur, tandis que l’autre reprend là où il s’était arrêté.

tu peut utiliser des variables pour stocker les valeurs des compteurs jour et nuit lorsque il change de tarif. tu peut le faire en utilisant des entités input_number pour stocker ces valeurs.

revoir aussi ta structure template , et crée des automatisations pour mettre à jour la valeur du compteur lors du passage de « peak » à « offpeak » (et vice versa)

En effet, dans le scénario actuel, sensor.shelly_compteur_total_active_energy continue à croitre en continu. Du coup, par exemple, si au moment du passage à « offpeak », ce sensor est à 100, tu auras ton compteur jour = 100. Ensuite, tant que tu es en « offpeak », tu peux maintenir ton compteur jour à 100, mais pendant ce teamps, le sensor du Shelly continue à augmenter… du coup, la prochaine fois que ton select.daily_energy repasse à « Peak », ton compteur jour va reprendre la valeur actuelle du Shelly. Je ne panse pas que c’est ce que tu veux.
Une solution serait peut-être de stocker dans ton compteur jour la valeur du shelly en « peak » et la valeur du shelly moins le compteur nuit lorsque tu es « offpeak ». Même chose pour le compteur nuit, qui prendra la valeur du shelly en « offpeak » et la valeur du Shelly mois ne compteur jour pendant les périodes « peak ».

Tu as effectivement compris ce que je voulais faire.
Par contre, peux-tu m’aider dans la réalisation de cette affaire, svp ? Je ne m’y connais pas beaucoup même si je comprend ce que je fais.

Salut
Pourtant il suffit de suivre la doc

tu crée ton utility meter jour et mois et sensuite l’automatisation qui fait la bascule entre jour et nuit.

@Krull56 sors de ce corps :joy:

2 « J'aime »

voila une correction de ce que tu avis déjà fait pour implémenter cette logique

Le template :

template:
  - sensor:
      - name: "Compteur jour (kWh)"
        unit_of_measurement: "kWh"
        device_class: "energy"
        state_class: "total_increasing"
        state: >
          {% if is_state('input_select.daily_energy', 'peak') %}
            {{ states('sensor.daily_energy_peak') | float(0) | round(3) }}
          {% else %}
            {{ states('input_number.compteur_jour_value') | float(0) | round(3) }}
          {% endif %}
        availability: "{{ states('sensor.shelly_compteur_total_active_energy') not in ['none', 'unknown', 'unavailable', 'Inconnu'] }}"

      - name: "Compteur nuit (kWh)"
        unit_of_measurement: "kWh"
        device_class: "energy"
        state_class: "total_increasing"
        state: >
          {% if is_state('input_select.daily_energy', 'offpeak') %}
            {{ states('sensor.daily_energy_offpeak') | float(0) | round(3) }}
          {% else %}
            {{ states('input_number.compteur_nuit_value') | float(0) | round(3) }}
          {% endif %}
        availability: "{{ states('sensor.shelly_compteur_total_active_energy') not in ['none', 'unknown', 'unavailable', 'Inconnu'] }}"

utility_meter pour suivre la consommation avec les tarifs « peak » et « offpeak »

utility_meter:
 daily_energy:
   source: sensor.shelly_compteur_total_active_energy
   name: "Consommation Énergie Quotidienne"
   cycle: daily
   tariffs:
     - peak
     - offpeak

 monthly_energy:
   source: sensor.shelly_compteur_total_active_energy
   name: "Consommation Énergie Mensuelle"
   cycle: monthly
   tariffs:
     - peak
     - offpeak

ici les imput_*

input_select:  #Utilisé pour basculer entre les tarifs "peak" et "offpeak"
  daily_energy:
    name: "Tarif Énergie Quotidien"
    options:
      - peak
      - offpeak
    initial: peak

input_number:  #Utilisé pour stocker les valeurs des compteurs jour et nuit lorsque le tarif change.
  compteur_jour_value:
    name: "Valeur du compteur jour"
    initial: 0
    min: 0
    max: 100000
    step: 0.001

  compteur_nuit_value:
    name: "Valeur du compteur nuit"
    initial: 0
    min: 0
    max: 100000
    step: 0.001

les scripts pour les mise a jours en automations:

alias: Mettre à jour  "offpeak"
trigger:
  platform: state
  entity_id: input_select.daily_energy
  to: offpeak
action:
  service: input_number.set_value
  target:
    entity_id: input_number.compteur_jour_value
  data:
    value: "{{ states('sensor.compteur_jour_kwh') | float(0) }}"

alias: Mettre à jour "peak"
trigger:
  platform: state
  entity_id: input_select.daily_energy
  to: peak
action:
  service: input_number.set_value
  target:
    entity_id: input_number.compteur_nuit_value
  data:
    value: "{{ states('sensor.compteur_nuit_kwh') | float(0) }}"

avec ça tu devrais obtenir ce que tu cherchais a faire .

C’est bien compliqué tout ça alors qu’il faut juste un utility_meter et l’automatisation qui bascule entre jour et nuit.

utility_meter:
  daily_energy:
    source: sensor.energy
    name: Daily Energy
    cycle: daily
    tariffs:
      - peak
      - offpeak
  monthly_energy:
    source: sensor.energy
    name: Monthly Energy
    cycle: monthly
    tariffs:
      - peak
      - offpeak
automation:
  triggers:
    - trigger: time
      at: "09:00:00"
      variables:
        tariff: "peak"
    - trigger: time
      at: "21:00:00"
      variables:
        tariff: "offpeak"
  actions:
    - action: select.select_option
      target:
        entity_id: select.daily_energy
      data:
        option: "{{ tariff }}"
    - action: select.select_option
      target:
        entity_id: select.monthly_energy
      data:
        option: "{{ tariff }}"
1 « J'aime »

a l’époque j’avais pris exemple sur ce tuto pour le téléinfo linky donc je m’était baser sur ça :blush:

Merci mais je pense que cela ne fonctionnera pas dans mon cas car je suis en Belgique et le tarif offpeak fonctionne de 22 à 7h chaque jour de la semaine, de 22h le vendredi au lundi 7h (donc tout le mwe) ainsi que toute la journée des jours fériés.
C’est pour cela que le peak et offpeak sont changé avec Jour de travail.

Merci à toi, je vais décanter tout cela et essayé de le mettre en place.

Je pense qu’en mettant les bon triggers (en passant par des templates) tu dois arriver au résultat que tu veux.

Bien, j’ai mis tout cela en place.
Comme chaque compteur, qui doivent refléter mon compteur électrique, avait déjà des valeurs, j’ai donc mis une valeur initiale pour le compteur nuit. Cette dernière apparaît bien correctement mais durant la nuit, cette dernière n’a pas changé. Il est vrai que je n’ai pas contrôlé si le système était bien passé en offpeak. Après contrôle des automations, elles n’ont pas changé. Elles n’ont jamais été appliquées.

Par contre, hier soir, j’ai mis la valeur du compteur jour en valeur initiale puisque le compteur était passé en mode nuit. Là aussi, la valeur n’apparaît pas. Pire, ce matin, elle repartait de zéro.

Qu’est-ce qui cloche ?

Pour @Tochy, sorry mais je ne vois pas comment mettre les triggers correctement vu la complexité des changement chez moi. C’est donc, comme je l’ai dit plus haut, le service ‹ jour de travail › qui régit cela.

Ils ne sont pas si complexe que ça tes changements. Il faut juste chercher un peu comment on pourrai faire.

  • A 22h on passe en heures creuses
  • A 7h on passe en heures pleines si ce n’est pas le week end ou un jour férié sinon on reste en heures creuses

Il faut donc créer un trigger qui respectent ces conditions.
1- On crée un input_boolean (input_boolean.trigger_hp_hc) qui servira de trigger pour l’automatisation donnée dans la doc
2- On crée une automatisation qui change l’état de cet input_boolean en fonction des conditions énoncées au dessus :

alias: Automatisation bascule trigger hp/hc
description: ""
triggers:
  - trigger: time
    at: "07:00:00"
    id: 7h
  - trigger: time
    at: "22:00:00"
    id: 22h
conditions: []
actions:
  - choose:
      - conditions:
          - condition: trigger
            id:
              - 7h
          - condition: state
            entity_id: binary_sensor.workday_sensor
            state: "on"
        sequence:
          - action: input_boolean.turn_on
            metadata: {}
            data: {}
            target:
              entity_id: input_boolean.trigger_hp_hc
      - conditions:
          - condition: trigger
            id:
              - 7h
          - condition: state
            entity_id: binary_sensor.workday_sensor
            state: "off"
        sequence:
          - action: input_boolean.turn_off
            metadata: {}
            data: {}
            target:
              entity_id: input_boolean.trigger_hp_hc
      - conditions:
          - condition: trigger
            id:
              - 22h
        sequence:
          - action: input_boolean.turn_off
            metadata: {}
            data: {}
            target:
              entity_id: input_boolean.trigger_hp_hc
mode: single

3- On reprends la doc et on met les bons triggers :

utility_meter:
  daily_energy:
    source: sensor.energy
    name: Daily Energy
    cycle: daily
    tariffs:
      - peak
      - offpeak
automation:
  triggers:
    - trigger: state
      entity_id:
        - input_boolean.trigger_hp_hc
      to: "on"
      variables:
        tariff: "peak"
    - trigger: state
      entity_id:
        - input_boolean.trigger_hp_hc
      to: "off"
      variables:
        tariff: "offpeak"

  actions:
    - action: select.select_option
      target:
        entity_id: select.daily_energy
      data:
        option: "{{ tariff }}"

J’ai pas testé bien sur mais il n’y a aucune raison que ça ne fonctionne pas.
Quand input_boolean.trigger_hp_hc sera activé on passera en HP et quand il sera désactivé au basculera en HC

Merci pour ton aide.
Je vais tester cela.
A voir

J’ai laissé tourner l’automatisation du trigger


On voit qu’aujourd’hui (samedi) le trigger est resté désactivé à 7h ouisque qu’on est en weekend.

1 « J'aime »