Sonoff SNZB-04PR2 스마트싱스 커스텀 드라이버 배포
※ 드라이버 배포 글입니다. 리뷰는 SNZB-04PR2 리뷰 글(링크)을 참고하시기 바랍니다.
Sonoff의 도어 센서, SenseGuard DW Gen2 (SNZB-04PR2)의 스마트싱스용 커스텀 엣지 드라이버(Edge Driver)입니다.
스마트싱스 사이트(링크)에서 다운로드 받으시면 됩니다.
- 링크 접속 후 스마트싱스 계정 로그인 → [Enroll] -> [Available Drivers]로 들어가서 → [Zigbee Contact itngme]를 설치(Install)하시면 됩니다.
기본 드라이버에서는 비정상 조작(tamper) 감지가 안 보여서 보이도록 수정했습니다. 제품을 다른 사람이 물리적으로 뜯어낼 때 알림이 가도록 하는 기능입니다.
관련 글
◆ 1. 드라이버로 바뀌는 것
▼ 기본 드라이버(Zigbee Contact)로 연결하면 열림 감지와 배터리만 보입니다.
▼ 하지만 커스텀 드라이버(다운로드 링크)로 연결하면 '비정상 조작 감지 경고'도 뜹니다.
- 10초간 움직이는 webp 파일입니다. 그냥 작동 인증입니다.
▼ 제품 뒤쪽에 튀어나온 부분이 있는데, 제품이 벽에 설치되어 저 부분이 눌리면 '비정상 조작 없음' 상태가 됩니다.
- 누군가 제품을 뜯어내거나, 양면 테이프가 떨어져서 저 부분이 튀어나오면 '비정상 조작'으로 판단하는 것입니다.
없어도 사용에 큰 문제는 없지만 홈 어시스턴트에서는 잘 뜨는데 스마트싱스에서는 안 뜨는 걸 보고 만들어 봤습니다.
◆ 2. 제품 간단평
상세 리뷰는 따로 별도의 글(링크)에서 다루고, 여기에서는 간단한 평가만 적습니다.
- 스마트싱스에는 연결할 때 제대로 안 되는 경우가 있습니다. 제 드라이버 문제가 아니라, 기본 드라이버만 있을 때에도 제대로 연결이 안 될 때가 있었습니다. 그래도 일단 붙여 놓으면 문제는 없어 보입니다.
- 홈 어시스턴트에서는 Zigbee2MQTT에 연결해서 사용 중인데 일단 괜찮습니다.
- 특이하게 AAA 건전지 두 개가 포함되어 있습니다.
- 저렴한 가격에 비해 좋은 제품이라고 생각합니다. 9/10점으로 높게 평가합니다.
아래는 소스코드입니다. 수정해서 사용하고 싶으신 분은 마음대로 수정해서 사용하시기 바랍니다.
◆ 3. 소스코드: init.lua
공식 Zigbee Contact 드라이버(GitHub 링크)를 수정해서 사용했습니다. contact-battery-tamper-no-fw-update 프로파일 기반입니다.
▼ \src\init.lua 파일 소스입니다. AI에게 물어보면서 만든 거라 부족한 부분이 있을 것입니다.
-- Edited contact-battery-tamper-no-fw-update.yml for SONOFF SNZB-04PR2
local capabilities = require "st.capabilities"
local ZigbeeDriver = require "st.zigbee"
local constants = require "st.zigbee.constants"
local defaults = require "st.zigbee.defaults"
local configurationMap = require "configurations"
-- SONOFF 커스텀 탬퍼 핸들러
local sonoff_tamper_attr_handler = function(driver, device, value, zb_rx)
if value.value == 0x01 then
device:emit_event(capabilities.tamperAlert.tamper.detected())
else
device:emit_event(capabilities.tamperAlert.tamper.clear())
end
end
local function device_init(driver, device)
local configuration = configurationMap.get_device_configuration(device)
if configuration ~= nil then
for _, attribute in ipairs(configuration) do
device:add_configured_attribute(attribute)
end
end
end
local zigbee_contact_driver_template = {
supported_capabilities = {
capabilities.contactSensor,
capabilities.battery,
capabilities.tamperAlert,
capabilities.refresh -- 프로파일과 일치하도록 정리
},
zigbee_handlers = {
attr = {
-- SONOFF 커스텀 탬퍼 클러스터 및 속성 매핑
[0xFC11] = {
[0x2000] = sonoff_tamper_attr_handler
}
}
},
lifecycle_handlers = {
init = device_init,
-- 불필요힌 added 핸들러 삭제
}
}
-- 기본 핸들러 등록 (문열림 및 배터리는 스마트싱스 기본 기능을 사용)
defaults.register_for_default_handlers(zigbee_contact_driver_template,
zigbee_contact_driver_template.supported_capabilities, {native_capability_attrs_enabled = true})
local zigbee_contact = ZigbeeDriver("zigbee_contact", zigbee_contact_driver_template)
zigbee_contact:run()
같은 src 폴더의 configurations.lua는 수정하지 않았지만 남겨야 합니다.
◆ 4. 소스코드: 기타 파일 3개
▼ \profiles\contact-battery-tamper-no-fw-update_edited_snzb-04pr2.yml 파일입니다. 그냥 이름만 바꾼 정도입니다.
name: contact-battery-tamper-no-fw-update_edited_snzb-04pr2
components:
- id: main
capabilities:
- id: contactSensor
version: 1
- id: battery
version: 1
- id: tamperAlert
version: 1
- id: refresh
version: 1
categories:
- name: ContactSensor
▼ 루트 폴더의 config.yml 파일입니다. 역시 이름만 바꾼 정도입니다.
name: 'Zigbee Contact itngme'
packageKey: 'zigbee-contact-sensor'
permissions:
zigbee: {}
description: "Driver for SONOFF SNZB-04PR2"
vendorSupportInformation: "https://itngme.blogspot.com/p/contact.html"
▼ 루트 폴더의 fingerprints.yml 파일입니다. 역시 이름만 바꾼 정도입니다.
zigbeeManufacturer:
- id: "SONOFF SNZB-04PR2"
deviceLabel: "SONOFF SNZB-04PR2"
manufacturer: SONOFF
model: SNZB-04PR2
deviceProfileName: contact-battery-tamper-no-fw-update_edited_snzb-04pr2
남긴 파일은 5개입니다.
- profiles 폴더의 contact-battery-tamper-no-fw-update_edited_snzb-04pr2.yml
- src 폴더의 configurations.lua (수정한 것 없음)
- src 폴더의 init.lua
- 루트 폴더의 config.yml
- 루트 폴더의 fingerprints.yml
관련 글



댓글
댓글 쓰기