Enocean via enoceanmqtt

Alors voilà ce que j’ai fait. En même temps, j’en profite pour faire une mise à jour du tuto :slight_smile:

Installation de home assistant supervized sur RPi

Matériel nécessaire

  • Raspberry Pi (4 pour moi) avec son alimentation
  • carte SD de 16Go min
  • 1 ordinateur pour flasher la carte SD

Installation de RPi OS

  • Télécharger et installer Raspberry Pi Imager : Raspberry Pi OS – Raspberry Pi
  • Sur la page d’accueil, choisir l’OS correspondant à votre matériel :
    • 32bits → Raspberry Pi OS (32bit)
    • 64 bits → Raspberry Pi (others) → Raspberry Pi OS Light suffit
      → dans mon cas, Raspberry Pi OS Light 64bits
  • Sélectionner la carte SD
  • [optionnel] Cliquer sur la roue en bas à droite (ou faire ctrl+maj+x). Dans la fenêtre qui s’ouvre, configurer le nom du RPi, l’activation du ssh (avec la définition des login/password), du wifi si besoin, etc.
  • Une fois que tout est bon, cliquer sur écrire et attendre l’invitation à retirer la carte du lecteur.
  • Insérer la carte dans le RPi et brancher. (et brancher la clé USB300 pour ma part)

Installation des prérequis pour HA

Se connecter en ssh sur la RPi, et mettre à jour l’OS:

sudo apt-get update && sudo apt-get full-upgrade && sudo rpi-update
sudo reboot

[optionel] Configurer RPi en français :

sudo raspi-config
> Localisation options > L1 Locale > select locals (appuyer sur `espace` pour sélectionner/désélectionner un élément)
> Localisation options > L2 Timezone > select Paris 
> Localisation options > L3 keyboard 

Pour ma part, j’ai mis les ‹ locals › en_GB.UTF-8 UTF-8 et FR_fr.UTF-8, et le clavier en français.

Mettre à jour le boot loader et redémarrer :

sudo rpi-eeprom-update -d -a
sudo reboot

Installation des packages nécessaires pour HA supervized :

# Supprimer les packages inutilisés
sudo apt update && sudo apt upgrade -y && sudo apt autoremove -y
# Installer les dependences
sudo apt install \
python3-pip \
jq \
wget \
uidmap \
curl \
udisks2 \
libglib2.0-bin \
network-manager \
apparmor-utils \
apt-transport-https \
software-properties-common \
avahi-daemon \
ca-certificates \
dbus -y

Stop modem manager

sudo systemctl disable ModemManager
sudo systemctl stop ModemManager 

Installer et configurer docker :

curl -fsSL get.docker.com | sh
# autoriser docker à se connecter sans être root. Remplacez <login> par le vôtre. Par défaut, c'est 'pi'.
dockerd-rootless-setuptool.sh install
sudo usermod -aG docker <login>  # le login utilisé pour se connecter en ssh au RPi
sudo systemctl enable docker
sudo systemctl start docker

Installer os-agent.
Les différentes versions disponibles sont ici : Releases · home-assistant/os-agent · GitHub. Choisir :

  • RPi 3 : version armv7
  • RPi4 : version aarch64
  • Si l’installation se faisait sur un PC ou une VM : version x86_64

Téléchargement et installation (en adaptant la version au matériel) :

wget https://github.com/home-assistant/os-agent/releases/download/1.2.2/os-agent_1.2.2_linux_aarch64.deb
sudo dpkg -i os-agent_1.2.2_linux_aarch64.deb

Installation de HA supervized

wget https://github.com/home-assistant/supervised-installer/releases/latest/download/homeassistant-supervised.deb
sudo dpkg -i homeassistant-supervised.deb
sudo reboot

HA devrait être installé et, au bout de quelques minutes, devrait être accessible à l’adresse http://homeassistant.local:8123 ou http://[IP du RPi]:8123

Installation de Enoceanmqtt

J’ai créé un compte sur l’UI de HA. Après avoir fait les màj de l’OS, j’ai installé le module Mosquitto broker (l’add-on officiel). Après avoir créé mon fichier secrets.yaml, je l’ai configuré ainsi :

logins:
  - username: '!secret mqtt_un'
    password: '!secret mqtt_pwd'
require_certificate: false
certfile: fullchain.pem
keyfile: privkey.pem
customize:
  active: false
  folder: mosquitto

et lancé.

Ensuite, de retour dans le ssh dans la RPi, j’ai

  • installé enoceanmqtt: pip install enocean-mqtt
  • Créé un fichier /etc/udev/rules.d/99-usb.rules contenant SUBSYSTEM=="tty", ATTRS{product}=="EnOcean USB 300 DC", SYMLINK+="enocean"
  • Créé mon fichier de configuration, que j’ai mis dans /etc/enoceanmqtt.conf :
## the general section defines parameter for the mqtt broker and the enocean interface
[CONFIG]
enocean_port    = /dev/enocean
log_packets     = 1
mqtt_host       = localhost
mqtt_port       = 1883
mqtt_client_id  = enocean   # ensure that this is unique if you use multiple clients
mqtt_keepalive  = 60
mqtt_prefix     = enocean/
mqtt_user       = *********
mqtt_pwd        = **********

[inter-sup-salon]
address         = 0xXXXXXXXX (l'ID de l'interrupteur)
rorg            = 0xF6   # BS1
func            = 0x02
type            = 0x02
log_learn       = 1
publish_rssi    = 1

[shutter]
address         = 0xXXXXXXXX (l'ID du module qui contrôle mon VR)
rorg            = 0xD2
func            = 0x05
type            = 0x00

J’ai alors lancé enoceanmqtt, et c’est là que l’erreur apparait :

/home/pi/.local/lib/python3.9/site-packages/bs4/builder/__init__.py:545: XMLParsedAsHTMLWarning: It looks like you're parsing an XML document using an HTML parser. If this really is an HTML document (maybe it's XHTML?), you can ignore or filter this warning. If it's XML, you should know that using an XML parser will be more reliable. To parse this document as XML, make sure you have the lxml package installed, and pass the keyword argument `features="xml"` into the BeautifulSoup constructor.
  warnings.warn(
2022-06-17 16:05:35,179 INFO: Logging to file: /home/pi/.local/lib/python3.9/site-packages/enoceanmqtt/../enoceanmqtt.log
2022-06-17 16:05:35,181 INFO: Loading config file /etc/enoceanmqtt.conf
2022-06-17 16:05:35,183 INFO: Authenticating: mqtt_user
2022-06-17 16:05:35,195 INFO: SerialCommunicator started
2022-06-17 16:05:35,206 WARNING: Replacing Packet.optional with default value.
2022-06-17 16:05:35,206 INFO: Succesfully connected to MQTT broker.
2022-06-17 16:05:35,307 INFO: Sending packet
2022-06-17 16:05:35,319 ERROR: Serial port exception! (device disconnected or multiple access on port?)
2022-06-17 16:05:35,319 INFO: SerialCommunicator stopped

En faisant quelques recherches, j’ai vu que certaines personnes arrivaient mieux à faire fonctionner avec une petite rallonge USB. J’ai testé, mais même résultat.