Christophe Nowicki

December 19, 2009

Présentation du standard Zigbee

ZigBee_Network_Design

Je reviens des mercredis de la RFID organisé par filrfid, le sujet de la présentation était le protocole ZigBee.

Lors de la présentation faite par Véranith Ly de la société oRFIDée, j’ai appris beaucoup de choses sur ce protocole.

J’aimerai donc vous en faire profiter et parler des domaines qui m’intéressent à savoir la domotique, la robotique et la topologie des réseaux maillés.

Description rapide du standard

ZigBee, est un standard de communication sans-fils comme le Wifi ou le Bluetooth.
Les principaux avantages du standard sont :

  • Autonomie de l’émetteur, il est possible de le faire fonctionner durant plusieurs années à l’aide d’une batterie ;
  • La possibilité de mettre en place une topologie de réseaux maillés ;
  • 65535 nœuds sont addressable sur le réseau ;
  • le standard définie : les méthodes de communication sur le réseau, mais aussi les fonctionnement des applications ;
  • l’ensemble des produits sont certifiés par l’Alliance ZigBee et soutenus par de nombreuses entreprises industriels ;

Ce qui est intéressant, c’est que le standard définit un ensemble de caractéristiques pour un équipement.
Regroupé sous forme de famille :

Domaines d’application du protocole

Les domaines d’applications du protocole sont les suivants :

La promesse du standard

Les équipements qui respectent le standard et sont certifiés par l’Alliance ZigBee sont théoriquement interchangeable et peuvent communiquer ensemble.

Cela signifie, qu’il est possible d’allumer à l’aide d’une télécommande de marque A, une douille d’ampoule de marque B et un lecteur de DVD de marque C.

Cela parait trivial dit comme cela, mais dans l’état actuel de développement de la domotique, cela releve du miracle

Même, s’il existe des protocoles propriétaires pour faire cela, il est nécessaire de vendre son âme à un constructeur (Vendor lock-in garantie sur facture ;-) ) ou bien mettre en place des protocoles de Middleware comme xPL et une belle galaxie de protocoles hétérogènes. (cf. le schéma de ma petite installation perso ;-) ).

La gestion des binding

La couche applicatif du standard ZigBee, inclut une possibilité très intéressante pour la domotique : le binding.

L’idée est de relier deux équipements du réseau de manière automatique et transparente pour l’utilisateur.

L’un des meilleur exemple pour comprendre est celui d’une ampoule et un d’un interrupteur.

Lorsque l’utilisateur active physiquement le binding, à l’aide d’un bouton par exemple.

Les deux devices se mettent en relation avec le coordinateur du réseau, qui détermine si oui ou non les profils applicatifs sont compatibles et de les lier.

Ce qui permet aux équipements d’être liés automatiquement et il n’est pas nécessaire de configurer les adresses des équipements, etc…

L’état actuel de la certification

Pour l’instant, il y a peu d’équipements qui sont certifiés par l’Alliance :

Mais on trouve pas mal de vendeurs d’autres produits que ne sont pas forcement entièrement certifiés mais qui respectent la partie communication du standard.

Problématique du sans-fils

Comme toutes technologies sans-fils, elle présente quelques problématiques particulières :

La source d’énergie

Bien que le module ZigBee nécessite très peu d’énergie pour fonctionner (20mA pour émettre une trame sur le réseau), se pose la question de la source d’énergie.

Lorsque celle-ci est fournie par une pile cela pose de problématique de :

  • fiabilité / qualité de la source d’énergie ;
  • la nécessité de remplacer régulièrement la source d’énergie ;
  • la nécessité de mettre en place un dispositif pour notifier l’utilisateur du statut de la pile.

La sécurité

La sécurité du standard ZigBee repose tout d’abord, sur la sécurité du protocole de communication IEEE 802.15.4. Pour mieux comprendre les méthodes de sécurisation mises en place par le protocole, vous pouvez lire cet article de vulgarisation : Security in 802.15.4 and ZigBee networks ; ou bien cet excellent papier Security Considerations for IEEE 802.15.4 Networks. Mais dans ce domaine, rien de nouveau, ce sont toujours les mêmes principes qui s’appliquent, à savoir :

  • Plus la puce dispose de puissance et plus le niveau de chiffrement est fort (au maximum AES128 pour ZigBee) ;
  • La qualité des composants et du générateur de nombre aléatoire ( merci de ne pas utiliser le PID du programme ;-) ) ;
  • La qualité de l’implémentation du code de chiffrement.

Bref, vous vous doutez bien que les modules ZigBee qui seront vendus au grand publique ne seront pas d’un niveau de sécurité militaire et n’embarqueront sûrement pas pas un compteur Geiger comme source d’entropie ;-)

