Intégrer des onduleurs dans Home Assistant
Introduction
L’objectif ici est de connecter son onduleur à Home Assistant pour y ajouter de l’intelligence grâce aux automatisations d’Home Assistant.
Prérequis
- Onduleur avec une prise USB pour recevoir la DATA (dans mon cas, j’utilise un EATON Ellipse PRO 1600)
- Appareil pour héberger notre conteneur (dans mon cas, un Raspberry). Attention, il faut que cet appareil soit connecté avec un câble USB à l’onduleur.
- Et l’intégration de NUT de Home Assistant
Installation
Détécter notre onduleur
Une fois l’onduleur branché sur l’appareil, il faut déterminer le port.
Pour ce faire, on peut exécuter la commande suivante :
lsusb
A partir du résultat on peut faire un :
lsusb -D /dev/bus/usb/001/004
Affecter les droits
On lui donne les droits :
cat >/etc/udev/rules.d/99-usb-serial.rules <<EOF
ACTION=="add", SUBSYSTEM=="usb", ATTRS{idVendor}==“0463”, ATTRS{idProduct}==“ffff”, MODE="0660", GROUP="nut"
EOF
udevadm control --reload-rules && udevadm trigger
On redemarre notre service pour que notre modification soit prise en compte
sudo udevadm control --reload-rules
sudo /etc/init.d/udev restart
–> Astuce pour savoir quel est le groupe :
ls -l /dev/bus/usb/001/004
Construire notre container
Nous allons utiliser l’image de nut-upsd de botsudo pour notre conteneur.
Le principe est simple : un serveur qui expose les données de notre onduleur et des clients (comme notre Home Assistant) qui se connectent pour récupérer les informations.
Configurer le port si besoin
vi ./config/ups.conf
[ups]
desc = "UPS"
driver = usbhid-ups
port = auto
Configurer la whiteliste d’IPs
vi ./config/upsd.conf
LISTEN 127.0.0.1 3493
LISTEN 172.16.x.x
–> Remplacer 172.16.x.x par une ip d’un client qui aura le droit de se connecter au serveur (exemple notre home assistant)
Configurer l’authentification
vi ./config/upsd.users
[admin]
password = XXXXXXXXXXXXXXXXXXXX
actions = set
actions = fsd
instcmds = all
[monitor]
password = XXXXXXXXXXXXXXXXXX
upsmon master
[ups]
desc = "UPS"
driver = usbhid-ups
port = auto
Puis créer le docker-compose
vi docker-compose.yaml
version: "3.3"
services:
nut:
image: botsudo/nut-upsd:latest
ports:
- 3493:3493
devices:
- /dev/bus/usb/001/004:/dev/bus/usb/001/004 # à remplacer par votre chemin
restart: unless-stopped
privileged: true
volumes:
- ./config/:/opt/nut-config
- ./config/ups.conf:/etc/nut/ups.conf
- ./config/upsd.users:/etc/nut/upsd.users
Configurer Home assistant
Ajouter l’intégration appellé NUT ans home assistant
Remplir les champs qu’on a définit dans upsd.users
Si tout se passe correctement vous aurez une nouvelle intégration qui apparaît :
Et vous verrez l’état de votre onduleur :
Automation
Un exemple d’automation pour être alerté par Telegram si la batterie de l’onduleur est en dessous de 50%
# Battery en dessous de 50 %
- id: ups_eaton_battery_50
alias: ups_eaton_battery_50
trigger:
- platform: state
entity_id:
- sensor.ups_battery_charge
condition:
- condition: numeric_state
entity_id: sensor.ups_battery_charge
below: 50
action:
- service: notify.telegram_groupe
data_template:
title: 🔋 Home assistant 🔋
message: UPS EATON batterie est en dessous de 50%🔋
mode: single
Un autre exemple pour être alerté en cas de coupure avec EDF:
#SECTEUR EDF DOWN
- id: ups_eaton_input_voltage
alias: ups_eaton_input_voltage
trigger:
- platform: state
entity_id:
- sensor.ups_input_voltage
condition:
- condition: numeric_state
entity_id: sensor.ups_input_voltage
below: 1
action:
- service: notify.telegram_groupe
data_template:
title: 🔋 Home assistant 🔌
message: UPS EATON coupure EDF détécté car {{ trigger.to_state.attributes.status }}🔌
mode: single
conclusion
L’intégration et l’automatisation des onduleurs dans Home Assistant permettent de surveiller l’état de votre onduleur et réagir rapidement en cas de coupure de courant ou de problème.