SenML pour Sensor Measuring List est une une spécification (un formalisme) qui peut exploiter les encodages JSON ou CBOR. Elle liste un ensemble de noms, d'unités, de mesures et les standardise en un nom de clé unique.
En utilisant cette standardisation, on facilite l'interopérabilité. Les clés et 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 l'exemple ci-dessous tiré 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.