# ZigBee

Zigbee est un protocole de haut niveau permettant la communication d'équipements personnels ou domestiques équipés de petits émetteurs radios à faible consommation ; il est basé sur la norme IEEE 802.15.4 pour les réseaux à dimension personnelle (Wireless Personal Area Networks : WPAN).
Ratifiées le 14 décembre 2004, les spécifications de Zigbee 1.0 sont disponibles auprès des membres de la communauté industrielle Zigbee Alliance.
Cette technologie a pour but la communication à courtes distances, telle que le propose déjà la technologie Bluetooth, tout en étant moins chère et plus simple. À titre d’exemple, les nœuds Zigbee classiques nécessitent environ 10 % du code nécessaire à la mise en œuvre de nœuds Bluetooth ou de réseaux sans fil, et les nœuds Zigbee les plus élémentaires peuvent ainsi descendre jusqu’à 2 %.
En 2006, une estimation du coût unitaire pour un nœud Zigbee a révélé un prix de 1,10$ par unité dans le cadre d’une production en très grand nombre. Il faut ajouter le prix du microcontrôleur qui commande le circuit, ce qui augmente légèrement le prix. À titre de comparaison, la technologie Bluetooth, lancée en 1998, annonçait à cette époque un prix unitaire de production compris entre 4 et 6 $, redescendu par la suite à moins de 3 $.

## Zigbee par rapport à d'autres protocoles sans fil

Comparaison des protocoles Zigbee, Bluetooth et Wi-Fi :
| Caractéristique | Zigbee | Bluetooth Low Energy | Bluetooth | Wi-Fi | Z-Wave |
| IEEE | 802.15.4 | | 802.15.1 (BT 1.x) | 802.11a/b/g/n/ac/ax/be | |
| Besoins mémoire | 4-32 ko | | 250 ko + | 1 Mo + | |
| Autonomie avec pile | Années | Années | Mois | Jours | |
| Nombre de nœuds | 65 000+ | illimité | 255 | 256+ | 232 |
| Vitesse de transfert | 20-250 kb/s | 1 Mb/s | 1-3 Mb/s | 11-54-108-320-1000 Mb/s | 9,6 à 100 kbit/s |
| Portée (environ) | 10 m | 10 m | 10 m | 10 m (802.11a) à > 300 m (802.11b) | 50 m |

## Historique

En 1998, dès l’arrivée des technologies sans fil Wi-Fi et Bluetooth, les premières ébauches de réseaux de type Zigbee firent leur apparition dans le cadre d’applications où les technologies précédentes n’étaient pas utilisables. En particulier, de nombreuses recherches ont été menées sur des réseaux s’organisant automatiquement et composés de petites radios. La technologie Bluetooth a beaucoup inspiré le protocole Zigbee.
En mai 2003, le standard IEEE 802.15.4 est annoncé (souvent assimilé à tort au protocole Zigbee). L’été suivant, Philips semiconductors quitte la Zigbee Alliance, le groupe de sociétés définissant et finançant le développement du protocole. Ils restent néanmoins utilisateurs du protocole puisque leur marque d'éclairages intelligents Philips Hue fonctionne grâce a ZigBee.
En octobre 2004, la Zigbee Alliance annonce que le nombre d’inscriptions a doublé pour arriver à plus d’une centaine d’entreprises dans 22 pays.
Le 14 décembre 2004 sont ratifiées les premières spécifications de Zigbee. Le 13 juin 2005, la Zigbee Alliance publie les premières spécifications officielles de la version Zigbee 1.0 qui sont désormais disponibles en libre téléchargement.

## Applications

La spécification initiale de Zigbee propose un protocole lent dont le rayon d’action est relativement faible, mais dont la fiabilité est assez élevée ; son prix de revient est bas et la consommation considérablement réduite.
On retrouve donc ce protocole dans des « environnements embarqués » où la consommation est un critère de sélection. Ainsi, la domotique et les nombreux capteurs et télécommandes qu’elle implémente apprécient particulièrement ce protocole en plein essor et dont la configuration du réseau maillé se fait automatiquement en fonction de l’ajout ou de la suppression de nœuds. On retrouve aussi Zigbee dans les contrôles industriels, les applications médicales, les détecteurs de fumée et d’intrusion et dans la télécommande de la freebox v6.
Les nœuds sont conçus pour fonctionner plusieurs mois (jusqu’à dix ans pour les plus économes) en autonomie complète grâce à une simple pile de 1,5 V.

## Fréquences utilisées

Le protocole 802.15.4 utilisé par Zigbee définit 3 bandes de fréquences utilisables :
| Bande | Disponibilité | Nombre de canaux | Vitesse maxi théorique |
| 868 MHz | Europe | 1 | 20 kbit/s |
| 915 MHz | Amériques et Australie | 10 | 40 kbit/s |
| 2.4 GHz | Disponible partout | 16 | 250 kbit/s |

## Présentation de la pile Zigbee

