Création d'un compteur jour et un compteur nuit

Bonjour,

J’essaye de créer un compteur électrique qui reprendrait les données de mon vrai compteur électrique (le physique, celui qui est à la cave).
J’ai donc créé un template et un utility_meter.
Afin de faire changer le compteur sur le compteur jour ou le compteur nuit, j’ai aussi créé une automation.
Tout fonctionne sauf les compteurs. En effet, sur mon aperçu, le compteur reste avec une valeur inconnue.
Voici le code pour les compteur et utility_meter :

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('sensor.daily_energy', 'peak') %}
          {{ (states('sensor.shelly_compteur_total_active_energy') | float(0) + 14995.46) | round(2) }}
        {% else %}
          {{ states('sensor.compteur_jour') | float(0) }}  # 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'] }}"
    - name: "Compteur nuit (kWh)"
      unit_of_measurement: "kWh"
      device_class: "energy"
      state_class: "total_increasing"
      state: >
        {% if is_state('sensor.daily_energy', 'offpeak') %}
          {{ (states('sensor.shelly_compteur_total_active_energy') | float(0) + 11622.05) | round(2) }}
        {% else %}
          {{ states('sensor.compteur_nuit') | float(0) }}  # 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'] }}"

Et voici les automations :

- id: '1723884788347'
  alias: Changer Tarif Heure Pleine
  description: ''
  trigger:
  - platform: time
    at: 07:00:00
  condition: []
  action:
  - target:
      entity_id: utility_meter.daily_energy
    data:
      tariff: peak
    action: utility_meter.select_tariff
  mode: single
- id: '1723884925149'
  alias: Changer Tarif Heure Creuse
  description: ''
  trigger:
  - platform: time
    at: '22:00:00'
  condition:
  - condition: or
    conditions:
    - condition: state
      entity_id: binary_sensor.workday_sensor
      attribute: excludes
      state: 'on'
  action:
  - target:
      entity_id: utility_meter.daily_energy
    data:
      tariff: offpeak
    action: utility_meter.select_tariff
  mode: single

Pouvez-vous m’aider à résoudre mon problème ?
Ce que je souhaite, c’est une valeur pour les compteurs jour et nuit et que ceux-ci cumulent l’énergie en fonction du tarif.
Aujourd’hui, c’est du tarif nuit, donc le compteur nuit doit augmenter mais pas celui du jour.
Merci pour votre aide.


System Information

version core-2024.8.2
installation_type Home Assistant OS
dev false
hassio true
docker true
user root
virtualenv false
python_version 3.12.4
os_name Linux
os_version 6.6.44-haos
arch x86_64
timezone Europe/Brussels
config_dir /config
Home Assistant Community Store
GitHub API ok
GitHub Content ok
GitHub Web ok
GitHub API Calls Remaining 5000
Installed Version 1.34.0
Stage running
Available Repositories 1385
Downloaded Repositories 14
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 13.0
update_channel stable
supervisor_version supervisor-2024.08.0
agent_version 1.6.0
docker_version 26.1.4
disk_total 30.8 GB
disk_used 18.4 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 Matter Server (6.4.1), Samba Backup (5.2.0), Studio Code Server (5.15.0), Terminal & SSH (9.14.0), OpenThread Border Router (2.9.1), UniFi Network Application (3.2.0), ZeroTier One (0.18.0), Cloudflared (5.1.17), Node-RED (18.0.5)
Dashboards
dashboards 5
resources 5
views 14
mode storage
Recorder
oldest_recorder_run 12 août 2024 à 15:06
current_recorder_run 17 août 2024 à 11:57
estimated_db_size 522.24 MiB
database_engine sqlite
database_version 3.45.3

Bonjour,

un exemple avec utility meter:

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

et l’automatisation pour changer le tarif:

automation:
  trigger:
    - platform: time
      at: "09:00:00"
      variables:
        tariff: "peak"
    - platform: time
      at: "21:00:00"
      variables:
        tariff: "offpeak"
  action:
    - 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 }}"

Je ne sais pas où t’a trouvé l’action utility_meter.select_tariff ?
elle n’existe pas.
image

c’est avec select.select_option:
image

Merci.
J’avais presque tout bon :wink:
A vrai dire, j’avais un code que jai mis dans une IA et elle me l’a corrigé.
Je corrige donc cela et je vois ce que cela donne.

1 « J'aime »

J’ai donc corrigé. Actuellement, le tarif reste bien sur offpeak.
A voir lors du prochain jour férié belge si le tarif sera aussi sur offpeak.
Concernant mes compteurs jour et nuit, qui devrait refléter l’état de mon compteur électrique (non, ce n’est pas un linksy), les valeurs restent toujours sur ‹ inconnu ›.
Que puis-je faire pour corriger mon code ci-dessus afin que ces compteurs fonctionnent ?

Salut

state: >
        {% if is_state('sensor.daily_energy', 'peak') %}

Je ne pense pas que le state de ton sensor.daily_energy soit peak ou offpeak donc forcement ton sensor compteur reste sur inconnu.

