10/03/2024 - correction d’une typo pour la création de la base dans influxdb (crédits à @bertrand_34160 )
24/01/2024 - Attention ce tuto commence à dater un peu et certaines références aux sensors doivent être ajustées avec ce que vous verrez dans l’interface des états + votre PDL doit être écrit avec des guillemets comme l’indique maintenant la doc officielle.
23/01 - Maj des screenshots / code de la carte EDF et ajout des screens infludb
29/08 - Maj de la définition du sensor myelectricaldata_yesterdayconsumptionmaxpower en rajustant les majuscules utilisées pour l’attribut
07/06 - *Attention les sensors tels que présentés ne fonctionneront plus avec la dernière version de MyElectricalData ; le nouveau format ressemble à {{ states.sensor.linky_XX_consumption… vous trouverez dans ce fil beaucoup de questions et exemples sur comment faire - bonne découverte ! *
Je me suis lancé dans l’aventure de la domotique il y a quelques semaines et après avoir passé beaucoup d’heures à ‹ jouer › avec Home Assistant, UI minimalist et Myelectricaldata je me suis dit que partager ici ma petite expérience pourra aider d’autres personnes qui débutent. Egalement, un GRAND merci à toutes celles zé ceux qui ont répondu avec bienveillance à mes questions de newbee ( @ClassicRed, @Galadan , @Stef33fr…). Voici donc ma modeste contribution…:
-
Avant toute chose (et surtout pour éviter de devoir tout reinstaller): faites une sauvegarde AVANT d’installer ou vous lancer dans des grosses modifs ! Cela n’arrive pas qu’aux autres ^^ Et prenez votre temps pour lire les procédures d’installation proposées par chacun(es) des auteurs des add-ons et intégrations. Chaque ligne est importante
!!
-
Installez Studio code server - ce sera votre éditeur de fichiers préféré !
-
Installez HACS: [Article] Installer HACS sur Home Assistant et profiter d'un magasin alternatif
-
Installez MQTT - Mosquitto et créez un utilisateur mqtt + mdp dans l’interface home assistant
-
Installez SSH & Web Terminal - vous en aurez besoin à un moment ou un autre
-
Installez Samba Share - cela aide pour copier directement des fichiers
-
Si tout fonctionne c’est le moment de faire une sauvegarde ^^
-
Installez ApexCharts ==> GitHub - RomRider/apexcharts-card: 📈 A Lovelace card to display advanced graphs and charts based on ApexChartsJS for Home Assistant
-
Installez Influxdb (normalement la version proposée par défaut est celle < 2.0), créez une database myelectricaldata puis créez un utilisateur dans l’interface Infludb (par exemple myelectricaldata avec mdp = myelectricaldata) a qui vous donnez tous les accés - voici quelques copies d’écran préparées par @ClassicRed pour vous aider:
-
Il va nous falloir les data, pour cela il faut installer Myelectricaldata: GitHub - MyElectricalData/myelectricaldata_import prenez bien le temps de tout lire et suivre pas à pas toutes les explications / procédures. Rien de bien compliqué, juste ne pas aller trop vite
-
voici ma version du fichier de config.yaml qui fonctionne parfaitement (grâce aux conseils et aide de @ClassicRed
Attention ma config electrique est en HC/HP si vous n’avez pas ce type de contrat remplacer dans la section plan: HP/HC par Base
cycle: 14400
debug: false
home_assistant:
card_myenedis: true
discovery_prefix: homeassistant
enable: true
influxdb:
bucket: "myelectricaldata/autogen"
enable: true
hostname: a0d7b954-influxdb
method: synchronous
org: "-"
port: 8086
token: myelectricaldata:myelectricaldata
batching_options:
batch_size: 1000
flush_interval: 1000
jitter_interval: 0
retry_interval: 5000
max_retry_time: 180_000
max_retries: 5
max_retry_delay: 125_000
exponential_base: 2
mqtt:
client_id: myelectricaldata
enable: true
hostname: core-mosquitto
port: 1883
username: "mqtt"
password: "mqtt"
prefix: myelectricaldata
retain: true
qos: 0
myelectricaldata:
*Votre numéro de PDL ici*:
activation_date_daily: ""
activation_date_detail: ""
cache: true
consumption: true
consumption_detail: true
consumption_detail_max_date: "2021-01-01"
consumption_max_date: "2021-01-01"
consumption_price_base: "0.1415"
consumption_price_hc: "0.0984"
consumption_price_hp: "0.1315"
enable: true
name: "Le Nom de votre Maison"
offpeak_hours_0: "22H24-06H24"
offpeak_hours_1: "22H24-06H24"
offpeak_hours_2: "22H24-06H24"
offpeak_hours_3: "22H24-06H24"
offpeak_hours_4: "22H24-06H24"
offpeak_hours_5: "22H24-06H24"
offpeak_hours_6: "22H24-06H24"
plan: HC/HP
production: false
production_detail: false
production_detail_max_date: ""
production_max_date: ""
production_price: 0
refresh_addresse: true
refresh_contract: true
token: <token obtenu après avoir suivit la procédure d'installation de MyElectrical data >
- une petite sauvegarde si tout fonctionne ? et si vous avez des soucis je vous recommande d’aller lire ce fil MyElectricalData - Vos données Linky chez vous :)
- Installez une première carte qui est top! GitHub - saniho/content-card-linky: cardLinky comptatible with sensor apiEnedis
Avec cela vous avez déjà de quoi bien vous amuser ^^
Vous en voulez un peu plus ? OK, une sauvegarde et on s’y met !
Tous ce que je vais présenter se base sur l’interface UI minimalist GitHub - UI-Lovelace-Minimalist/UI: UI-Lovelace-Minimalist is a "theme" for HomeAssistant / Prepare & Download - UI Lovelace Minimalist et le tuto d’installation excellent (en anglais…): https://www.youtube.com/watch?v=A0fMt8IRKoI Il se peut que certaines cartes ne soient pas installées (regardez dans les logs et les installer, si vous ne les trouvez pas, une petite recherche du nom de la carte sur votre browser devrait faire l’affaire). L’idée étant qu’une fois que vous aurez suivi ce tuto, vous aurez créé ce genre de vue:
qui vous permettra de savoir comment modifier tout cela pour générer votre propre interface et intégrer ces cartes (au moment ou j’écris de contenu j’ai encore un petit bug ;-)):
Voici donc le code de ces cartes, des sensors associés et du configuration.yaml qui va bien:
Configuration.yaml ==> la dernière ligne est l’ajout à faire:
# Loads default set of integrations. Do not remove.
default_config:
# Load frontend themes from the themes folder
frontend:
themes: !include_dir_merge_named themes
# Text to speech
tts:
- platform: google_translate
automation: !include automations.yaml
script: !include scripts.yaml
scene: !include scenes.yaml
sensor: !include sensors.yaml # created by oc see saved files
Ensuite créez un fichier sensors.yaml à la racine de config:
Et copiez coller ce contenu après avoir remplacé par votre pdl :
- platform: template
sensors:
myelectricaldata_daily_cost:
friendly_name: "Coût d'hier"
unit_of_measurement: "€"
value_template: "{{ states.sensor.myelectricaldata_consumption_<num pdl>.attributes.daily_cost }}"
myelectricaldata_yesterday:
friendly_name: "Hier"
value_template: "{{ states.sensor.myelectricaldata_consumption_<num pdl>.attributes.day_2 }}"
unit_of_measurement: "kWh"
myelectricaldata_current_week:
value_template: "{{ states.sensor.myelectricaldata_consumption_<num pdl>.attributes.current_week }}"
friendly_name: "Conso de la semaine"
unit_of_measurement: "KWh"
myelectricaldata_current_month:
value_template: "{{ states.sensor.myelectricaldata_consumption_<num pdl>.attributes.current_month }}"
friendly_name: "Conso du mois"
unit_of_measurement: "KWh"
myelectricaldata_current_year:
value_template: "{{ states.sensor.myelectricaldata_consumption_<num pdl>.attributes.current_year }}"
friendly_name: "Conso de l'année'"
unit_of_measurement: "KWh"
myelectricaldata_last_week:
value_template: "{{ states.sensor.myelectricaldata_consumption_<num pdl>.attributes.last_week }}"
friendly_name: "Conso semaine dernière"
unit_of_measurement: "KWh"
myelectricaldata_last_month:
value_template: "{{ states.sensor.myelectricaldata_consumption_<num pdl>.attributes.last_month }}"
friendly_name: "Conso du mois dernier"
unit_of_measurement: "KWh"
myelectricaldata_last_year:
value_template: "{{ states.sensor.myelectricaldata_consumption_<num pdl>.attributes.last_year }}"
friendly_name: "Conso de l'année dernière'"
unit_of_measurement: "KWh"
myelectricaldata_last_update:
value_template: "{{ as_timestamp(states.sensor.myelectricaldata_consumption_<num pdl>.attributes.lastUpdate,0) | timestamp_custom('%d-%m-%Y %H:%M',local=True)}}"
friendly_name: "Date Mise à Jour"
myelectricaldata_last_week_cost:
value_template: "{{'%.2f'|format((states('sensor.myelectricaldata_last_week')|float) * 0.1410)}}"
friendly_name: "Coût dernière semaine'"
unit_of_measurement: "€"
myelectricaldata_last_month_cost:
value_template: "{{'%.2f'|format((states('sensor.myelectricaldata_last_month')|float) * 0.1410)}}"
friendly_name: "Coût du mois dernier'"
unit_of_measurement: "€"
myelectricaldata_last_year_cost:
value_template: "{{'%.2f'|format((states('sensor.myelectricaldata_last_year')|float) * 0.1410)}}"
friendly_name: "Coût de l'année dernière'"
unit_of_measurement: "€"
#YesterdayConsumptionMaxPower
myelectricaldata_yesterdayconsumptionmaxpower:
#value_template: "{{ float(states.sensor.myelectricaldata_consumption_<num pdl>.attributes.yesterdayConsumptionMaxPower) * 0.001 }}"
value_template: "{{ states.sensor.myelectricaldata_consumption_<num pdl>.attributes.YesterdayConsumptionMaxPower }}"
friendly_name: "Puissance Max d'hier"
unit_of_measurement: "KVa"
#subscribed_power
myelectricaldata_subscribed_power:
value_template: "{{ states.sensor.myelectricaldata_consumption_<num pdl>.attributes.subscribed_power }}"
friendly_name: "Puissance Souscrite"
unit_of_measurement: "KVa"
Et enfin voici les cartes (inspirées par le travail de @Galadan entres autres) - remplacer par votre pdl après avoir créé votre propre fichier yaml dans la structure des views de ui minimalist - moi j’ai fait simple il s’appelle edf ^^:
title: "EDF"
path: "edf"
cards:
- type: horizontal-stack
cards:
- type: custom:mushroom-entity-card
entity: sensor.myelectricaldata_last_update
icon_type: icon
name: EDF - Maj le
tap_action:
action: navigate
navigation_path: /ui-lovelace-minimalist/home
hold_action:
action: none
double_tap_action:
action: none
icon: mdi:keyboard-backspace
icon_color: light-blue
fill_container: false
- type: vertical-stack
cards:
- type: custom:button-card
template: "card_apexcharts_elec"
variables:
graph_span: "7d"
entity_1:
entity_id: "sensor.myelectricaldata_yesterday"
icon: "mdi:flash"
name: "Hier"
color: "blue"
entity_2:
entity_id: "sensor.myelectricaldata_current_week"
icon: "mdi:flash"
name: "Semaine"
color: "yellow"
entity_3:
entity_id: "sensor.myelectricaldata_current_month"
icon: "mdi:flash"
name: "Mois"
color: "green"
entity_4:
entity_id: "sensor.myelectricaldata_current_year"
icon: "mdi:flash"
name: "Année"
color: "pink"
entity_5:
entity_id: "sensor.myelectricaldata_subscribed_power"
icon: "mdi:flash"
name: "Puissance"
color: "red"
entity_6:
entity_id: "sensor.myelectricaldata_yesterdayconsumptionmaxpower"
icon: "mdi:flash"
name: "P. Max hier"
color: "purple"
- type: custom:apexcharts-card
graph_span: 6d
span:
start: day
offset: "-7d"
header:
show: true
title: Coûts des 6 derniers jours et résumé d'hier
show_states: true
colorize_states: true
series:
- entity: sensor.myelectricaldata_consumption_<num pdl>
yaxis_id: gauche
name: Coût HP
unit: €
color: deepskyblue
type: column
group_by:
duration: 1d
func: max
opacity: 0.8
stroke_width: 4
show:
datalabels: true
data_generator: >
return entity.attributes.dailyweek.map((dailyweek, index) =>
{
return [new Date(dailyweek).getTime(), entity.attributes.dailyweek_costHP[index]];
});
- entity: sensor.myelectricaldata_consumption_<num pdl>
yaxis_id: gauche
name: Coût HC
unit: €
color: orange
type: column
group_by:
duration: 1d
func: max
opacity: 0.8
stroke_width: 4
show:
datalabels: true
data_generator: >
return entity.attributes.dailyweek.map((dailyweek, index) =>
{
return [new Date(dailyweek).getTime(), entity.attributes.dailyweek_costHC[index]];
});
- entity: sensor.myelectricaldata_consumption_<num pdl>
yaxis_id: droite
name: Coût total
unit: €
color: red
type: line
group_by:
duration: 1d
func: max
opacity: 0.8
stroke_width: 2
show:
datalabels: true
data_generator: >
return entity.attributes.dailyweek.map((dailyweek, index) =>
{
return [new Date(dailyweek).getTime(), entity.attributes.dailyweek_cost[index]];
});
apex_config:
xaxis:
labels:
show: true
yaxis:
- id: gauche
min: 0
max: 15
opposite: false
labels:
show: false
- id: droite
min: 0
max: 17
opposite: true
labels:
show: false
legend:
show: false
chart:
stacked: true
# Conso
- type: vertical-stack
cards:
- type: custom:apexcharts-card
graph_span: 6d
span:
start: day
offset: "-7d"
header:
show: true
title: Conso des 6 derniers jours
show_states: true
colorize_states: true
series:
- entity: sensor.myelectricaldata_consumption_<num pdl>
yaxis_id: gauche
name: Conso HP
unit: KWh
color: deepskyblue
type: column
group_by:
duration: 1d
func: max
opacity: 0.8
stroke_width: 4
show:
datalabels: true
data_generator: >
return entity.attributes.dailyweek.map((dailyweek, index) =>
{
return [new Date(dailyweek).getTime(), entity.attributes.dailyweek_HP[index]];
});
- entity: sensor.myelectricaldata_consumption_<num pdl>
yaxis_id: gauche
name: Conso HC
unit: KWh
color: orange
type: column
group_by:
duration: 1d
func: max
opacity: 0.8
stroke_width: 4
show:
datalabels: true
data_generator: >
return entity.attributes.dailyweek.map((dailyweek, index) =>
{
return [new Date(dailyweek).getTime(), entity.attributes.dailyweek_HC[index]];
});
- entity: sensor.myelectricaldata_consumption_<num pdl>
yaxis_id: droite
name: Conso totale
unit: KWh
color: red
type: line
group_by:
duration: 1d
func: max
opacity: 0.8
stroke_width: 2
show:
datalabels: true
data_generator: >
return entity.attributes.dailyweek.map((dailyweek, index) =>
{
return [new Date(dailyweek).getTime(), entity.attributes.daily[index]];
});
apex_config:
xaxis:
labels:
show: true
yaxis:
- id: gauche
min: 0
max: 85
opposite: false
labels:
show: false
- id: droite
min: 0
max: 150
opposite: true
labels:
show: false
legend:
show: false
chart:
stacked: true
dernier petit point de détail, les données en T-1 ne sont pas toujours dispos, pour contourner cela je n’affiche que les datas des 6 derniers jours en jouant sur ces 2 paramètres pour chacun des graphes:
graph_span: *6d*
span:
start: day
offset: *"-7d"*
Remplacer 6d par 7d pour afficher T-1
Dans un monde parfait vous devriez pouvoir visualiser vos données ; le reste ? a vous d’explorer et partager vos propres créations ?