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 –
SenmlRecordpéldányok gyűjteményét, és opcionálisan további gyermekSenmlPackobjektumokat. 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_cborhívja meg, valahányszor egy bejövő rekord egy korábban ismeretlen érzékelőt nevez meg; az újSenmlRecordaz első argumentumként kerül átadásra, és (egymásba ágyazott csomagok esetén) a kiindulási eszközcsomag adevice=...argumentumként kerül átadásra. Jellemzően aktuátor-parancsok kezelésére használják.A
SenmlPackpé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.- 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ásaExceptionkivé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 aSenmlUnitsosztá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
SenmlRecordvagy egy másikSenmlPackkell legyen, és nem tartozhat már egy másik szülőhöz; ellenkező esetbenExceptionkivétel keletkezik.
- remove(item: SenmlRecord | SenmlPack) None¶
Az item eltávolítása ebből a csomagból.
Exceptionkivé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.
- from_cbor(data: bytes) None¶
Egy SenML/CBOR bájtlánc elemzése és a rekordok összevonása ebbe a csomagba.
- 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
SenmlRecordrekordot adeviceeszkö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
SenmlPackcsomagon belül.A name a SenML rekordnév (
n).A következő kulcsszó-argumentumok fogadhatók el:
value –
bool,int,float,strvagybytearray. Más típusokExceptionkivételt váltanak ki.time – numerikus időbélyeg (
t).unit – egy mértékegység-karakterlánc, jellemzően a
SenmlUnitsosztá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
SenmlRecordrekordot kapja meg.
A
SenmlRecordkontextuskezelőként használható, így kilépéskor eltávolítja magát a szülőcsomagjából.- value¶
Az aktuális érték. Az újra-hozzárendelés ellenőrzi a típust; csak
bool, számok,strésbytearrayfogadható 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).
- update_time: int | float | None¶
A maximális idő, mielőtt az érzékelő frissített leolvasást szolgáltat (
ut).
- actuate¶
A létrehozáskor megadott visszahívás. Futásidőben újra hozzárendelhető.
- class senml.SenmlBase¶
Közös ősosztály, amelyet a
SenmlPackés aSenmlRecordoszt meg. Saját nyilvános API-t nem tesz közzé; azért létezik, hogy aSenmlPack.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.unitvagy aSenmlPack.base_unitszámára történő hozzárendelésre.