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
SenmlRecordvà tùy chọn các đối tượng conSenmlPackkhá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_cborbấ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 đó;SenmlRecordmớ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
SenmlPackcó 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.- 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 raException.
- 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_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
SenmlRecordhoặc mộtSenmlPackkhác và chưa được thuộc về một gói cha khác; nếu không sẽ gây raException.
- remove(item: SenmlRecord | SenmlPack) None¶
Xóa item khỏi gói này.
Exceptionsẽ được gây ra nếu item không phải là con của gói này.
- 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.
- 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,strhoặcbytearray. Các kiểu khác gây raException.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
SenmlRecordnhư đối số duy nhất của nó.
SenmlRecordcó 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.- value¶
Giá trị hiện tại. Gán lại sẽ kiểm tra kiểu; chỉ chấp nhận
bool, số,strvàbytearray. Để 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).
- 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).
- 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.
- class senml.SenmlBase¶
Lớp cơ sở chung được chia sẻ bởi
SenmlPackvàSenmlRecord. 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.unithoặcSenmlPack.base_unit.