IoT Edge Connect : MQTT 브로커를 제공

 

CC2531 플래싱 작업

Zigbee2mqtt를 설치하면 Zigbee 장치 연동이 가능

NAS : Home Assistant, Mosquitto

라즈베리파이 : Zigbee2mqtt

 

NAS 에 Eclipse Mosquitto 설치

MQTT : 메시징 프로토콜 (Message Queue Telemetry Transport)

Eclipse Mosquitto : MQTT 를 구현한 MQTT 브로커

 

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 설치

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

docker 설치

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

zigbee2mqtt 컨테이너 생성

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

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

sudo nano /data/zigbee2mqtt/configuration.yaml

Home Assistant 와 연동시킴

homeassistant : true
permit_join : true

mqtt:
    base_topic : zigbee2mqtt
    server : 'mqtt://192.169.1.123'
serial:
    port: /dev/ttyACMO
    
devices: devices.yaml
groups: groups.yaml

HA 연동을 위해 homeassistant 부분을 true로 변경

처음 디바이스를 추가할 때는 permit_join 부분 true로 설정

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

mqtt 하위의 server는 localhost로 되어 있음

별도의 NAS에 Mosquitto를 설치한 경우에는 해당 IP를 입력하면 됨

추가되는 장치들의 devices.yaml에 자동으로 추가

디바이스가 많아지면 파일이 복잡해지기 때문에 별도 파일로 관리하는 것이 낫다.

sudo docker restart zigbee2mqtt

zigbee2mqtt 컨테이너를 재시작

zigbee 지원 디바이스를 페어링

정상적으로 페어링되면 아래 내용이 devices.yaml 파일에 추가됨

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

기본 friendly_name은 위 ID와 동일한데, 식별 가능한 값으로 변경하면 됨

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'

CC2531은 Zigbee 통신을 지원하는 스마트 디바이스를 연동하기 위해 필요

CC2531을 사용하기 위해 펌웨어를 기록하는 플래싱 작업이 필요

라즈베리파이의 GPIO와 CC2531을 연결할 케이블이 필요

gpio -v

wiringPi 가 설치되어 있는지 확인

git clone https://github.com/jmichault/flash_cc2531.git

git 에서 CC2531 플래싱을 위한 프로젝트 가져온다.

cd flash_cc2531
./cc_chipid

ID=b524. 이 표시되는지 확인

wget https://github.com/Koenkk/Z-Stack-firmware/raw/master/coordinator/Z-Stack_Home_1.2/bin/default/CC2531_DEFAULT_20190608.zip

최신 펌웨어 다운로드

./cc_erase
./cc_write CC2531ZNP-Prod.hex

플래싱 실행

sudo reboot -h now

작업 완료 후 라즈베리파이를 재부팅

ls -l /dev/ttyACMO
ls -l /dev/serial/by-id

화면에 usb-Texas_Instruments_TI_CC2531_USB 형태가 보이면 CC2531 플래싱 작업은 완료됨

 

게이트웨이 : IoT 기기들과 플랫폼(HA, 미홈 등)을 연결하는 일종의 중계기

automation:
  - alias: Motion Sensor or Gateway Light at Night
    trigger:
      platform: state
      entity_id: binary_sensor.motion_sensor
      from: 'off'
      to: 'on'
    condition:
      condition: time
      after: '22:00:00'
      before: '07:00:00'
    action:
     - service: light.turn_on
       entity_id: light.gateway_light
       data:
         brightness: 255
  - alias: Motion Sensor off Gateway Light at Night
    trigger:
      platform: state
      entity_id: binary_sensor.motion_sensor_158d0002ea6c5f
      from: 'on'
      to: 'off'
      for:
        minutes: 5
    action:
      - service:light.turn_off
        entity_id: light.gateway_light_7c49ebb3b89b
automation:
  - alias: xiaomi_zl_switch_click
    trigger:
      platform: event
      event_type: xiamoi_aqara.click
      event_data:
        entity_id: binary_sensor.xiaomi_switch_zl
        click_type: single
    action:
      service: switch.toggle
      entity_id: switch.xiaomi_plug_zl

 

*MQTT 용어

- Broker : 클라이언트 간을 연결시켜주는 서버

- Publisher : 특정 Topic으로 메시지를 전송하는 클라이언트

- Subscriber : 특정 Topic에 들어오는 메시지를 감시하는 클라이언트

- Topic : Broker 에 메시지가 모이는 곳, 계층 구조를 가질 수 있음

- QoS(Quality of Service) : MQTT는 시스템에 참여하는 장치들의 처리 능력, 네트워크 대역폭, 메시지 오버헤드 등 주변 상황에 맞게 시스템이 동작할 수 있도록 3단계 QoS를 제공

 

*무료 MQTT

- paho

- Mosquitto

- CloudMQTT : Amazon

- ARTIK Cloud : 삼성 IoT 플랫폼, 메시지 클라우드 시스템

- ThingPlug : SKT IoT 플랫폼, LoRA 통신 API 외에도 M2M 프로토콜로 이용 가능

- HiveMQ

 

*MQTT

- 이 프로토콜은 TCP/IP 프로토콜 위에서 동작하며 메시지 브로커를 필요로 한다.

- M2M과 IoT에서의 사용을 위해 만들어짐

- IoT를 위해 낮은 전력, 낮은 대역폭의 환경에서도 사용할 수 있도록 설계됨

- 이 프로토콜은 메시지를 발행하고, 관심 있는 주제를 구독하는 것을 기본 원칙으로 함

- 즉 발행과 구독을 기본 원칙으로 함

- 발행과 구독은 모두 브로커에 대한 클라이언트로 작동

- 발행은 토픽을 발행하기 위한 목적으로 브로커 서버에 연결

- 구독은 토픽을 구독하기 위한 목적으로 브로커 서버에 연결

 

반응형

'다마고치 > IoT 다마고치' 카테고리의 다른 글

MQTT 추가 내용  (0) 2020.11.09
MQTT  (0) 2020.11.09
MQTT(Message Queue for Telemetry Transport)  (0) 2020.11.09
[IoT 다마고치] 홈 IoT 프로젝트 구상  (0) 2020.10.20
[IoT 다마고치] Z-Wave, 라즈베리 파이  (0) 2020.09.29

+ Recent posts