Windows IoT par l'exemple

IOT
Pierrick Gourlain - 13/11/2017 à 00:00:000 commentaire

Vous êtes un développeur, vous aimez .Net et vous avez envie d’explorer de l’IoT chez vous ?

Je vous propose une application simple : « compter les ouvertures de votre porte principale ».

Il vous faut donc : un raspberry PI 3, un capteur, une résistance.

L’application reçoit les notifications de changement d’état du capteur, donc quand la porte s’ouvre ou quand la porte se ferme. La résistance de 100K, est présente pour forcer l’état à 0 quand le contacteur (ici notre capteur) est ouvert. Pour l’instant ces notifications ne nous permettent pas d’exploiter les données dans le temps, mais uniquement de réagir sur une ouverture ou une fermeture. Ajoutons quelques éléments pour stocker et visualiser ces états. Ce qui nous donne :

Il est également possible de connecter notre application sur Windows Azure et son hub IoT (https://azure.microsoft.com/fr-fr/services/iot-hub/)

L’idée ici est la suivante : puisque j’ai un raspberry qui tourne en permanence pour capturer les données du capteur, je peux donc également l’utiliser pour le stockage et l’exposition web, le tout derrière ma box -> et donc pour l’instant tout est dans mon « intranet » 😉

Une base de données…SQL server…et bien non.. le raspberry c’est de l’ARM… par contre Sqlite est supporté sur ce type de plateforme !

Côté WebApp, il est possible de faire une application AspNet.Core qui expose une application Web (https://damsteen.nl/blog/2017/06/30/how-to-run-aspnet-core-application-on-windows-iot)

J’ai choisi d’intégrer la webapp dans mon application UWP, du coup le déploiement est plus simple puisque que tout est dans le même package. Evidemment dans le cadre d’une exposition à un large public (autre que les membres de votre famille 😉), il faudra éclater cette architecture et se tourner vers Azure si vous n’avez pas l’infra sous la main.

En synthèse cela donne :

Passons aux choses sérieuses !

Installation de Windows 10 IoT sur un raspberry PI 3.

• Étape 1 et 2 : suivez le guide https://developer.microsoft.com/fr-fr/windows/iot/getstarted#


• Globalement, depuis un PC Windows vous configurez une SDCard avec un Windows 10

IoT prêt à l’emploi et qui se connecte à votre réseau wifi automatiquement au

démarrage


• Etape 3 : le paramétrage du poste de dev (https://developer.microsoft.com/frfr/

windows/iot/Docs/GetStarted/rpi3/sdcard/stable/getstartedstep3 )

• Visual Studio 2017 (Community Edition fonctionne également)

• Etape 4 : écriture de l’application !

Ici, l’application UWP pour Windows IoT, n’est ni plus ni moins qu’une sorte d’application console (une Background App -> https://docs.microsoft.com/en-us/windows/iot-core/develop-your-app/backgroundapplications).

Le point d’entrée de l’application est donc :

Le principe est simple, lors du démarrage de l’application, on s’abonne au changement d’état d’une ‘pin’ du GPIO. Pour ensuite effectuer ce que l’on désire.

Pour observer une broche du GPIO, il suffit de 3 lignes de code

Pour transformer un changement d’état en « PorteOuverte » / « PorteFermée », il n’en faut pas beaucoup plus

Le point important ici est qu’il existe des contacteurs normalement ouverts ou des contacteurs normalement fermés. La différence entre ces deux types de contacteurs est que l’un renvoi 1 quand les deux parties sont en contact et l’autre 0.

Maintenant que nous avons identifié les cas « PorteOuverte et PorteFermée », il ne reste plus qu’à sauvegarder ces informations dans la base.

Le plus simple serait d’écrire dans la base tous les changements d’état, donc un enregistrement avec un Datetime et open/close, oui mais cela à un inconvénient. Il faut corréler les enregistrements 2 par 2 pour avoir la durée d’ouverture. Du coup j’ai choisi de faire cette corrélation en mémoire avant sauvegarde en base.

Sur l’ouverture, seul l’heure est capturée en mémoire

Et sur la fermeture, un service spécifique s’occupe d’ajouter un enregistrement en base. Ici arbitrairement, j’ai choisi de ne prendre en compte que les ouvertures/fermetures de plus d’une seconde…dans la réalité quand on rentre ou sort, cela prendre au minimum 4 à 5 secondes.

Passons à l’application Web

Pour démarrer un serveur Web au sein de l’application UWP. J’utilise le package restUP : https://github.com/tomkuijsten/restup

Ce package s’utilise un peu comme Asp.Net :

Comme avec Asp.Net Core, j’ai un contrôleur qui va me fournir des APIs utilisable par du JS dans le browser.

Le dossier Web représente ce qui est exposé. J’ai profité de ce projet pour également explorer vuejs (un framework web côte client). Mon architecture est donc

Le « controller » ne possède que des apis REST qui seront utilisées par mon client web (index.html + *.js)

En termes de résultat on peut donc à partir d’un seul capteur obtenir les informations suivantes :

Comptage des ouvertures sur la semaine, le mois, l’année. Egalement le temps d’ouverture pour par exemple calculer la déperdition de chauffage, ou émettre un son quand la porte est ouverte trop longtemps (le chat peut s’échapper 😉), …

A partir de ces mêmes données on peut construire des graphiques :

Vue sur le mois en cours

Vue sur l’année (le début graphique c’était en phase d’expérimentation)

 


Conclusion :


A partir d’un capteur qui fournit un 0 ou 1, on génère 2 données (date de début, date de fin). Ensuite à partir de ces dates on obtient d’autres données (totaux agrégés de manières différentes). Les usages sont donc multiples :

- J’ouvre ma porte au maximum 100 fois par semaine. Dans combien de temps faudra-t-il que je graisse les gonds de la porte ?

- Pendant les semaines d’hiver ma porte est restée ouverte X heures, quel est l’impact sur le chauffage.

- La porte n’a pas été ouverte pendant plus de 2 jours, envoyer une alerte SMS, pour quelqu’un vienne nourrir le chat (ou rappeler à celui ou celle qui en était chargé de venir le faire 😉)

- En mode surveillance : hum…. C’est bizarre il rentre super tard tous les premiers jeudis du mois…

- ….

Il également imaginable d’ajouter un détecteur de présence pour savoir si c’est une entrée ou une sortie de quelqu’un, ce qui démultiplie le nombre d’usages…

 

RDV sur mon GitHub pour une en ligne prochaine du code source !

https://github.com/pgourlain

 

Commentaires :

Aucun commentaires pour le moment


Laissez un commentaire :

Réalisé par
Expaceo