senml — Sensor Markup Language¶
Tämä moduuli toteuttaa pienen kooderin/dekooderin Sensor Markup Languagelle (SenML, RFC 8428). SenML on mediatyyppi sensorimittauksille ja laiteparametreille: jokainen ”pack” on lista ”recordeja”, joista jokainen sisältää nimen, yksikön, arvon, aikaleiman ja valinnaisen summan.
Toteutus tukee sekä JSON- että CBOR-esitysmuotoja ja sallii pakkien sisäkkäisyyden, jolloin yksittäinen juuripack voi kuvata yhdyskäytävää, joka toimii useiden laitteiden edustana. Saapuvat hyötykuormat voivat laukaista toimilaitteen takaisinkutsuja olemassa oleville recordeille.
Esimerkki käytöstä:
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())
Luokat¶
- class senml.SenmlPack(name: str, callback=None)¶
Edustaa SenML-packia – kokoelmaa
SenmlRecord-ilmentymiä ja valinnaisesti muita lapsi-SenmlPack-objekteja. Kun pack sisältää vain recordeja, se edustaa yksittäistä laitetta; kun se sisältää muita packeja, se toimii yhdyskäytävänä.name on SenML-perusnimi (
bn), jota käytetään jokaiselle tähän packiin sisältyvälle recordille.callback kutsutaan funktioista
from_json/from_cboraina, kun saapuva record nimeää aiemmin tuntemattoman sensorin; uusiSenmlRecordvälitetään ensimmäisenä argumenttina ja (sisäkkäisille packeille) alkuperäinen laitepack välitetään muodossadevice=.... Sitä käytetään tyypillisesti toimilaitekomentojen käsittelyyn.SenmlPack-ilmentymät ovat iteroitavissa – iterointi tuottaa kunkin recordin lisäysjärjestyksessä – ja niitä voidaan käyttää kontekstinhallintana siten, että poistuttaessa pack irrottaa itsensä emostaan.- base_value: int | float | None¶
Valinnainen perusarvo (
bv), joka lisätään kunkin recordin numeeriseen arvoon koodattaessa ja vähennetään dekoodattaessa. Ei-numeerisen arvon asettaminen nostaaException-poikkeuksen.
- base_time: int | float | None¶
Valinnainen perusaika (
bt), joka lisätään kunkin recordin aikaleimaan.
- base_sum: int | float | None¶
Valinnainen perussumma (
bs), joka lisätään kunkin recordin summakenttään.
- base_unit: str | None¶
Valinnainen perusyksikkö (
bu) – tyypillisesti arvo luokastaSenmlUnits.
- actuate¶
Luonnin yhteydessä annettu takaisinkutsu. Voidaan asettaa uudelleen ajon aikana.
- add(item: SenmlRecord | SenmlPack) None¶
Lisää item tähän packiin. item on oltava
SenmlRecordtai toinenSenmlPack, eikä se saa jo kuulua toiseen emoon; muutoin nostetaanException.
- remove(item: SenmlRecord | SenmlPack) None¶
Poista item tästä packista.
Exceptionnostetaan, jos item ei ole tämän packin lapsi.
- from_json(data: str) None¶
Jäsennä SenML/JSON-dokumentti ja yhdistä recordit tähän packiin. Recordit, jotka ovat jo olemassa (täsmättyinä nimen perusteella), laukaisevat
SenmlRecord.do_actuate()-metodin; uudet recordit lisätään ja pack-tason callback kutsutaan.
- do_actuate(raw: dict, naming_map: dict, device: SenmlPack | None = None) None¶
Sisäinen apufunktio, joka kutsutaan saapuvaa dataa jäsennettäessä, kun mikään olemassa oleva record ei täsmää merkintään. Lisää uuden
SenmlRecord-ilmentymän kohteeseendevice(tai tähän packiin) ja välittää sen edelleen callback-funktiolle.
- class senml.SenmlRecord(name: str, **kwargs)¶
Edustaa yksittäistä mittausta
SenmlPack-objektin sisällä.name on SenML-recordin nimi (
n).Seuraavat avainsana-argumentit hyväksytään:
value –
bool,int,float,strtaibytearray. Muut tyypit nostavatException-poikkeuksen.time – numeerinen aikaleima (
t).unit – yksikkömerkkijono, tyypillisesti luokan
SenmlUnitsjäsen.sum – numeerinen integroitu summa (
s).update_time – enimmäisaika, ennen kuin sensori tarjoaa tuoreen lukeman (
ut).callback – funktio, joka kutsutaan, kun saapuva hyötykuorma päivittää tämän recordin. Se vastaanottaa
SenmlRecord-objektin ainoana argumenttinaan.
SenmlRecord-objektia voidaan käyttää kontekstinhallintana siten, että poistuttaessa se irrottaa itsensä emopackistaan.- value¶
Nykyinen arvo. Uudelleenasettaminen tarkistaa tyypin; vain
bool, numerot,strjabytearrayhyväksytään. Liukuluvun renderöidyn tarkkuuden hallitsemiseksi pyöristä ennen asettamista, esim.record.value = round(x, 2).
- actuate¶
Luonnin yhteydessä annettu takaisinkutsu. Voidaan asettaa uudelleen ajon aikana.
- class senml.SenmlBase¶
Yhteinen kantaluokka, jonka
SenmlPackjaSenmlRecordjakavat. Se ei paljasta omaa julkista APIa; se on olemassa, jottaSenmlPack.add()voi varmistaa, että kohde kuuluu SenML-hierarkiaan.
- class senml.SenmlUnits¶
Nimiavaruusluokka, jonka luokka-attribuutit ovat RFC 8428 -määrittelemiä SenML-yksikkösymboleja. Jokainen attribuutti resolvoituu yksikön merkkijonokoodiksi, joka soveltuu asetettavaksi attribuutteihin
SenmlRecord.unittaiSenmlPack.base_unit.