D’autant plus que le standard n’impose pas forcement un niveau de chiffrement fort à tous les profils applicatifs.

Robotique

Pour la robotique, il n’existe pas de profil dans le standard, mais la plupart des amateurs dans le domaine ont déjà compris les nombreux intérêts de ZigBee et on voit de plus en plus d’interfaces apparaître (Bioloid, WowWee, etc… )

Logiciels libres

Du coté des logiciels libres, nous avons :

  • Un projet mort : ZigBuzz ;
  • Le projet IEEE802.15.4/ZigBee Stack for Linux, dont l’objectif est l’intégration de la pile ZigBee dans le noyau Linux, commiter dans la version 2.6.30-rc7 ;
  • Le projet FreakZ, dont l’objectif est l’implémentation du pile ZigBee libre pour l’embarque ;

Malheureusement, il y a une incompatibilité entre la licence des spécifications du standard ZigBee et la licence GPL. en effet celle-ci ne prend pas en compte un usage non commercial.

Pour plus de détails sur ce point : Zigbee, Linux, and the GPL.

Néanmoins, le code du protocole IEEE 802.15.4 est déjà le noyau et bénéficie d’un niveau de protection ;-)

Matériel

Le matériel ZigBee disponible se découpe en plusieurs familles de la plus simple à la plus complexe :

Émetteur-récepteur

Les principaux constructeurs d’émetteur-récepteur sont Texas instruments et Freescale.

Puce

Les puces prennent en charge la norme IEEE 802.15.4, elles sont produites par : Ember, Jennic, Texas instruments et Freescale.

Modules

Les modules prennent en charge le standard ZigBee et sont produites par : Digi, One-RF, Telegesis, Meshnetrics, Radiocrafts

Produit fini

  • Tritech : dongles USB et routeurs Ethernet/Zigbee ;
  • Digi : passerelles RS232/485, USB, Ethernet, GPIO, routeurs autonomes
  • Telegesis : dongles USB et CF, routeurs autonomes et Ethernet
  • Alektrona : gateway ethernet / zigbee;
  • Libelium : capteurs et routeurs multi-protocoles Wifi, Bluetooth, GPRS et GPS ;
  • Des shields pour la carte Arduino et ses dérivées.

Offre packagée

Pour les produits packagés, il existe les solutions suivantes :

  • Control4 : gamme de produits domotiques ;
  • AlerteMe : système de suivi de la consommation électrique et alarme.

Déploiements importants de ces technologies

Il y a pas mal de déploiements de ces technologies aux USA dans le cadre des réseau de distribution d’électricité « intelligent » en Californie et au Texas principalement.

En Europe, le ville de Gothenburg en Suède a déployé un réseau de 90 000 compteurs intelligents.

En France, le déploiement est encore à l’état de recherche avec le projet SensLab, le projet de localisation fait par Orfidée pour la Marine Nationale.

Et d’autres projets couverts par des accords de non divulgation ;-)

Références

Voici quelques références pour approfondir le sujet :

Conclusion

Voilà, ceci est une petite présentation standard ZigBee, que j’ai voulu la plus succincte possible. Le sujet étant très vaste et passionnant. J’ai forcement fait des erreurs et oublié des références. Merci de m’en faire part par mail ou via les commentaires.

Filed under: Home automation,Network,Robotics,Work — Tags: — cscm @ 14:00

October 3, 2009

Modules Plugwise dans un reseau xPL

L’objectif de cet article est d’expliquer l’utilisation des modules Plugwise dans un réseau xPL sous Debian GNU/Linux à l’aide du projet xpl-perl.

Présentation de Plugwise

circle plugwise Les modules plugwise sont des prises électriques qui permettent de :

  • Mesurer la consommation électrique d’un appareil ;
  • Éteindre / Allumer un appareil électrique à distance.

Ces prises communiquent entre elles à l’aide d’un réseau ZigBee de type Mesh.

Les spécifications du produit sont :

  • Voltage: 100-240 V~
  • Fréquence: 50 / 60 Hz
  • Puissance maximale: 3680 Watt
  • Courant maximal: 16 A

Elles sont produites par une société Hollandaise et uniquement disponibles dans leur Webshop. (passer la commande en hollandais n’est pas évident ;-) )

Chaque prise coûte environ 35 euros et le kit de démarrage le moins cher est à 150 euros.

Les prises électriques sont de type F, il vous faut donc un adaptateur pour les appareils nécessitant une prise de terre.

J’utilise ces prises dans mon installation domotique, car elles présentent un avantage par rapport aux solutions classiques basées sur le CPL (x10, PLC-BUS, etc… ).

En effet, il est possible d’utiliser ce type de prise sur un onduleur et comme une bonne partie de mon installation est ondulée c’est la seule solution.

Installation du “stick” usb