Un protocole de communication doit disposer d'un cadre de fonctionnement. Ainsi, l’IEEE définit dans la norme IEEE 802.15.4 les couches basses (physique et mac) du protocole Zigbee.
Pour obtenir un ensemble qui fonctionne, il est nécessaire d’implémenter encore les couches de plus haut niveau (réseau et application) qui elles ne sont pas standardisées par l'IEEE. Un réseau Zigbee peut donc fonctionner, en théorie, sur plusieurs supports de transmission, mais en pratique on trouve le protocole implémenté seulement pour le média 802.15.4. C’est la Zigbee Alliance qui s’occupe de cette partie du protocole en fournissant une pile (stack en anglais) de référence. Celle-ci est réservée aux membres de l’alliance qui doivent l’implémenter dans leurs solutions.
Si l’on désire mettre en place un dispositif pouvant se connecter à un réseau Zigbee, on se retrouvera dans l'une des trois situations suivantes :
* En étant membre de la Zigbee Alliance on bénéficie de ses apports technologiques, notamment concernant cette pile de communication. L’inscription à cette structure coûte environ 4 000$ pour une entreprise.
* En utilisant un produit développé par l’un des membres de la Zigbee Alliance, on disposera de la pile adaptée pour ce produit par le constructeur choisi.
* On peut enfin développer une pile pour son propre produit en se basant sur les dernières spécifications disponibles. Cela représente bien entendu un travail très important qui doit s’adapter au système (matériel et logiciel) retenu pour mettre en place le dispositif. Si ce développement est effectué à des fins commerciales, il devra être validé par la Zigbee Alliance avant d'être mis sur le marché en se réclamant de Zigbee.

## Routage des messages
### Routage au niveau réseau

Au niveau de la couche réseau, le routage est soit direct, soit indirect.
Le routage est direct lorsqu’un dispositif voulant transmettre des données connaît l'adresse réseau du destinataire. Cette adresse est donc transmise dans la trame pour atteindre et agir sur le dispositif prévu.
Dans le cas contraire, le routage indirect se fait lorsqu'un dispositif ne connaît pas l'adresse du destinataire. Un équipement de type routeur ou coordinateur PAN fait la relation avec le vrai destinataire d'après la table de routage et la table de découvertes des routes.
Un dispositif qui n'a pas les capacités de routage (ZED) doit router les données suivant le routage hiérarchique (il remonte l'arbre).
La table de routage contient les données sur les destinataires. Il s'agit de l'adresse de destination de la route et le prochain dispositif à atteindre pour se « rapprocher » du destinataire.
La table de découverte d'une route contient les informations sur les sources du message. Elle stocke l'adresse d'origine du dispositif qui a fait la demande et l'adresse du dispositif qui va transmettre les données en tant qu'intermédiaire (entre la source et la destination). Elle contient aussi les coûts de transmission entre la source jusqu'au nœud actuel et du nœud jusqu'au destinataire. Elle peut donc adapter la route pour être plus performante en mettant à jour les adresses à utiliser.
Le choix d'une route, lorsque plusieurs routeurs en parallèle relaient l'information, se fait par rapport au routeur (ou coordinateur) au niveau du deuxième nœud au minimum. Lors de la demande de création de route, la table va recevoir plusieurs demandes à partir de la même adresse d'origine. Elle va alors comparer les « coûts » de transmission pour choisir le chemin ayant le coût le plus faible.
L'algorithme de routage suggéré par la Zigbee Alliance pour les réseaux maillés est AODV (Ad hoc On-Demand Vector Routing). C'est un protocole de routage dit « réactif » : une route est établie uniquement sur demande. L'avantage est qu'il ne charge pas le trafic.

### Routage au niveau applicatif

Le routage au niveau applicatif se fait grâce à la table de liaison, contenu dans le coordinateur ou un routeur.
Les liaisons permettent de créer des liens logiques entre des dispositifs d'application complémentaires et des éléments de fins (capteurs). La table de liaison permet aussi d'associer à un attribut d'un dispositif en entrée plusieurs attributs de dispositifs en sortie ou l'inverse. La table de liaison est implémentée dans le coordinateur Zigbee. Le choix de ce dispositif vient du fait que le coordinateur Zigbee est nécessaire au réseau. Le second intérêt est, vu que le coordinateur est indispensable au réseau, qu'il doit être (en général) alimenté par le secteur. Ces deux raisons font que la table de liaison sera toujours accessible.
La table de liaison se repose sur trois critères normalisés par la Zigbee Alliance, décrits ci-après :
* le profil
* le cluster
* l'attribut
La table de liaison est la couche applicative qui permet de gérer la table de routage et la table de découverte de routes. C'est elle qui va permettre d'associer le relevé d'un capteur sur un dispositif à une action spécifique sur un autre dispositif à travers toutes les couches du protocole Zigbee. C'est une façon de simplifier l'accès lorsque le réseau contient beaucoup de connexions et de dispositifs : la reconnaissance entre les dispositifs qui dialoguent se fait par rapport à leurs « familles » (les profils et clusters) et leurs qualités (les attributs) communes.

#### Profil

Un profil permet de créer une application interopérable et distribuée. Il s'agit donc de définir des formats de messages et le traitement des actions pour permettre à des dispositifs de demander, transmettre des données et savoir les interpréter.
Les profils sont développés par les entreprises pour permettre de répondre à des besoins spécifiques. Par exemple, le premier profil existant est fait pour gérer les lampes et des interrupteurs connectés (home control lighting). Ce profil permet six types d'échanges de messages de contrôle.
Les profils permettent de créer aussi une norme autour de chaque application pour permettre l'interopérabilité des systèmes.

#### Cluster

Les clusters sont associés avec des flots de données entrants ou sortants. Les identificateurs de clusters sont uniques dans un profil. Les clusters permettent de lier deux dispositifs par l'association d'un cluster en entrée et d'un cluster en sortie en supposant qu'ils appartiennent au même profil. En fait deux dispositifs sont liés s'ils partagent le même besoin (côté récepteur) et la même ressource (côté émetteur). La table de liaison (binding table) contient pour chaque cluster un identifiant pour le définir (sur 8 bits) et l'adresse des deux dispositifs (source et destination).

#### Attribut

Un attribut définit un capteur ou un actionneur. C’est l’élément qui décrit de façon la plus précise l’utilisation du dispositif (par exemple un capteur de mouvement, un buzzer, une lampe, etc.).