senml — Sensor Markup Language¶
이 모듈은 Sensor Markup Language(SenML, RFC 8428)를 위한 작은 인코더/디코더를 구현합니다. SenML은 센서 측정값과 장치 매개변수를 위한 미디어 타입입니다. 각 “pack”은 “record”의 리스트이며, 모든 record는 이름, 단위, 값, 타임스탬프 및 선택적 합계를 담고 있습니다.
이 구현은 JSON과 CBOR 표현을 모두 지원하며, pack을 중첩할 수 있어 하나의 루트 pack이 여러 장치를 관리하는 게이트웨이를 기술할 수 있습니다. 인바운드 페이로드는 기존 record의 액추에이터 콜백을 구동할 수 있습니다.
사용 예시:
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())
클래스¶
- class senml.SenmlPack(name: str, callback=None)¶
SenML pack을 나타냅니다. 즉
SenmlRecord인스턴스의 모음이며 선택적으로 다른 자식SenmlPack객체도 포함합니다. pack이 record만 포함할 때는 단일 장치를 나타내고, 다른 pack을 포함할 때는 게이트웨이 역할을 합니다.name 은 이 pack에 포함된 모든 record에 사용되는 SenML 기본 이름(
bn)입니다.callback 은 인바운드 record가 이전에 알려지지 않은 센서를 가리킬 때마다
from_json/from_cbor에서 호출됩니다. 새로운SenmlRecord가 첫 번째 인수로 전달되며, (중첩된 pack의 경우) 발신 장치 pack이device=...로 전달됩니다. 일반적으로 액추에이터 명령을 처리하는 데 사용됩니다.SenmlPack인스턴스는 반복 가능하며 – 반복하면 삽입 순서대로 각 record를 산출합니다 – 컨텍스트 관리자로 사용할 수 있어 종료 시 pack이 자신을 부모로부터 제거합니다.- base_value: int | float | None¶
인코딩 시 각 record의 숫자 값에 더해지고 디코딩 시 빼지는 선택적 기본 값(
bv)입니다. 숫자가 아닌 값을 설정하면Exception이 발생합니다.
- base_unit: str | None¶
선택적 기본 단위(
bu) – 일반적으로SenmlUnits의 값입니다.
- actuate¶
생성 시 제공된 콜백입니다. 런타임에 다시 할당할 수 있습니다.
- add(item: SenmlRecord | SenmlPack) None¶
item 을 이 pack에 추가합니다. item 은
SenmlRecord또는 다른SenmlPack이어야 하며, 이미 다른 부모에 속해 있어서는 안 됩니다. 그렇지 않으면Exception이 발생합니다.
- remove(item: SenmlRecord | SenmlPack) None¶
item 을 이 pack에서 제거합니다. item 이 이 pack의 자식이 아니면
Exception이 발생합니다.
- from_json(data: str) None¶
SenML/JSON 문서를 파싱하여 record를 이 pack에 병합합니다. (이름으로 일치하여) 이미 존재하는 record는
SenmlRecord.do_actuate()를 트리거하고, 새 record는 추가되며 pack 수준의 callback 이 호출됩니다.
- class senml.SenmlRecord(name: str, **kwargs)¶
SenmlPack내부의 단일 측정값을 나타냅니다.name 은 SenML record 이름(
n)입니다.다음 키워드 인수가 허용됩니다:
value –
bool,int,float,str또는bytearray. 다른 타입은Exception을 발생시킵니다.time – 숫자 타임스탬프(
t)입니다.unit – 단위 문자열이며, 일반적으로
SenmlUnits의 멤버입니다.sum – 숫자로 적분된 합계(
s)입니다.update_time – 센서가 새로운 측정값을 제공하기까지의 최대 시간(
ut)입니다.callback – 인바운드 페이로드가 이 record를 갱신할 때 호출되는 함수입니다.
SenmlRecord를 유일한 인수로 받습니다.
SenmlRecord는 컨텍스트 관리자로 사용할 수 있어 종료 시 자신을 부모 pack에서 제거합니다.- value¶
현재 값입니다. 다시 할당하면 타입을 검사하며,
bool, 숫자,str및bytearray만 허용됩니다. float 값의 렌더링 정밀도를 제어하려면 할당 전에 반올림하십시오. 예:record.value = round(x, 2).
- actuate¶
생성 시 제공된 콜백입니다. 런타임에 다시 할당할 수 있습니다.
- class senml.SenmlBase¶
SenmlPack과SenmlRecord가 공유하는 공통 기본 클래스입니다. 자체적인 공개 API는 노출하지 않으며,SenmlPack.add()가 항목이 SenML 계층에 속하는지 검증할 수 있도록 존재합니다.
- class senml.SenmlUnits¶
클래스 속성이 RFC 8428 에 정의된 SenML 단위 기호인 네임스페이스 클래스입니다. 각 속성은 해당 단위의 문자열 코드로 해석되며,
SenmlRecord.unit또는SenmlPack.base_unit에 할당하기에 적합합니다.