senml — Sensor Markup Language¶
Este módulo implementa um pequeno codificador/descodificador para o Sensor Markup Language (SenML, RFC 8428). O SenML é um tipo de media para medições de sensores e parâmetros de dispositivos: cada «pack» é uma lista de «records», onde cada record contém um nome, unidade, valor, timestamp e soma opcional.
A implementação suporta tanto as representações JSON como CBOR e permite que os packs sejam aninhados, de forma que um único pack raiz possa descrever uma gateway que suporta múltiplos dispositivos. Os payloads recebidos podem acionar callbacks de atuadores em records existentes.
Exemplo de utilização:
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
SenmlRecorde opcionalmente outros objetosSenmlPackfilhos. Quando um pack contém apenas records, representa um único dispositivo; quando contém outros packs, funciona como uma gateway.name é o nome base SenML (
bn) utilizado para todos os records contidos neste pack.callback é invocado a partir de
from_json/from_cborsempre que um record recebido nomeia um sensor previamente desconhecido; o novoSenmlRecordé passado como primeiro argumento e (para packs aninhados) o pack do dispositivo de origem é passado comodevice=.... É tipicamente utilizado para tratar comandos de atuadores.As instâncias de
SenmlPacksão iteráveis – a iteração produz cada record por ordem de inserção – e podem ser utilizadas como gestores de contexto, de modo que ao sair, o pack se remove do seu pai.- base_value: int | float | None¶
Valor base opcional (
bv) adicionado ao valor numérico de cada record durante a codificação e subtraído na descodificação. Definir um valor não numérico lançaException.
- base_unit: str | None¶
Unidade base opcional (
bu) – tipicamente um valor deSenmlUnits.
- actuate¶
O callback fornecido na construção. Pode ser reatribuído em tempo de execução.
- add(item: SenmlRecord | SenmlPack) None¶
Adiciona item a este pack. item deve ser um
SenmlRecordou outroSenmlPacke não deve pertencer já a um pai diferente; caso contrário, é lançadaException.
- remove(item: SenmlRecord | SenmlPack) None¶
Remove item deste pack. É lançada
Exceptionse item não for filho deste pack.
- from_json(data: str) None¶
Analisa um documento SenML/JSON e integra os records neste pack. Os records que já existem (correspondidos pelo nome) acionam
SenmlRecord.do_actuate(); os novos records são adicionados e o callback ao nível do pack é invocado.
- class senml.SenmlRecord(name: str, **kwargs)¶
Representa uma única medição dentro de um
SenmlPack.name é o nome do record SenML (
n).São aceites os seguintes argumentos de palavra-chave:
value –
bool,int,float,stroubytearray. Outros tipos lançamException.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 de o sensor fornecer uma nova leitura (
ut).callback – função invocada quando um payload recebido atualiza este record. Recebe o
SenmlRecordcomo único argumento.
SenmlRecordpode ser utilizado como gestor de contexto, de modo que ao sair, remove-se do seu pack pai.- value¶
O valor atual. A reatribuição verifica o tipo; apenas
bool, números,strebytearraysão aceites. Para controlar a precisão de renderização de um valor float, arredonde antes da atribuição, por exemplorecord.value = round(x, 2).
- update_time: int | float | None¶
Tempo máximo antes de o sensor fornecer uma leitura atualizada (
ut).
- actuate¶
O callback fornecido na construção. Pode ser reatribuído em tempo de execução.
- class senml.SenmlBase¶
Classe base comum partilhada por
SenmlPackeSenmlRecord. 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 espaço de nomes cujos atributos de classe são os símbolos de unidade SenML definidos por RFC 8428. Cada atributo resolve para o código de string da unidade, adequado para atribuição a
SenmlRecord.unitouSenmlPack.base_unit.