bonjour je vais vous partager mon Utility Meter
Cette intégration permet de connaître ses consommations électriques
1/ matériel :
comptage: PZEM-004t 100a
esp: esp32
J’ai choisi le modèle avec anneau monté directement sur la phase de mon arrivée EDF
2/ flash de l’esp avec esp home
prog
esphome:
name: esp_garage
platform: ESP32
board: esp32doit-devkit-v1
wifi:
networks:
- ssid: "xxxxx"
password: "xxxxxxx"
- ssid: "xxxxxxx"
password: "xxxxxxxxx"
ap:
ssid: "Esp tableau"
password: "xxxxxxxx"
captive_portal:
# Enable logging
logger:
# Enable Home Assistant API
api:
ota:
uart:
- id: ubus1
tx_pin: GPIO1
rx_pin: GPIO3
baud_rate: 9600
stop_bits: 2 #pour un ESP8266, essayer plutôt la valeur 1
time:
platform: sntp
id: my_time
on_time:
- seconds: 57
minutes: 59
hours: 23
then:
- sensor.template.publish:
id: template_Wh_tableau_veille
state: !lambda return id(puissance_tableau_du_jour).state;
sensor:
- platform: pzemac
address: 1
current:
name: "intensite_tableau"
accuracy_decimals: 2
voltage:
name: "tension_tableau"
accuracy_decimals: 2
power:
name: "puissance_tableau"
unit_of_measurement: W
accuracy_decimals: 2
id: puissance_tableau
frequency:
name: "frequence_tableau"
unit_of_measurement: Hz
accuracy_decimals: 2
power_factor:
name: "fi_tableau"
accuracy_decimals: 2
id: fi_tableau
energy:
name: "Wh_tableau"
unit_of_measurement: Wh
accuracy_decimals: 1
id: Wh_tableau
update_interval: 5s
- platform: template
name: "puissance_tableau_cumulee"
unit_of_measurement: "kWh"
accuracy_decimals: 1
update_interval: 5s
icon: mdi:power
lambda: return (( (id(Wh_tableau).state)/1000.0));
- platform: total_daily_energy
name: "Wh_tableau_jour"
power_id: puissance_tableau
unit_of_measurement: "kWh"
accuracy_decimals: 2
id: puissance_tableau_du_jour
filters:
# Multiplication factor from W to kW is 0.001
- multiply: 0.001
icon: mdi:counter
- platform: template
name: "Wh_tableau_veille"
id: template_Wh_tableau_veille
unit_of_measurement: "kwh"
accuracy_decimals: 2
icon: mdi:power
update_interval: 10s
- platform: template
name: "puissance_tableau_apparente"
id: puissance_tableau_apparente
unit_of_measurement: "VA"
accuracy_decimals: 2
update_interval: 10s
icon: mdi:power
lambda: return ( (id(puissance_tableau).state/id(fi_tableau).state));
- platform: template
name: "puissance_tableau_reactive"
id: puissance_tableau_reactive
unit_of_measurement: "VAr"
accuracy_decimals: 2
update_interval: 10s
icon: mdi:power
#lambda: return ( ((id(puissance_tableau_reactive).state)*sin(acos((id(fi_tableau).state))) ) );
lambda: return ( ( sqrt( (id(puissance_tableau_reactive).state)*(id(puissance_tableau_reactive).state) - (id(fi_tableau).state)*(id(fi_tableau).state) ) ) );
- platform: wifi_signal
name: "WiFi puissance_enedis"
update_interval: 10s
- platform: uptime
name: "up"
id: uptime_sec
switch:
- platform: restart
name: "tableau_restart"
binary_sensor:
- platform: status
name: "tableau_status"
text_sensor:
- platform: template
name: enedis_uptime
lambda: |-
int seconds = (id(uptime_sec).state);
int days = seconds / (24 * 3600);
seconds = seconds % (24 * 3600);
int hours = seconds / 3600;
seconds = seconds % 3600;
int minutes = seconds / 60;
seconds = seconds % 60;
return { (String(days) +"d " + String(hours) +"h " + String(minutes) +"m "+ String(seconds) +"s").c_str() };
icon: mdi:clock-start
update_interval: 113s
web_server:
port: 80
3/ fichier configuration.yaml pour utility meter et hp/hc
configuration.yaml
#############################
######## consomation ########
#############################
utility_meter:
energy_total_usage_daily:
source: sensor.wh_tableau_jour
cycle: daily
tariffs:
- hp
- hc
energy_total_usage_weekly:
source: sensor.wh_tableau_jour
cycle: weekly
tariffs:
- hp
- hc
energy_total_usage_monthly:
source: sensor.wh_tableau_jour
cycle: monthly
tariffs:
- hp
- hc
energy_total_usage_yearly:
source: sensor.wh_tableau_jour
cycle: yearly
tariffs:
- hp
- hc
4/ l’automation pour changé les hc et hp
automation
- id: '1622132545289'
alias: mise à jour hc/hp (Dupliquer)
description: ''
trigger:
- platform: time
at:
- '21:00:00'
- '23:00:00'
- '01:30:00'
- '07:30:00'
- platform: homeassistant
event: start
condition: []
action:
- choose:
- conditions:
- condition: template
value_template: '{{ ((states.sensor.time.state >= "07:30") and (states.sensor.time.state
< "21:00")) or ((states.sensor.time.state >= "23:00") or (states.sensor.time.state
< "01:30")) }} '
sequence:
- service: utility_meter.select_tariff
data:
entity_id:
- utility_meter.energy_total_usage_yearly
- utility_meter.energy_total_usage_daily
- utility_meter.energy_total_usage_weekly
- utility_meter.energy_total_usage_monthly
tariff: hp
- conditions:
- condition: template
value_template: '{{ ((states.sensor.time.state >= "21:00") and (states.sensor.time.state
< "23:00")) or ((states.sensor.time.state >= "01:30") and (states.sensor.time.state
< "07:30")) }} '
sequence:
- service: utility_meter.select_tariff
data:
entity_id:
- utility_meter.energy_total_usage_yearly
- utility_meter.energy_total_usage_daily
- utility_meter.energy_total_usage_weekly
- utility_meter.energy_total_usage_monthly
tariff: hc
default: []
mode: single
5/ les petits plus sensor conso , pourcentage etc.
sensor.yaml
#############################
######## conso elec ########
#############################
- platform: template
sensors:
energy_total_daily:
friendly_name: 'Energie journalière consommée'
value_template: "{{ (states('sensor.energy_total_usage_daily_hp')|float + states('sensor.energy_total_usage_daily_hc')|float)|round(2) }}"
unit_of_measurement: "kWh"
[details="sensor.yaml"]
- platform: template
sensors:
energy_total_weekly:
friendly_name: 'Energie hebdo consommée'
value_template: "{{ (states('sensor.energy_total_usage_weekly_hp')|float + states('sensor.energy_total_usage_weekly_hc')|float)|round(2) }}"
unit_of_measurement: "kWh"
- platform: template
sensors:
energy_total_montly:
friendly_name: 'Energie mensuel consommée'
value_template: "{{ (states('sensor.energy_total_usage_monthly_hp')|float + states('sensor.energy_total_usage_monthly_hc')|float)|round(2) }}"
unit_of_measurement: "kWh"
- platform: template
sensors:
energy_total_yearly:
friendly_name: 'Energie annuel consommée'
value_template: "{{ (states('sensor.energy_total_usage_yearly_hp')|float + states('sensor.energy_total_usage_yearly_hc')|float)|round(2) }}"
unit_of_measurement: "kWh"
- platform: template
sensors:
hp_hc:
friendly_name: 'Energie mensuel € hp+hc'
value_template: "{{ ((((states('sensor.energy_total_usage_monthly_hp')|float)*states('input_number.prix_hp')|float) + ((states('sensor.energy_total_usage_monthly_hc')|float)*states('input_number.prix_hc')|float)) + states('input_number.abo_hchp')|float )|round (3)}}"
unit_of_measurement: "€"
- platform: template
sensors:
base:
friendly_name: 'Energie mensuel € base'
value_template: "{{ ((((states('sensor.energy_total_usage_monthly_hp')|float)*states('input_number.prix_base')|float) + ((states('sensor.energy_total_usage_monthly_hc')|float)*states('input_number.prix_base')|float)) + states('input_number.abo_base')|float)|round(3)}}"
unit_of_measurement: "€"
- platform: template
sensors:
mensuel:
friendly_name: 'Energie mensuel '
value_template: "{{states('sensor.energy_total_usage_monthly_hc')}} HC et {{states('sensor.energy_total_usage_monthly_hp')}} HP"
- platform: template
sensors:
hc_hp:
friendly_name: 'pourcentage '
value_template: >-
{% set hchp = (states('sensor.energy_total_usage_monthly_hc')| float) /((states('sensor.energy_total_usage_monthly_hp')| float)+(states('sensor.energy_total_usage_monthly_hc')| float)) %}
{% if hchp <= 1 %}
{{ hchp| round(2)}} % d'heures creuses
{% endif %}
[/details]
les input_number
input_nunber.yaml
#############################
###### tarif edf ##########
#############################
prix_hp:
name: tarif_hp
initial: 0.1707
min: 0
max: 2
unit_of_measurement: €
mode: box
prix_hc:
name: tarif_hc
initial: 0.1257
min: 0
max: 2
unit_of_measurement: €
mode: box
prix_base:
name: tarif_base
initial: 0.1507
min: 0
max: 2
unit_of_measurement: €
mode: box
abo_base:
name: abo_base
initial: 12.67
min: 10
max: 20
unit_of_measurement: €
mode: box
abo_hchp:
name: abo_hphc
initial: 15.14
min: 10
max: 20
unit_of_measurement: €
mode: box
6/ le résultat