senml — Sensor Markup Language¶
Ce module implémente un petit encodeur/décodeur pour le Sensor Markup Language (SenML, RFC 8428). SenML est un type de média pour les mesures de capteurs et les paramètres de périphériques : chaque « pack » est une liste d”« enregistrements », où chaque enregistrement porte un nom, une unité, une valeur, un horodatage et une somme facultative.
L’implémentation prend en charge à la fois les représentations JSON et CBOR et permet d’imbriquer les packs afin qu’un unique pack racine puisse décrire une passerelle desservant plusieurs périphériques. Les charges utiles entrantes peuvent déclencher des fonctions de rappel d’actionneur sur des enregistrements existants.
Exemple d’utilisation
from senml import SenmlPack, SenmlRecord, SenmlUnits
# A pack collects readings for one device, identified by URN.
pack = SenmlPack("urn:dev:mac:0024befffe804ff1")
# Add a temperature reading in degrees Celsius.
pack.add(SenmlRecord(
"temperature",
unit=SenmlUnits.SENML_UNIT_DEGREES_CELSIUS,
value=23.4,
))
# Add a humidity reading in %RH.
pack.add(SenmlRecord(
"humidity",
unit=SenmlUnits.SENML_UNIT_RELATIVE_HUMIDITY,
value=51.2,
))
# Render the pack as a SenML/JSON document.
print(pack.to_json())
Classes¶
- class senml.SenmlPack(name: str, callback=None)¶
Représente un pack SenML – une collection d’instances
SenmlRecordet éventuellement d’autres objetsSenmlPackenfants. Lorsqu’un pack ne contient que des enregistrements, il représente un seul périphérique ; lorsqu’il contient d’autres packs, il agit comme une passerelle.name est le nom de base SenML (
bn) utilisé pour chaque enregistrement contenu dans ce pack.callback est invoquée depuis
from_json/from_cborchaque fois qu’un enregistrement entrant nomme un capteur précédemment inconnu ; le nouveauSenmlRecordest passé comme premier argument et (pour les packs imbriqués) le pack périphérique d’origine est passé viadevice=.... Elle est généralement utilisée pour traiter les commandes d’actionneur.Les instances
SenmlPacksont itérables – l’itération produit chaque enregistrement dans l’ordre d’insertion – et peuvent être utilisées comme gestionnaire de contexte de sorte qu’à la sortie le pack se retire lui-même de son parent.- base_value: int | float | None¶
Valeur de base facultative (
bv) ajoutée à la valeur numérique de chaque enregistrement lors de l’encodage et soustraite lors du décodage. L’attribution d’une valeur non numérique lèveException.
- base_time: int | float | None¶
Temps de base facultatif (
bt) ajouté à l’horodatage de chaque enregistrement.
- base_sum: int | float | None¶
Somme de base facultative (
bs) ajoutée au champ somme de chaque enregistrement.
- base_unit: str | None¶
Unité de base facultative (
bu) – généralement une valeur issue deSenmlUnits.
- actuate¶
La fonction de rappel fournie au moment de la construction. Peut être réassignée à l’exécution.
- add(item: SenmlRecord | SenmlPack) None¶
Ajoute item à ce pack. item doit être un
SenmlRecordou un autreSenmlPacket ne doit pas déjà appartenir à un parent différent ; sinonExceptionest levée.
- remove(item: SenmlRecord | SenmlPack) None¶
Retire item de ce pack.
Exceptionest levée si item n’est pas un enfant de ce pack.
- clear() None¶
Retire chaque enregistrement/sous-pack de ce pack et les détache de leur référence parente.
- from_json(data: str) None¶
Analyse un document SenML/JSON et fusionne les enregistrements dans ce pack. Les enregistrements qui existent déjà (appariés par nom) déclenchent
SenmlRecord.do_actuate(); les nouveaux enregistrements sont ajoutés et la fonction de rappel callback au niveau du pack est invoquée.
- class senml.SenmlRecord(name: str, **kwargs)¶
Représente une mesure unique au sein d’un
SenmlPack.name est le nom d’enregistrement SenML (
n).Les arguments nommés suivants sont acceptés :
value –
bool,int,float,stroubytearray. Les autres types lèventException.time – horodatage numérique (
t).unit – une chaîne d’unité, généralement un membre de
SenmlUnits.sum – somme intégrée numérique (
s).update_time – temps maximal avant que le capteur fournisse une nouvelle lecture (
ut).callback – fonction invoquée lorsqu’une charge utile entrante met à jour cet enregistrement. Elle reçoit le
SenmlRecordcomme unique argument.
SenmlRecordpeut être utilisé comme gestionnaire de contexte de sorte qu’à la sortie il se retire de son pack parent.- value¶
La valeur actuelle. La réassignation vérifie le type ; seuls
bool, les nombres,stretbytearraysont acceptés. Pour contrôler la précision de rendu d’une valeur flottante, arrondissez avant l’assignation, par exemplerecord.value = round(x, 2).
- update_time: int | float | None¶
Temps maximal avant que le capteur fournisse une lecture mise à jour (
ut).
- actuate¶
La fonction de rappel fournie au moment de la construction. Peut être réassignée à l’exécution.
- class senml.SenmlBase¶
Classe de base commune partagée par
SenmlPacketSenmlRecord. Elle n’expose aucune API publique propre ; elle existe afin queSenmlPack.add()puisse valider qu’un élément appartient à la hiérarchie SenML.
- class senml.SenmlUnits¶
Classe d’espace de noms dont les attributs de classe sont les symboles d’unité SenML définis par la RFC 8428. Chaque attribut se résout en le code de chaîne de l’unité, adapté à l’assignation à
SenmlRecord.unitouSenmlPack.base_unit.