senml --- Sensor Markup Language¶
Modul ini mengimplementasikan encoder/decoder kecil untuk Sensor Markup Language (SenML, RFC 8428). SenML adalah tipe media untuk pengukuran sensor dan parameter perangkat: setiap "pack" adalah daftar "record", di mana setiap record memiliki nama, satuan, nilai, stempel waktu, dan jumlah opsional.
Implementasi ini mendukung representasi JSON maupun CBOR dan memungkinkan pack untuk disarangkan sehingga satu root pack dapat mendeskripsikan gateway yang mengelola beberapa perangkat. Payload masuk dapat mengaktifkan callback aktuator pada record yang sudah ada.
Contoh penggunaan:
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())
Kelas¶
- class senml.SenmlPack(name: str, callback=None)¶
Merepresentasikan sebuah SenML pack -- kumpulan instans
SenmlRecorddan secara opsional objekSenmlPackanak lainnya. Ketika sebuah pack hanya berisi record, pack tersebut merepresentasikan satu perangkat; ketika berisi pack lain, pack tersebut bertindak sebagai gateway.name adalah nama dasar SenML (
bn) yang digunakan untuk setiap record yang terdapat dalam pack ini.callback dipanggil dari
from_json/from_cborsetiap kali record masuk menamai sensor yang belum dikenal sebelumnya;SenmlRecordbaru diteruskan sebagai argumen pertama dan (untuk pack bersarang) pack perangkat asal diteruskan sebagaidevice=.... Biasanya digunakan untuk menangani perintah aktuator.Instans
SenmlPackdapat diiterasi -- iterasi menghasilkan setiap record sesuai urutan penyisipan -- dan dapat digunakan sebagai context manager sehingga saat keluar, pack menghapus dirinya dari induknya.- base_value: int | float | None¶
Nilai dasar opsional (
bv) yang ditambahkan ke nilai numerik setiap record saat encoding dan dikurangkan saat decoding. Menetapkan nilai non-numerik akan memunculkanException.
- base_time: int | float | None¶
Waktu dasar opsional (
bt) yang ditambahkan ke stempel waktu setiap record.
- base_sum: int | float | None¶
Jumlah dasar opsional (
bs) yang ditambahkan ke field sum setiap record.
- base_unit: str | None¶
Satuan dasar opsional (
bu) -- biasanya nilai dariSenmlUnits.
- actuate¶
Callback yang diberikan saat konstruksi. Dapat diubah kembali saat runtime.
- add(item: SenmlRecord | SenmlPack) None¶
Tambahkan item ke pack ini. item harus berupa
SenmlRecordatauSenmlPacklainnya dan belum menjadi milik induk yang berbeda; jika tidak,Exceptionakan dimunculkan.
- remove(item: SenmlRecord | SenmlPack) None¶
Hapus item dari pack ini.
Exceptiondimunculkan jika item bukan anak dari pack ini.
- from_json(data: str) None¶
Urai dokumen SenML/JSON dan gabungkan record ke pack ini. Record yang sudah ada (dicocokkan berdasarkan nama) memicu
SenmlRecord.do_actuate(); record baru ditambahkan dan callback tingkat pack dipanggil.
- class senml.SenmlRecord(name: str, **kwargs)¶
Merepresentasikan satu pengukuran di dalam
SenmlPack.name adalah nama record SenML (
n).Argumen kata kunci berikut diterima:
value --
bool,int,float,strataubytearray. Tipe lain memunculkanException.time -- stempel waktu numerik (
t).unit -- string satuan, biasanya anggota dari
SenmlUnits.sum -- jumlah terintegrasi numerik (
s).update_time -- waktu maksimum sebelum sensor memberikan pembacaan baru (
ut).callback -- fungsi yang dipanggil ketika payload masuk memperbarui record ini. Fungsi ini menerima
SenmlRecordsebagai satu-satunya argumen.
SenmlRecorddapat digunakan sebagai context manager sehingga saat keluar, record menghapus dirinya dari pack induknya.- value¶
Nilai saat ini. Penugasan ulang memeriksa tipe; hanya
bool, angka,strdanbytearrayyang diterima. Untuk mengontrol presisi render nilai float, bulatkan sebelum penugasan, mis.record.value = round(x, 2).
- update_time: int | float | None¶
Waktu maksimum sebelum sensor akan memberikan pembacaan yang diperbarui (
ut).
- actuate¶
Callback yang diberikan saat konstruksi. Dapat diubah kembali saat runtime.
- class senml.SenmlBase¶
Kelas dasar bersama yang digunakan oleh
SenmlPackdanSenmlRecord. Kelas ini tidak mengekspos API publik sendiri; kelas ini ada agarSenmlPack.add()dapat memvalidasi bahwa suatu item termasuk dalam hierarki SenML.
- class senml.SenmlUnits¶
Kelas namespace yang atribut kelasnya adalah simbol satuan SenML yang didefinisikan oleh RFC 8428. Setiap atribut diselesaikan ke kode string satuannya, cocok untuk penugasan ke
SenmlRecord.unitatauSenmlPack.base_unit.