본문 바로가기

IT/IoT

[HA] Home Assistant와 Zigbee2mqtt 연동

반응형

CC 2531 플래싱 작업이 완료 후 Zigbee2mqtt를 설치하면 Zigbee 장치 연동이 가능합니다.

CC 2531 플래싱 작업은 아래 링크에서 확인 가능합니다.

2019/08/18 - [IT/IoT] - 라즈베리파이를 활용한 CC2531 플래싱 작업

Zigbee2mqtt 환경은 다음과 같이 구성하는 것을 기준으로 설명합니다.

NAS

Home Assistant, Mosquitto

라즈베리파이

Zigbee2mqtt

먼저 NAS에 Eclipse Mosquitto 설치를 진행합니다.

MQTT는 간략하게 메시징 프로토콜로 Eclipse Mosquitto는 해당 프로토콜을 구현한 MQTT 브로커입니다.

아래 명령어로 필요한 디렉토리를 생성합니다.

sudo mkdir -p /data/mosquitto/data
sudo mkdir -p /data/mosquitto/log

Mosquitto는 Docker를 활용해서 실행합니다.

sudo docker run -d \
-p 1883:1883 \
-p 9001:9001 \
--name=mosquitto \
--restart=unless-stopped \
-v /data/mosquitto/data:/mosquitto/data \
-v /data/mosquitto/log:/mosquitto/log \
eclipse-mosquitto

간단하게 Mosquitto 컨테이너가 생성됩니다.

이제 라즈베리파이에서 Zigbee2mqtt를 설치하면 됩니다.

Docker가 설치되어 있지 않는 경우 먼저 아래 명령어로 Docker를 설치합니다.

curl -sSL https://get.docker.com | sh

설치 전에 먼저 아래 링크의 스크립트에 의심스러운 부분은 없는지 확인해야 합니다.

https://get.docker.com/

이제 필요한 디렉토리를 생성합니다.

sudo mkdir -p /data/zigbee2mqtt

아래 명령어를 입력하면 Zigbee2mqtt 컨테이너가 생성됩니다.

sudo docker run -d \
--name zigbee2mqtt \
--restart=unless-stopped \
--net=host \
-v /data/zigbee2mqtt:/app/data \
-v /etc/localtime:/etc/localtime:ro \
--device=/dev/ttyACM0 \
koenkk/zigbee2mqtt:arm32v6

디바이스와 그룹을 별도로 관리하기 위한 YAML 파일들도 생성합니다.

sudo touch /data/zigbee2mqtt/devices.yaml
sudo touch /data/zigbee2mqtt/groups.yaml

몇 가지 설정 내용을 변경해줘서 Home Assistant와 연동시킵니다.

sudo nano /data/zigbee2mqtt/configuration.yaml

아래와 같은 형태로 변경하면 기본적인 설정이 완료됩니다.

# Home Assistant integration (MQTT discovery)
homeassistant: true

# allow new devices to join
permit_join: true

# MQTT settings
mqtt:
  # MQTT base topic for zigbee2mqtt MQTT messages
  base_topic: zigbee2mqtt
  # MQTT server URL
  server: 'mqtt://192.168.1.123'
  # MQTT server authentication, uncomment if required:
  # user: my_user
  # password: my_password

# Serial settings
serial:
  # Location of CC2531 USB sniffer
  port: /dev/ttyACM0

devices: devices.yaml
groups: groups.yaml

HA 연동을 위해 먼저 homeassistant 부분을 true로 변경합니다.

처음 디바이스를 추가할 때permit_join 부분 역시 true로 설정합니다.

이후에 모든 디바이스가 추가되면 permit_join 부분을 false로 변경합니다.

mqtt 하위의 server는 localhost로 되어 있습니다.

하지만 별도의 NAS에 Mosquitto를 설치한 경우에는 해당 IP를 입력하면 됩니다.

마지막 줄을 추가하면 추가되는 장치들의 devices.yaml에 자동으로 추가됩니다.

디바이스가 많아지면 파일이 복잡해지기 때문에 위와 같이 별도 파일로 관리하는 것을 추천합니다.

기본적인 설정이 완료되면 Zigbee2mqtt 컨테이너를 재시작합니다.

sudo docker restart zigbee2mqtt

이제 Zigbee 지원 디바이스를 페어링하면 됩니다.

샤오미 전동 커튼의 경우 하단의 버튼을 길게 몇 번 눌러주면 됩니다.

정상적으로 페어링이 되면 아래와 같은 내용이 devices.yaml 파일이 추가됩니다.

'0x0123456789876543':
  friendly_name: 'Living Room Curtain'
  retain: false

기본 friendly_name은 위 ID와 동일한데 식별 가능한 값으로 변경하면 됩니다.

이제 Home Assistant의 configuration.yaml 파일에 다음과 같은 내용을 추가합니다.

# MQTT
mqtt:
  broker: 192.168.1.123
  port: 1883
  discovery: true
  discovery_prefix: homeassistant
  birth_message:
    topic: 'hass/status'
    payload: 'online'
  will_message:
    topic: 'hass/status'
    payload: 'offline'

이것으로 기본적인 설정이 완료되면 다음과 같이 Zigbee로 연결된 디바이스가 표시됩니다.

샤오미 전동 커튼

이제 우측에 보이는 상하 버튼을 통해서 샤오미 전동 커튼 제어가 가능합니다.

처음 이름은 약간 이상하게 표시되는데 이름을 클릭하면 상세 메뉴가 표시됩니다.

상세 메뉴

우측 상단에 보이는 설정 버튼을 클릭하면 이름 변경이 가능합니다.

이름 변경

Name Override 부분의 이름을 변경하고 SAVE 버튼을 누르면 됩니다.

이 설정이 완료되면 샤오미 게이트웨이가 없이도 샤오미 커튼 제어가 가능해집니다.

반응형