Sonoff SNZB-04PR2 스마트싱스 커스텀 드라이버 배포

※ 드라이버 배포 글입니다. 리뷰는 SNZB-04PR2 리뷰 글(링크)을 참고하시기 바랍니다.


Sonoff의 도어 센서, SenseGuard DW Gen2 (SNZB-04PR2)의 스마트싱스용 커스텀 엣지 드라이버(Edge Driver)입니다.


스마트싱스 사이트(링크)에서 다운로드 받으시면 됩니다.

- 링크 접속 후 스마트싱스 계정 로그인 → [Enroll] -> [Available Drivers]로 들어가서 → [Zigbee Contact itngme]를 설치(Install)하시면 됩니다.


기본 드라이버에서는 비정상 조작(tamper) 감지가 안 보여서 보이도록 수정했습니다. 제품을 다른 사람이 물리적으로 뜯어낼 때 알림이 가도록 하는 기능입니다.


관련 글


1. 드라이버로 바뀌는 것

2. 제품 간단평

3. 소스코드: init.lua

4. 소스코드: 기타 파일 3개


1. 드라이버로 바뀌는 것


▼ 기본 드라이버(Zigbee Contact)로 연결하면 열림 감지와 배터리만 보입니다.

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


관련 글

댓글

이 블로그의 인기 게시물

이케아 그릴플랏스-매터 스레드 플러그 리뷰

이케아 카이플랏스-매터 스레드 스마트전구 리뷰

이케아 빌레사-매터 스레드 2버튼 리모컨 리뷰

스마트 공기질 센서 비교 및 선택 가이드 (제품 추천)

이케아 뮉스프라위-매터 스레드 모션·조도 센서 리뷰