senml — Sensor Markup Language¶
Denna modul implementerar en liten kodare/avkodare för Sensor Markup Language (SenML, RFC 8428). SenML är en medietyp för sensormätningar och enhetsparametrar: varje ”pack” är en lista av ”records”, där varje record bär ett namn, en enhet, ett värde, en tidsstämpel och en valfri summa.
Implementeringen stöder både JSON- och CBOR-representationerna och tillåter att pack nästlas så att ett enda rotpack kan beskriva en gateway som fronter flera enheter. Inkommande nyttolaster kan driva aktuatoråteranrop på befintliga records.
Exempel på användning:
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())
Klasser¶
- class senml.SenmlPack(name: str, callback=None)¶
Representerar ett SenML-pack – en samling av
SenmlRecord-instanser och eventuellt andra underordnadeSenmlPack-objekt. När ett pack endast innehåller records representerar det en enskild enhet; när det innehåller andra pack fungerar det som en gateway.name är SenML-basnamnet (
bn) som används för varje record i detta pack.callback anropas från
from_json/from_cbornärhelst ett inkommande record namnger en tidigare okänd sensor; det nyaSenmlRecordskickas som det första argumentet och (för nästlade pack) skickas det ursprungliga enhetspacket somdevice=.... Det används vanligtvis för att hantera aktuatorkommandon.SenmlPack-instanser är itererbara – iteration ger varje record i insättningsordning – och kan användas som en kontexthanterare så att packet vid utträde tar bort sig självt från sin förälder.- base_value: int | float | None¶
Valfritt basvärde (
bv) som läggs till varje records numeriska värde vid kodning och subtraheras vid avkodning. Att ange ett icke-numeriskt värde ger upphov tillException.
- base_unit: str | None¶
Valfri basenhet (
bu) – vanligtvis ett värde frånSenmlUnits.
- actuate¶
Det återanrop som angavs vid konstruktionstillfället. Kan tilldelas på nytt under körning.
- add(item: SenmlRecord | SenmlPack) None¶
Lägg till item i detta pack. item måste vara ett
SenmlRecordeller ett annatSenmlPackoch får inte redan tillhöra en annan förälder; annars gesExceptionupphov.
- remove(item: SenmlRecord | SenmlPack) None¶
Ta bort item från detta pack.
Exceptionges upphov om item inte är ett barn till detta pack.
- clear() None¶
Ta bort varje record/under-pack från detta pack och koppla loss dem från deras förälderreferens.
- from_json(data: str) None¶
Tolka ett SenML/JSON-dokument och slå samman dess records med detta pack. Records som redan finns (matchade på namn) utlöser
SenmlRecord.do_actuate(); nya records läggs till och packets callback anropas.
- class senml.SenmlRecord(name: str, **kwargs)¶
Representerar en enskild mätning inuti ett
SenmlPack.name är SenML-recordnamnet (
n).Följande nyckelordsargument accepteras:
value –
bool,int,float,strellerbytearray. Andra typer ger upphov tillException.time – numerisk tidsstämpel (
t).unit – en enhetssträng, vanligtvis en medlem av
SenmlUnits.sum – numerisk integrerad summa (
s).update_time – maximal tid innan sensorn kommer att ge en ny avläsning (
ut).callback – funktion som anropas när en inkommande nyttolast uppdaterar detta record. Den tar emot
SenmlRecordsom sitt enda argument.
SenmlRecordkan användas som en kontexthanterare så att det vid utträde tar bort sig självt från sitt förälderpack.- value¶
Det aktuella värdet. Vid omtilldelning kontrolleras typen; endast
bool, tal,strochbytearrayaccepteras. För att styra den renderade precisionen för ett flyttalsvärde, avrunda före tilldelningen, t.ex.record.value = round(x, 2).
- update_time: int | float | None¶
Maximal tid innan sensorn kommer att ge en uppdaterad avläsning (
ut).
- actuate¶
Det återanrop som angavs vid konstruktionstillfället. Kan tilldelas på nytt under körning.
- class senml.SenmlBase¶
Gemensam basklass som delas av
SenmlPackochSenmlRecord. Den exponerar inget eget publikt API; den existerar så attSenmlPack.add()kan validera att ett objekt tillhör SenML-hierarkin.
- class senml.SenmlUnits¶
Namnrymdsklass vars klassattribut är de SenML-enhetssymboler som definieras av RFC 8428. Varje attribut motsvarar enhetens strängkod, lämplig för tilldelning till
SenmlRecord.unitellerSenmlPack.base_unit.