senml — Sensor Markup Language¶
Tento modul implementuje malý kodér/dekodér pro jazyk Sensor Markup Language (SenML, RFC 8428). SenML je mediální typ pro měření ze senzorů a parametry zařízení: každý „pack“ je seznam „records“ (záznamů), kde každý záznam nese název, jednotku, hodnotu, časové razítko a volitelný součet.
Implementace podporuje reprezentaci jak v JSON, tak v CBOR a umožňuje vnořování packů, takže jediný kořenový pack může popisovat bránu zaštiťující více zařízení. Příchozí payloady mohou spouštět callbacky aktuátorů u existujících záznamů.
Příklad použití:
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())
Třídy¶
- class senml.SenmlPack(name: str, callback=None)¶
Reprezentuje SenML pack – kolekci instancí
SenmlRecorda volitelně dalších podřízených objektůSenmlPack. Když pack obsahuje pouze záznamy, reprezentuje jediné zařízení; když obsahuje další packy, funguje jako brána.name je základní název SenML (
bn) použitý pro každý záznam obsažený v tomto packu.callback je voláno z
from_json/from_cbor, kdykoli příchozí záznam pojmenuje dříve neznámý senzor; novýSenmlRecordje předán jako první argument a (u vnořených packů) je původní pack zařízení předán jakodevice=.... Typicky se používá ke zpracování příkazů aktuátorů.Instance
SenmlPackjsou iterovatelné – iterace vrací jednotlivé záznamy v pořadí vložení – a mohou být použity jako kontextový manažer, takže při ukončení se pack sám odebere ze svého rodiče.- base_value: int | float | None¶
Volitelná základní hodnota (
bv) přičtená k numerické hodnotě každého záznamu při kódování a odečtená při dekódování. Nastavení nenumerické hodnoty vyvoláException.
- base_time: int | float | None¶
Volitelný základní čas (
bt) přičtený k časovému razítku každého záznamu.
- base_sum: int | float | None¶
Volitelný základní součet (
bs) přičtený k poli součtu každého záznamu.
- base_unit: str | None¶
Volitelná základní jednotka (
bu) – typicky hodnota zSenmlUnits.
- actuate¶
Callback dodaný při konstrukci. Lze ho znovu přiřadit za běhu.
- add(item: SenmlRecord | SenmlPack) None¶
Připojí item k tomuto packu. item musí být
SenmlRecordnebo jinýSenmlPacka nesmí již patřit jinému rodiči; jinak je vyvolánaException.
- remove(item: SenmlRecord | SenmlPack) None¶
Odebere item z tohoto packu.
Exceptionje vyvolána, pokud item není potomkem tohoto packu.
- clear() None¶
Odebere každý záznam/podřízený pack z tohoto packu a odpojí je od jejich referenci na rodiče.
- from_json(data: str) None¶
Naparsuje dokument SenML/JSON a sloučí záznamy do tohoto packu. Záznamy, které již existují (porovnané podle názvu), spustí
SenmlRecord.do_actuate(); nové záznamy jsou připojeny a je vyvoláno callback na úrovni packu.
- class senml.SenmlRecord(name: str, **kwargs)¶
Reprezentuje jediné měření uvnitř
SenmlPack.name je název SenML záznamu (
n).Přijímány jsou následující klíčové argumenty:
value –
bool,int,float,strnebobytearray. Ostatní typy vyvolajíException.time – numerické časové razítko (
t).unit – řetězec jednotky, typicky člen
SenmlUnits.sum – numerický integrovaný součet (
s).update_time – maximální čas, než senzor poskytne čerstvé čtení (
ut).callback – funkce volaná, když příchozí payload aktualizuje tento záznam. Přijímá
SenmlRecordjako svůj jediný argument.
SenmlRecordlze použít jako kontextový manažer, takže při ukončení se sám odebere ze svého rodičovského packu.- value¶
Aktuální hodnota. Při novém přiřazení se kontroluje typ; přijímány jsou pouze
bool, čísla,strabytearray. Pro řízení vykreslované přesnosti hodnoty typu float zaokrouhlete před přiřazením, např.record.value = round(x, 2).
- actuate¶
Callback dodaný při konstrukci. Lze ho znovu přiřadit za běhu.
- class senml.SenmlBase¶
Společná základní třída sdílená
SenmlPackaSenmlRecord. Nevystavuje žádné vlastní veřejné API; existuje proto, abySenmlPack.add()mohla ověřit, že položka patří do hierarchie SenML.
- class senml.SenmlUnits¶
Třída jmenného prostoru, jejíž atributy třídy jsou symboly jednotek SenML definované v RFC 8428. Každý atribut se rozliší na řetězcový kód jednotky vhodný pro přiřazení do
SenmlRecord.unitneboSenmlPack.base_unit.