[[reseaux:accueilreseaux|{{ :iconemaison.jpg?nolink&30|Sommaire "Réseau et communication"}}]]
===== SenML =====
[Mise à jour le 20/11/2021]
**SenML** (**Sensor Measuring List**) est une spécification qui exploite **JSON** ou **CBOR**. Elle liste un ensemble de noms/unités/mesures et les standardise en un nom de clé unique. En utilisant cette standardisation, **on facilite l'interopérabilité**. Les clés et les valeurs sont donc réglementées et typées pour éviter tous conflits d'interopérabilité. Le format est défini dans la [RFC8428] et repose sur une structure de tableau regroupant des objets comme le montre la figure suivante tirée de la RFC.
[
{"bn" : "urn:dev:ow:10e2073a01080063", "bt":1.320067464e+09,
"bu" : "\%RH", "v":21.2},
{"t":10, "v":21.3},
{"t":20, "v":21.4},
{"t":30, "v":21.4},
...
**SenML définit les clés utilisées dans l’objet**. Pour avoir une notation compacte, elles sont limitées à **1 ou 2 caractères**. Parmi elles, ”**bn**” indique un nom de base et ”**n**” le **nom d’un appareil**. Si plusieurs appareils envoient la partie commune de l’identifiant de l’appareil, on peut mettre le ”bn” pour éviter de le répéter à chaque fois.
Le **temps de base** (ou ”**bt**”) est également un moyen de compacter la notation du temps. Le temps (”**t**”) donne le décalage et conduit à une valeur plus petite comme on le voit dans l’exemple.
L’**unité de base** (”**bu**”) indique l’**unité par défaut** si les autres objets ne portent pas de mot clé indiquant l’unité (”**u**”).
La [RFC8428] définit une liste d’unités telles que le kilogramme (”kg”), le volt (”V”), etc. Dans l’exemple, ”%RH” désigne un pourcentage d’humidité relative. Une **valeur numérique** utilise la lettre ”**v**”, une chaîne de caractères utilise la touche ”**vs**”.
**CBOR** utilise la même structure, mais les petits nombres entiers positifs et négatifs sont substitués dans les clés des objets de CBOR : ”bn”, ”bt”, ”bu” seront respectivement représentés par -1, -2 et -3 et ”n”, ”t”, ”u” par +0, +2 et +6.