senml — Мова розмітки датчиків¶
Цей модуль реалізує невеликий кодувальник/декодувальник для Мови розмітки датчиків (SenML, RFC 8428). SenML — це медіатип для вимірювань датчиків та параметрів пристроїв: кожен «пакет» являє собою список «записів», де кожен запис містить ім’я, одиницю, значення, мітку часу та необов’язкову суму.
Реалізація підтримує як JSON, так і CBOR представлення та дозволяє вкладати пакети так, що один кореневий пакет може описувати шлюз, який обслуговує кілька пристроїв. Вхідні корисні навантаження можуть запускати зворотні виклики актуаторів для наявних записів.
Приклад використання:
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())
Класи¶
- class senml.SenmlPack(name: str, callback=None)¶
Представляє пакет SenML – колекцію екземплярів
SenmlRecordта, необов’язково, інших дочірніх об’єктівSenmlPack. Коли пакет містить лише записи, він представляє один пристрій; коли він містить інші пакети, він діє як шлюз.name — базове ім’я SenML (
bn), яке використовується для кожного запису, що міститься в цьому пакеті.callback викликається з
from_json/from_cborщоразу, коли вхідний запис посилається на раніше невідомий датчик; новийSenmlRecordпередається як перший аргумент, а (для вкладених пакетів) вихідний пакет пристрою передається якdevice=.... Зазвичай використовується для обробки команд актуаторів.Екземпляри
SenmlPackє ітерованими – ітерація повертає кожен запис у порядку вставки – і можуть використовуватися як менеджер контексту, щоб при виході пакет видалив себе зі свого батьківського.- base_value: int | float | None¶
Необов’язкове базове значення (
bv), яке додається до числового значення кожного запису при кодуванні та віднімається при декодуванні. Встановлення нечислового значення викликаєException.
- base_time: int | float | None¶
Необов’язковий базовий час (
bt), який додається до мітки часу кожного запису.
- base_sum: int | float | None¶
Необов’язкова базова сума (
bs), яка додається до поля суми кожного запису.
- base_unit: str | None¶
Необов’язкова базова одиниця (
bu) – зазвичай значення зSenmlUnits.
- actuate¶
Зворотний виклик, наданий під час конструювання. Може бути перепризначений під час виконання.
- add(item: SenmlRecord | SenmlPack) None¶
Додати item до цього пакета. item має бути
SenmlRecordабо іншимSenmlPackі не повинен вже належати до іншого батьківського об’єкта; інакше виникаєException.
- remove(item: SenmlRecord | SenmlPack) None¶
Видалити item з цього пакета. Виникає
Exception, якщо item не є дочірнім елементом цього пакета.
- clear() None¶
Видалити кожен запис/підпакет з цього пакета та від’єднати їх від їх батьківського посилання.
- from_json(data: str) None¶
Розібрати документ SenML/JSON та об’єднати записи в цей пакет. Записи, які вже існують (збіг за іменем), викликають
SenmlRecord.do_actuate(); нові записи додаються, і викликається зворотний виклик на рівні пакета.
- class senml.SenmlRecord(name: str, **kwargs)¶
Представляє окреме вимірювання всередині
SenmlPack.name — ім’я запису SenML (
n).Прийняті такі аргументи-ключові слова:
value –
bool,int,float,strабоbytearray. Інші типи викликаютьException.time – числова мітка часу (
t).unit – рядок одиниці, зазвичай член
SenmlUnits.sum – числова інтегрована сума (
s).update_time – максимальний час до надання датчиком нового показання (
ut).callback – функція, що викликається при оновленні цього запису вхідним корисним навантаженням. Отримує
SenmlRecordяк єдиний аргумент.
SenmlRecordможе використовуватися як менеджер контексту, щоб при виході він видалив себе зі свого батьківського пакета.- value¶
Поточне значення. При перепризначенні перевіряється тип; прийняті лише
bool, числа,strтаbytearray. Для управління відображуваною точністю значення з рухомою комою, округліть перед призначенням, наприкладrecord.value = round(x, 2).
- actuate¶
Зворотний виклик, наданий під час конструювання. Може бути перепризначений під час виконання.
- class senml.SenmlBase¶
Загальний базовий клас, спільний для
SenmlPackтаSenmlRecord. Він не надає власного публічного API; він існує так, щобSenmlPack.add()міг перевірити, що елемент належить до ієрархії SenML.
- class senml.SenmlUnits¶
Клас-простір імен, атрибути якого є символами одиниць SenML, визначеними RFC 8428. Кожен атрибут розв’язується до рядкового коду одиниці, придатного для призначення
SenmlRecord.unitабоSenmlPack.base_unit.