Pi-Vigilance: Monitoring et alerte maison

Voici une récidive du premier article Pi-Vigilance avec une nouvelle question... dont la réponse offre une approche intéressante au concept Pi-Vigilance (toujours expérimental bien-entendu)

Question
Je souhaiterais équiper un Raspberry pour rapatrier diverses mesures, si possible en RF (433Mhz),  en vue d’analyses par un logiciel développé maison.
Il s’agit principalement de :
  • Senseurs : températures, mouvements, etc.
  • compteurs : consommation électrique, impulsion (eau et gaz)
Le but est donc aussi que je fasse moi-même des recherches puisque c’est surtout pour « m’amuser », l’idée étant quand-même que ça serve pour, par exemple, finalement recevoir un email (mais ça mon logiciel s’en occupera) si une fenêtre est ouverte en haut alors que le chauffage (électrique ou gaz) est allumé à côté...

Je n’y connais malheureusement pas grand-chose en électronique et je me dirigeais donc vers les composants assemblés trouvés sur le site d'Megni Energy Monitoring  et OpenEnergyMonitor.org

Source: Megni Energy Monitoring

Source: Megni Energy Monitoring

Source: Megni Energy Monitoring
Petit préambule
Je me suis interrogé sur:
  1. L'intérêt d'un réseau RF (voyez plus bas, c'est quand même intéressant)
  2. Le senseurs que nous avons à disposition chez MCHobby.be 
  3. Les alternative pour capturer les informations de mesures et rapatriement des informations...
Cet article "Pi-Vigilance... (le retour)" découle de ces cogitations... principalement à cause du support RF. La réponse demande, à ce stade, du savoir technique à moins d'acheter directement du matériel OpenEnergy sur leur shop.

RF Or Not RF... voila une bonne question
Tout cet article découle de cette question: RF or not RF? (Radio Fréquence ou pas de Radio Fréquence)
Il existe de nombreux produits de transmission RF et dérivés diverses pour Raspberry et Arduino.
  • ZWave fait un tabac (et en passe de devenir un standard industriel), 
  • Ciseco propose différents modules RF pour Arduino et Pi, 
  • OpenEnergy propose également sa propre gamme pour du monitoring RF
  • Et il y a encore les bons vieux XBee et ZigBee (avec adaptateur chez Ciseco)
Si vous n'avez rien a disposition à la maison... l'une de ces options est peut-être une approche attrayante.

Par contre, concernant OpenEnergy, je me demande quel est l'intérêt d'utiliser des émetteurs/récepteurs en 433Mhz. Cette fréquence est malheureusement réputée pour être un grand dépotoir et utilisé par de très très nombreux appareils. Résultat: cette fréquence est pas mal parasitée (François corrige moi si je dis une grosse bêtise).
Quel intérêt donc à ajouter des ondes en plus dans notre environnement tout en sachant qu'il y aura certainement des problèmes de réception des signaux (chape, béton, autre appareils, etc).

Comme moi, vous avez probablement une alternative déjà prête à l'emploi dans votre maison.

Bannir RF... Exploiter le WiFi déjà en place
Vous lisez cet article? alors il est fort à parier que vous avez un modem ADSL/VDSL, BeBox, BoxFr ou équivalent chez vous.
De nos jours, ils ont tous (ou presque) un support WiFi et rare sont leurs utilisateurs qui renoncent à ce confort.
Si vous utilisez votre WiFi, vous avez donc déjà un réseau RF à la maison.
Ce réseau utilise une porteuse en 2.4GHz (des ondes très pénétrantes qui passent presque partout, le miens est accéssible au fond du jardin), supporte une pile TCP/IP avec tout ses bienfaits (gestion d'erreur, routage, relative simplicité de mise en oeuvre, etc).
Réseau WiFi que vous pouvez facilement étendre avec des répétiteurs (~15Eur) et qui vient épauler un réseau Ethernet filaire si vous avez eu la bonne idée de tirer quelques câbles réseau ici et là.

Bref, branchez un senseur intelligent sur votre WiFi (ou réseau Ethernet) et il sera aussi facilement accessible que n'importe quel autre système informatique.

Un senseur intelligent?
Imaginez qu'il soit possible de brancher un senseur sur un réseau Ethernet. Ce dernier serait alors accessible depuis n'importe quel PC, Tablette, Rapsberry, ect. Nous naviguons en plein dans l'Internet des Objets (Internet Of The Things, IOT pour les amoureux d'acronymes)
Source de l'image - mdpi.com

Cette approche n'est ni une lubie, ni hors de portée. Vous verrez plus loin dans cet article que Pi-Vigilance devient tangible... et excitant

Ethernet/WiFi + Raspberry = les doigts dans le nez
Raspberry est une bête des média. Depuis qu'il dispose d'une connexion réseau, il fait des émules comme jamais auparavant.
Sa grande force est aussi de pouvoir supporter les réseaux sans fil à l'aide d'adaptateur WiFi (en clé WiFi mini ou avec clé WiFi avec antenne)

Il est très facile de faire une requête sur Internet (ou sur votre propre réseau Ethernet local) en Python. Voyez notre micro article sur Developer Notepad... c'est dire si c'est facile.

from httplib2 import Http
from urllib import urlencode

# Important de désactiver la verif des certificat
#
h = Http(disable_ssl_certificate_validation=True)

# Créer un dictionnaire avec les données du formulaire
# Le numéro de colis a été modifié (ce n'est plus un vrai)!
#   Ces données sont les paramètres de la requête HTTP
data = { 'tnav-tracking':'716323112233' }
resp, content = h.request( "http://gls-group.eu/BE/en/track-trace", "GET", urlencode(data) )

print( resp )

Il suffit donc d'avoir:
  1. Un senseur intelligent branché sur le réseau WiFi (ou Ethernet) 
  2. Senseur qui soit capable de répondre aux requêtes Ethernet/Internet
  3. ET récupérer les résultats dans votre programme.

Une approche Modulaire :
Un Maître PI + senseurs intelligents WiFi/Eth.
Voici un schéma expérimental dont le but est d'exploiter le réseau WiFi en place, le matériel et les connaissances à disposition.
Concept "Internet Des Objets" pour Pi-Vigilance.
Cliquer pour agrandir
Sur base des constatations précédentes, j'ai envisager la topologie suivante:

Un Serveur Maître
Un Raspberry Pi dans ce concept mais il pourrait être remplacé par n'importe quelle autre plateforme disposant des mêmes capacités.

Le but de ce serveur est:
  • De contacter tous les noeuds de senseurs (que nous appellerons "Noeuds Esclaves") à tour de rôle (méthode de pooling) pour obtenir les informations intéressantes. 
  • De traiter les différentes données en vue de graphique, stockage, traitement intelligent.
  • Fournir un point d'accès pour la consultation des information (ex: Serveur Web pour consulter ses graphiques, agir sur le réseau de senseur, etc )
  • Afficher l'état du système à l'aide d'un écran HDMI et de PyGame (un bel outil pour la programmation graphique).
  • ... tout ce que vous pourrez imaginer  
A mon avis, il est utile de fixer l'adresse IP de ce serveur (ex:192.168.1.100). Cela parait futile si l'on dispose d'un serveur DHCP mais peut devenir vraiment pratique si les senseurs (noeuds esclaves) sont destinées à contacter directement le mtre pour l'informer d'une alerte.
Il ne faut quand même pas oublier que les noeuds escalves (voir ci-dessous) sont des systèmes légers et donc plutôt limités.
Il n'est pas forcement utile de multiplier les couches technologiques (DHCP) si cela ne se réle pas essentiel. 
 
    
Noeud de mesure / esclave
Là, nous parlons litralement de IOT (Internet Of Object /  L'Internet des Objets)... des objets capable de se brancher sur le net et d'interagir au travers du Net. Si la notion IOT couvre un champ plus large (tout et n'importe quoi), il est possible de développer de tels objets nous même... et assez facilement par ailleurs.

Le but de ces esclaves est:
  • De supporter différents senseurs et d'en acquerir les données
  • De répondre à des requêtes "type internet" (comprenez une URL demandant les données).
    En guise d'exemple avec un noeud esclave à l'adresse 192.168.1.113:
    • http://192.168.1.113/read : permettrait de lire tous les senseurs du noeud
    • http://192.168.1.113/config : fourni des informations sur les senseurs disponibles sur le noeud 
  • De fournir les données demandées sous une forme exploitable (comme une page HTML, du contenu XML, JSON, etc).
En allant plus loin, il devrait même être possible:
  1. Transformer ce noeud de senseurs en élément actif.
    S'il est si facile de lire une température, il doit être aussi facile d'y fermer un relai ou fixer la couleur d'une LED RGB :-)
  2. De configurer un tel noeud pour qu'il envoi une alerte au noeud maître selon certain événement (par exemple: quelque-chose bouge en pleine nuit) 

Quels senseurs WiFi? ou Ethernet? 
Encore une nouvelle technologie pour Raspberry!?!?!
Et bien non.  En exploitant le plateforme Arduino, il devient possible de réaliser son propre senseur intelligent si l'on dispose d'un peu de savoir faire.

Arduino est une plateforme de prototypage très facile à maîtriser. Il est largement supporté par une communauté très active et vous pouvez y brancher une masse colossale de senseurs... voyez déjà notre Wiki ou WebShop pour vous faire une idée. Le tandem Arduino - Raspberry se révèle, encore une fois, être un choix très intéressant.
Arduino est donc l'outil rêvé pour créer la base d'un senseur intelligent... et par chance, il sait aussi se connecter sur un réseau Ethernet en lui ajoutant le matériel adéquat :-)

Arduino Yun
Depuis l'avènement d'Arduino Yun, il est assez facile de concevoir un senseur WiFi répondant exactement à vos besoins.
Arduino Yun dispose déjà d'une pile Ethernet avec connexion filaire et WiFi... il sait donc se brancher sur votre réseau WiFi local.
Arduino Yun
Arduino Ethernet
Vous pouvez également opter pour un "Arduino Ethernet", un Arduino avec une carte Ethernet (une carte Ethernet et un Arduino sur une seule et même carte Arduino).
Arduino Ethernet
Arduino et CC3000
Le CC3000 est un Breakout (ou un shield) qui permet à un Arduino (ou compatible Arduino) de se connecter sur un réseau WiFi. Le module CC3000 permet à un Arduino de recevoir des requêtes et d'envoyer des réponses (modeste mais efficace).
CC3000 Shield pour Arduino



Avantages/inconvénients de cette approche modulaire
Il est tentant d'utiliser d'autres Raspberry comme senseurs intelligents. Dans l'absolu, je pense qu'il serait assez efficace... mais dans les faits, ce serait aussi un beau gaspillage de ressource.
Lancer un système Unix pour lire quelques senseurs distants me paraît inapproprié d'autant que c'est plutôt la spécialité d'autres plateformes plus légères comme Arduino (Arduino fait peu de choses mais il "le fait bien" et reste stable dans la durée).
Modulaire = Assembler des blocs
Source de l'image

Je pense que sa place d'un Raspberry se trouve plutôt au niveau la gestion ("la tête pensante" si vous préférez).

Diviser pour mieux régner
Faire du monitoring et/ou monter un système de surveillance est une tâche d'envergure.
Plus il sera modulaire, avec des blocs fonctionnels séparés, et plus il sera facile à maîtriser.
Il est, en effet, plus simple de se concentrer sur des sous-éléments plus élémentaires.
Faire en sorte que chacun d'entre eux fonctionne parfaitement permet d'avoir plus rapidement des certitudes sur-lesquels s'appuyer pour développer les éléments de gestion.
Si chaque module de mesure Arduino (les "noeuds esclaves") fonctionne bien... que le réseau Ethernet (WiFi ou Filaire) est bien configuré... Il ne reste plus qu'à mettre le tout en ensemble (votre programme sur votre Pi + Réseau Ethernet + Noeuds de mesure) et c'est parti.

Après tout, cette modularité où chacun fait son travail (mais le fait bien), c'est l'un des principes fondateurs du monde Unix... et donc aussi de votre Raspbian Whezzy qui propulse votre Raspberry ;-)

Disponibilité instantané des noeuds de mesure
Un noeud senseur articulé autour d'Arduino signifie aussi qu'il s'initialise instantanément (ou presque). Pas de session de boot comme sur un système embarqué. La seule période d'attente c'est celle nécessaire pour s'enregistrer  sur le réseau IP.

Une Alerte de Noeud (PUSH)
En plus de la méthode de  POOLING (interrogation des noeuds) par le maître, il est tout à fait possible de prévoir un mode PUSH qui permet au noeud d'envoyer une alerte vers le maître. Au contraire de la méthode de pooling, ici, c'est le noeud qui contact spontanément le maître.
Disons que cela peut être intéressant dans le cadre d'un système de surveillance.
PUSH est un terme anglais signifiant pousser. Il est régulièrement employé pour les systèmes "poussant" des données vers un hôte. 

Noeud actif
Outre le fait d'être une sonde WiFi (ou Ethernet), votre noeud de mesure peut également devenir un élément actif dans son environnement.
Rien ne vous empêche de commander des relais (pour mettre en ventilateur en route, ou activer le chauffage centrale)... voire prendre le contrôle d'un Vélux pour aérer une pièce, afficher un message sur un afficheur, etc... le tout à distance :-)

FirmWare - Le noeud est adaptable à vos besoins
Puisque les noeuds sont basées sur une plateforme Arduino + Ethernet (ou équivalent), vous être libre d'adapter le FirmWare à vos besoins.
La programmation Arduino étant relativement simple, cela est à la portée de toute personne ayant un minimum de savoir faire.

IP = Routable
Utiliser une connexion Filaire Ethernet ou WiFi signifie que l'on travaille en IP. C'est probablement l'avantage le plus intéressant de cette approche.
Routable signifique que le noeud de mesure peut se trouver sur un autre sous réseau, derrière un tunnel VPN, ... même dans un autre bâtiment.
Il ne s'agit là que d'une configuration réseau IP et de routage... et vous trouverez une pléthore d'information sur le Net.
Notez néanmoins que la gestion de réseau est un métier à part entière.

IP + HTML = Multi-plateforme / multi-...tout

Avoir un point de mesure sur un réseau IP (en WiFi ou Filaire) qui produit un contenu HTML (ou proche) permet de l'utiliser avec n'importe quelle plateforme capable de faire une requête http et capable d'interpréter le contenu retourné par le noeud senseur.
  • Un Raspberry Pi qui interprète le contenu retourné par le senseur
  • Votre PC avec FireFox ou Internet Explorer (pour tester le senseur par exemple)
  • Votre Mac et un programme en Python
  • Votre PC Windows avec un Framwork .NET
  • Un Android avec un programme en Java.
  • Vous avez un BeagleBone... pas de problème.
L'élégance tient parfois dans la simplicité de l'approche.

FirmWare - conception
Il faut aussi concevoir le programme pour Arduino (le FirmWare)... et je comprends que cette tâche représente un problème pour nombre de personnes.
Pourtant, Arduino est une plateforme assez facile à maitriser. Si vous envisagez développer un logiciel de surveillance ou monitoring sur votre Raspberry Pi, vous ne devriez pas vous sentir intimidé par une plateforme comme Arduino ;-)
D'autant que produire un contenu HTML, JSON, XML, ... n'est pas vraiment très compliqué. 

