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