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 alt SenmlPack nesnelerinden 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_cbor içinden çağrılır; yeni SenmlRecord ilk argüman olarak ve (iç içe pack’ler için) kaynak cihaz pack’i device=... 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.

name: str

Pack’in temel adı (bn).

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 atamak Exception oluşturur.

base_time: int | float | None

İsteğe bağlı temel zaman (bt); her record’un zaman damgasına eklenir.

base_sum: int | float | None

İsteğe bağlı temel toplam (bs); her record’un toplam alanına eklenir.

base_unit: str | None

İsteğe bağlı temel birim (bu) – tipik olarak SenmlUnits iç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 SenmlRecord ya da başka bir SenmlPack olmalı ve halihazırda farklı bir üst öğeye ait olmamalıdır; aksi takdirde Exception oluşturulur.

remove(item: SenmlRecord | SenmlPack) None

item öğesini bu pack’ten kaldırır. item bu pack’in bir alt öğesi değilse Exception oluş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.

to_json() str

Pack’i ve alt öğelerini bir SenML/JSON dizesine dönüştürür.

from_cbor(data: bytes) None

Bir SenML/CBOR bayt dizesini ayrıştırır ve record’ları bu pack ile birleştirir.

to_cbor() bytes

Pack’i ve alt öğelerini bir SenML/CBOR bayt dizesine dönüştürür.

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

Gelen veriler ayrıştırılırken, bir girişle eşleşen mevcut bir record bulunmadığında çağrılan dahili yardımcı. device öğesine (veya bu pack’e) yeni bir SenmlRecord ekler ve onu callback‘e iletir.

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

Bir SenmlPack iç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:

  • valuebool, int, float, str veya bytearray. Diğer türler Exception oluş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 SenmlRecord alır.

SenmlRecord, bir bağlam yöneticisi (context manager) olarak kullanılabilir; böylece çıkışta kendisini üst pack’inden kaldırır.

name: str

Record adı (n).

value

Geçerli değer. Yeniden atama, türü denetler; yalnızca bool, sayılar, str ve bytearray kabul edilir. Bir float değerin işlenen hassasiyetini denetlemek için atamadan önce yuvarlayın, örn. record.value = round(x, 2).

unit: str | None

Birim dizesi (u).

time: int | float | None

Bu ölçümle ilişkili zaman damgası (t).

update_time: int | float | None

Sensörün güncellenmiş bir okuma sağlamadan önce geçecek azami süre (ut).

sum: int | float | None

Entegre toplam alanı (s).

actuate

Oluşturma sırasında verilen geri çağırma (callback). Çalışma zamanında yeniden atanabilir.

do_actuate(raw: dict, naming_map: dict) None

Bu record’u ham bir gelen SenML sözlüğünden günceller ve varsa aktüatör geri çağırmasını çağırır.

class senml.SenmlBase

SenmlPack ve SenmlRecord tarafından paylaşılan ortak temel sınıf. Kendine ait herhangi bir genel API sunmaz; yalnızca SenmlPack.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.unit veya SenmlPack.base_unit öğesine atanmaya uygun olan birimin dize koduna çözümlenir.

SENML_UNIT_METER: str

"m" – metre.

SENML_UNIT_KILOGRAM: str

"kg" – kilogram.

SENML_UNIT_GRAM: str

"g" – gram.

SENML_UNIT_SECOND: str

"s" – saniye.

SENML_UNIT_AMPERE: str

"A" – amper.

SENML_UNIT_KELVIN: str

"K" – kelvin.

SENML_UNIT_CANDELA: str

"cd" – kandela.

SENML_UNIT_MOLE: str

"mol" – mol.

SENML_UNIT_HERTZ: str

"Hz" – hertz.

SENML_UNIT_RADIAN: str

"rad" – radyan.

SENML_UNIT_STERADIAN: str

"sr" – steradyan.

SENML_UNIT_NEWTON: str

"N" – newton.

SENML_UNIT_PASCAL: str

"Pa" – paskal.

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" – santigrat derece.

SENML_UNIT_LUMEN: str

"lm" – lümen.

SENML_UNIT_LUX: str

"lx" – lüks.

SENML_UNIT_BECQUEREL: str

"Bq" – bekerel.

SENML_UNIT_GRAY: str

"Gy" – gray.

SENML_UNIT_SIEVERT: str

"Sv" – sievert.

SENML_UNIT_KATAL: str

"kat" – katal.

SENML_UNIT_SQUARE_METER: str

"m2" – metrekare.

SENML_UNIT_CUBIC_METER: str

"m3" – metreküp.

SENML_UNIT_LITER: str

"l" – litre.

SENML_UNIT_VELOCITY: str

"m/s" – hız.

SENML_UNIT_ACCELERATION: str

"m/s2" – ivme.

SENML_UNIT_CUBIC_METER_PER_SECOND: str

"m3/s" – hacimsel debi.

SENML_UNIT_LITER_PER_SECOND: str

"l/s" – saniye başına litre.

SENML_UNIT_WATT_PER_SQUARE_METER: str

"W/m2" – ışınım şiddeti.

SENML_UNIT_CANDELA_PER_SQUARE_METER: str

"cd/m2" – parlaklık.

SENML_UNIT_BIT: str

"bit" – bit.

SENML_UNIT_BIT_PER_SECOND: str

"bit/s" – saniye başına bit.

SENML_UNIT_DEGREES_LATITUDE: str

"lat" – enlem derecesi.

SENML_UNIT_DEGREES_LONGITUDE: str

"lon" – boylam derecesi.

SENML_UNIT_PH: str

"pH" – asitlik (pH).

SENML_UNIT_DECIBEL: str

"db" – desibel.

SENML_UNIT_DECIBEL_RELATIVE_TO_1_W: str

"dBW" – 1 W’a göre desibel.

SENML_UNIT_BEL: str

"Bspl" – bel (ses basınç düzeyi).

SENML_UNIT_COUNTER: str

"count" – sayaç.

SENML_UNIT_RATIO: str

"//" – oran (boyutsuz).

SENML_UNIT_RELATIVE_HUMIDITY: str

"%RH" – bağıl nem.

SENML_UNIT_PERCENTAGE_REMAINING_BATTERY_LEVEL: str

"%EL" – yüzde olarak kalan pil düzeyi.

SENML_UNIT_SECONDS_REMAINING_BATTERY_LEVEL: str

"EL" – saniye olarak kalan pil düzeyi.

SENML_UNIT_EVENT_RATE_PER_SECOND: str

"1/s" – saniye başına olay oranı.

SENML_UNIT_EVENT_RATE_PER_MINUTE: str

"1/min" – dakika başına olay oranı.

SENML_UNIT_BPM: str

"beat/min" – dakika başına atış.

SENML_UNIT_BEATS: str

"beats" – atışlar.

SENML_UNIT_SIEMENS_PER_METER: str

"S/m" – metre başına siemens (elektriksel iletkenlik).