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

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
Ce qui donne chez moi

A partir du résultat on peut faire un :

lsusb -D /dev/bus/usb/001/004
Ce qui donne chez moi

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.