senml --- Ngôn ngữ Đánh dấu Cảm biến

Mô-đun này triển khai một bộ mã hóa/giải mã nhỏ cho Ngôn ngữ Đánh dấu Cảm biến (SenML, RFC 8428). SenML là một loại phương tiện truyền thông cho các phép đo của cảm biến và tham số thiết bị: mỗi "gói" là một danh sách các "bản ghi", trong đó mỗi bản ghi mang tên, đơn vị, giá trị, dấu thời gian và tổng tùy chọn.

Triển khai này hỗ trợ cả hai biểu diễn JSON và CBOR, đồng thời cho phép các gói được lồng nhau sao cho một gói gốc duy nhất có thể mô tả một cổng kết nối phía trước nhiều thiết bị. Các tải trọng đến có thể kích hoạt các hàm gọi lại của bộ chấp hành trên các bản ghi hiện có.

Ví dụ sử dụng:

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

Các lớp

class senml.SenmlPack(name: str, callback=None)

Đại diện cho một gói SenML -- một tập hợp các thể hiện SenmlRecord và tùy chọn các đối tượng con SenmlPack khác. Khi một gói chỉ chứa các bản ghi thì nó đại diện cho một thiết bị đơn lẻ; khi nó chứa các gói khác thì nó hoạt động như một cổng kết nối.

name là tên cơ sở SenML (bn) được dùng cho mọi bản ghi chứa trong gói này.

callback được gọi từ from_json / from_cbor bất cứ khi nào một bản ghi đến đặt tên một cảm biến chưa được biết trước đó; SenmlRecord mới được truyền vào như đối số đầu tiên và (với các gói lồng nhau) gói thiết bị gốc được truyền vào như device=.... Thường được dùng để xử lý các lệnh bộ chấp hành.

Các thể hiện SenmlPack có thể lặp -- việc lặp lại sẽ trả về từng bản ghi theo thứ tự chèn vào -- và có thể được sử dụng như một trình quản lý ngữ cảnh để khi thoát ra, gói sẽ tự xóa khỏi gói cha.

name: str

Tên cơ sở của gói (bn).

base_value: int | float | None

Giá trị cơ sở tùy chọn (bv) được cộng vào giá trị số của mỗi bản ghi khi mã hóa và trừ đi khi giải mã. Đặt giá trị không phải số sẽ gây ra Exception.

base_time: int | float | None

Thời gian cơ sở tùy chọn (bt) được cộng vào dấu thời gian của mỗi bản ghi.

base_sum: int | float | None

Tổng cơ sở tùy chọn (bs) được cộng vào trường tổng của mỗi bản ghi.

base_unit: str | None

Đơn vị cơ sở tùy chọn (bu) -- thường là một giá trị từ SenmlUnits.

actuate

Hàm gọi lại được cung cấp tại thời điểm khởi tạo. Có thể được gán lại vào thời điểm chạy.

add(item: SenmlRecord | SenmlPack) None

Thêm item vào gói này. item phải là một SenmlRecord hoặc một SenmlPack khác và chưa được thuộc về một gói cha khác; nếu không sẽ gây ra Exception.

remove(item: SenmlRecord | SenmlPack) None

Xóa item khỏi gói này. Exception sẽ được gây ra nếu item không phải là con của gói này.

clear() None

Xóa mọi bản ghi/gói con khỏi gói này và tách chúng khỏi tham chiếu gói cha.

from_json(data: str) None

Phân tích cú pháp tài liệu SenML/JSON và hợp nhất các bản ghi vào gói này. Các bản ghi đã tồn tại (khớp theo tên) kích hoạt SenmlRecord.do_actuate(); các bản ghi mới được thêm vào và hàm gọi lại cấp gói được gọi.

to_json() str

Kết xuất gói và các con của nó thành một chuỗi SenML/JSON.

from_cbor(data: bytes) None

Phân tích cú pháp chuỗi byte SenML/CBOR và hợp nhất các bản ghi vào gói này.

to_cbor() bytes

Kết xuất gói và các con của nó thành một chuỗi byte SenML/CBOR.

do_actuate(raw: dict, naming_map: dict, device: SenmlPack | None = None) None

Trình trợ giúp nội bộ được gọi khi phân tích cú pháp dữ liệu đến khi không có bản ghi hiện có nào khớp với một mục. Thêm một SenmlRecord mới vào device (hoặc vào gói này) và chuyển tiếp nó đến callback.

class senml.SenmlRecord(name: str, **kwargs)

Đại diện cho một phép đo đơn lẻ bên trong một SenmlPack.

name là tên bản ghi SenML (n).

Các đối số từ khóa sau được chấp nhận:

  • value -- bool, int, float, str hoặc bytearray. Các kiểu khác gây ra Exception.

  • time -- dấu thời gian dạng số (t).

  • unit -- một chuỗi đơn vị, thường là thành viên của SenmlUnits.

  • sum -- tổng tích hợp dạng số (s).

  • update_time -- thời gian tối đa trước khi cảm biến cung cấp một đọc mới (ut).

  • callback -- hàm được gọi khi một tải trọng đến cập nhật bản ghi này. Nó nhận SenmlRecord như đối số duy nhất của nó.