Voici la procédure pour installer, le stick usb.
Insérerez le module dans le port usb de la machine, il doit apparaître et être reconnu comme un adaptateur série :

$ lsusb
...
Bus 006 Device 003: ID 0403:6001 Future Technology Devices International, Ltd FT232 USB-Serial (UART) IC
...
$ dmesg
...
[431159.173232] usb 6-2: FTDI USB Serial Device converter now attached to ttyUSB0
[431159.179407] usb 6-2: New USB device found, idVendor=0403, idProduct=6001
[431159.179459] usb 6-2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[431159.180301] usb 6-2: Product: FT232R USB UART
[431159.180301] usb 6-2: Manufacturer: FTDI
[431159.180301] usb 6-2: SerialNumber: A8009iKr
$ ls -l /dev/ttyUSB*
crw-rw---- 1 root dialout 188, 0 2009-09-22 13:03 /dev/ttyUSB0

Configuration du module xpl-plugwise

Dépendances

Pour faire fonctionner le module vous avez besoin du module perl Digest::CRC :
# apt-get install libdigest-crc-perl

Installation du module

Le module xPL pour Plugwise se trouve directement sur le serveur du projet xpl-perl :
# cd /usr/src
# wget http://www.xpl-perl.org.uk/download/xPL-Plugwise-0.01.tar.gz
# tar xzf xPL-Plugwise-0.01.tar.gz
# dh-make-perl xPL-Plugwise-0.01
# cd xPL-Plugwise-0.01/
# sed -i 's/\$(MAKE) test/#/' debian/rules
# dpkg-buildpackage -b
# dpkg -i ../libxpl-plugwise-perl_0.01-1_all.deb

Lancement

Pour lancer le module, il faut lui préciser l’emplacement du stick USB à l’aide de la ligne de commande :
# xpl-plugwise --verbose --plugwise-verbose --plugwise-tty /dev/ttyUSB0
Listening on 192.168.42.78:34281
Sending on 192.168.42.255

Utilisation

Pour allumer une prise, il suffit d’envoyer l’ordre suivant :
$ xpl-sender -m xpl-cmnd -c plugwise.basic command=on device=3FD8F6
Pour éteindre :
$ xpl-sender -m xpl-cmnd -c plugwise.basic command=off device=3FD8F6
Pour obtenir la consommation de l’appareil sur la prise :
$ xpl-sender -m xpl-cmnd -c plugwise.basic command=powerinfo device=3FD8F6
Le module répond à l’aide d’un trigger, donc voici la sortie :
$ xpl-logger -body class=plugwise
192.168.42.2:48051 [xpl-cmnd/plugwise.basic: bnz-sender.tux -> * - powerinfo 3FD8F6]
plugwise.basic
{
command=powerinfo
device=3FD8F6
}
192.168.42.2:48051 [xpl-trig/plugwise.basic: bnz-plugwise.milk -> * - powerinfo 3FD8F6]
plugwise.basic
{
command=powerinfo
device=3FD8F6
pulse1sec=0005
pulse8sec=0006
unknown=000000A4
}

L’information se trouve dans les deux variables pulse1sec et pulse8sec.

Conclusion

Pour l’instant, l’utilisation de ces prises sous Debian GNU/Linux se limite aux ordres on/off. Il est encore nécessaire d’utiliser le logiciel fourni par le fabriquant pour la configuration du réseau.

Filed under: Debian,Home automation — Tags:, , — cscm @ 17:23

September 6, 2009

Communication à l’aide du protocole ZigBee entre un PC et une carte Arduino

L’objectif de ce montage est de faire communiquer un PC avec une carte Arduino à l’aide du protocole ZigBee
Voici l’architecture de montage :

Cette article décrit la mise en place d’une topologie réseau simple, permettant de communiquer entre un PC et une carte Arduino à l’aide de modules XBee série 1 de chez Digi.

Les composants

Le montage nécessite les composants suivants :

  • un PC, fonctionnant sous Debian GNU/Linux pour ma part ;
  • une carte Arduino ou bien un adaptateur USB relié au PC ;
  • deux modules de communication XBee ;
  • une carte Arduino avec un adaptateur XBee.

A propos du protocole ZigBee

ZigBee est un protocole de haut niveau permettant la communication de petites radios, à consommation réduite, basée sur la norme IEEE 802.15.4 pour les réseaux à dimension personnelle (WPANs).

C’est vraiment un très bon protocole, qui est bien plus simple à mettre en œuvre que le protocole Bluetooth. Je ne sais pas si vous avez déjà vu la stack du protocole. Il y a de quoi avoir peur ;-)

xBee, ZigBee et beeee?

