senml — Sensor Markup Language¶
Este módulo implementa un pequeño codificador/decodificador para el Sensor Markup Language (SenML, RFC 8428). SenML es un tipo de medio para mediciones de sensores y parámetros de dispositivos: cada «pack» es una lista de «records», donde cada record lleva un nombre, una unidad, un valor, una marca de tiempo y una suma opcional.
La implementación admite tanto la representación JSON como la CBOR y permite anidar los packs, de modo que un único pack raíz pueda describir una pasarela que actúe como frente de múltiples dispositivos. Las cargas útiles entrantes pueden activar funciones de retorno (callbacks) de actuadores sobre records existentes.
Ejemplo de uso:
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())
Clases¶
- class senml.SenmlPack(name: str, callback=None)¶
Representa un pack SenML, es decir, una colección de instancias
SenmlRecordy, opcionalmente, otros objetosSenmlPackhijos. Cuando un pack solo contiene records, representa un único dispositivo; cuando contiene otros packs, actúa como pasarela.name es el nombre base de SenML (
bn) usado para cada record contenido en este pack.callback se invoca desde
from_json/from_cborcada vez que un record entrante nombra un sensor previamente desconocido; el nuevoSenmlRecordse pasa como primer argumento y (para packs anidados) el pack del dispositivo de origen se pasa comodevice=.... Normalmente se usa para gestionar comandos de actuadores.Las instancias de
SenmlPackson iterables – la iteración produce cada record en orden de inserción – y pueden usarse como gestor de contexto, de modo que al salir el pack se elimina a sí mismo de su padre.- base_value: int | float | None¶
Valor base opcional (
bv) que se suma al valor numérico de cada record al codificar y se resta al decodificar. Asignar un valor no numérico generaException.
- base_time: int | float | None¶
Tiempo base opcional (
bt) que se suma a la marca de tiempo de cada record.
- base_unit: str | None¶
Unidad base opcional (
bu) – normalmente un valor deSenmlUnits.
- actuate¶
La función de retorno (callback) proporcionada en el momento de la construcción. Puede reasignarse en tiempo de ejecución.
- add(item: SenmlRecord | SenmlPack) None¶
Añade item a este pack. item debe ser un
SenmlRecordu otroSenmlPacky no debe pertenecer ya a un padre distinto; de lo contrario se generaException.
- remove(item: SenmlRecord | SenmlPack) None¶
Elimina item de este pack. Se genera
Exceptionsi item no es hijo de este pack.
- clear() None¶
Elimina todos los records/sub-packs de este pack y los desvincula de su referencia al padre.
- from_json(data: str) None¶
Analiza un documento SenML/JSON y combina los records en este pack. Los records que ya existen (emparejados por nombre) activan
SenmlRecord.do_actuate(); los nuevos records se añaden y se invoca el callback a nivel de pack.
- class senml.SenmlRecord(name: str, **kwargs)¶
Representa una sola medición dentro de un
SenmlPack.name es el nombre del record SenML (
n).Se aceptan los siguientes argumentos por palabra clave:
value –
bool,int,float,strobytearray. Otros tipos generanException.time – marca de tiempo numérica (
t).unit – una cadena de unidad, normalmente un miembro de
SenmlUnits.sum – suma integrada numérica (
s).update_time – tiempo máximo antes de que el sensor proporcione una lectura nueva (
ut).callback – función que se invoca cuando una carga útil entrante actualiza este record. Recibe el
SenmlRecordcomo único argumento.
SenmlRecordpuede usarse como gestor de contexto, de modo que al salir se elimina a sí mismo de su pack padre.- value¶
El valor actual. La reasignación comprueba el tipo; solo se aceptan
bool, números,strybytearray. Para controlar la precisión renderizada de un valor de tipo float, redondéalo antes de la asignación, p. ej.record.value = round(x, 2).
- update_time: int | float | None¶
Tiempo máximo antes de que el sensor proporcione una lectura actualizada (
ut).
- actuate¶
La función de retorno (callback) proporcionada en el momento de la construcción. Puede reasignarse en tiempo de ejecución.
- class senml.SenmlBase¶
Clase base común compartida por
SenmlPackySenmlRecord. No expone ninguna API pública propia; existe para queSenmlPack.add()pueda validar que un elemento pertenece a la jerarquía de SenML.
- class senml.SenmlUnits¶
Clase de espacio de nombres cuyos atributos de clase son los símbolos de unidad SenML definidos por RFC 8428. Cada atributo se resuelve al código de cadena de la unidad, adecuado para asignarlo a
SenmlRecord.unito aSenmlPack.base_unit.