OK, et comment puis-je résoudre cela ?
Je ne connais pas toute les arcanes du yaml et je découvre.
En faisant cela, je comprend ce qu’il se passe et je peux ensuite le reproduire pour une autre chose car je saurai pourquoi et comment.
Merci pour ton aide.

Je n’utilise pas ces histoires de peak et offpeak dans mes utility meters.
Cependant à la vue de ce qu’a mis @WarC0zes comme code, tu n’aurais pas dans une entité nommée select.daily_energy qui stockerai justement peak et offpeak ?

En plus je viens de regarder et c’est dans la doc également:

The select.daily_energy and select.monthly_energy select entities will track the current tariff and allow changing the tariff.

C’est bien le cas, en utilisant utility meter. Chez moi j’ai nommé hp et hc pour le peak et offpeak. Tu as bien deux entités pour le hp et hc.

et mon template pour le calcul:

      - name: 'Energie vmc mensuel consommée'
        unique_id: energy_vmc_total_montly
        unit_of_measurement: "Wh"
        state: "{{ (states('sensor.energie_mensuelle_vmc_hp')|float(0) + states('sensor.energie_mensuelle_vmc_hc')|float(0))|round(2) }}"
        availability: "{{ states('sensor.energie_mensuelle_vmc_hp')|is_number and states('sensor.energie_mensuelle_vmc_hc')|is_number }}"
      - name: 'Energie vmc mensuel € hp+hc'
        unique_id: energy_vmc_cout_montly
        unit_of_measurement: "€"
        state: "{{ (((states('sensor.energie_mensuelle_vmc_hp')|float(0))*states('input_number.box_prix_hp')|float(0)) + ((states('sensor.energie_mensuelle_vmc_hc')|float(0))*states('input_number.box_prix_hc')|float(0))) /1000 |round(3) }}"
        availability: "{{ states('sensor.energie_mensuelle_vmc_hp')|is_number and states('sensor.energie_mensuelle_vmc_hc')|is_number and states('input_number.box_prix_hp')|is_number and states('input_number.box_prix_hc')|is_number }}"

J’utilise deux input_number pour le prix du hp et hc.

Merci pour votre aide et conseils.
Cela fonctionne, j’ai ceci :

Par contre, je pense qu’on ne se comprend pas bien sur mon souhait.
Pour ma consommation d’eau, j’ai fait un compteur comme ceci :

template:
  - sensor:
    - name: "Compteur d'eau froide (m³)"
      unit_of_measurement: "m³"
      device_class: "water"
      state_class: "total_increasing"
      state: "{{ states('sensor.eau_froide_energy')|float(0) + 427.743 | round(3)}}"
      availability: "{{ states('sensor.eau_froide_energy') not in ['none', 'unknown', 'unavailable'] }}"
    - name: "Compteur d'eau froide (L)"
      unit_of_measurement: "L"
      device_class: "water"
      state_class: "total_increasing"
      state: "{{ states('sensor.eau_froide_energy')|float(0) * 1000}}"
      availability: "{{ states('sensor.eau_froide_energy') not in ['none', 'unknown', 'unavailable'] }}"

J’ai donc un relevé d’eau pour ma consommation quotidienne et un autre relevé qui correspond à mon compteur d’eau. Compteur qui sert à payer le distributeur.

Je cherche donc à faire la même chose pour mon compteur électrique. Ce compteur est un compteur analogique bi-horaire, donc avec un tarif nuit/week-end/JF et un tarif jour.

Je souhaite faire cela car de cette manière, je peux avoir le relevé de mes compteurs dans mon HA et je ne devrais plus aller relever tout mes compteurs lorsque nécessaire.
C’est donc cette dernière partie qui ne fonctionne pas actuellement.

Si si j’ai bien compris ce que tu veux faire

actuellement tu as :

state: >
        {% if is_state('sensor.daily_energy', 'peak') %}

et si tu essayais avec :

state: >
        {% if is_state('select.daily_energy', 'peak') %}
1 « J'aime »

Merci. Cela semble fonctionner correctement.
A voir lundi, si la bascule se fait sur le compteur jour.

En attendant, je souhaite rajouter une petite chose. J’ai un panneau solaire et parfois, il y a de la réinjection sur le réseau. Comment introduire cette données en tenant compte des peak et offpeak puisque le we et jours fériés sont des offpeak et qu’il arrive que je réinjecte ces jours-là aussi.
Est-ce simplement un calcul ou faut-il faire autre chose ?
Voici le capteur qui fait la chose : sensor.shelly_compteur_total_active_returned_energy

Bonjour,
Finalement, cela ne fonctionne pas car actuellement, c’est toujours le compteur nuit qui tourne et c’est toujours le tarif off-peak qui est sélectionné alors que cela devrait être le compteur jour avec le tarif peak.
Une idée pour m’aider à résoudre ce problème ?
Merci pour votre aide.

Je me répond à moi-même, j’ai trouvé la solution.
Le problème était au niveau de mes automations.
Maintenant, cela fonctionne nickel.