Binary Sensor 스키마 작성법
문 열림, 호출 등 두 상태만 갖는 입력은 binary_sensor 엔티티로 정의합니다. type 값은 항상 binary_sensor이며, 공통 필드(id, name, packet_parameters, device_class, icon)를 함께 사용할 수 있습니다.
필수 필드
state: 수신 패킷 패턴(data,mask,offset,inverted)을 지정해 어떤 패킷이 이 센서의 업데이트인지 식별합니다.
상태 판별 필드 (최소 하나 필수)
센서의 실제 상태(ON/OFF)를 결정하기 위해 다음 두 방식 중 하나를 반드시 작성해야 합니다.
- 스키마 방식:
state_on과state_off를 모두 정의합니다.state_on: 켜짐 상태 서명.offset과data로 특정 비트를 비교합니다.state_off: 꺼짐 상태 서명.
- CEL 방식:
state_state필드를 사용합니다.state_state: 패킷 데이터를 분석해'ON'또는'OFF'문자열을 반환하는 CEL 표현식입니다.
MQTT 디스커버리 메시지 구성
- 토픽:
homeassistant/binary_sensor/<unique_id>/config - 공통 필드
name,default_entity_id,unique_idstate_topic:${MQTT_TOPIC_PREFIX}/${id}/stateavailability:${MQTT_TOPIC_PREFIX}/bridge/statusdevice:devices설정 또는 브리지 기본 정보- 선택:
suggested_area,device_class,icon
- 바이너리 센서 전용
value_template:{{ value_json.state }}- 선택:
payload_on,payload_off(설정 파일의payload_on/off값을 사용)
예제: 도어벨 패킷 매칭
yaml
binary_sensor:
- id: door_bell
name: 'Door Bell'
icon: mdi:bell-ring
state:
data: [0xB4, 0x00, 0x00]
mask: [0xB4, 0xFF, 0xFF]
state_on:
index: 5
data: [0xB5]
state_off:
index: 5
data: [0xB6]예제: CEL 표현식 사용
패킷의 특정 바이트 값에 따라 복잡한 조건이 필요하거나 간단히 한 줄로 표현하고 싶을 때 사용합니다.
yaml
binary_sensor:
- id: door_bell_cel
name: 'Door Bell CEL'
state:
data: [0xB4]
index: 0
# data[1]이 0xB5면 ON, 아니면 OFF 반환
state_state: "data[1] == 0xB5 ? 'ON' : 'OFF'"작성 체크리스트
mask를 활용해 공통 헤더를 고정하고 이벤트 바이트만 비교하면 노이즈 패킷을 줄일 수 있습니다.- 엣지 케이스가 있을 경우
state를 포괄적으로 지정하고state_on/off로 세부 상태를 나눕니다. - 입력이 래치형이거나 다중 비트를 사용한다면
index와mask를 주석으로 남겨 향후 유지보수를 돕습니다.