[ zigbee2mqtt 메시징 가이드 ] zigbee2mqtt(z2m) MQTT Tolpic 및 Message 구조

반응형

zigbee2mqtt 사전 환경 및 정보

z2m setup env - 설치 환경 및 준비물

  • raspberry pi 4 Model B (raspbian OS 64 bit)
  • ZigbeeGW Conbee2 - HW
  • MQTT Broker mosquitto
  • Zigbee2MQTT - app

아무리 찾아봐도 한글로 된 z2m 기본 토픽 및 가이드가 없어서 직접 기록하는 z2m 간단 Topic 및 디바이스 핸들링 가이드

 

기본적인 MQTT의 mosquitto 메시지 Broker를 이용한 메시징 구조 및 방법을 안다는 가정하에 

Zigbee2mqtt(z2m)의 기본적인 MQTT Topic과 Message 구조 그리고

 

이를 이용한 Zigbee GW이하 Device 등록, 해지, 설정 변경을 가이드한다.

 

Guide 순서로는 기본적인 Topic과 페이로드 body 구조를 알아보고 이를 이용한 특정 상황을 연출하여 간단한 실습 또는 시뮬레이션 위주로 z2m 사용 방법에 대해 가이드하겠습니다.


z2m 기본 configuration 및 변수 알람

MQTT Broker port와 z2m의 configuration을 토대로 메시징 동작과 Topic이 설정되므로 아래의 z2m 기본 설정 가이드에서 이를 참고하자.

[ zigbee2mqtt 설치 가이드 _ install & setup ]

 

현재 Guide의 기본 설정은 아래와 같다.

MQTT Broekr listener : 1883

base_topic : zigbee2mqtt

zigbee2mqtt bridge GW info

기본적으로 z2m에선 zigbee GW에 의해 오고가는 device 명령, z2m application log 등을 브릿지 info 토픽 이하에서 주고 받는다.

이에 해당 Zigbee GW의 정보에 대해 알고싶다면 다음과 같은 Topic을 구독하면 지속적으로 GW이하 정보에 대해 모니터링 할 수 있다.

Topic : {base_topic}/bridge/info

이후로도 그렇지만 모든 Topic은 {base_topic}/bridge/ topic을 상위 topic으로 가진다.

Device rename

z2m 웹 애플리케이션을 이용해서 Device의 이름을 바꾸거나 MQTT Topic에 Publish 하여 name을 바꿀 수 있는데

이러한 event가 발생하게되면 GW bridge에선 이에 대한 request log를 전체 공지한다.

이에 대한 Topic 및 Message payload는 다음과 같다.

Topic : {base_topic}/bridge/request/device/rename 

Message : “{\”from\”:\”{이전 device friends name}\”, \”to\”:\”{rename device friends name}\”}”

 

이렇게 Device name을 변경해주면 이후 해당 Device에 의해 발생하는 event는 설정한 name으로 topic이 설정되므로

이후 application 운용을 하기 위해선 꼭 필요한 절차이다.

mosquitto_pub -t zigbee2mqtt/bridge/request/device/rename -m "{\\"from\\":\\"humidity_sensor1\\",\\"to\\":\\"humidity_sensor\\"}"

mosquitto_pub -t zigbee2mqtt/bridge/request/device/rename -m "{\\"from\\":\\"0x04cf8cdf3c7f2ff8\\",\\"to\\":\\"humidity_sensor\\"}"

ex) [ humidity_sensor1 = old name, humidity_sensor = wished new name ] 

https://github.com/Koenkk/zigbee2mqtt/issues/1434

 

Is rename feature broken? · Issue #1434 · Koenkk/zigbee2mqtt

Using version 1.3.0, when I try to rename an entity through mqtt with... {"topic":"zigbee2mqtt/bridge/config/rename","payload":"{old: '0x00158d0002ede2ab', new: 'Utility light switch'}"} ...I get t...

github.com

Device value set

Device value는 Web과 MQTT message를 통해 설정하는 두가지 방법이 존재한다.

ex) led를 on, off 하거나 & led의 밝기를 조절 0~100 일경우 40으로 조정한다던지...

 

이 중 특정 MQTT Topic으로의 Message publish를 통해 value set을 하는 방법을 아래에 기재한다.

value set을 위한 Topic과 Message 포맷은 다음과 같다.

Topic : {base_topic}/{device friends name}/set

Message : “{\”{value name}\” : \”{value}\”}”

ex)

mosquitto_pub -t zigbee2mqtt/led1/set -m "{\\"state\\" : \\"off\\"}"

mosquitto_pub -t zigbee2mqtt/led1/set -m "{\\"brightness\\" : \\"40\\"}"

Device remove

GW에 등록된 Device를 제거하는 방법은 두가지 방법이 존재하며 이에 따른 MQTT Topic, Message 포맷은 다음과 같다.

topic : {base_topic}/bridge/response/device/remove

message : {"data":{"block":false,"force":true,"id":{device freind name}},"status":"ok","transaction":"klptr-4"}

 

remove 방법은 아래와 같은 2가지가 존재한다.

1. z2m Web에서의 remove request

2. z2m remove command MQTT Topic으로 포맷에 맞춰 Message publish

 

2의 경우

remove topic인 '{base_topic}/bridge/response/device/remove' topic으로

“{\”id\”:\”{device friend name}\”, \”force\”:\”true\”}” 와 같은 message를 전송 시

friends name에 맞는 device가 gw에서 등록 해지된다.

 

두 과정 모두 Device 제거에 성공하면 다음과 같은 Response가 발생한다.

삭제된 device에 대한 ieee 값이 아닌 friend name이 출력된다.

Device registering

zigbee deivce가 테더링을 통해 GW에 등록되고 이를 z2m application에 등록하게되면 다음과 같은 topic, message가 발행된다.

bridge 이하 모든 event에 대한 message 를 subscript 하면 해당 bridge 이하에서 일어나는 device registering에 대해 모니터링 가능

 

위의 GW 이하 log를 통해 알 수 있듯 Device 등록에 대한 Topic과 Event 오퍼레이션에 따른 message는 아래와 같다.

Topic : {base_topic}/bridge/event , {base_topic}/bridge/log

Device registering operation

1. type: device_joined

2. type: device_interview -> status: started

3. type: device_interview -> interview_successful

4. 디바이스 등록 완료

 

위와 같은 순서를 지나 디바이스 등록이 완료되면

z2m path의 configuration.yaml을 확인 시 device list에 등록절차가 끝난 디바이스가 업데이트 완료되어있다.

 

마치며(MQTT Broker를 이용한 z2m 활용 방안)

위에서 디바이스 등록, 제거, 세팅 값 변경, GW 이하 로그 확인에 따른

MQTT Broker의 Topic 및 Message 포맷에 대해 정리하였다.

 

이를 이용해 작업중인 IoT application 이하에 z2m module을 따로 구축하고

적절한 MQTT 라이브러리를 이용해 응답 class를 구축해보는 것은 어떨까 아마 Zigbee 센서 & 액츄에이터 및 raspberry pi를 이용한 홈 IoT 구축에 있어 좀 더 편의성을 극대화할 수 있을 것이다.

(MQTT Broker에 대한 직접 연결이 필요없이 z2m applicaiton 하나만으로 Zigbee GW - MQTT Broker에 대한 기본 파이프라인이 구축가능)

 

다음 글에서 특정 상황에 대한 간단한 연출을 통해 위의 과정을 전체적으로 확인해보도록하겠다.