{{tag>hardware iot shelly capteur sensor}} ====== Mise en service des capteurs Shelly H&T ====== 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: * Internet & Security > WiFi mode - Client * Cocher l'option "Connect the Shelly device to an existing WiFi Network" * Compléter le SSID et le mot de passe * De préférence cocher "Set static IP address" et définir une IP statique. * Valider en cliquant sur SAVE Si le capteur doit s'intégrer à un réseau sans fil avec filtrage par adresses MAC attention: le capteur présente une adresse MAC différente quand il est configuré en mode AP (c6:5b:be:xx:xx:xx) et quand il est configuré en client (c4:5b:be:xx:xx:xx). Ce sera donc l'adresse MAC c4:5b:be:xx:xx:xx qu'il faudra autoriser à joindre le réseau sans fil. Désactiver la connexion du capteur au cloud constructeur: * Internet & Security > Cloud : cliquer sur le bouton "DISABLE CLOUD" et confirmer. Restreindre l'accès à la page de configuration: * Internet & Security > RESTRICT LOGIN * Settings > Device name : définir un nom pour le capteur ===== L'API HTTP ===== 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** * [[https://shelly-api-docs.shelly.cloud/gen1/#common-http-api|Documentation de référence de l'API]]; * [[https://shelly-api-docs.shelly.cloud/gen1/#shelly-h-amp-t|Les informations spécifiques au Shelly H&T]]. 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 ===== Transmission périodique des mesures ===== Le mode de transmission dépend de l'option ''Sensors Settings > external power supply'': * En mode autonome, (Use external power supply décoché) le capteur passe le maximum de temps en sommeil. Il ne transmet des valeurs que toutes les 12 heures maximum ou lorsque les valeurs de seuil de variation sont atteintes; * En mode batterie (external_power=1), le capteur s'éveille et transmet toutes les 10 minutes. La valeur de l'attribut **sleep_mode.period** est retournée par l'API REST mais il n'est pas modifiable. Certaines anciennes documentations mentionnaient des modification de ce paramètre. Les essais récent n'ont pas fonctionnés. ===== Mise en service du Broker ===== 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 * décocher l'option "Enable CoIoT" puis cliquer sur le bouton SAVE * cocher l'option "Enable MQTT" * Entrer l'adresse du Broker, cocher l'option "Retain" et laisser la QoS à 0, cliquer sur le bouton SAVE Lorsque la connexion au Broker MQTT réussi, la diode d'état rouge passe de clignotant à fixe. ===== Références ===== * https://shelly.cloud/knowledge-base/devices/shelly-ht/ * https://shelly-api-docs.shelly.cloud/gen1/#shelly-h-amp-t-settings