REX sur mon premier objet connecté
Afin de combler une période de vacances de fin d’année creuse, covid-19 oblige, je me suis lancé dans la création d’un petit objet connecté. Cet article explique le cheminement de la conception jusqu’à la réalisation.
L’objectif de l’objet connecté
Le but de cet objet connecté est de pouvoir détecter une coupure électrique et une coupure réseau/internet dans un appartement distant. Pour ensuite envoyer une notification en cas de coupure et une autre notification lorsque le problème est réparé.
Bien sûr, l’objectif principal est de faire de la veille sur les sujets IoT, communications basses fréquences et modélisation 3D.
Fonctionnement de la détection de la panne
Pour detecter une coupure de courant, il y a plusieurs possibilités :
- Alimenter l’objet connecté à la fois par une source électrique indépendante (pile, batterie, solaire, …) et par le courant électrique de l’appartement. En cas de coupure de la source électrique principale, utiliser la deuxième pour garder l’objet allumé et pour envoyer un message distant de coupure
- Utiliser uniquement le courant électrique de l’appartement mais envoyer à intervalle régulier des messages « ping » à un service de supervision. Une absence de réception d’un message régulier signifie que l’objet n’a pas pu l’envoyer et qu’il y a défaut électrique ou de l’objet lui-même
La première option est plus fiable mais nécessite d’avoir une source électrique secondaire, qu’il faut maintenir/recharger.
L’inconvénient de la deuxième méthode est principalement que la panne sera détectée lors du prochain cycle de vérification de « ping » manquant et pas immédiatement. Ce qui n’est pas gênant pour le cas d’usage, donc allons-y!
Choix du protocole de communication
Maintenant le choix du fonctionnement réalisé, il faut définir comment les messages seront envoyés.
Pour identifier une coupure réseau/internet, un message pourra tout à fait être envoyé par le biais d’une carte réseau Ethernet, couplé au mécanisme de détection décrit dans la section ci-dessus.
Note : Ce mécanisme de détection repose en partie sur healthchecks.io, service permettant de superviser les traitements de lot/batch/cron, ayant une offre gratuite suffisamment élaborée pour ce cas d’usage. La configuration y est très simple, il suffit de spécifier l’intervalle de temps durant lequel un ping doit être fait, si un ping est manquant, après une période de « grace » une notification email sera envoyée. L’outil dispose d’autres méthodes d’intégrations, à découvrir.
Pour identifier une coupure électrique, il faut un moyen de communication qui ne repose pas sur du LAN, dans le cas où le réseau serait tombé.
GSM/3G/4G seraient des bons candidats si la zone n’était pas une zone quasi blanche…
Il y a probablement d’autres candidat, mais ceux qui semblent le plus déployés sont SigFox et Lora.
Ces deux semblent assez similaires, mais j’ai opté pour SigFox pour plusieurs raisons :
- Le coût du matériel est légèrement moins cher
- Le coût de l’abonnement au réseau SigFox est moins cher, 14euros vs 20euros, pour 140 messages par jour
- La portée semble être légèrement supérieure en milieu rural 50km vs 20–30km, selon les tests
- La petite taille des messages n’est pas gênante, puisqu’il s’agit d’un simple « ping », 12 octets vs 51 octets
- Le non chiffrement des données n’est pas gênant pour le cas d’usage
Choix du matériel
Il existe de nombreux modules implémentant SigFox et Ethernet, des shields Arduino aux cartes miniaturisées.
Réaliser cela en utilisant une Arduino UNO ou un clone chinois aurait fait l’affaire, mais j’ai opté pour une ARDUINO MKR FOX 1200, qui a les avantage d’être petite en taille, et d’intégrer un module SigFox, redoutable pour 30–35€ !
De plus chaque module/carte SigFox intègre un abonnement au réseau pour une durée de 1 an, puis 14€ par an ensuite pour 140 envois par jour (minimum à 6€/an pour 2 messages par jour).
Note : La carte est livrée avec une antenne, qui doit être clipsée sur la carte ; aucun message ne peut être envoyé sans cette antenne branchée.
Pour la partie Ethernet, la carte ARDUINO MKR ETH SHIELD, fait l’affaire, aux mêmes dimensions que l’autre, elle s’emboite parfaitement à l’autre carte, au-dessus ou au-dessous peu importe.
Implémentation
Une fois les deux cartes emboitées, on peut passer à la partie informatique. Le code produit est très simple, vous pouvez voir à quoi il ressemble ici.
Le fonctionnement de SigFox est très bien pensé à l’initialisation, un programme Arduino peut être chargé sur la carte. Ce programme affiche l’ID et le PAC de la carte, permettant d’enregistrer la carte sur le réseau SigFox, et d’envoyer le premier message, ce qui activera la première année gratuite d’abonnement.
L’interface back-end SigFox est tout aussi simple d’utilisation, une fois la carte enregistrée sur leur réseau, il suffit de définir un point de rappel (call-back) qui sera appelé à la réception d’un message par le réseau. Dans ce cas d’usage, il s’agit d’appeler l’url fournie par healthchecks.io, correspondant à l’indicateur électricité, lorsqu’un message est reçu.
Toutes les 10.5 minutes, un message SigFox est envoyé, pour ne pas dépasser la limite de 140 messages par jours permise par le réseau. Évidemment, en cas de coupure électrique, aucun message ne sera envoyé, ce qui déclenchera une alerte après 23 minutes (11 + 12) sans message.
Note : Healcheck.io est capable d’envoyer des alertes lorsque le service est réactivé après une panne réseau ou électrique.
Concernant la détection de coupure Internet/réseau, la carte Ethernet se charge d’envoyer des requête HTTP GET sur l’adresse correspondante à l’indicateur réseau healthchecks.io, toutes les 5 minutes. Si aucun message n’est reçu pendant 11 minutes (5 + 6), une alerte sera déclenchée sur le même principe que pour l’indicateur électricité.
Afin d’avoir l’objet fonctionnel il suffit donc de l’alimenter sur le port micro USB, et de brancher une prise Ethernet reliée à un routeur/switch. Ce dernier distribuera une adresse via DHCP au module.
Et voilà, l’objet connecté rempli deux fonctions très basiques, pour un coût raisonnable. Ce qu’il faut retenir est la simplicité de la conception et de la réalisation. Essentiellement grâce au grand nombre de composants électroniques existant et grâce à une documentation très avancée, élaborée par une communauté active de passionnés.
Bonus : Mise en beauté
Une fois la logique implémentée, il reste à fabriquer le boitier pour rendre l’ensemble « joli ». Je me lance donc dans la conception d’un boitier imprimé en 3D permettant de faire rentrer les deux cartes et l’antenne tout en laissant la connectique accessible, via Fusion 360. Le logiciel est une référence dans la modélisation 3D et est gratuit pour les usages non commerciaux.
La conception n’est pas parfaite, il y a du jeu dans le boitier, mais ça permet vraiment de progresser sur l’outil de modélisation en manipulant les divers outils qu’il propose.
Et puis avec l’ensemble des composants à l’intérieur, l’antenne vient se positionner au-dessus de la carte.
Et avec le boitier refermé, on voit d’ailleurs bien que le couvercle du boitier déborde du boitier…