senml — Sensor Markup Language¶
Este módulo implementa um pequeno codificador/decodificador para a Sensor Markup Language (SenML, RFC 8428). A SenML é um media-type para medições de sensores e parâmetros de dispositivos: cada “pack” é uma lista de “records”, onde cada record carrega um nome, unidade, valor, timestamp e uma soma opcional.
A implementação suporta tanto a representação JSON quanto a CBOR e permite que packs sejam aninhados, de modo que um único pack raiz possa descrever um gateway que serve de fachada para múltiplos dispositivos. Payloads de entrada podem acionar callbacks de atuadores em records existentes.
Exemplo 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())
Classes¶
- class senml.SenmlPack(name: str, callback=None)¶
Representa um pack SenML – uma coleção de instâncias de
SenmlRecorde, opcionalmente, outros objetosSenmlPackfilhos. Quando um pack contém apenas records, ele representa um único dispositivo; quando contém outros packs, ele atua como um gateway.name é o nome base SenML (
bn) usado para todos os records contidos neste pack.callback é invocado a partir de
from_json/from_cborsempre que um record de entrada nomeia um sensor previamente desconhecido; o novoSenmlRecordé passado como primeiro argumento e (para packs aninhados) o pack do dispositivo de origem é passado comodevice=.... Tipicamente é usado para tratar comandos de atuadores.Instâncias de
SenmlPacksão iteráveis – a iteração produz cada record na ordem de inserção – e podem ser usadas como gerenciador de contexto, de modo que, na saída, o pack se remove de seu pai.- base_value: int | float | None¶
Valor base opcional (
bv) adicionado ao valor numérico de cada record na codificação e subtraído na decodificação. Definir um valor não numérico levantaException.
- base_unit: str | None¶
Unidade base opcional (
bu) – tipicamente um valor deSenmlUnits.
- actuate¶
O callback fornecido no momento da construção. Pode ser reatribuído em tempo de execução.
- add(item: SenmlRecord | SenmlPack) None¶
Anexa item a este pack. item deve ser um
SenmlRecordou outroSenmlPacke não deve já pertencer a um pai diferente; caso contrário,Exceptioné levantada.
- remove(item: SenmlRecord | SenmlPack) None¶
Remove item deste pack.
Exceptioné levantada se item não for filho deste pack.
- clear() None¶
Remove todos os records/sub-packs deste pack e os desvincula de sua referência ao pai.
- from_json(data: str) None¶
Analisa um documento SenML/JSON e mescla os records neste pack. Records que já existem (correspondidos pelo nome) acionam
SenmlRecord.do_actuate(); novos records são anexados e o callback de nível de pack é invocado.
- class senml.SenmlRecord(name: str, **kwargs)¶
Representa uma única medição dentro de um
SenmlPack.name é o nome do record SenML (
n).Os seguintes argumentos nomeados são aceitos:
value –
bool,int,float,stroubytearray. Outros tipos levantamException.time – timestamp numérico (
t).unit – uma string de unidade, tipicamente um membro de
SenmlUnits.sum – soma integrada numérica (
s).update_time – tempo máximo antes que o sensor forneça uma nova leitura (
ut).callback – função invocada quando um payload de entrada atualiza este record. Ela recebe o
SenmlRecordcomo seu único argumento.
SenmlRecordpode ser usado como gerenciador de contexto, de modo que, na saída, ele se remove de seu pack pai.- value¶
O valor atual. A reatribuição verifica o tipo; apenas
bool, números,strebytearraysão aceitos. Para controlar a precisão renderizada de um valor float, arredonde antes da atribuição, por exemplorecord.value = round(x, 2).
- update_time: int | float | None¶
Tempo máximo antes que o sensor forneça uma leitura atualizada (
ut).
- actuate¶
O callback fornecido no momento da construção. Pode ser reatribuído em tempo de execução.
- class senml.SenmlBase¶
Classe base comum compartilhada por
SenmlPackeSenmlRecord. Ela não expõe nenhuma API pública própria; existe para queSenmlPack.add()possa validar que um item pertence à hierarquia SenML.
- class senml.SenmlUnits¶
Classe de namespace cujos atributos de classe são os símbolos de unidade SenML definidos pela RFC 8428. Cada atributo resolve para o código de string da unidade, adequado para atribuição a
SenmlRecord.unitouSenmlPack.base_unit.