senml — Sensor Markup Language

Ez a modul egy kis méretű kódolót/dekódolót valósít meg a Sensor Markup Language (SenML, RFC 8428) számára. A SenML egy média-típus érzékelőmérésekhez és eszközparaméterekhez: minden „pack” (csomag) „record” (rekord) elemek listája, ahol minden rekord hordoz egy nevet, mértékegységet, értéket, időbélyeget és opcionálisan egy összeget.

A megvalósítás támogatja mind a JSON, mind a CBOR ábrázolást, és lehetővé teszi a csomagok egymásba ágyazását, így egyetlen gyökércsomag leírhat egy átjárót, amely több eszköz előtt áll. A bejövő hasznos adatok aktuátor-visszahívásokat indíthatnak a meglévő rekordokon.

Példa a használatra:

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())

Osztályok

class senml.SenmlPack(name: str, callback=None)

Egy SenML csomagot reprezentál – SenmlRecord példányok gyűjteményét, és opcionálisan további gyermek SenmlPack objektumokat. Ha egy csomag csak rekordokat tartalmaz, akkor egyetlen eszközt képvisel; ha más csomagokat tartalmaz, akkor átjáróként működik.

A name a SenML alapnév (bn), amelyet az ebben a csomagban található minden rekordhoz használnak.

A callback visszahívást a from_json / from_cbor hívja meg, valahányszor egy bejövő rekord egy korábban ismeretlen érzékelőt nevez meg; az új SenmlRecord az első argumentumként kerül átadásra, és (egymásba ágyazott csomagok esetén) a kiindulási eszközcsomag a device=... argumentumként kerül átadásra. Jellemzően aktuátor-parancsok kezelésére használják.

A SenmlPack példányok iterálhatók – az iteráció beillesztési sorrendben adja vissza az egyes rekordokat – és kontextuskezelőként használhatók, így kilépéskor a csomag eltávolítja magát a szülőjéből.

name: str

A csomag alapneve (bn).

base_value: int | float | None

Opcionális alapérték (bv), amelyet kódoláskor hozzáadnak minden rekord numerikus értékéhez, dekódoláskor pedig levonnak belőle. Nem numerikus érték beállítása Exception kivételt vált ki.

base_time: int | float | None

Opcionális alapidő (bt), amelyet hozzáadnak minden rekord időbélyegéhez.

base_sum: int | float | None

Opcionális alapösszeg (bs), amelyet hozzáadnak minden rekord összeg-mezőjéhez.

base_unit: str | None

Opcionális alap-mértékegység (bu) – jellemzően egy érték a SenmlUnits osztályból.

actuate

A létrehozáskor megadott visszahívás. Futásidőben újra hozzárendelhető.

add(item: SenmlRecord | SenmlPack) None

Az item hozzáfűzése ehhez a csomaghoz. Az item egy SenmlRecord vagy egy másik SenmlPack kell legyen, és nem tartozhat már egy másik szülőhöz; ellenkező esetben Exception kivétel keletkezik.

remove(item: SenmlRecord | SenmlPack) None

Az item eltávolítása ebből a csomagból. Exception kivétel keletkezik, ha az item nem gyermeke ennek a csomagnak.

clear() None

Eltávolít minden rekordot/alcsomagot ebből a csomagból, és leválasztja őket a szülőre mutató hivatkozásukról.

from_json(data: str) None

Egy SenML/JSON dokumentum elemzése és a rekordok összevonása ebbe a csomagba. A már létező rekordok (név alapján egyeztetve) meghívják a SenmlRecord.do_actuate() metódust; az új rekordok hozzáfűződnek, és a csomagszintű callback visszahívás meghívásra kerül.

to_json() str

A csomag és gyermekei renderelése SenML/JSON karakterlánccá.

from_cbor(data: bytes) None

Egy SenML/CBOR bájtlánc elemzése és a rekordok összevonása ebbe a csomagba.

to_cbor() bytes

A csomag és gyermekei renderelése SenML/CBOR bájtlánccá.

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

Belső segédfüggvény, amelyet a bejövő adatok elemzése közben hívnak meg, amikor egyetlen meglévő rekord sem egyezik egy bejegyzéssel. Hozzáad egy új SenmlRecord rekordot a device eszközhöz (vagy ehhez a csomaghoz), és továbbítja azt a callback visszahívásnak.

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

Egyetlen mérést reprezentál egy SenmlPack csomagon belül.

A name a SenML rekordnév (n).

A következő kulcsszó-argumentumok fogadhatók el:

  • valuebool, int, float, str vagy bytearray. Más típusok Exception kivételt váltanak ki.

  • time – numerikus időbélyeg (t).

  • unit – egy mértékegység-karakterlánc, jellemzően a SenmlUnits osztály egy tagja.

  • sum – numerikus integrált összeg (s).

  • update_time – a maximális idő, mielőtt az érzékelő friss leolvasást szolgáltat (ut).

  • callback – függvény, amely akkor hívódik meg, amikor egy bejövő hasznos adat frissíti ezt a rekordot. Egyetlen argumentumként a SenmlRecord rekordot kapja meg.

A SenmlRecord kontextuskezelőként használható, így kilépéskor eltávolítja magát a szülőcsomagjából.

name: str

Rekordnév (n).

value

Az aktuális érték. Az újra-hozzárendelés ellenőrzi a típust; csak bool, számok, str és bytearray fogadható el. Egy float érték renderelt pontosságának szabályozásához a hozzárendelés előtt kerekítsen, pl. record.value = round(x, 2).

unit: str | None

Mértékegység-karakterlánc (u).

time: int | float | None

Az ehhez a méréshez társított időbélyeg (t).

update_time: int | float | None

