Table des matières

, , , ,

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:

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:

Restreindre l'accès à la page de configuration:

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

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:

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

docker-compose.yml
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

Lorsque la connexion au Broker MQTT réussi, la diode d'état rouge passe de clignotant à fixe.

Références