senml — Sensor Markup Language¶
Ten moduł implementuje niewielki koder/dekoder dla języka Sensor Markup Language (SenML, RFC 8428). SenML to typ medialny służący do reprezentowania pomiarów z sensorów i parametrów urządzeń: każdy „pack” jest listą „rekordów”, przy czym każdy rekord zawiera nazwę, jednostkę, wartość, znacznik czasu oraz opcjonalną sumę.
Implementacja obsługuje zarówno reprezentację JSON, jak i CBOR oraz pozwala zagnieżdżać packi, dzięki czemu jeden pack główny może opisywać bramę pośredniczącą dla wielu urządzeń. Przychodzące dane mogą wyzwalać wywołania zwrotne aktuatorów na istniejących rekordach.
Przykład użycia:
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())
Klasy¶
- class senml.SenmlPack(name: str, callback=None)¶
Reprezentuje pack SenML – kolekcję instancji
SenmlRecordoraz opcjonalnie innych podrzędnych obiektówSenmlPack. Gdy pack zawiera wyłącznie rekordy, reprezentuje pojedyncze urządzenie; gdy zawiera inne packi, działa jako brama.name to bazowa nazwa SenML (
bn) używana dla każdego rekordu zawartego w tym packu.callback jest wywoływane z
from_json/from_cborzawsze, gdy przychodzący rekord nazywa wcześniej nieznany sensor; nowySenmlRecordjest przekazywany jako pierwszy argument, a (w przypadku packów zagnieżdżonych) źródłowy pack urządzenia jest przekazywany jakodevice=.... Zwykle służy do obsługi poleceń dla aktuatorów.Instancje
SenmlPacksą iterowalne – iteracja zwraca każdy rekord w kolejności wstawiania – i mogą być używane jako menedżer kontekstu, dzięki czemu przy wyjściu pack usuwa się ze swojego rodzica.- base_value: int | float | None¶
Opcjonalna wartość bazowa (
bv) dodawana do liczbowej wartości każdego rekordu podczas kodowania i odejmowana podczas dekodowania. Ustawienie wartości nieliczbowej zgłaszaException.
- base_time: int | float | None¶
Opcjonalny czas bazowy (
bt) dodawany do znacznika czasu każdego rekordu.
- base_unit: str | None¶
Opcjonalna jednostka bazowa (
bu) – zwykle wartość zSenmlUnits.
- actuate¶
Wywołanie zwrotne dostarczone w momencie konstrukcji. Może zostać ponownie przypisane w czasie działania.
- add(item: SenmlRecord | SenmlPack) None¶
Dołącza item do tego packu. item musi być obiektem
SenmlRecordlub innymSenmlPacki nie może już należeć do innego rodzica; w przeciwnym razie zgłaszany jestException.
- remove(item: SenmlRecord | SenmlPack) None¶
Usuwa item z tego packu.
Exceptionjest zgłaszany, jeśli item nie jest elementem podrzędnym tego packu.
- clear() None¶
Usuwa każdy rekord/podrzędny pack z tego packu i odłącza je od odniesienia do rodzica.
- from_json(data: str) None¶
Parsuje dokument SenML/JSON i scala rekordy z tym packiem. Rekordy, które już istnieją (dopasowane po nazwie), wyzwalają
SenmlRecord.do_actuate(); nowe rekordy są dołączane, a wywołane zostaje callback na poziomie packu.
- class senml.SenmlRecord(name: str, **kwargs)¶
Reprezentuje pojedynczy pomiar wewnątrz
SenmlPack.name to nazwa rekordu SenML (
n).Akceptowane są następujące argumenty nazwane:
value –
bool,int,float,strlubbytearray. Inne typy zgłaszająException.time – liczbowy znacznik czasu (
t).unit – łańcuch jednostki, zwykle element
SenmlUnits.sum – liczbowa suma scałkowana (
s).update_time – maksymalny czas, zanim sensor dostarczy nowy odczyt (
ut).callback – funkcja wywoływana, gdy przychodzące dane aktualizują ten rekord. Otrzymuje
SenmlRecordjako jedyny argument.
SenmlRecordmoże być używany jako menedżer kontekstu, dzięki czemu przy wyjściu usuwa się ze swojego packu nadrzędnego.- value¶
Bieżąca wartość. Ponowne przypisanie sprawdza typ; akceptowane są tylko
bool, liczby,strorazbytearray. Aby kontrolować renderowaną precyzję wartości zmiennoprzecinkowej, zaokrąglij ją przed przypisaniem, np.record.value = round(x, 2).
- update_time: int | float | None¶
Maksymalny czas, zanim sensor dostarczy zaktualizowany odczyt (
ut).
- actuate¶
Wywołanie zwrotne dostarczone w momencie konstrukcji. Może zostać ponownie przypisane w czasie działania.
- class senml.SenmlBase¶
Wspólna klasa bazowa współdzielona przez
SenmlPackiSenmlRecord. Nie udostępnia własnego publicznego API; istnieje po to, abySenmlPack.add()mogła zweryfikować, że element należy do hierarchii SenML.
- class senml.SenmlUnits¶
Klasa przestrzeni nazw, której atrybuty klasowe są symbolami jednostek SenML zdefiniowanymi przez RFC 8428. Każdy atrybut zwraca kod łańcuchowy jednostki, odpowiedni do przypisania do
SenmlRecord.unitlubSenmlPack.base_unit.- SENML_UNIT_PERCENTAGE_REMAINING_BATTERY_LEVEL: str¶
"%EL"– pozostały poziom naładowania baterii w procentach.