EnOcean Partie 3: Premier test de réception
Déchiffrage d’un paquet
J’ai réalisé le premier test simplement en appuyant sur un de mes interrupteurs et en écoutant ce qui arrivait sur le port série.
On va décoder la trame reçue, où plutôt les trames, il y en a deux, une pour l’appuie sur l’interrupteur, une pour le relâchement :
55 00 07 07 01 7A F6 30 00 34 BB E4 30 00 FF FF FF FF 2D 00 75
55 00 07 07 01 7A F6 00 00 34 BB E4 20 00 FF FF FF FF 2D 00 C3
D’après la documentation, voici l’architecture générale d’un paquet
Ce qui nous donne pour le premier paquet :
Bytes | Description |
---|---|
55 | Byte de synchronisation, toujours 55 |
00 07 | Taille du télégramme du groupe Data (en bleu), soit 7 octets |
07 | Taille des données optionnelles (en vert), 7 octets également |
01 | Type de paquet, ici 1 = RADIO_ERP1 |
7A | CRC8 Header (on va voir plus loin comment le calculer) |
F6 | Télégramme RPS |
30 | Données : un RPS contient un unique octet de données. |
00 34 BB E4 | ID de l’émetteur |
30 | Status |
00 | Sub tel Num |
FF FF FF FF | ID du destinataire (ici broadcast) |
2D | RSSI value |
00 | Niveau de sécurité |
75 | CRC8 Data |
Maintenant on va déchiffrer la valeur de données du télégramme RPS : 30. J’ai fais mon test avec un interrupteur qui a pour EEP F6-02-01, ce qui dans la documentation donne :
30 en hexadécimal, se traduit par 00110000 en binaire.
bits | Description |
---|---|
001 | 001 ça fait 1, donc le bouton A0 a été actionné |
1 | Ce bouton a été pressé |
000 | Par défaut, pas important car pas de seconde action |
0 | Pas de seconde action |
Calcul du CRC
Il y a deux CRC : l’un pour la partie Header (en jaune) et l’autre pour la partie Data (en bleu et vert). Le byte de synchro n’entre pas dans le CRC.
La table servant de base au calcul du CRC est générée à partir du polynôme G(x) = x8 + x2 + x1 + x0. Elle est fournie dans la documentation.
Exemple de calcul du CRC à partir de cette table :
On va ensuite voir comment appairer plusieurs modules entre eux : EnOcean Partie 4: Appairage