Si vous êtes perdus avec tous ces sigles, c’est normal. Moi aussi ;-) Voici ce que j’ai compris :

  • ZigBee : est le nom du protocole ;
  • XBee : est le nom du produit chez le constructeur Digi ;
  • IEEE 802.15.4 : c’est le nom du standard qui définit le communication dans un WPAN ;

Ok, c’est vraiment pas plus claire ;-) Mais c’est dit.

Liste des composants

Vous avez besoin des composants suivants :

Nom du composant Archeter chez Quantité Prix
Platine d’interface USB pour modules “XBEE” Lextronic 1 (optionnel) 23€ TTC
Module xBee Matlog 1 (optionnel) 20€ TTC
Arduino Duemilanove Libelium 2 24€ TTC
Arduino Xbee ZB 2mW + UFL Antenna Libelium 2 50€ TTC

Partie PC

La connexion entre le module Xbee et un PC peut se faire de deux manières :

  • à l’aide d’un adaptateur USB ;
  • à l’aide d’une carte Arduino et d’un Shield XBee ;

L’objectif pour la partie PC du montage est de communiquer avec le module XBee, à fin de lui envoyer des commandes.
Cette communication se fait à l’aide d un convertisseur USB-Serial, ce rôle est joué par l’adaptateur USB ou bien par la carte Arduino + Shield.

Connexion à l’aide de l’adaptateur USB

L’adaptateur XBee se connect directement sur le port USB du PC :

Un fois branché, le module est visible à l’aide de la commande lsusb :

Bus 002 Device 013: ID 0403:6001 Future Technology Devices International, Ltd FT232 USB-Serial (UART) IC

Communication à l’aide d’une carte Arduino + XBee Shield

L’adaptateur XBee se connecte directement sur la carte Arduino :

Il est nécessaire de modifier la configuration par du shield pour mettre la carte en mode USB-Serial.
Pour cela, il faut mettre les deux jumper à droite (éloigner du port USB), comme sur cette photo : Configuration mode USB-serial
Vous pouvez ensuite brancher la carte Arduino et voir le module XBee à l’aide de la commande lsusb :

Bus 002 Device 013: ID 0403:6001 Future Technology Devices International, Ltd FT232 USB-Serial (UART) IC

Connexion à l’aide d’un gestionnaire de terminal

Une fois que le module XBee est connecté au PC, il doit être disponible sur /dev/ttyUSB0 :

[31016.280327] ftdi_sio 2-8.3:1.0: FTDI USB Serial Device converter detected
[31016.280354] /build/buildd/linux-2.6.24/drivers/usb/serial/ftdi_sio.c: Detected FT232RL
[31016.280449] usb 2-8.3: FTDI USB Serial Device converter now attached to ttyUSB0

Pour communiquer avec le module, il faut utiliser un programme de gestion de terminal ( gtkterm, minicom ou bien l’IDE de la carte Arduino).
Voici la configuration pour gtkterm :

Configuration du module XBee

Une fois que vous etes connecté au module XBee, vous pouvez lui envoyer des commandes à l’aide du gestionnaire de terminal.
Le module dispose de deux mode de fonctionnement : normal et configuration.
Pour passer en mode configuration, il faut saisir +++ (sans CR, retour à la ligne).
Si le module a compris la commande, alors il retourne OK.
Voici un exemple de session :
.

Configuration d’un réseau bidirectionnelle simple

Voici les différentes instructions pour configurer un réseau simple, c’est à dire une communication bidirectionnelle entre deux cartes Arduino ou bien entre un PC et une carte Arduino

Configuration sur la carte reliée au PC


+++OK
ATMY1234
OK
ATDL5678
OK
ATDH0
OK
ATID1111
OK

Configuration du module Arduino


+++OK
ATMY5678
OK
ATDL1234
OK
ATDH0
OK
ATID1111
OK

Les commandes importantes sont :

  • ATMY : adresse source ;
  • ATDL : adresse de destination (bite de poids faible) ;
  • ATDH : adresse de destination (bite de poids fort) ;
  • ATID : identifiant du réseau ;

Utilisation au niveau de la carte Arduino

Il faut inscrire le programme suivant dans la mémoire de la carte :

void setup() {
Serial.begin(9600);
Serial.print("+++");
Serial.print("ATDH0\r");
Serial.print("ATDL1234\r");
Serial.print("ATMY5678\r");
Serial.print("ATID1111\r");
Serial.print("ATCN\r");
}
void loop() {
delay(1000);
Serial.print("42\n");
}

La programmer et changer le sens des deux “jumper” pour faire communiquer le module avec la carte.

Référence

Si vous voulez vous simplifier la vie, il existe une bibliothèque pour la programmation des modules xbee : xbee-arduino.

Filed under: Do it yourself,Home automation,Robotics — Tags:, , — cscm @ 19:43

Powered by WordPress