Les objets connectés en Wi-Fi sont le plus souvent décevants, mais il y a des exceptions. C'est le cas de ceux de Shelly qui proposent une gestion locale via une interface web et une API complète. Nous les avons testés à travers la prise connectée avec mesure de consommation Plug S.
Ces dernières années, la domotique s'est largement transformée sous l'impulsion des géants américains du numérique. Alors qu'elle s'était structurée autour de différents protocoles basse consommation spécialisés (voir notre magazine #2), ils ont peu à peu imposé le Bluetooth et le Wi-Fi comme solution d'accès.
L'ère de la domotique facile et ses travers
Leur objectif principal était en effet de démocratiser des solutions grand public, clé en main, où il était possible de positionner leurs propres produits comme éléments centraux. Ces deux protocoles sans fil étant très connus, peu coûteux et présents dans tous les smartphones, tablettes et autres appareils, il était facile de les plébisciter.
Cette façon de faire s'est néanmoins confrontée à la réalité. Nombre de constructeurs se sont créé autour de la « folie » des objets connectés, imposant leurs applications, comptes et autres outils peu pratiques, pas toujours très sécurisés. Alors que la domotique ouverte explosait, on venait de lui ajouter une couche dispersée, composée de solutions propriétaires trop souvent mal ficelées. Elles sont encore légion aujourd'hui (nous y reviendrons).
Il y a néanmoins certains acteurs qui ont fait les bons choix et se sont démarqués. Comprenant que, quelle que soit la solution technique retenue, ce n'était pas en enfermant ses clients dans de mauvais outils que l'on allait les convaincre d'investir en masse dans les solutions maison. Comme on l'a vu avec l'API locale Philips Hue ou celle (officieuse) des prises connectées de TP-Link, un simple outil du genre peut faire toute la différence.
Shelly l'a bien compris et en a d'ailleurs fait sa force principale. La société bulgare propose ainsi une gamme complète de modules et produits domotiques exploitant le Wi-Fi, mais de la bonne manière. Dans le cadre de notre dossier sur les prises connectées, nous avons acheté et testé leur Plug S pour le vérifier.
Les partenaires et protocoles supportés par Shelly
Quand le Wi-Fi ne sert pas à enfermer les clients
L'utilisation du Wi-Fi dans une solution domotique n'est en général pas vu comme la solution idéale par les puristes : ce protocole de réseau sans fil est souvent surchargé (notamment en zone urbaine), pas toujours très stable et n'a pas vraiment été prévu pour de la basse consommation, ce qui pose souci pour des produits devant être autonomes.
Mais il y a une autre raison : les objets connectés exploitant le Wi-Fi sont en général très mauvais. Pensés pour être vendus en masse, à petit prix, par des constructeurs qui n'ont pas grand-chose à faire de l'expérience utilisateur, ils devaient surtout accompagner la vague d'équipement d'enceintes connectées. Car allumer une prise ou une ampoule via Alexa/Google Assistant/Siri, c'est rigolo, et cela fait un cadeau parfait pendant les fêtes. Si en plus il peut ne coûter que quelques dizaines d'euros avec des marges énormes... c'est encore mieux.
Résultat, les clients se retrouvent le plus souvent avec des appareils ne fonctionnant qu'avec une application propriétaire, nécessitant la création d'un compte, n'ayant aucune mécanique d'ouverture ou presque. Dans le meilleur des cas, on a droit à une API passant par les serveurs de l'entreprise, même pour un contrôle local.
Bref, tout ce que l'on devrait éviter en domotique.
Un catalogue intéressant, encore méconnu
Si Shelly a fait le choix du Wi-Fi (4, 802.11n), c'est heureusement avec une approche ouverte. Ainsi, ses produits embarquent un serveur web permettant une gestion locale via une interface en ligne. Elle est complétée par une API, elle aussi locale. Comme nous le verrons plus loin, les deux sont accessibles avec ou sans authentification.
De quoi faciliter les intégrations tierces, nombreuses, avec bien entendu l'éternel duo Amazon Alexa et Google Assistant. Dernière en date : un partenariat annoncé peu avant le CES avec le système domotique open source Home Assistant. Mais il y a aussi Domoticz, openHAB et quantité d'outils/plugins. Ainsi, on trouve même des firmwares alternatifs permettant un support d'Apple HomeKit, avec des fonctionnalités parfois limitées.
La société est surtout connue pour ses modules, proposés dès 10 euros environ avec le Shelly 1, permettant de contrôler un appareil. D'autres permettent d'aller au-delà, de gérer des moteurs de volet roulant, se connectent avec ou sans neutre, intègrent parfois des fonctionnalités de mesure de consommation, etc.

Mais son offre se compose aussi d'ampoules connectées, de divers accessoires et capteurs. Une solution intéressante sur le papier, mais dans les faits, tout est-il si idyllique ?
Premier regret, Shelly est peu distribué sur le marché français. On trouve bien entendu ses produits dans des boutiques spécialisées, mais pas chez des généralistes, même lorsqu'ils ont un large rayon consacré à la domotique. Le plus simple est donc de passer par la boutique en ligne du constructeur, simple et efficace.
Elle n'oblige pas à la création d'un compte, vous pouvez y commander en invité (guest). Les prix y sont raisonnables, certains produits étant proposés à l'unité ou via des packs à tarif réduit. La garantie est assurée pendant deux ans. On peut souscrire à un niveau « Plus » facturé 10 %, donnant droit à un remplacement gratuit (sans frais de port) pendant un an, même si la panne est de notre fait : mauvais câblage, casse, etc.
La livraison s'effectue de manière standard (dès 6,63 euros) ou via DHL (dès 15,28 euros). La carte bancaire et PayPal Express sont acceptés comme moyen de paiement.
Plug S : un modèle compact et accessible
Nous avons commandé plusieurs modules (nous y reviendrons), ainsi que le produit de notre test du jour : la Plug S vendue 20 euros (77 euros par 4). Cette prise connectée avec mesure de puissance est clé en main : il suffit de la brancher au secteur pour l'utiliser. Elle nous est arrivée en quelques jours, dans une simple enveloppe à bulles.
On apprécie que son emballage soit un carton minimal, juste à sa taille. Sa compacité est d'ailleurs un autre de ses atouts : 69 mm de long pour 46 mm de diamètre, comme la Wall Plug de Fibaro (vendue 60/70 euros). Comme elle, elle est limitée à 2 500 watts (12 A). Elle ne reprend par contre pas l'un de ses points forts que nous avons particulièrement apprécié : une LED dont la couleur change selon la puissance consommée. Dommage.
Deux LED permettent par contre de connaître le statut de la connexion Wi-Fi et l'état de la lampe. Sur le côté, un petit bouton de gestion est présent, ses fonctionnalités sont multiples comme nous le verrons plus loin. Si vous cherchez un modèle capable d'encaisser jusqu'à 3 500 watts (16 A), la Shelly Plug est également proposée. Mais elle est plus chère (32,4 euros) et surtout bien plus imposante (85 x 57 x 98 mm).
Un simple serveur web pour tout gérer
Comme nombre de solutions Wi-Fi, la Plug S et les modules de Shelly embarquent un micro-contrôleur ESP8266 capable de faire tourner un petit serveur web. Dès qu'elle est branchée au secteur, la prise émet un réseau Wi-Fi auquel on peut se connecter. L'interface est alors accessible via l'adresse IP 192.168.33.1.
On y obtient une interface classique mais plaisante, qui s'adapte à l'appareil (ordinateur, smartphone, etc.). Elle affiche la puissance actuellement consommée en watts. La valeur se met régulièrement à jour sans rafraîchissement de la page. On peut d'un clic allumer ou éteindre la prise.
De nombreuses fonctionnalités sont présentes pour configurer des délais de (dés)activation automatique ou selon un calendrier. Dans ce second cas, cela peut être à une heure précise ou selon le lever/coucher du soleil.
Il y a aussi les actions qui permettent d'envoyer une ou plusieurs requêtes à une URL lorsque le bouton principal est pressé ou selon le statut de la prise (allumée, éteinte). C'est notamment une manière de pouvoir faire interagir les produits Shelly entre eux via leur API locale (dont nous vous parlerons un peu plus loin).
La configuration permet de définir une puissance maximale qui peut être fournie (de 1 à 2 500 watts), mais aussi choisir le statut de la prise lorsqu'elle est branchée : allumée, éteinte ou un retour à son dernier état. On peut lui donner un nom, un type, un canal. Les LED peuvent être activées ou non selon votre préférence.
Lorsque la prise est connectée à votre réseau local, et donc à internet, elle propose deux firmwares : le dernier stable ou bêta en date. On regrette que leurs notes de versions ne soient pas directement visibles. La société, qui propose plusieurs outils de support et de remontée de demande de fonctionnalité se repose malheureusement sur Facebook uniquement pour cette communication technique. Via un groupe public dédié.
L'interface propose également tout ce qu'il faut pour redémarrer ou réinitialiser la prise, la rendre découvrable ou non sur le réseau, lui permettre de relancer sa couche logicielle après un souci de connexion, voir ses informations, etc.
Accès au réseau, fonctionnement AP ou via MQTT
Pour un produit Wi-Fi, il y a un autre onglet essentiel : celui de la configuration des accès réseau. Comme évoqué, la prise fonctionne par défaut comme un point d'accès (AP). On peut s'y connecter, la gérer, etc. Ce mode peut être renforcé par l'ajout d'un mot de passe. Sinon, on peut indiquer à la prise un réseau Wi-Fi tiers auquel elle peut se connecter (mode STA). Seule restriction : il doit être sur la bande des 2,4 GHz, la seule gérée.
Les développeurs peuvent activer le partage de ressources entre origines multiples (CORS) mais aussi un accès via le protocole léger MQTT (sans chiffrement). Pour cela, il faut définir l'URL et les paramètres d'un serveur (broker), qui peut être local ou distant. La prise lui enverra alors régulièrement des informations (statut, consommation, température) qui pourront être accédée via différents « topic ». Elle peut aussi être allumée/éteinte de la sorte.
L'accès à l'interface web, mais aussi à l'API, peut être protégé par un couple identifiant/mot de passe. Une procédure activée au sein du serveur HTTP, là aussi sans chiffrement. C'est encore l'un des points faibles des produits Shelly qui doivent donc être utilisés en prenant ce facteur en compte.
Les adeptes d'une gestion via le « cloud » simplifiée peuvent opter pour le service en ligne de Shelly qui met en place une interface dédiée permettant de gérer plusieurs de ses appareils. Il faut pour cela activer la fonctionnalité au sein de la prise puis l'associer à votre compte (MQTT doit être inactif). On apprécie que tout cela soit optionnel.
Notez enfin que Shelly propose des applications mobiles reprenant l'accès à cette interface en ligne. Mais aussi une autre, sur macOS et Windows, pour découvrir ses appareils présents sur votre réseau. Tout est détaillé ici.
L'API locale : un petit bijou pour bidouilleurs
Là où Shelly peut séduire nombre de développeurs et autres adeptes des solutions maison, c'est via l'API locale qui permet de communiquer directement avec ses produits. Vous n'avez ainsi pas à craindre que l'application officielle ne soit plus disponible, que les serveurs du constructeur tombent en rade, rien de tout cela n'est nécessaire.
Tout ce qui est possible via l'interface web l'est via l'API, qui est d'ailleurs plus complète. On peut l'utiliser pour récupérer des informations depuis la prise ou bien la configurer. Il s'agit d'une API REST classique, renvoyant des réponses au format JSON, exploitable dans des scripts ou via cURL.
Par exemple pour connaitre l'état de la prise :
curl http://192.168.33.1/status
Si vous demandez la consommation courante via cette commande :
curl http://192.168.33.1/meter/0
Vous obtiendrez un résultat de ce type
{"power":0.00,"overpower":0.00,"is_valid":true,"timestamp":1611563166,"counters":[0.000, 0.000, 0.010],"total":108}
Pour modifier le mot de passe d'accès à l'API ou l'interface :
curl "http://192.168.33.1/settings/login?enabled=1&username=identifiant&password=motdepasse"
Puis pour faire une requête avec ces identifiants :
curl --user identifiant:motdepasse http://192.168.33.1/status
Une prise qui répond instantanément, utilisable via des scripts
Par rapport à la prise de TP-Link, outre le fait que l'API soit officielle et permette une authentification, même basique, on apprécie que la réponse soit instantanée. Mais il y a une raison à cela : là où la prise TP-Link effectue une mesure à chaque requête, avec la Shelly Plug S, la réponse vient d'un cache qui est régulièrement mis à jour.
Cela permet d'obtenir une réponse rapide en évitant toute surcharge de l'API. Mais il faut en tenir compte dans vos intégrations et différents scripts. Par exemple, si l'on reprend celui développé pour nos protocoles de tests et qu'on l'adapte, en effectuant une requête toutes les 300 millisecondes, on obtient le résultat suivant :
Si l'on relève trop régulièrement la consommation, elle se répète
Comme on peut le voir ci-dessus, le même relevé se répète plusieurs fois, jusqu'à six selon les cas. Après analyse nous avons constaté qu'il fallait une pause de deux secondes entre chaque requête pour éviter ce phénomène.
Adapter notre script Python n'a pas été très compliqué. Le module kasa-python n'est plus nécessaire, mais il nous faut effectuer nos requêtes directement désormais, via le module requests qui doit être installé via PiP. Cela ne complexifie néanmoins pas trop le code, que vous pouvez librement réutiliser :
import requests, json
from requests.auth import HTTPBasicAuth
from time import time, sleep
# On déclare les paramètres de connexion à la prise
API_URL = "http://192.168.33.1/meter/0"
API_LOGIN = "identifiant"
API_PASS = "motdepasse"
# On initialise les variables qui seront utilisées
count = total = 0
price_1kWh = 15.58
time_start = time()
while True:
# On lit les données de la prise et on récupère la consommation actuelle
r = requests.get(API_URL, auth = HTTPBasicAuth(API_LOGIN, API_PASS))
watts = r.json()['power']
# On met à jour les différentes variables
count += 1
total += watts
# On effectue les calculs des valeurs à afficher
average = total/count
elapsed = time() - time_start
energy_J = average * elapsed
energy_Wh = energy_J / 3600
price_total = energy_Wh / 1000 * price_1kWh
# On affiche le résultat et on attend 1 seconde avant de recommencer
print(f"{count}. "
f"Relevé : {watts:.2f} W - "
f"Moyenne : {average:.2f} W - "
f"Temps : {elapsed:.2f} s - "
f"Energie : {energy_J:.2f} J ou {energy_Wh:.2f} Wh - "
f"Coût : {price_total:.10f} cts€")
sleep(2)
Comme vous pouvez le voir, nous l'avons ici implémenté l'authentification HTTP, pensez donc à modifier l'IP et le couple identifiant/mot de passe. Si vous ne l'utilisez pas, il suffit de retirer l'import de HTTPBasicAuth
et la déclaration de la variable auth
dans la requête envoyée à la prise. Comme détaillé plus haut, nous avons passé le temps de pause entre deux requêtes à deux secondes pour éviter de relever plusieurs fois une même valeur.
Ainsi, si la prise de Shelly cumule les avantages en étant plus ouverte, facile à gérer, avec une API locale officielle plutôt qu'une officieuse qui peut disparaître à tout moment, il faudra prendre en compte ses limites au moment de votre choix : puissance limitée à 2 500 W (12 A), pas de chiffrement, délai de mise à jour des informations.
Néanmoins, cela sera bien suffisant pour la très grande majorité des cas. Avec son format plus compact, ses atouts multiples et son prix abordable, elle a très largement notre préférence. Espérons que cela finira par inspirer la concurrence pour que l'on en finisse avec la multiplication des applications propriétaires sans API locale.