senml — Sensor Markup Language¶
Ovaj modul implementira mali koder/dekoder za Sensor Markup Language (SenML, RFC 8428). SenML je medijski tip za senzorska mjerenja i parametre uređaja: svaki „pack” je popis „zapisa”, pri čemu svaki zapis nosi naziv, jedinicu, vrijednost, vremensku oznaku i opcionalni zbroj.
Implementacija podržava i JSON i CBOR reprezentacije te dopušta ugnježđivanje paketa tako da jedan korijenski paket može opisati pristupnik koji prikuplja podatke više uređaja. Dolazni podaci mogu pokrenuti povratne pozive aktuatora na postojećim zapisima.
Primjer korištenja:
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())
Klase¶
- class senml.SenmlPack(name: str, callback=None)¶
Predstavlja SenML paket – zbirku
SenmlRecordinstanci i opcionalno drugih podređenihSenmlPackobjekata. Kada paket sadrži samo zapise, predstavlja jedan uređaj; kada sadrži druge pakete, ponaša se kao pristupnik.name je SenML osnovni naziv (
bn) koji se koristi za svaki zapis sadržan u ovom paketu.callback se poziva iz
from_json/from_cborkad god dolazni zapis imenuje prethodno nepoznat senzor; noviSenmlRecordprosljeđuje se kao prvi argument, a (za ugniježđene pakete) izvorišni paket uređaja prosljeđuje se kaodevice=.... Obično se koristi za obradu naredbi aktuatorima.SenmlPackinstance su iterabilne – iteracija vraća svaki zapis redoslijedom umetanja – i mogu se koristiti kao upravitelj konteksta tako da se pri izlasku paket ukloni iz svog roditelja.- base_value: int | float | None¶
Opcionalna osnovna vrijednost (
bv) koja se pri kodiranju dodaje numeričkoj vrijednosti svakog zapisa, a pri dekodiranju oduzima. Postavljanje nenumeričke vrijednosti izazivaException.
- base_time: int | float | None¶
Opcionalno osnovno vrijeme (
bt) koje se dodaje vremenskoj oznaci svakog zapisa.
- base_sum: int | float | None¶
Opcionalni osnovni zbroj (
bs) koji se dodaje polju zbroja svakog zapisa.
- base_unit: str | None¶
Opcionalna osnovna jedinica (
bu) – obično vrijednost izSenmlUnits.
- actuate¶
Povratni poziv naveden pri konstrukciji. Može se ponovno dodijeliti tijekom izvođenja.
- add(item: SenmlRecord | SenmlPack) None¶
Dodaje item ovom paketu. item mora biti
SenmlRecordili drugiSenmlPacki ne smije već pripadati drugom roditelju; u suprotnom se izazivaException.
- remove(item: SenmlRecord | SenmlPack) None¶
Uklanja item iz ovog paketa.
Exceptionse izaziva ako item nije podređen ovom paketu.
- clear() None¶
Uklanja svaki zapis/podpaket iz ovog paketa i odvaja ih od njihove roditeljske reference.
- from_json(data: str) None¶
Parsira SenML/JSON dokument i spaja zapise u ovaj paket. Zapisi koji već postoje (prepoznati po nazivu) pokreću
SenmlRecord.do_actuate(); novi zapisi se dodaju i poziva se callback na razini paketa.
- class senml.SenmlRecord(name: str, **kwargs)¶
Predstavlja jedno mjerenje unutar
SenmlPack.name je naziv SenML zapisa (
n).Prihvaćaju se sljedeći imenovani argumenti:
value –
bool,int,float,strilibytearray. Drugi tipovi izazivajuException.time – numerička vremenska oznaka (
t).unit – niz znakova jedinice, obično član
SenmlUnits.sum – numerički integrirani zbroj (
s).update_time – najduže vrijeme prije nego što senzor pruži novo očitanje (
ut).callback – funkcija koja se poziva kada dolazni podaci ažuriraju ovaj zapis. Prima
SenmlRecordkao svoj jedini argument.
SenmlRecordmože se koristiti kao upravitelj konteksta tako da se pri izlasku ukloni iz svog roditeljskog paketa.- value¶
Trenutna vrijednost. Ponovno dodjeljivanje provjerava tip; prihvaćaju se samo
bool, brojevi,stribytearray. Za kontrolu prikazane preciznosti vrijednosti tipa float, zaokružite je prije dodjeljivanja, npr.record.value = round(x, 2).
- update_time: int | float | None¶
Najduže vrijeme prije nego što senzor pruži ažurirano očitanje (
ut).
- actuate¶
Povratni poziv naveden pri konstrukciji. Može se ponovno dodijeliti tijekom izvođenja.
- class senml.SenmlBase¶
Zajednička osnovna klasa koju dijele
SenmlPackiSenmlRecord. Ne izlaže nikakav vlastiti javni API; postoji kako biSenmlPack.add()mogao provjeriti pripada li stavka SenML hijerarhiji.
- class senml.SenmlUnits¶
Klasa imenskog prostora čiji su atributi klase simboli SenML jedinica definirani u RFC 8428. Svaki atribut razrješava se u znakovni kod jedinice, prikladan za dodjeljivanje
SenmlRecord.unitiliSenmlPack.base_unit.