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 SenmlRecord instanci i opcionalno drugih podređenih SenmlPack objekata. 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_cbor kad god dolazni zapis imenuje prethodno nepoznat senzor; novi SenmlRecord prosljeđuje se kao prvi argument, a (za ugniježđene pakete) izvorišni paket uređaja prosljeđuje se kao device=.... Obično se koristi za obradu naredbi aktuatorima.

SenmlPack instance 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.

name: str

Osnovni naziv paketa (bn).

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 izaziva Exception.

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 iz SenmlUnits.

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 SenmlRecord ili drugi SenmlPack i ne smije već pripadati drugom roditelju; u suprotnom se izaziva Exception.

remove(item: SenmlRecord | SenmlPack) None

Uklanja item iz ovog paketa. Exception se 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.

to_json() str

Renderira paket i njegovu djecu u SenML/JSON niz znakova.

from_cbor(data: bytes) None

Parsira SenML/CBOR niz bajtova i spaja zapise u ovaj paket.

to_cbor() bytes

Renderira paket i njegovu djecu u SenML/CBOR niz bajtova.

do_actuate(raw: dict, naming_map: dict, device: SenmlPack | None = None) None

Interni pomoćnik koji se poziva tijekom parsiranja dolaznih podataka kada nijedan postojeći zapis ne odgovara unosu. Dodaje novi SenmlRecord u device (ili u ovaj paket) i prosljeđuje ga callback-u.

class senml.SenmlRecord(name: str, **kwargs)

Predstavlja jedno mjerenje unutar SenmlPack.

name je naziv SenML zapisa (n).

Prihvaćaju se sljedeći imenovani argumenti:

  • valuebool, int, float, str ili bytearray. Drugi tipovi izazivaju Exception.

  • 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 SenmlRecord kao svoj jedini argument.

SenmlRecord može se koristiti kao upravitelj konteksta tako da se pri izlasku ukloni iz svog roditeljskog paketa.

name: str

Naziv zapisa (n).

value

Trenutna vrijednost. Ponovno dodjeljivanje provjerava tip; prihvaćaju se samo bool, brojevi, str i bytearray. Za kontrolu prikazane preciznosti vrijednosti tipa float, zaokružite je prije dodjeljivanja, npr. record.value = round(x, 2).

unit: str | None

Niz znakova jedinice (u).

time: int | float | None

Vremenska oznaka pridružena ovom mjerenju (t).

update_time: int | float | None

Najduže vrijeme prije nego što senzor pruži ažurirano očitanje (ut).

sum: int | float | None

Polje integriranog zbroja (s).

actuate

Povratni poziv naveden pri konstrukciji. Može se ponovno dodijeliti tijekom izvođenja.

do_actuate(raw: dict, naming_map: dict) None

Ažurira ovaj zapis iz neobrađenog dolaznog SenML rječnika i, ako postoji, poziva povratni poziv aktuatora.

class senml.SenmlBase

Zajednička osnovna klasa koju dijele SenmlPack i SenmlRecord. Ne izlaže nikakav vlastiti javni API; postoji kako bi SenmlPack.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.unit ili SenmlPack.base_unit.

SENML_UNIT_METER: str

"m" – metar.

SENML_UNIT_KILOGRAM: str

"kg" – kilogram.

SENML_UNIT_GRAM: str

"g" – gram.

SENML_UNIT_SECOND: str

"s" – sekunda.

SENML_UNIT_AMPERE: str

"A" – amper.

SENML_UNIT_KELVIN: str

"K" – kelvin.

SENML_UNIT_CANDELA: str

"cd" – kandela.

SENML_UNIT_MOLE: str

"mol" – mol.

SENML_UNIT_HERTZ: str

"Hz" – herc.

SENML_UNIT_RADIAN: str

"rad" – radijan.

SENML_UNIT_STERADIAN: str

"sr" – steradijan.

SENML_UNIT_NEWTON: str

"N" – njutn.

SENML_UNIT_PASCAL: str

"Pa" – paskal.

SENML_UNIT_JOULE: str

"J" – džul.

SENML_UNIT_WATT: str

"W" – vat.

SENML_UNIT_COULOMB: str

"C" – kulon.

SENML_UNIT_VOLT: str

"V" – volt.

SENML_UNIT_FARAD: str

"F" – farad.

SENML_UNIT_OHM: str

"Ohm" – om.

SENML_UNIT_SIEMENS: str

"S" – simens.

SENML_UNIT_WEBER: str

"Wb" – veber.

SENML_UNIT_TESLA: str

"T" – tesla.

SENML_UNIT_HENRY: str

"H" – henri.

SENML_UNIT_DEGREES_CELSIUS: str

"Cel" – stupnjevi Celzija.

SENML_UNIT_LUMEN: str

"lm" – lumen.

SENML_UNIT_LUX: str

"lx" – luks.

SENML_UNIT_BECQUEREL: str

"Bq" – bekerel.

SENML_UNIT_GRAY: str

"Gy" – grej.

SENML_UNIT_SIEVERT: str

"Sv" – sivert.

SENML_UNIT_KATAL: str

"kat" – katal.

SENML_UNIT_SQUARE_METER: str

"m2" – četvorni metar.

SENML_UNIT_CUBIC_METER: str

"m3" – kubični metar.

SENML_UNIT_LITER: str

"l" – litra.

SENML_UNIT_VELOCITY: str

"m/s" – brzina.

SENML_UNIT_ACCELERATION: str

"m/s2" – ubrzanje.

SENML_UNIT_CUBIC_METER_PER_SECOND: str

"m3/s" – volumetrijski protok.

SENML_UNIT_LITER_PER_SECOND: str

"l/s" – litra u sekundi.

SENML_UNIT_WATT_PER_SQUARE_METER: str

"W/m2" – ozračenost.

SENML_UNIT_CANDELA_PER_SQUARE_METER: str

"cd/m2" – luminancija.

SENML_UNIT_BIT: str

"bit" – bit.

SENML_UNIT_BIT_PER_SECOND: str

"bit/s" – bit u sekundi.

SENML_UNIT_DEGREES_LATITUDE: str

"lat" – stupnjevi geografske širine.

SENML_UNIT_DEGREES_LONGITUDE: str

"lon" – stupnjevi geografske dužine.

SENML_UNIT_PH: str

"pH" – kiselost (pH).

SENML_UNIT_DECIBEL: str

"db" – decibel.

SENML_UNIT_DECIBEL_RELATIVE_TO_1_W: str

"dBW" – decibel u odnosu na 1 W.

SENML_UNIT_BEL: str

"Bspl" – bel (razina zvučnog tlaka).

SENML_UNIT_COUNTER: str

"count" – brojač.

SENML_UNIT_RATIO: str

"//" – omjer (bezdimenzijski).

SENML_UNIT_RELATIVE_HUMIDITY: str

"%RH" – relativna vlažnost.

SENML_UNIT_PERCENTAGE_REMAINING_BATTERY_LEVEL: str

"%EL" – preostala razina baterije u postocima.

SENML_UNIT_SECONDS_REMAINING_BATTERY_LEVEL: str

"EL" – preostala razina baterije u sekundama.

SENML_UNIT_EVENT_RATE_PER_SECOND: str

"1/s" – učestalost događaja po sekundi.

SENML_UNIT_EVENT_RATE_PER_MINUTE: str

"1/min" – učestalost događaja po minuti.

SENML_UNIT_BPM: str

"beat/min" – otkucaji po minuti.

SENML_UNIT_BEATS: str

"beats" – otkucaji.

SENML_UNIT_SIEMENS_PER_METER: str

"S/m" – simens po metru (električna vodljivost).