Enocean via enoceanmqtt

Oui ça techniquement ça doit fonctionner. Je pense par contre que faire ça hors container c’est beaucoup plus propre

L’idéal serait de modifier le dockerfile de HA OS non ? Mais là je n’ai pas les compétences (déjà que dockerfile est tout nouveau ^^). Il vaut mieux que j’installe HA autrement que par HA OS, comme vous avez fait.

Techniquement c’est faisable aussi, par contre tu va être emmerdé pour déployer ton image avec le superviseur (qui va chercher l’image officielle et pas la tienne).
Si tu veux garder le principe des containers, il faut penser ça comme un addon. ça nécessite de toute façon les mêmes connaissances + la partie liaison avec HA pour la reconnaissance comme addon.
L’autre solution immédiate c’est de faire un service sur la VM debian (et donc HA en mode docker supervised). Comme ça les 2 fonctionnent sans bidouille

Je partage l’avis de @Pulpy-Luke, refaire l’installation en mettant debian sur votre RPi (Raspberry Pi OS ?) avec HA en mode supervisé via docker.
enoceanmqtt sera lancé à chaque démarrage via le service systemd fourni.

Oui oui, c’était aussi ma conclusion.

Il vaut mieux que j’installe HA autrement que par HA OS, comme vous avez fait.

Par contre, je me pencherai dessus plus tard car je n’ai aucune idée de comment faire.

Installer Home Assistant sur RPi (ou autres SBC), Debian (Méthode Docker & Supervisor)

Hello, j’hijack le topic vu que j’ai un soucis sur le même module :slight_smile:
Donc j’ai bien rajouté le snippet plus haut, mes modules sont maintenant bien reconnu par enocean2mqtt mais j’ai pas encore toute les infos qui remonte, je vois sur le bouton qui a été appuyé via IO ( canal 0 ou 1 ) et la CMD est toujours à 4, quelques soit le bouton que j’appuie.

@Judzk
Hello,
Je crois savoir ce qui se passe.
Dans la déclaration de votre module dans le fichier de configuration enoceanmqtt.conf, rajoutez la ligne command = CMD comme indiqué ici.
Ça devrait être bon ensuite.

Effectivement ca fonctionne, je récup bien toutes les infos. J’ai vu la suite du sujet qui explique comment envoyer l’action en fonction du canal, je testerais ca plus tard.
Si jamais t’as besoin de testeur hésite pas, j’ai aussi du D2-01-0F ( controleur de prise ) et du D2-02-00 ( volet )

J’arrive pas a éditer mon message donc je me répond.
J’ai réussi a intégrer un volet via un bouton sur HA, ca fonctionne niquel, c’est laborieux le temps de comprendre la logique, surtout si on est nouveau sur MQTT, mais ca fonctionne très bien.
Encore merci à toi

Parfait :+1:
Effectivement une fois qu’on a compris la logique, ça va vite :slightly_smiling_face:

J"ai enfin pu terminer mon installation de HA en mode supervisé. Malheureusement, j’ai encore la même erreur :sob:

Arf ! On va finir par y arriver vous en faites pas.

Alors étape par étape, sans rien oublier, qu’est-ce que vous avez fait, à la fois niveau matériel et logiciel.
Comme ça nous auront une idée claire du setup en entier.

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.

En voyant ça, je pense que c’est pas le bon user avec lequel enocean-mqtt est déployé… Personnellement j’aurai utilisé root plutot que pi

Et là c’est que la clé us b n’est pas trouvée dans /dev/enocean n’existe pas. Donc que la régle 99-usb.rules ne fonctionne pas bien

Je viens d’installer enoceanmqtt en mode sudo, mais j’ai aussi l’erreur.