SenmlRecord có thể được sử dụng như một trình quản lý ngữ cảnh để khi thoát nó tự xóa khỏi gói cha.

name: str

Tên bản ghi (n).

value

Giá trị hiện tại. Gán lại sẽ kiểm tra kiểu; chỉ chấp nhận bool, số, strbytearray. Để kiểm soát độ chính xác kết xuất của giá trị float, hãy làm tròn trước khi gán, ví dụ: record.value = round(x, 2).

unit: str | None

Chuỗi đơn vị (u).

time: int | float | None

Dấu thời gian liên kết với phép đo này (t).

update_time: int | float | None

Thời gian tối đa trước khi cảm biến cung cấp một đọc được cập nhật (ut).

sum: int | float | None

Trường tổng tích hợp (s).

actuate

Hàm gọi lại được cung cấp tại thời điểm khởi tạo. Có thể được gán lại vào thời điểm chạy.

do_actuate(raw: dict, naming_map: dict) None

Cập nhật bản ghi này từ một từ điển SenML đến thô và, nếu có, gọi hàm gọi lại chấp hành.

class senml.SenmlBase

Lớp cơ sở chung được chia sẻ bởi SenmlPackSenmlRecord. Nó không có API công khai của riêng mình; nó tồn tại để SenmlPack.add() có thể xác nhận rằng một mục thuộc về hệ thống phân cấp SenML.

class senml.SenmlUnits

Lớp không gian tên có các thuộc tính lớp là các ký hiệu đơn vị SenML được định nghĩa bởi RFC 8428. Mỗi thuộc tính phân giải thành mã chuỗi của đơn vị, phù hợp để gán cho SenmlRecord.unit hoặc SenmlPack.base_unit.

SENML_UNIT_METER: str

"m" -- mét.

SENML_UNIT_KILOGRAM: str

"kg" -- kilôgam.

SENML_UNIT_GRAM: str

"g" -- gam.

SENML_UNIT_SECOND: str

"s" -- giây.

SENML_UNIT_AMPERE: str

"A" -- ampe.

SENML_UNIT_KELVIN: str

"K" -- kelvin.

SENML_UNIT_CANDELA: str

"cd" -- candela.

SENML_UNIT_MOLE: str

"mol" -- mol.

SENML_UNIT_HERTZ: str

"Hz" -- hertz.

SENML_UNIT_RADIAN: str

"rad" -- radian.

SENML_UNIT_STERADIAN: str

"sr" -- steradian.

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.

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" -- mét vuông.

SENML_UNIT_CUBIC_METER: str

"m3" -- mét khối.

SENML_UNIT_LITER: str

"l" -- lít.

SENML_UNIT_VELOCITY: str

"m/s" -- vận tốc.

SENML_UNIT_ACCELERATION: str

"m/s2" -- gia tốc.

SENML_UNIT_CUBIC_METER_PER_SECOND: str

"m3/s" -- lưu lượng thể tích.

SENML_UNIT_LITER_PER_SECOND: str

"l/s" -- lít mỗi giây.

SENML_UNIT_WATT_PER_SQUARE_METER: str

"W/m2" -- bức xạ.

SENML_UNIT_CANDELA_PER_SQUARE_METER: str

"cd/m2" -- độ sáng.

SENML_UNIT_BIT: str

"bit" -- bit.

SENML_UNIT_BIT_PER_SECOND: str

"bit/s" -- bit mỗi giây.

SENML_UNIT_DEGREES_LATITUDE: str

"lat" -- độ vĩ độ.

SENML_UNIT_DEGREES_LONGITUDE: str

"lon" -- độ kinh độ.

SENML_UNIT_PH: str

"pH" -- độ axit (pH).

SENML_UNIT_DECIBEL: str

"db" -- decibel.

SENML_UNIT_DECIBEL_RELATIVE_TO_1_W: str

"dBW" -- decibel so với 1 W.

SENML_UNIT_BEL: str

"Bspl" -- bel (mức áp suất âm thanh).

SENML_UNIT_COUNTER: str

"count" -- bộ đếm.

SENML_UNIT_RATIO: str

"//" -- tỷ lệ (không thứ nguyên).

SENML_UNIT_RELATIVE_HUMIDITY: str

"%RH" -- độ ẩm tương đối.

SENML_UNIT_PERCENTAGE_REMAINING_BATTERY_LEVEL: str

"%EL" -- mức pin còn lại theo phần trăm.

SENML_UNIT_SECONDS_REMAINING_BATTERY_LEVEL: str

"EL" -- mức pin còn lại theo giây.

SENML_UNIT_EVENT_RATE_PER_SECOND: str

"1/s" -- tốc độ sự kiện mỗi giây.

SENML_UNIT_EVENT_RATE_PER_MINUTE: str

"1/min" -- tốc độ sự kiện mỗi phút.

SENML_UNIT_BPM: str

"beat/min" -- nhịp mỗi phút.

SENML_UNIT_BEATS: str

"beats" -- nhịp đập.

SENML_UNIT_SIEMENS_PER_METER: str

"S/m" -- siemens mỗi mét (độ dẫn điện).