ESPHome : Noeuds hors ligne
2022-01-09T00:00:00Z | 4 minutes de lecture | Mise à jour le 2022-01-09T00:00:00Z
Je résous les problèmes de nœuds qui apparaissent faussement hors ligne sur l’interface Web d’ESPHome.
Problématique
Il m’arrive souvent que, lorsque j’ouvre l’interface d’ESPHome,
je voie qu’une partie de mes équipements sont dit hors ligne.
Cependant, ils répondent bien aux pings et leurs interfaces Web sont accessibles.
Du coup, il m’est presque impossible de les mettre à jour via ESPHome
(des fois sa passe, des fois non…).
Pour pallier à cela, je récupérais le firmware compilé par ESPHome afin
d’effectuer le flashage via l’interface Web du module.
En souhaitant changer l’adressage réseau de mon LAN, je me suis repenché sur la question. Il semble que j’ai trouvé une manière de faire et c’est ce que je vous partage ici.
Principe
Par défaut, ESPHome utilise le protocole mDNS
pour établir la connexion avec les clients.
Mon problème semble venir du fait que j’utilise des _
dans mes noms de nœuds,
cela est précisé dans la FAQs d’ESPHome.
Ayant l’habitude avec Home Assistant d’utiliser des_noms_comme_cela
,
j’ai fait de même avec tous les modules ESPHome ! Il faut donc que j’y remédie.
J’ai aussi trouvé un moyen de faire pour qu’ESPHome utilise des adresses IP en lieu
et place du mDNS. Cela permet de résoudre cette problématique pour les gens qui
utilisent des VLANs. En effet, si le serveur ESPHome n’est pas dans le même sous-réseau
que les modules, aucune chance que le mDNS fonctionne car ce protocole fonctionne en broadcast.
À mon sens, si on utilise des adresses IP, il faut bien qu’ESPHome les connaisse.
De ce fait, mes modules utiliseront maintenant systématiquement des adresses IP fixes (statiques).
Forcer l’utilisation du ping
Pour forcer l’utilisation du ping, on va éditer notre Docker Compose
afin d’y ajouter la variable d’environnement ESPHOME_DASHBOARD_USE_PING
que l’on mettra à la valeur true
.
Mon fichier docker-compose.yml
est donc le suivant :
---
version: '3.8'
services:
esphome:
image: esphome/esphome
container_name: esphome
restart: unless-stopped
healthcheck:
test: curl -f http://localhost:6052 || exit 1
interval: 1m
timeout: 10s
retries: 3
start_period: 30s
environment:
- TZ=Europe/Paris
- ESPHOME_DASHBOARD_USE_PING=true
#ports:
# - 6052:6052
volumes:
- /var/lib/esphome/config:/config:rw
network_mode: host
La modification effectuée, on relance la stack avec un docker-compose restart
.
Pour ceux qui ont installé ESHome via l’add-ons store d’HA,
il faut ajouter la variable de configuration suivante : status_use_ping=true
Utilisation d’IP fixe
Comme écris dans la documentation,
on ajoute donc une section manual_ip
à notre composante Wi-Fi.
Extrait de la section Wi-Fi d’un de mes modules :
wifi:
ssid: !secret secret_wifissid
password: !secret secret_wifimdp
manual_ip:
static_ip: 192.168.17.92
subnet: 255.255.255.0
gateway: 192.168.17.254
Renommage des modules
J’ai donc renommé mes modules afin que les noms ne contiennent
plus de _
en remplaçant simplement des _
par des -
.
Extrait de configuration d’un module :
|
|
[!WARNING] Si vous utilisez des substitutions pour vos noms de sensors et que ces derniers utilisent le nom du module qui contient des
-
, ben vous ne pouvez pas !
Les noms de modules ne peuvent prendre de-
…
Vu que je fais comme ça, j’ai contourné le problème en n’utilisant plus ma substitution dans le nom (mis en commentaire dans l’exemple ci-dessous) :
1 2 3 4 5 6 7 8 9 10 11 12 13
substitutions: fruits_des_bois: gosund_sp1_1 esphome: # name: ${fruits_des_bois} name: gosund-sp1-1 platform: ESP8266 board: esp8285 switch: - platform: gpio name: "${fruits_des_bois}_relay" pin: GPIO14
Effectuer la transition
Une fois ces modifications effectuées, il faut flasher tous les modules.
Vu que plus rien ne correspond au niveau du nom et de l’adresse IP,
il est normalement impossible de le faire via ESPHome.
Cependant, il existe une variable use_address
qui permet de résoudre ce problème.
use_address (Optional, string): Manually override what address to use to connect to the ESP. Defaults to auto-generated value. Example, if you have changed your static IP and want to flash OTA to the previously configured IP address.
Documentation ESHome
Il faut donc ajouter l’adresse IP actuelle de notre module à la configuration pour pouvoir flasher le module en OTA.
En reprenant mon exemple :
wifi:
ssid: !secret secret_wifissid
password: !secret secret_wifimdp
manual_ip:
static_ip: 192.168.17.92
subnet: 255.255.255.0
gateway: 192.168.17.254
use_address: 192.168.5.34
[!NOTE] Comme j’effectue aussi un changement de réseau, mon serveur à une seconde adresse IP afin d’en avoir une dans le réseau
192.168.5.0/24
(initial) et192.168.17.0/24
(le nouveau réseau).
Je flashe donc sans soucis mon module via cette astuce.
En vue de la configuration actuelle, si je flashe à nouveau mon module,
ESHome va encore utiliser l’ancienne adresse (192.168.5.34
) à cause
du use_address
. Il faut donc l’enlever pour le prochain flashage.
Afin d’être sur de moi, j’ai reflashé le module après avoir enlevé cette ligne.
Résultat
Depuis que j’ai fait ces modifications, je n’ai plus de problèmes de nœuds dits OFFLINE alors qu’ils sont bien en fonctionnement.
J’ai aussi effectué quelques MAJ d’ESPHome et tous fonctionnent comme attendu.