Sommaire
Introduction et objectifs
Les véhicules électriques ont beaucoup d'avantages, que ce soit leur expérience de conduite, leur sobriété en termes d'émissions de CO2 (sous réserve que l'énergie qui les propulse soit produite de manière décarbonée) ou leur coût au kilomètre. Cependant, cela vient avec des inconvénients inconnus des véhicules thermiques :
- Une autonomie moindre, et une durée d'attente bien supérieure pour "faire le plein", et une forte variabilité des coûts de l'énergie en fonction du contexte.
- Un vieillissement prématuré de la batterie si celle-ci est constamment trop chargée. Les constructeurs conseillent en général de se limiter à 80% quand c'est possible.
Pour ces raisons, il est nécessaire pour l'utilisateur de développer des stratégies pour minimiser les risques de panne sèche, minimiser le nombre et la durée des arrêts aux bornes de recharge et maximiser la durée de vie de la batterie. Cela passe par la combinaison de deux éléments fondamentaux :
- L'accès aux informations du véhicule en temps réel, à distance.
- La possibilité d'automatiser certaines actions en fonction du contexte.
Pour cela, les constructeurs proposent généralement des applications mobiles dédiées à leurs véhicules. Cependant, celles-ci sont parfois peu pratiques, incomplètes et ne permettent pas de grandes possibilités d'automatisation.
Nous allons nous intéresser au cas des véhicules électriques de Renault, habituellement contrôlée par l'application My Renault. En plus de construire un dashboard dédié portant un maximum d'informations du véhicule, nous allons ajouter les possibilités suivantes :
- Stopper une charge en cours. Aussi incroyable cela puisse paraître, ce n'est plus possible depuis peu dans l'application My Renault.
- Définir le pourcentage maximal de charge du véhicule, chose actuellement possible uniquement sur l'écran du véhicule.
- Définir la programmation de charge en fonction de la position du véhicule.
Intégration du véhicule dans Home Assistant
Pour intégrer le véhicule dans Home Assistant, rien de plus simple : il suffit d'ajouter l'intégration Renault (non-officielle) et de connecter ses services en suivant les instructions de la page. Vous retrouverez alors directement votre véhicule avec un grand nombre de capteurs, ainsi que son emplacement.
Vous pouvez d'ores et déjà commencer à jouer avec, pour vous faire un joli dashboard.
Maintenant, entrons dans le vif du sujet !
Stopper une charge en cours
Autrefois, il était possible de stopper une charge en cours via My Renault.
Aujourd'hui, cela semble impossible, que ce soit depuis l'application ou depuis l'API. Ne cherchez donc pas sur Home Assistant à activer le contrôle d'arrêt de la charge, cela ne fonctionnera simplement pas. Il est donc nécessaire de trouver un moyen détourné.
Après diverses expérimentations, le seul moyen fonctionnel de pouvoir stopper une charge est de programmer une charge hebdomadaire de 1 minute minimum. En effet, en forçant à 0 minute, ou en désactivant tous les jours de la semaine, le véhicule passe en mode de charge instantanée, soit exactement l'opposé de ce que l'on souhaite.
Pour réaliser cela, nous allons tout d'abord réaliser un script qui permettra de :
- Modifier le programme de la charge personnalisée
- Forcer le mode de charge en "personnalisée".
Rendez-vous sur la page des scripts de votre installation Home Assistant, puis cliquez sur Ajouter un script.
Dans ce script, nous allons tout d'abord ajouter un appel à un service de l'intégration Renault. Pour cela, on ajoute une action Appeler un service.
On sélectionne alors le service Renault: Update charge schedule, le véhicule dans la case Vehicle, et on ajoute la configuration suivante dans l'éditeur Schedules:
On demande ainsi au véhicule de ne charger qu'une minute à 3h30 (heure locale) le dimanche. C'est un moindre mal.
À noter que si vous ne souhaitez pas perdre vos programmes habituels lorsque le script est appelé, il faudra les ajouter désactivés avec un ID différent (jusqu'à 5 pour une Mégane E-Tech, mais dépend du véhicule).
Par exemple, j'ai un programme sur mes heures creuses de 23h30 à 7h30 chaque jour. Je remplace donc la configuration ci-dessus par :
Ainsi, si je retourne dans mon véhicule ou sur son application, mon programme habituel est toujours accessible, désactivé.
Après l'appel au service, on ajoute un délai de 1 seconde, puis on va forcer le mode de charge sur instantanée. Pourquoi cela ? Car si le mode de charge est déjà sur "personnalisée" au moment de l'appel du script, alors la modification de programme ne sera pas prise en compte par le véhicule.
=> On fait donc un "va-et-vient" instantanée, personnalisée.
Pour ajouter l'action, on choisit une action de type Appareil, on sélectionne le véhicule, puis l'action Modifier l'option <véhicule> Mode de charge, et on sélectionne always_charging.
On rajoute à nouveau un délai de 1 seconde, puis on choisit une action de type Appareil, on sélectionne le véhicule, puis l'action Modifier l'option <véhicule> Mode de charge, et on sélectionne schedule_mode.
Optionnellement, on peut choisir d'envoyer une notification à un téléphone pour prévenir de l'arrêt de la charge.
Vous retrouverez ci-dessous un aperçu de la séquence :
Et la configuration correspondante pour mon cas :
Le script est prêt à être utilisé. On peut donc dès lors l'associer à un bouton, qui sera utilisable dans un dashboard.
Pour cela, on crée une entrée de type bouton dans la section Entrées.
Ensuite, on crée une automatisation dans la section Automatisations.
Le déclencheur sera un appui sur le bouton, et l'action l'appel au script que nous avons défini dans cette section.
Ce qui donnera en YAML :
Ce bouton pourra dès lors remplacer avantageusement celui non fonctionnel de l'intégration Renault.
Définir le pourcentage maximal de charge du véhicule
Définition de la charge cible
S'il y a bien quelque chose dont ont l'habitude les utilisateurs de véhicules électriques, c'est de limiter le pourcentage de charge de leur batterie quand ils n'en ont pas besoin, afin d'en augmenter drastiquement la durée de vie. En général, un utilisateur chargera jusqu'à 80% pour ses trajets quotidiens, et à 100% uniquement pour les longs trajets, pour repousser le premier passage à la borne et maximiser le temps de charge à domicile, moins cher.
Chez Renault, il n'est possible de choisir ce niveau de charge maximal qu'à l'intérieur du véhicule. Ainsi, si vous rentrez de voyage, programmez votre véhicule à charger la nuit et vous rendez compte une fois au lit que vous n'avez pas rabaissé la limite de charge, vous êtes bon pour un petit tour gratuit dans le garage pour les mieux lotis, ou dehors pour les autres, pour faire 2 actions sur un écran.
Nous vous expliquons dans cette section comment faire tout cela en restant bien au chaud sous la couette.
Voici la stratégie globale que nous allons adopter :
- Régler la charge max du véhicule sur 100% dans le véhicule et ne jamais y toucher.
- Ajouter une commande numérique (ou slider) allant de 0 à 100% qui nous servira d'entrée pour notre pourcentage cible
- Automatiser le démarrage et l'arrêt de la charge en fonction de cette commande et de la charge actuelle du véhicule.
En bonus, nous ajouterons également une estimation du temps restant jusqu'à la valeur cible.
On commence donc par aller dans son véhicule, et dans la section configuration, on active la charge à 100% de manière permanente.
Dans Home Assistant, on va dans la section Entrées.
On crée alors une entrée de type Nombre, qu'on nommera par exemple Mégane E-Tech charge cible, allant de 0 à 100.
Ajouté à un dashboard en l'ajoutant par entité, cela donnera le visuel ci-dessous.
Il nous faut maintenant déterminer si la charge doit être lancée ou arrêtée. Pour cela, on va créer une nouvelle entrée.
Cette entrée représentera la charge restante et elle vaudra donc à chaque instant (pourcentage cible) - (pourcentage actuel)
. Si cette valeur est inférieure à 0, alors il faut arrêter la charge. Si elle est supérieure à 0, il faut la continuer ou la reprendre.
Cette entrée aura un second rôle : celle de pallier à l'indisponibilité de la valeur du pourcentage actuel, qui arrive quand les serveurs de Renault sont indisponibles, ce qui arrive plusieurs fois par jour pendant quelques secondes/minutes. Si c'est le cas, alors on maintiendra la valeur de l'entrée.
On choisit le type Template pour cette nouvelle entrée, puis Modéliser un capteur.
On choisit comme nom par exemple Mégane E-Tech charge restante, et :
- Unité de mesure : %
- Classe d'appareil : Batterie
- Classe d'état : Mesure
Le modèle d'état est le suivant, en remplaçant <vehicule_name>
par l'identifiant de votre véhicule dans les entités de l'intégration Renault. Dans notre expérience, il s'agit de la plaque d'immatriculation du véhicule en minuscules, mais ce n'est pas une règle absolue. Vous pouvez utiliser l’auto-complétion dans l'éditeur pour trouver la bonne valeur.
Le else
final permet de gérer le cas où le serveur est indisponible alors que l'entrée n'a pas encore été initialisée.
Automatisation de l'arrêt de la charge
On va maintenant pouvoir créer des automatisations basées sur la valeur définie à la section précédente. On se rend donc dans la section correspondante.
Commençons par l'arrêt de la charge. On va appeler le script d'arrêt de la charge créé dans la section Stopper une charge en cours quand la charge restante est inférieure à 0 depuis au moins 3 secondes.
On crée donc une nouvelle automatisation, qu'on nomme par exemple Mégane E-Tech - Arrêt de la charge.
On ajoute un déclencheur de type Entité/État numérique.
On sélectionne Mode inférieur/Nombre Fixe et En dessous de 0, pendant 3 secondes.
Comme action, on appelle le service défini précédemment.
On valide, et l'automatisation est fonctionnelle : si vous sélectionnez un objectif de charge de 80%, alors la charge s'arrêtera quand la batterie atteindra exactement 81%.
La configuration de l'automatisation est finalement la suivante :
alias: Mégane E-Tech - Arrêt de la charge
description: Arrête la charge lorsque la cible est atteinte
trigger:
- platform: numeric_state
entity_id:
- sensor.megane_e_tech_charge_restante
for:
hours: 0
minutes: 0
seconds: 3
below: 0
condition: []
action:
- service: script.megane_e_tech_arret_de_la_charge
data: {}
mode: single
Automatisation du démarrage de la charge
On sait maintenant arrêter automatiquement une charge au-delà d'un certain pourcentage. Maintenant, nous allons voir comment faire pour automatiser le démarrage de la charge.
Tout d'abord, nous devons définir un scénario simple ou plus complexe, qui correspond à nos usages.
Pour ce guide, nous détaillerons le scénario suivant :
- Lorsque le véhicule est au domicile, la charge se fera pendant les heures creuses locales, de 23h30 à 7h30.
- Lorsque le véhicule est au domicile "chez papa", la charge se fera durant les heures creuses locales, de 0h00 à 8h00.
- Lorsque le véhicule est hors de l'une de ces deux zones, la charge se fera de manière instantanée.
Évidemment, la charge ne se lancera que si la cible de charge est inférieure à la charge actuelle de la batterie.
Afin d'éviter d'écrire ce qu'on appelle communément un "spaghetti de code", on va définir des scripts pour ces 3 actions.
On se rend donc dans la section des Scripts.
- On crée un script Mégane E-Tech - Charge instantanée. Celui-ci envoie la commande Modifier l'option <véhicule> Mode de charge vers always_charging (voir section Stopper la charge pour plus de détails).
- On crée un script Mégane E-Tech - Heures creuses domicile (voir détails ci-dessous)
- On crée un script Mégane E-Tech - Heures creuses chez papa (voir détails ci-dessous)
Pour ces deux derniers scripts, on va commencer par fabriquer le "payload" qu'on va utiliser pour envoyer le programme de charge à la voiture (voir section Stopper la charge pour plus de détails sur l'appel au service en question). Pour chaque appel à ce service, nous souhaitons que tous les programmes soient persistants afin de pouvoir continuer de passer manuellement de l'un à l'autre depuis la voiture ou l'application My Renault.
On définit donc un "payload" avec 3 entrées :
- Une entrée correspondant aux heures creuses du domicile,
- Une entrée correspondant aux heures creuses de chez papa,
- Une entrée pour l'arrêt de la charge (définie et expliquée dans la section Stopper la charge)
Le "payload" général sera donc le suivant :
Dans ce "payload", j'ai remplacé toutes les valeurs des champs activated
par <value>
. En effet, la valeur devra être mise à true
ou à false
en fonction du script.
- Script d'activation des heures creuses du domicile
- 1:
true
- 2:
false
- 3:
false
- 1:
- Script d'activation des heures creuses de chez papa
- 1:
false
- 2:
true
- 3:
false
- 1:
- Script d'arrêt de la charge (défini dans la section Stopper la charge, à modifier)
- 1:
false
- 2:
false
- 3:
true
- 1:
En résumé, nous avons donc 4 scripts :
- Mégane E-Tech - Arrêt de la charge
- Mégane E-Tech - Charge instantanée
- Mégane E-Tech - Heures creuses domicile
- Mégane E-Tech - Heures creuses chez papa
Ces scripts nous seront utiles pour les automatisations à venir. Allons donc dans la section Automatisations.
On crée une nouvelle automatisation, que l'on nomme par exemple Mégane E-Tech - Gestion activation charge.
Cette automatisation sera potentiellement déclenchée quand :
- La charge restante devient strictement supérieure à -1 pendant 3 secondes
- Le véhicule entre dans la zone Maison
- Le véhicule sort de la zone Maison
- Le véhicule entre dans la zone Chez papa
- Le véhicule sort de la zone Chez papa
Insistons bien sur le mot potentiellement, car ces déclencheurs ne doivent avoir l'effet escompté si et seulement si la charge restante devient strictement supérieure à -1 pendant 3 secondes. Ainsi, quel que soit le déclencheur de l'automatisation, on va devoir s'assurer que cette condition est bien vraie avant d'effectuer la moindre action.
Cela se traduit de la façon suivante dans Home Assistant :
Si l'automatisation est déclenchée et que la condition ci-dessus est vraie, alors on va se baser sur l'état de la voiture pour savoir que faire, selon l'algorithme suivant :
- Si le véhicule est dans la zone Maison, appeler le script Mégane E-Tech - Heures creuses domicile
- Sinon
- Si le véhicule est dans la zone Chez papa, appeler le script Mégane E-Tech - Heures creuses chez papa
- Sinon
- Appeler le script Mégane E-Tech - Charge instantanée
Ce qui donne visuellement :
L'automatisation en YAML donne ceci :
alias: Mégane E-Tech - Gestion activation charge
description: Gestion de l'activation de charge de la Mégane E-Tech
trigger:
- platform: numeric_state
entity_id:
- sensor.megane_e_tech_charge_restante
for:
hours: 0
minutes: 0
seconds: 3
above: -1
- platform: zone
entity_id: device_tracker.<vehicle_name>_emplacement
zone: zone.home
event: enter
- platform: zone
entity_id: device_tracker.<vehicle_name>_emplacement
zone: zone.chez_papa
event: enter
- platform: zone
entity_id: device_tracker.<vehicle_name>_emplacement
zone: zone.home
event: leave
- platform: zone
entity_id: device_tracker.<vehicle_name>_emplacement
zone: zone.chez_papa
event: leave
condition:
- condition: numeric_state
entity_id: sensor.megane_e_tech_charge_restante
above: -1
action:
- if:
- condition: zone
entity_id: device_tracker.<vehicle_name>_emplacement
zone: zone.home
then:
- service: script.megane_e_tech_heures_creuses_domicile
data: {}
else:
- if:
- condition: zone
entity_id: device_tracker.<vehicle_name>_emplacement
zone: zone.chez_papa
then:
- service: script.megane_e_tech_heures_creuses_chez_papa
data: {}
else:
- service: script.megane_e_tech_charge_instantanee
data: {}
mode: single
Vous voilà enfin libérés de toute action manuelle pour gérer la charge de votre véhicule !
Estimation du temps de charge restant
Comme votre véhicule est désormais réglé de manière permanente sur une cible de charge à 100%, le temps de charge restant renvoyé par la voiture correspond toujours au temps restant avant une charge complète, et pas au temps restant avant la charge jusqu'à votre cible.
Nous allons donc créer une nouvelle valeur dynamique que l'on pourra importer dans un dashboard, qui nous permettra d'estimer ce temps.
Pour cela, nous allons faire une estimation purement linéaire : Si la batterie est actuellement à 60%, que je veux charger jusqu'à 80%, et que le véhicule annonce 1h de charge restante, la charge restante jusqu'à notre cible sera estimée à (100-80)/(100-60)*1h
, c'est-à-dire 30 minutes. En cas de charge rapide, cette estimation est inexacte, car la vitesse de charge diminue au cours du temps, mais en cas de charge lente, qui correspond à la majorité des usages, cette estimation est réaliste.
Nous allons donc créer une nouvelle entrée de type Template.
On la nommera par exemple Mégane E-Tech temps de charge restant.
On choisit les options suivantes :
- Unité de mesure : min
- Classe d'appareil : Durée
- Classe d'état : Mesure
On définit alors le modèle d'état suivant :
On peut alors utiliser cette entrée en tant que capteur dans un dashboard. Voici un exemple de ce que cela peut donner :
Vous êtes désormais prêts à affronter la route sans (presque) jamais passer par My Renault et à customiser votre dashboard comme bon vous semble !
Exemple de dashboard
Voici un exemple de dashboard utilisant l'intégration Renault et les activateurs et valeurs créées lors de ce tutoriel, à savoir :
- Le slider de batterie cible
- Le temps de charge restant jusqu'à la cible
- L'action d'arrêt de la charge fonctionnel
Celui-ci intègre aussi une prise connectée (uniquement au domicile) qui permet de mesurer la puissance et la consommation.
Conclusion
Grâce à Home Assistant, il est possible, au-delà de la domotique, de suivre et gérer son véhicule électrique au-delà de ce que proposent les applications des constructeurs.
On regrettera cependant que ces derniers (notamment les puissants constructeurs historiques tels que Renault) ne proposent pas des applications plus complètes, ou des intégrations officielles pour tendre la main aux communautés de l'Open Source.
Aller plus loin
On peut imaginer de multiples scénarios pour améliorer les automatisations de la charge du véhicule.
Par exemple, un producteur d'énergie solaire pourrait très bien déclencher la charge du véhicule lorsqu'il produit a minima une certaine quantité d'énergie, et l'arrêter quand ce n'est pas le cas. Cela nécessiterait probablement de définir un minimum de temps de production au-delà ou en-dessous du seuil et un minimum de temps de chargement pour le véhicule pour déclencher les automatisations, pour éviter les arrêts et reprises de charge intempestives.
Un utilisateur ayant souscrit à une offre type EDF Tempo et ayant accès aux prévisions du lendemain (par exemple via un module ZLinky de chez Lixee) peut également essayer d'optimiser le coût de sa recharge en fonction des prix en cours et à venir.