Category (Click)
개발보드 덕질하기

Zigbee to MQTT (Z2M) 인터뷰 캐시 삭제

 차완기 - @2/26/2024, 2:26:00 PM
최근 nRF Connect SDK를 공부하며 간단한 Zigbee 디바이스를 만들어보고 있습니다.
코드를 조금씩 바꾸어 보면서 원하는 기능을 만들어가고 있는데요, 그러던 중 엄청난 삽질에 빠지게 되었습니다. 증상을 재현하자면 아래와 같습니다.

증상 재현

prj.conf 추가 (Zigbee 채널에 맞게)
nRF Connect SDK의 light_bulb 예제를 다운로드한 후 Z2M에 맞게 채널을 수정해 nRF52840 DK에 Flash합니다.
const fz = require('zigbee-herdsman-converters/converters/fromZigbee'); const tz = require('zigbee-herdsman-converters/converters/toZigbee'); const exposes = require('zigbee-herdsman-converters/lib/exposes'); const reporting = require('zigbee-herdsman-converters/lib/reporting'); const extend = require('zigbee-herdsman-converters/lib/extend'); const ota = require('zigbee-herdsman-converters/lib/ota'); const tuya = require('zigbee-herdsman-converters/lib/tuya'); const utils = require('zigbee-herdsman-converters/lib/utils'); const globalStore = require('zigbee-herdsman-converters/lib/store'); const e = exposes.presets; const ea = exposes.access; const definition = { zigbeeModel: ['Dimable_Light_v0.1'], model: 'nRF52840DK', vendor: 'Nordic', description: 'Nordic nRF52840DK, SDK V2.2.0, Light Bulb Sample - exposes', fromZigbee: [fz.on_off, fz.brightness, fz.level_config, fz.ignore_basic_report, fz.temperature], toZigbee: [tz.light_onoff_brightness, tz.ignore_rate, tz.level_config], exposes: [e.light_brightness(), e.temperature()], // e.temperature().withEndpoint(12) }; module.exports = definition;
JavaScript
복사
그 후 Z2M에서 디바이스가 인식될 수 있도록 커스텀 디바이스를 추가합니다. 이 내용을 참고했습니다.
그렇게 하면 장치가 인식되는데요, 위와 같은 클러스터 구조를 가지게 됩니다.
main.c 수정
여기에서 Endpoint를 10에서 1로 변경하게 되면 아래와 같이 변하게 됩니다.
분명히 Endpoint 10은 없어야 하지만 그대로 남아있는게 보이죠.

해결 방법

인터뷰된 내용이 덮어써지는 느낌이었습니다. ZCL 표준을 완벽하게 지키지 않는 몇몇 장치들을 호환시키기 위한게 아닌가 싶습니다.
아무튼 그럼 그걸 삭제하면 되겠죠. 해결 과정은 아래와 같습니다.
1.
장치 삭제 및 Z2M 종료
2.
SSH 등으로 Home Assistant 콘솔에 접속한 후 DB 검색
sudo find / -name database.db
Bash
복사
저의 경우 /homeassistant/zigbee2mqtt/database.db 경로네요.
3.
디바이스 데이터 삭제
nano, vim 등으로 db를 열어 삭제하려는 장치 데이터를 삭제한 후 저장합니다.
4.
Z2M 재시작 및 장치 페어링
Z2M을 재시작한 후 다시 인터뷰를 진행해 클러스터 구조가 의도한 대로 돌아온 것을 확인할 수 있습니다.