예전에 사용하던 샤오미 도어센서들이 몇 개 쌓어있는데 이걸 다시 활용해보려고 zigbee2mqtt를 해보기로 했다.
샤오미 게이트웨이가 가끔 wifi 문제도 있고, 연동하고 있는 Hubitat과 Mi connector 간의 지연현상도 간헐적으로 보여서(보통 Hubitat의 문제다) 게이트웨이는 빼버리고 zigbee 허브류 중에 가장 호환성이 좋은 zigbee2mqtt를 선택했다.
덕분에 연동할 길이 없어서 그냥 서랍 속에 잠들고 있던 Trust ZYCT-202 제품도 사용할 수 있게 되었다. Aqara Opple버튼도 모든 버튼 트리플 클릭까지 사용가능하다.
zigbee2mqtt 설정은 인터넷의 다른 글들을 참고하고, HA와는 연동하지 않았다. 그래서 GUI로 사용가능한 Zigbee2MqttAssitant를 설치하여 GUI로 간단히 보고 있다.
HC3 최신 펌웨어에서 mqtt client가 추가되어서 QuickApp으로 연동을 작업해보았다.
QuickApp 제작에 참고했던 것은 jgab의 Children Of Hue 2 버전이다.
5.030.45 에서 추가된 DeviceController 타입으로 연동을 주관하는 Parent 디바이스를 만들고, Child 디바이스를 추가하는 형태로 작업하였다. 작업이 완료될 때쯤 Children Of Hue 3버전은 DeviceController를 사용하지 않았다... (헉😱)
연결한 device별로 action이 다르기 때문에 device 별로 다르게 작업을 해주어야 하는데, QuickApp의 Child 디바이스 구현이 디바이스 타입별로 하나만 가능하다.
self:initChildDevices({
["com.fibaro.binarySwitch"] = MyBinarySwitch,
})
QuickApp 초기화 때, 아래와 같이 피바로 타입에 구현한 구현체를 Table로 등록하는데, table이기 때문에 하나의 피바로 타입에 하나의 구현체만 가능하다.
처음 Trust 디머버튼과 Opple 버튼을 각각 구현했다가 제대로 동작하지 않아서, 저 부분에서 결국 하나의 타입만 가능하다는 것을 알았다. (jgab의 QD는 별도의 정의 테이블에서 자동으로 등록하기 때문에 문제가 될 지 몰랐다.)
아마도 이러한 이유에 있어서 jgab도 DeviceController를 사용하지 않는 것 같다.
관련 포스트가 여기있다.
DeviceController를 사용하면 parent를 제거할 때 자동으로 삭제가 된다.
그리고 여젼히 문제가 되는 부분이 있는 Home Center 3의 웹 화면에서는 긴 문자열을 입력할 수 없다. 디바이스의 이름이나 variables의 긴 문자열은 입력이 불가능하다. api나 lua를 통해서만 가능하다.
개발 과정에서 child 정보를 수동으로 수정할 필요가 생겨 해보려고 했더니 되지 않았다.
jgab의 QD 매커니즘을 그대로 유지한 채로 수정하지 않았지만, 버튼과 도어 센서을 연동했다.
RemoteController 타입에 속하는 Trust 디머스위치와 Opple 버튼 2가지인데, 이에 대한 연동을 하나의 클래스에서 모델명에 따라 분기하여 로직을 적용했어야 했다.
나중에 HC3에서 직접 zigbee가 지원되어도, 표준 profile을 적용한 제품만 지원한다거나 커스텀한 디바이스들을 지원하지 않는다면 zigbee2mqtt를 사용하여 연동하는 방법을 최종안으로 고려중이다.
이렇게 연동한 도어센서는 자동창문 열림위치 판단에 사용할 예정이다.