La clé est bien reconnue, puisque au départ ça marchait. Et je viens de tester en mettant une « fausse adresse », et l’erreur est bien avant (il n’arrive pas à se connecter au server mqtt :

2022-06-17 16:30:15,776 INFO: Authenticating: mqtt-user
Traceback (most recent call last):
  File "/usr/local/lib/python3.9/dist-packages/serial/serialposix.py", line 322, in open
    self.fd = os.open(self.portstr, os.O_RDWR | os.O_NOCTTY | os.O_NONBLOCK)
FileNotFoundError: [Errno 2] No such file or directory: '/dev/enocean1'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/local/bin/enoceanmqtt", line 8, in <module>
    sys.exit(main())
  File "/usr/local/lib/python3.9/dist-packages/enoceanmqtt/enoceanmqtt.py", line 114, in main
    com = Communicator(conf, sensors)
  File "/usr/local/lib/python3.9/dist-packages/enoceanmqtt/communicator.py", line 68, in __init__
    self.enocean = SerialCommunicator(self.conf['enocean_port'])
  File "/usr/local/lib/python3.9/dist-packages/enocean/communicators/serialcommunicator.py", line 17, in __init__
    self.__ser = serial.Serial(port, 57600, timeout=0.1)
  File "/usr/local/lib/python3.9/dist-packages/serial/serialutil.py", line 244, in __init__
    self.open()
  File "/usr/local/lib/python3.9/dist-packages/serial/serialposix.py", line 325, in open
    raise SerialException(msg.errno, "could not open port {}: {}".format(self._port, msg))
serial.serialutil.SerialException: [Errno 2] could not open port /dev/enocean1: [Errno 2] No such file or directory: '/dev/enocean1'

Verifie en faisant un ls /dev/en*

oui, je viens de mettre un faux nom pour voir ce que ça faisait. Et ça déclenche cette erreur là, qui est assez explicite pour le coup.

Donc comme avec /dev/enocean ça ne la déclenche pas, la clé est bien reconnue comme il faut. C’était juste pour tester ça. Et j’ai la confirmation avec le ls :

image

1 « J'aime »

Hello,

Pas besoin d’être root pour que ça fonctionne. L’utilisateur pi suffit.

Je ne peux rien tester avant demain soir mais:

  • Pouvez-vous lancer enoceanmqtt --debug et voir s’il y a un peu plus d’info intéressantes ?
  • Je vais refaire vos manips pour essayer de reproduire l’erreur chez moi.
  • Le soucis vient de la librairie Python EnOcean, j’essaierais de modifier le code si possible pour avoir plus de précision sur l’erreur.

Désolé que ce soit aussi galère pour vous

Pas + d’info avec le --debug malheureusement. Ce qui est bizarre c’est que quand je relance après une longue pause, ça fonctionne pendant 1 ou 2 minutes. Par exemple, lorsque je l’ai lancé ce soir, il a commencé par recevoir 4 « vrais » signaux, puis juste ne rien recevoir du tout (pas de log, même en débug). J’ai donc killé le script et relancé. Au bout d’un moment, je retrouve l’erreur classique serialException.
Si ça peut aider, voilà les logs avec debug

/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-18 22:59:15,165 INFO: Logging to file: /home/pi/.local/lib/python3.9/site-packages/enoceanmqtt/../enoceanmqtt.log
2022-06-18 22:59:15,166 INFO: Loading config file /etc/enoceanmqtt.conf
2022-06-18 22:59:15,168 DEBUG: Global config: {'enocean_port': '/dev/enocean', 'log_packets': '1', 'mqtt_host': '*****', 'mqtt_port': '1883', 'mqtt_client_id': 'enocean', 'mqtt_keepalive': '60', 'mqtt_prefix': 'enocean/', 'mqtt_user': '*****', 'mqtt_pwd': '*****'}
2022-06-18 22:59:15,168 INFO: Authenticating: *******
2022-06-18 22:59:15,169 DEBUG: Connecting to host *******, port 1883, keepalive 60
2022-06-18 22:59:15,177 INFO: SerialCommunicator started
2022-06-18 22:59:15,178 WARNING: Replacing Packet.optional with default value.
2022-06-18 22:59:15,179 INFO: Succesfully connected to MQTT broker.
2022-06-18 22:59:15,229 ERROR: Serial port exception! (device disconnected or multiple access on port?)
2022-06-18 22:59:15,230 INFO: SerialCommunicator stopped