Ethernet/Wifi - les aspects relatifs à la sécurité
Un autre point à considérer, c'est la sécurité.
C'est un point qui peut soulever de nombreuses questions et réactions.
Source: pcworld.fr

Le but n'est pas d'offrir des solutions (ni recommandations) mais simplement d'éveiller l'intérêt face aux risques d'une telle infrastructure.

Concernant le maître
La sécurité du maître derrière le modem/routeur est avant tout une question:
  • De configuration du routeur (il ne faut pas accepter n'importe quoi en provenance du Net).
  • De la mise-à-jour de la distribution (pour évité d'être exposé aux exploitations de faille).
Concernant les noeuds esclaves
C'est un point plus délicat... car les noeuds esclaves disposent de ressources nettement plus limitées.
Il est donc difficile d'envisager une encryption SSL. Une encryption maison en AES serait même difficile à considérer (mais pas impossible).

Il est toujours possible d'envisager bloquer l'accès aux noeuds à l'aide d'un mot de passe ou envisager un déblocage à l'aide d'une clé élémentaire (configurée dans le noeud).
Toutes ces implémentations sont d'ordre logiciel (donc exposée à bug de conception) mais vous êtes surtout exposées à l'espionnage du trafic WiFi (les trames étant ici transmissent en clair)

Le plus efficace est probablement:
  • D'éviter le Broadcast du réseau WiFi
    Si cela est vraiment possible... dépend de la caractéristique technique des noeuds esclaves. A étudier
  • D'opter pour un encryption WAP/WPS
    Si cela est vraiment possible... dépend de la caractéristique des noeuds esclaves. A étudier
  • De réserver une plage d'adresse pour les noeuds esclaves et contrôler strictement la circulation du trafic depuis/vers ces noeuds (sur le routeur).
    Le réseau filaire étant plus facile à sécuriser ;-)
Produits Phares
Les différents produits abordés dans cet article sont disponible chez MCHobby
Le mot de la fin
Il ne reste plus qu'a créer mon premier noeud de senseur ;-)
Ca y est, le premier noeud de senseur (esclave) Ethernet est en ligne.
Voyez notre article "Pi-Vigilance: Un premier noeud Esclave"