A maximális idő, mielőtt az érzékelő frissített leolvasást szolgáltat (ut).

sum: int | float | None

Integrált összeg-mező (s).

actuate

A létrehozáskor megadott visszahívás. Futásidőben újra hozzárendelhető.

do_actuate(raw: dict, naming_map: dict) None

Ennek a rekordnak a frissítése egy nyers bejövő SenML szótárból, és ha jelen van, az aktuátor-visszahívás meghívása.

class senml.SenmlBase

Közös ősosztály, amelyet a SenmlPack és a SenmlRecord oszt meg. Saját nyilvános API-t nem tesz közzé; azért létezik, hogy a SenmlPack.add() ellenőrizni tudja, hogy egy elem a SenML hierarchiához tartozik-e.

class senml.SenmlUnits

Névtér-osztály, amelynek osztályattribútumai a RFC 8428 által definiált SenML mértékegység-szimbólumok. Minden attribútum a mértékegység karakterlánc-kódjára oldódik fel, amely alkalmas a SenmlRecord.unit vagy a SenmlPack.base_unit számára történő hozzárendelésre.

SENML_UNIT_METER: str

"m" – méter.

SENML_UNIT_KILOGRAM: str

"kg" – kilogramm.

SENML_UNIT_GRAM: str

"g" – gramm.

SENML_UNIT_SECOND: str

"s" – másodperc.

SENML_UNIT_AMPERE: str

"A" – amper.

SENML_UNIT_KELVIN: str

"K" – kelvin.

SENML_UNIT_CANDELA: str

"cd" – kandela.

SENML_UNIT_MOLE: str

"mol" – mól.

SENML_UNIT_HERTZ: str

"Hz" – hertz.

SENML_UNIT_RADIAN: str

"rad" – radián.

SENML_UNIT_STERADIAN: str

"sr" – szteradián.

SENML_UNIT_NEWTON: str

"N" – newton.

SENML_UNIT_PASCAL: str

"Pa" – pascal.

SENML_UNIT_JOULE: str

"J" – joule.

SENML_UNIT_WATT: str

"W" – watt.

SENML_UNIT_COULOMB: str

"C" – coulomb.

SENML_UNIT_VOLT: str

"V" – volt.

SENML_UNIT_FARAD: str

"F" – farad.

SENML_UNIT_OHM: str

"Ohm" – ohm.

SENML_UNIT_SIEMENS: str

"S" – siemens.

SENML_UNIT_WEBER: str

"Wb" – weber.

SENML_UNIT_TESLA: str

"T" – tesla.

SENML_UNIT_HENRY: str

"H" – henry.

SENML_UNIT_DEGREES_CELSIUS: str

"Cel" – Celsius-fok.

SENML_UNIT_LUMEN: str

"lm" – lumen.

SENML_UNIT_LUX: str

"lx" – lux.

SENML_UNIT_BECQUEREL: str

"Bq" – becquerel.

SENML_UNIT_GRAY: str

"Gy" – gray.

SENML_UNIT_SIEVERT: str

"Sv" – sievert.

SENML_UNIT_KATAL: str

"kat" – katal.

SENML_UNIT_SQUARE_METER: str

"m2" – négyzetméter.

SENML_UNIT_CUBIC_METER: str

"m3" – köbméter.

SENML_UNIT_LITER: str

"l" – liter.

SENML_UNIT_VELOCITY: str

"m/s" – sebesség.

SENML_UNIT_ACCELERATION: str

"m/s2" – gyorsulás.

SENML_UNIT_CUBIC_METER_PER_SECOND: str

"m3/s" – térfogatáram.

SENML_UNIT_LITER_PER_SECOND: str

"l/s" – liter per másodperc.

SENML_UNIT_WATT_PER_SQUARE_METER: str

"W/m2" – besugárzási teljesítménysűrűség.

SENML_UNIT_CANDELA_PER_SQUARE_METER: str

"cd/m2" – fénysűrűség.

SENML_UNIT_BIT: str

"bit" – bit.

SENML_UNIT_BIT_PER_SECOND: str

"bit/s" – bit per másodperc.

SENML_UNIT_DEGREES_LATITUDE: str

"lat" – szélességi fok.

SENML_UNIT_DEGREES_LONGITUDE: str

"lon" – hosszúsági fok.

SENML_UNIT_PH: str

"pH" – savasság (pH).

SENML_UNIT_DECIBEL: str

"db" – decibel.

SENML_UNIT_DECIBEL_RELATIVE_TO_1_W: str

"dBW" – decibel 1 W-hoz viszonyítva.

SENML_UNIT_BEL: str

"Bspl" – bel (hangnyomásszint).

SENML_UNIT_COUNTER: str

"count" – számláló.

SENML_UNIT_RATIO: str

"//" – arány (dimenzió nélküli).

SENML_UNIT_RELATIVE_HUMIDITY: str

"%RH" – relatív páratartalom.

SENML_UNIT_PERCENTAGE_REMAINING_BATTERY_LEVEL: str

"%EL" – hátralévő akkumulátorszint százalékban.

SENML_UNIT_SECONDS_REMAINING_BATTERY_LEVEL: str

"EL" – hátralévő akkumulátorszint másodpercben.

SENML_UNIT_EVENT_RATE_PER_SECOND: str

"1/s" – eseményráta másodpercenként.

SENML_UNIT_EVENT_RATE_PER_MINUTE: str

"1/min" – eseményráta percenként.

SENML_UNIT_BPM: str

"beat/min" – ütés percenként.

SENML_UNIT_BEATS: str

"beats" – ütések.

SENML_UNIT_SIEMENS_PER_METER: str

"S/m" – siemens per méter (elektromos vezetőképesség).