senml — Sensor Markup Language¶
Bu modül, Sensor Markup Language (SenML, RFC 8428) için küçük bir kodlayıcı/kod çözücü uygular. SenML, sensör ölçümleri ve cihaz parametreleri için bir ortam türüdür: her “pack”, “record”ların bir listesidir ve her record bir ad, birim, değer, zaman damgası ve isteğe bağlı bir toplam taşır.
Uygulama hem JSON hem de CBOR temsillerini destekler ve pack’lerin iç içe yerleştirilmesine izin verir; böylece tek bir kök pack, birden çok cihazı önünde toplayan bir ağ geçidini tanımlayabilir. Gelen yükler, mevcut record’lar üzerinde aktüatör geri çağırmalarını (callback) tetikleyebilir.
Örnek kullanım:
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())
Sınıflar¶
- class senml.SenmlPack(name: str, callback=None)¶
Bir SenML pack’ini temsil eder –
SenmlRecordörneklerinden ve isteğe bağlı olarak diğer altSenmlPacknesnelerinden oluşan bir koleksiyon. Bir pack yalnızca record içeriyorsa tek bir cihazı temsil eder; başka pack’ler içeriyorsa bir ağ geçidi gibi davranır.name, bu pack içinde yer alan her record için kullanılan SenML temel adıdır (
bn).callback, gelen bir record daha önce bilinmeyen bir sensörü adlandırdığında
from_json/from_cboriçinden çağrılır; yeniSenmlRecordilk argüman olarak ve (iç içe pack’ler için) kaynak cihaz pack’idevice=...olarak iletilir. Tipik olarak aktüatör komutlarını işlemek için kullanılır.SenmlPackörnekleri yinelenebilir – yineleme, her record’u ekleme sırasına göre üretir – ve bir bağlam yöneticisi (context manager) olarak kullanılabilir; böylece çıkışta pack kendisini üst öğesinden kaldırır.- base_value: int | float | None¶
İsteğe bağlı temel değer (
bv); kodlama sırasında her record’un sayısal değerine eklenir, kod çözme sırasında çıkarılır. Sayısal olmayan bir değer atamakExceptionoluşturur.
- base_time: int | float | None¶
İsteğe bağlı temel zaman (
bt); her record’un zaman damgasına eklenir.
- base_unit: str | None¶
İsteğe bağlı temel birim (
bu) – tipik olarakSenmlUnitsiçinden bir değer.
- actuate¶
Oluşturma sırasında verilen geri çağırma (callback). Çalışma zamanında yeniden atanabilir.
- add(item: SenmlRecord | SenmlPack) None¶
item öğesini bu pack’e ekler. item bir
SenmlRecordya da başka birSenmlPackolmalı ve halihazırda farklı bir üst öğeye ait olmamalıdır; aksi takdirdeExceptionoluşturulur.
- remove(item: SenmlRecord | SenmlPack) None¶
item öğesini bu pack’ten kaldırır. item bu pack’in bir alt öğesi değilse
Exceptionoluşturulur.
- clear() None¶
Bu pack’ten her record/alt pack’i kaldırır ve bunları üst öğe referanslarından ayırır.
- from_json(data: str) None¶
Bir SenML/JSON belgesini ayrıştırır ve record’ları bu pack ile birleştirir. Zaten var olan record’lar (ada göre eşleştirilir)
SenmlRecord.do_actuate()tetikler; yeni record’lar eklenir ve pack düzeyindeki callback çağrılır.
- class senml.SenmlRecord(name: str, **kwargs)¶
Bir
SenmlPackiçindeki tek bir ölçümü temsil eder.name, SenML record adıdır (
n).Aşağıdaki anahtar sözcük argümanları kabul edilir:
value –
bool,int,float,strveyabytearray. Diğer türlerExceptionoluşturur.time – sayısal zaman damgası (
t).unit – bir birim dizesi, tipik olarak
SenmlUnitsüyesi.sum – sayısal entegre toplam (
s).update_time – sensörün yeni bir okuma sağlamadan önce geçecek azami süre (
ut).callback – gelen bir yük bu record’u güncellediğinde çağrılan işlev. Tek argüman olarak
SenmlRecordalır.
SenmlRecord, bir bağlam yöneticisi (context manager) olarak kullanılabilir; böylece çıkışta kendisini üst pack’inden kaldırır.- value¶
Geçerli değer. Yeniden atama, türü denetler; yalnızca
bool, sayılar,strvebytearraykabul edilir. Bir float değerin işlenen hassasiyetini denetlemek için atamadan önce yuvarlayın, örn.record.value = round(x, 2).
- update_time: int | float | None¶
Sensörün güncellenmiş bir okuma sağlamadan önce geçecek azami süre (
ut).
- actuate¶
Oluşturma sırasında verilen geri çağırma (callback). Çalışma zamanında yeniden atanabilir.
- class senml.SenmlBase¶
SenmlPackveSenmlRecordtarafından paylaşılan ortak temel sınıf. Kendine ait herhangi bir genel API sunmaz; yalnızcaSenmlPack.add()öğesinin bir öğenin SenML hiyerarşisine ait olduğunu doğrulayabilmesi için vardır.
- class senml.SenmlUnits¶
Sınıf öznitelikleri RFC 8428 tarafından tanımlanan SenML birim sembolleri olan ad alanı sınıfı. Her öznitelik,
SenmlRecord.unitveyaSenmlPack.base_unitöğesine atanmaya uygun olan birimin dize koduna çözümlenir.