Lors de l'insertion de la pile de batterie, le capteur démarre et passe automatiquement en mode AP (Point d'accès autonome). On se connecte alors au réseau Wifi présenté par le capteur (SSID de la forme shellyht-XXXXXX ou XXXXXX sont les dernières valeurs hexadécimale de l'adresse MAC du périphérique).
Pour le paramétrage, on utilise le navigateur web. Par défaut l'IP du capteur est 192.168.33.1. L'URL à taper pour accéder à la page de configuration est donc:
http://192.168.33.1
Pour intégrer le capteur dans un réseau wifi existant:
Désactiver la connexion du capteur au cloud constructeur:
Restreindre l'accès à la page de configuration:
Le firmware propose une API HTTP permettant d'obtenir des informations et de paramétrer le capteur via le navigateur ou via un client en ligne de commande tel que cURL:
Si l'authentification est active l'accès est restreint sauf pour la ressource /shelly
# Afficher les informations du périphérique curl --silent http://shelly-device.lan/shelly | jq { "type": "SHHT-1", "mac": "C45BBExxxxxx", "auth": true, "fw": "20221027-092707/v1.12.1-ga9117d3", "discoverable": false, "sleep_mode": true } # tentative de lecture des paramétrages sans authentification curl http://shelly-device.lan/settings 401 Unauthorized # Pour consulter une ressource restreinte: curl http://username:password@shelly-device.lan/settings?sleep_mode_period=12
La première requête permet d'afficher des informations concernant le capteur même sans authentification préalable. On trouve notamment la version du firmware “20221027-092707/v1.12.1-ga9117d3” et on peut y lire également la version de l'API utilisée 1.12.1
La plupart des paramétrages sont accessibles depuis l'interface web cependant certains attributs ne sont pas disponibles. Dans ce cas on peut
Désactiver INTERNET & SECURITY > Restrict login
# Lister les attributs curl --silent http://shelly-device.lan/settings
Ci-dessous un extrait de réponse possible:
{ "device": { "type": "SHHT-1", "mac": "C45BBExxxxxx", "hostname": "shellyht-device", "sleep_mode": true }, ... "sensors": { "temperature_threshold": 0, "temperature_unit": "C", "humidity_threshold": 0 }, "sleep_mode": { "period": 12, "unit": "h" }, "external_power": 0, "temperature_offset": 0, "humidity_offset": 0 }
La documentation de référence indique par exemple que l'attribut mqtt.update_period définit l'intervalle de mise à jour du status du capteur via MQTT. Cet attribut n'est pas modifiable via l'interface web cependant l'API REST permet de le modifier:
# Désactive la transmission périodique de l'état du capteur via MQTT curl --silent http://username:passord@shelly-device.lan/settings?mqtt_update_period=0 | jq
Le mode de transmission dépend de l'option Sensors Settings > external power supply
:
L'idée générale est de paramétrer puis d'instancier le Broker MQTT et de vérifier que les messages émis depuis le LAN sont bien réceptionnés.
Configuration d'une conteneur simple pour le Broker MQTT Mosquitto
version: '3.3' services: mosquitto: environment: {} image: eclipse-mosquitto:2.0.14 labels: phobos.app.category: monitoring,domotic phobos.app.description: broker receiver for home sensors ports: - published: 1883 target: 1883 restart: unless-stopped volumes: - ${PWD}/mosquitto.conf:/mosquitto/config/mosquitto.conf:ro - mosquitto_data:/mosquitto/data:rw - mosquitto_log:/mosquitto/log:rw volumes: mosquitto_data: {} mosquitto_log: {}
Création du conteneur:
docker-compose up -d mosquitto
Sur le serveur, autoriser les connexions sur le port 1883
# Ajoute une regle netfilter via UFW ufw allow proto tcp from any to any port 1883 comment 'Broker MQTT'
Pour afficher les messages réceptionnés, on souscrit a tous les messages:
# ouvrir un shell interactif dans le conteneur docker-compose exec mosquitto /bin/sh # souscription à tous les canaux mosquitto_sub --id root_observer --topic '#' --verbose
Depuis une machine du LAN, on crée un conteneur temporaire et on utilise le client mosquitto pour envoyer un message au Broker. Si tout se passe bien on le voit s'afficher
docker container run --rm --name mqtt_sender --interactive --tty eclipse-mosquitto:2.0.14 /bin/sh
Menu Internet & Security > Advanced - Developer Settings