How I Learned to Stop Worrying and Let the Sun do its Job.
Bonjour à tous, voici une présentation sur l’utilisation d’EVCC.
À qui s’adresse cette présentation ?
Ce post fait suite à mes tutoriels sur le proxy Tesla et la communication avec le véhicule via BLE.
Je vise à optimiser la consommation de mes panneaux solaires pour maximiser l’autoconsommation. Pour se faire j’avais mis en place de nombreuses automatisations pour ajuster la charge selon les tarifs, la production solaire, etc, dans home assistant. EVCC répond nativement à mes besoins, et après avoir longuement expérimenté avec, je réalise qu’il est irréaliste pour moi de surpasser le travail d’une équipe de développeurs compétente.
L’UI d’EVCC est agréable est dynamique, le projet gagne en popularité, et la communauté est très dynamique.
Je vais d’abord me contenter d’un descriptif superficiel pour évaluer l’intérêt sur lesujet. La configuration est vaste et la détailler entièrement demande du temps. Si je suis le seul illuminé et enthousiaste à l’idée de passer des heures devant mon CLI pour obtenir des courbes de production et consommation synchronisées et des icônes vertes clignotantes pour indiquer que ma voiture se charge avec mes panneaux solaires, je vais éviter de tout expliquer en détail. Chacun ses délires.
À qui ne s’adresse pas cette présentation ?
Si vous n’êtes pas prêt à affronter des migraines pour saisir l’ampleur des fonctionnalités d’EVCC, à taper du docker-compose
jusqu’à en perdre la tête et vous demander pourquoi cela ne fonctionne pas pour la 3452309547e fois, passez votre chemin.
Le setup que je détaille est réalisable avec la version open-source (gratuite) d’EVCC. Toutefois, leur modèle de sponsorship via GitHub peut grandement simplifier la vie et offre un accès direct à des intégrations pour des marques spécifiques.
Pour les propriétaires de Peugeot et Renault, les deux intégrations sont natives et gratuites. Tesla, en revanche, nécessite un passage à la caisse pour du natif, ce que je déconseille fortement vu le nombre limité de commandes que l’API vous impose (plus de détails ci-dessous).
Si vous souhaitez contribuer au projet, vous pouvez le faire via un achat unique (~100 euros) ou une donation mensuelle (2 euros de mémoire). Notez que je n’ai aucun lien avec l’équipe ou le produit.
La documentation à le mérite d’exister, mais elle nést pas vraiment claire et de gros tronçons ne sont disponibles qu’en allemand.
Enfin, pour une approche plus simple sans UI dédiée, le Solar Optimizer de JM Collin est une excellente alternative. Après l’avoir utilisé pendant des mois, il fonctionne très bien. J’ai changé pour EVCC en raison du nombre d’automatisations nécessaires avec Solar Optimizer dans mon cas, mais c’est un choix personnel qui n’enlève rien à la qualité du travail et de la disponibilité de @Jean-Marc_Collin .
Présentation de ma configuration actuelle
Matériel requis
Niveau hardware
- Un ou plusieurs terminaux pour faire tourner HA et les autres services.
- Panneaux solaires avec mesure de production et consommation (Envoy dans mon cas).
- Véhicule électrique (Tesla dans mon cas).
- Chargeur/borne de recharge communiquant (peut être virtuel, voir plus bas).
Niveau software
- EVCC
- Home Assistant
- MQTT Broker
- Un moyen pour communiquer avec le véhicule et le chargeur, obtenir les données et envoyer des commandes. Dans mon cas :
- Contrôleur BLE pour Tesla
- Teslamate pour récupérer les données.
Procédure
MQTT
- Installer l’addon Mosquitto.
- Créer deux logins pour TeslaMate et EVCC via Customize.
Teslamate
- Vous aurez besoin de l’addon PostgreSQL si vous utilisez la version HA, ce que je recommande pour plus de simplicité.
- TeslaMate peut être utilisé comme source de données pour l’intégration Tesla dans HA, offrant de meilleurs résultats empiriquement en termes de mise à jour des données.
twc3teslamate
twc3teslamate simule, via les informations de Teslamate, une borne Tesla de type Wall Connector, vous permettant d’intégrer votre véhicule à EVCC et de le charger sur n’importe quelle source de courant. Ayant une borne Hager Witty que j’ai payée une fortune pour au final pas grand chose, la modifier pour communiquer via Modbus me semblait trop fastidieux. twc3teslamate
permet donc d’optimiser la charge solaire où que mon véhicule soit branché (chez moi, bien sûr), de la prise du salon à la borne de recharge.
tesla_ble_mqtt_docker
Pour envoyer des commandes au véhicule via BLE (procédure), car Tesla a décidé que les appels via l’API coûtaient plus cher que le salaire de Musk, la simplicité est donc portée disparue.
Note : Il y a actuellement un problème de QoS en MQTT qui rend la communication directe du BLE à EVCC impossible. Il faut passer par HA comme relai pour régler le QoS. C’est en cours de correction.
EVCC
Chargeur
On utilise le chargeur virtuel twc3teslamate
.
chargers:
- name: modelY_charger
type: template
template: twc3
host: 192.168.20.149:8002 # IP address or hostname
Véhicule
Un véhicule de type custom avec lequel on communique via BLE (tesla_ble_mqtt_docker
) et dont on obtient les données via Teslamate.
vehicles:
- name: Brouette
type: custom
icon: car
capacity: 74 # Capacité en kWh de la batterie. Fonction de votre modèle.
chargeenable:
source: mqtt
topic: tesla_ble_mqtt/VIN/command # Remplacez le VIN par le vôtre.
payload: '{{if .chargeenable}}charging-start{{else}}charging-stop{{end}}'
maxcurrent: # set charger max current (A)
source: mqtt
topic: tesla_ble_mqtt/VIN/charging-amps # Remplacez le VIN par le vôtre.
payload: '{{.maxcurrent}}'
wakeup: # vehicle wake up command
source: mqtt
topic: tesla_ble_mqtt/VIN/command # Remplacez le VIN par le vôtre.
payload: 'wake'
soc:
source: mqtt
topic: teslamate/cars/2/battery_level # Ajustez l'ID : teslamate/cars/ID si vous avez plusieurs véhicules
timeout: 8h
range:
source: mqtt
topic: teslamate/cars/1/est_battery_range_km # Ajustez l'ID : teslamate/cars/ID si vous avez plusieurs véhicules
timeout: 8h
status:
source: combined
plugged:
source: mqtt
topic: teslamate/cars/1/plugged_in # Ajustez l'ID : teslamate/cars/ID si vous avez plusieurs véhicules
timeout: 8h
charging:
source: mqtt
topic: teslamate/cars/1/charging_state # Ajustez l'ID : teslamate/cars/ID si vous avez plusieurs véhicules
timeout: 8h
Loadpoints
Combine les éléments précédemment définis. Mes valeurs pour enable/disable sont totalement sorties du chapeau.
loadpoints:
- title: Chargeur Model Y # Nom qui sera affiché dans l'IHM
charger: modelY_charger # Chargeur défini plus haut
vehicle: Brouette # Véhicule utilisé par défaut
mode: "off" # Mode par défaut
enable: # Désactive la charge quand export de 225W pendant 10 minutes
threshold: -225
delay: 1m
disable:
threshold: 200 # Désactive la charge quand import de 200W pendant 10 minutes
delay: 10m
guardduration: 30m # Maintient de charge pendant 30 minutes minimum.
Automatisation HA pour ajuster le courant de charge d'un loadpoint
Cette automatisation ajuste le courant max du loadpoint EVCC en fonction du matériel utilisé pour la charge. Par exemple, j’ai une borne sur laquelle je peux tirer jusqu’à 32A et des prises domestiques (utilisées pour la recharge solaire) que je limite arbitrairement à 10A.
Cela évite donc de devoir modifier le courant de charge via l’UI si vous branchez votre voiture sur différentes bornes/prises, ou si vous avez plusieurs Teslas et une seule borne.
alias: Ajuster le courant de charge maximum pour EVCC
description: >-
Ajuste le courant maximum de charge pour un véhicule électrique en fonction de
la demande via MQTT.
trigger:
- platform: mqtt
topic: teslamate/cars/+/charge_current_request_max
condition: []
action:
- variables:
loadpointId: "{{ trigger.topic.split('/')[2] }}"
loadpointMaxCurrent: >-
{% set maxCurrent = trigger.payload | int(default=-1) %} {{ maxCurrent
if 0 <= maxCurrent <= 32 else 10 }}
- service: mqtt.publish
data:
qos: "1"
topic_template: evcc/loadpoints/{{loadpointId}}/maxCurrent/set
payload_template: "{{loadpointMaxCurrent}}"
alias: Publier le courant ajusté via MQTT
mode: parallel
max: 2
Meters / Site
Cela dépend de votre installation. Enphase est compatible sans trop d’efforts. Voir la documentation pour plus de détails.
Configuration Enphase Envoy
Obtenir un jeton Enphase
- Se rendre sur la page Enphase Authentication | Select Gateway (enphaseenergy.com) et se connecter à l’aide de ses identifiants.
- Taper dans le champ select system les trois premières lettres du nom qui désigne votre installation (vous pouvez trouver cette info depuis l’appli mobile).
- Selectionner la passerelle depuis le champ select gateway.
Le jeton est valide un an, il faudra le renouveler une fois celui-ci expiré.
Configuration EVCC
Dans evcc.yaml, faire figurer pour la partie meters
:
meters:
- name: enphaseGrid
type: template
template: enphase
usage: grid
host: addresse IP ou nom d'host de votre passerelle
token: VOTRE_TOKEN_ENVOY
- name: enphasePV
type: template
template: enphase
usage: pv
host: addresse IP ou nom d'host de votre passerelle
token: VOTRE_TOKEN_ENVOY
Vous obtenez ainsi les deux entités qui permettent à EVCC d’obtenir les mesures de consommation et production électrique.
Tariffs
La possibilité de communiquer des tarifs prévisionnels et de spécifier une cible pour la recharge pendant les heures creuses est très intéressante. Pour ma part, étant en tempo, chaque jour, je lui fournis les tarifs du jour HP/HC et du lendemain, une cible de tarif (correspondant à mes HC), et le véhicule charge au solaire la journée puis en HC la nuit jusqu’à atteindre la cible. Si votre voiture reste plusieurs jours en place, la charge nocturne en HC peut être désactivée, ne permettant ainsi la recharge qu’avec le soleil.
tariffs:
currency: EUR
feedin:
type: fixed
price: 0.10 # EUR/kWh
grid:
type: custom
forecast:
source: mqtt
topic: tempo/grid/forecast # Source du forecast en JSON