zigbee2mqtt 설치

(이전 글에 합쳐져있던 내용을 새 글로 분리)

zigbee2mqtt (이하 z2m) 은 mqtt 란 프로토콜을 기반으로 작동하는건데,
z2m은 mqtt 클라이언트로서 연결할 mqtt broker (서버라고 생각하면 됨)가 필요하다.

docker 로 mqtt broker 인 eclipse-mosquitto 와 z2m 둘 다 설치할거임.

# eclipse-mosquitto 이미지 다운 및 실행
docker pull eclipse-mosquitto
sudo docker run -d \
    --name=mosquitto \
    -p 1883:1883 \
    -p 9001:9001 \
    --restart=always \
    -v /home/pi/ha/mosquitto/data:/mosquitto/data \
    -v /home/pi/ha/mosquitto/log:/mosquitto/log \
    eclipse-mosquitto

# z2m 이미지 다운 및 실행
docker pull koenkk/zigbee2mqtt
docker run -d \
    --name="z2m" \
    --net=host \
    --restart=always \
    -v /home/pi/ha/z2m:/app/data \
    --device=/dev/ttyACM0 \
    -v /run/udev:/run/udev:ro \
    -e TZ=Asia/Seoul \
    --privileged=true \
    koenkk/zigbee2mqtt


설정 파일 경로는 이전글에 이어서 /home/pi/ha/ 폴더 안에 각 폴더를 만들고 지정해주었다.

z2m 실행시 필요한 --device 이름 역시 필요하다면 알아서 바꿔주자.


z2m 의 설정을 조금 변경해준다.

기본값으로 꺼져있는 homeassistant 를 켜주고, devices, group 을 관리하기 편하게 별도 파일로 만든다

cd ~/ha/z2m
sudo touch devices.yaml groups.yaml
sudo vi /home/pi/ha/z2m/configuration.yaml
homeassistant: true
permit_join: true
mqtt:
  base_topic: zigbee2mqtt
  server: 'mqtt://localhost'
serial:
  port: /dev/ttyACM0
devices: devices.yaml
groups: groups.yaml

zigbee 장비가 다 추가되고 나면 permit_join: false 로 바꿔주면 됨.


그 다음 HA의 설정도 변경, mqtt 항목을 추가해준다.

mqtt broker 를 추가하는거기 때문에 혹시나 eclipse-mosquitto 를 다른 장비나 다른 포트에서 작동시킬 경우 적당히 수정해주자.

sudo vi ~/ha/config/configuration.yaml
mqtt:
  broker: 127.0.0.1
  discovery: true


둘 다 재시작

docker restart z2m home-assistant


이제 HA의 통합 구성요소에 MQTT 가 나타나고 기기와 구성요소에도 z2m을 통해 연결된 장비가 나타단다.

deCONZ 로는 안 보였던 다원 스마트 플러그의 전력량도 잘 보이고, 다원 전등 스위치도 연결이 잘 됨.


실시간으로 올라오는 z2m의 로그를 보려면

tail -f $(ls -td ~/ha/z2m/log/*/ | head -1)log.txt

이렇게 하면 됨. z2m을 재시작할 때마다 실행 시간으로 디렉토리가 생긴다.

tail 명령어로 열었는데, 지난 로그를 보고 싶으면 vim이나 nano 등으로 직접 열어봐도 됨.

zigbee IoT 장치들(End Device)를 사용하기 위해선 장치들이 연결되기 위한 Coordinator가 필요하다.

코디네이터를 중심으로 end device 들이 연결되는데, 중간에 네트워크 확장을 위해서 라우터를 추가하기도 함.

코디네이터 혹은 라우터로 사용할 수 있는 CC2531 을 구매 후 펌웨어 변경 작업을 정리해 보았음.


CC2531 펌웨어 플래싱 with RPi

* 참고: 
    * What do I need? | zigbee2mqtt.io - https://www.zigbee2mqtt.io/getting_started/what_do_i_need.html
    * Flashing the firmware on the CC2531 USB stick | zigbee2mqtt.io - https://www.zigbee2mqtt.io/getting_started/flashing_the_cc2531.html
    * Alternative flashing methods | zigbee2mqtt.io - https://www.zigbee2mqtt.io/information/alternative_flashing_methods.html
    * ConBee implementation #72 - https://github.com/jmichault/flash_cc2531/issues/9


우선 CC2531(약 $5) 이랑 다운로더 케이블(약 $2)를 준비한다. 난 AliExpress 에서 주문하였음.

칩안테나(회로에 안테나가 그려져 있는) 버전이 있고 안테나 단자가 달려 있고 안테나를 같이 파는 버전도 있다.

CC2531 을 그냥 쓸 경우 신호가 약하다는 글을 많이 봐서 난 안테나 버전으로 구매하였음.


펌웨어 작업이 이미 되어 있는 CC2531을 팔기도 한다던데 그걸 살 경우 다운로더 케이블과 이 작업이 필요없다.


위에 참고로 건 글 중 Flashing the firmware on the CC2531 USB stick 글을 보면 Windows, Mac, Linux 에서 플래싱을 할 수 있지만, 왠지 pi에서 하는게 더 편할 것 같았다.

pi나 아두이노로 진행하는 방법은 Alternative flashing methods 글을 참고하면 됨.


1. 파이에 WiringPI 설치

sudo apt install wiringpi


2. 파이에서 툴 다운로드

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


3. 파이와 다운로더 모듈 간에 GPIO핀 연결

연결을 위해선 암-암 점퍼 케이블 4개가 필요함.

다운로더 모듈

 파이

 pin 1 (GND)

 pin 39 (GND)

 pin 7 (reset)

 pin 35 (GPIO24, BCM19)

 pin 3 (DC)

 pin 36 (GPIO27, BCM16)

 pin 4 (DD)

 pin 38 (GPIO28, BCM20)

다운로더 모듈의 핀보드는 모듈에 적혀있으니 그걸 보면 되고, 파이의 핀 위치는 https://pinout.xyz/ 사이트 참고.


4개 핀도 연결하고 전원 공급을 위해 CC2531 을 파이의 USB단자에도 연결해준다.


4. 플래싱

1) 먼저 잘 연결이 되었는지 확인해본다.

cd flash_cc2531
./cc_chipid -m 90
  ID = b524.

ID가 0000, ffff 등이 나온다면 뭔가 오류가 있음.

원래 -m 90 을 붙여주지 않아도 되는데, 나의 경우 계속 붙여줘야 정상적으로 진행이 가능했다.


2) 펌웨어 파일 다운로드

코디네이터 버전 - https://github.com/Koenkk/Z-Stack-firmware/tree/master/coordinator/Z-Stack_Home_1.2/bin/default

라우터 버전 - https://github.com/Koenkk/Z-Stack-firmware/tree/master/router/CC2531/bin

# 코디네이터
wget https://github.com/Koenkk/Z-Stack-firmware/raw/master/coordinator/Z-Stack_Home_1.2/bin/default/CC2531_DEFAULT_20190608.zip
unzip CC2531_DEFAULT_20190608.zip

# 라우터
wget https://github.com/Koenkk/Z-Stack-firmware/raw/master/router/CC2531/bin/CC2531_router_2020_09_29.zip
unzip CC2531_router_2020_09_29.zip


라우터 버전은 펌웨어가 3개가 나온다.

- router-cc2531-std.hex: 라우터 기능만 작동
- router-cc2531-diag.hex: 라우터 + 진단 정보
- router-cc2531-diag-usb.hex: 라우터 + 진당전보 + USB 시리얼포트로 인식 (진단정보를 USB로 읽기 가능)

진단정보가 뭘 말하는건지 모르겠어서 난 그냥 -std 버전을 사용하였음.


3) 펌웨어 플래싱

./cc_erase -m 90
./cc_write -m 90 CC2531ZNP-Prod.hex (혹은 해당하는 펌웨어명)


보통 HA에서 Zigbee 를 사용하기 위해 CC2531 칩 + zigbee2mqtt 를 많이 사용하지만,
ConBee II 라는 애가 "Very powerful"⁽¹⁾ 라고 소개되어 있어서가 있어서 구매해보았다.

아마존에서 $47에 구매, 57,304원이 빠져나갔다. CC2531 한개가 약 $5 인걸 고려하면 무시무시한 금액...ㅠㅠ


zigbee2mqtt 와 아직 호환이 완벽하지 않다고 적혀있어서⁽²⁾ deCONZ 란걸 사용해보았음

(1) Supported adapters | zigbee2mqtt.io - https://www.zigbee2mqtt.io/information/supported_adapters.html
(2) ConBee implementation - #72 https://github.com/Koenkk/zigbee-herdsman/issues/72


deCONZ 설정

# USB 제어를 하기 위해 현재 사용자를 dialout 그룹에 추가
# RPi 에서 pi 계정의 경우 이미 추가가 되어 있음.
sudo usermod -a -G dialout $USER

# 이미지 받아오기
docker pull marthoc/deconz

docker run -d \
    --name=deconz \
    --net=host \
    --restart=always \
    -v /home/pi/ha/deconz:/root/.local/share/dresden-elektronik/deCONZ \
    --device=/dev/ttyACM0 \
    -v /etc/localtime:/etc/localtime:ro \
    -e DECONZ_WEB_PORT=2000 \
    -e DECONZ_WS_PORT=2001 \
    marthoc/deconz


설정 파일 위치는 지정하기 나름. 이전 글에 이어서 /home/pi/ha/deconz으로 지정하였음.

--device=/dev/ttyACM0 부분은,, zigbee 모듈을 연결하고 해당 USB 항목을 넘겨주는건데 알아서 하자.

포트는 기본이 80, 443 인데 마음에 안들어서 각 2000, 2001 로 바꾸었다.

이제 http://RPi주소:2000로 접속 가능.


HA 웹페이지 통합 구성요소로 가면 deCONZ가 나타나고 클릭해서 연결하면 된다.

deCONZ 웹에서도 그룹을 만들거나, 제어를 하는게 가능하지만 어차피 HA로 제어를 할테니 zigbee 장비 연결만하고 돌아오면 됨.

그룹을 만들 경우 HA에도 나타나서 거슬린다.


문제점

 localhost 주소가 아닌 경우 pi의 IP가 바뀌면 HA와 deCONZ가 서로 통신을 못하는 어처구니 없는 일이 발생한다.

로컬주소로 바꿔봤는데도 이상함.. 그냥 deCONZ 자체가 IP가 바뀌면 이상하게 작동을 한다..ㅡㅡ


그리고 다원 DNS의 Zigbee Smart plug 는 연결은 되지만 제어만 되고 전력 소모량 등의 값은 올라오지 않는다.

Zigbee 전등 스위치는 아예 연결도 안됨...


결국 deCONZ 대신 zigbee2mqtt 를 다시 깔았다.. 이건 따로 글을 쓸 예정.

deCONZ 를 안쓸 경우 만들었던 docker 이미지를 꺼주거나, 지워주자.


# 인스턴스 정지
docker stop deconz

# 컨테이너 삭제
docker rm deconz

# 이미지 삭제
docker rmi marthoc/deconz


Home Assistant(이하 HA)를 설치하는 방법은 다양한 것 같지만, 난 RPi3B+ 에다가 docker 로 설치하였음.


# 도커 설치
sudo curl -fsSL https://get.docker.com/ | sudo sh

# 사용자 계정을 docker 그룹에 추가
sudo usermod -aG docker $USER

# HA 이미지 받아오기
docker pull homeassistant/raspberrypi3-homeassistant:stable

# 실행
docker run --init -d \
    --name="home-assistant" \
    --net=host \
    --restart=always \
    -v /home/pi/ha/config:/config \
    -e "TZ=Asia/Seoul" \
    homeassistant/raspberrypi3-homeassistant:stable


타임존은 어차피 다시 설정하던데 왜 적으라는지 모르겠다.. 혹시 모르니 일단 지정.

설정 파일이 저장될 위치는 그냥 적당히 /home/pi/ha/config 으로 지정했다.


실행이 되면 http://RPi주소:8123 으로 HA 관리 페이지에 접속할 수 있다.

계정 생성시에 처음에 적는 이름이 아니라 두번째 란인 사용자 이름이 ID 임에 주의..


HomeBridge 설정

iOS HomeKit 사용을 위해 HomeBridge를 활성화하려면 설정 파일에 한줄 추가해줘야 한다.

sudo vi /home/pi/ha/config/configuration.yaml

# Configure a default setup of Home Assistant (frontend, api, etc)
default_config:

# Text to speech
tts:
  - platform: google_translate

group: !include groups.yaml
automation: !include automations.yaml
script: !include scripts.yaml
scene: !include scenes.yaml

homekit:

이 후 HA 서버를 재시작

iOS 홈 앱에서 액세서리 추가 - HA 웹페이지 알림에 뜬 QR 혹은 코드로 등록하면 된다.


* 추가한 후에 HA에 새로운 기기가 추가되거나 삭제해도 홈킷에 제깍제깍 반영이 되지 않는다...

그럴 땐 HA를 재시작 하면 바로 반영 되는 것 같음...


단순 피곤에 의한 두통인줄 알고 하루종일 잤는데, 알고보니 감기였는지 새벽에 머리는 계속 아프고 잠은 오지 않았다..

머리가 아파서 딱히 뭘 할 수 있는 상황은 아니였으니, 간단한 확인작업들을 해봄.


우선 생각만하고 딱히 쓸 일은 없을 것 같았던 도어락 제어.


예전에 동아리방 도어락을 개조해보려고 할때, 무선모듈 포트 쪽으로 시도해보려고 수많은 삽질과.. 심지어 5만원 상당의 무선개폐 리모컨을 사서 분석을 시도해보기도 했지만 잘 안풀렸다.

포기하고 개폐버튼, 혹은 문고리 등의 스위치쪽으로 신호를 쏴주는걸로 변경하려고 했는데 수많은 삽질로 맥이 빠져서 당시에 걍 포기.


물론 집 도어락은 원격 제어(?)가 굳이 필요한가.. 란 생각이 들어서 오늘 이후로 다시 안쳐다볼 수도 있음.






자취방의 도어락. 우리집 도어락이 어떻게 생긴건지도 전혀 관심없었는데, 글을 쓰면서 모델명을 적어야할 것 같아서 찾아봤다.


무선모듈 같은건 지원안함.

냅다 분해부터 해보자.




구조가 생각보다 너무 단순해서 신기했다. 이전에봤던 도어락들은 안이랬는데...


우선 빨간색이 개폐버튼.


초록색은 현재 잠금 장치가 열려있는지, 닫혀있는지 확인하는 부분.

아래쪽 두 센서로 윗쪽 튀어나온 부분이 어디에 위치해있는지를 감지한다.

예전에 누가 저 센서로 저금통에 돈넣으면 소리나는걸 만드는걸 봤었는데, 곧잘 고장나서 힘들다고 그랬던 기억이 나네...


파란색은 수동개폐 스위치가 모터에 연결된 부분.. 걍 평소에 궁금했던걸 봐서 표시해봤다.


모터는 서보모터일 줄 같았는데 전원선이 전부인걸 보면 센서에 감지될 때까지 한쪽방향으로 냅다 돌리게 되어있나보다.




목적으로 돌아와서, 개폐 스위치에 저렇게 선을 달았다.

납땜을 해야 맞겠지만.. 그렇게까지 하고 싶지도 않았고 왠지 공간이 있길래 선을 집어넣어서 그냥 감기만 했다.


안되면 안되는거고.. 애매하게 안되면 나중에 납땜하면 되지란 생각..?




재조립 후 간단히 확인.

스위치가 눌렸을 때처럼, 그냥 두극을 잠깐 연결시켰다가 떼주면 된다.


대충 연결한 것 치곤 매우 잘됨.


예전에 가지고놀던 도어락은 약간의 딜레이가 필요했던 것 같은데 얘는 그런거 없이 바로바로 작동한다.




일단 위쪽으로 선을 빼두고 다시 조립...


아두이노(혹은 라즈베리파이 등등)랑 연결할때는 트랜지스터로 스위치 회로를 만들어서 사용하면 된다.


내가 만들게 된다면 다시 글을 이어서 쓸테지만.... 솔직히 이 다음을 진행할지 잘 모르겠다... 귀찮아.... ㅋㅋㅋㅋ


[목차]

1탄 - 아두이노 세팅 및 코딩

2탄 - 벽 스위치에 교체 설치

3탄 - HomeKit 연동


미루고 미루다가 더 늦기전에 써본다.


============================



자, 이제 홈킷서버를 구성하고, 전등스위치와 통신해야한다.

보통 라즈베리파이로 많이 하지만, 나의 경우엔 블투내장인 PI3 이상이 없기도 했고,

서버로 쓰고 있는 맥북이 있었으니 이걸 사용.


결과적으론

전등 스위치 <-- Bluetooth --> 맥북 <-- HomeKit --> iOS

이런 느낌이 된다.



1. 블루투스 통신 프로그램 제작


https://github.com/iolate/BLEHomeKit

Swift 를 써보고 싶어서 Swift 로 간단한 커맨드라인 툴을 작성하였다.

Swift 를 배우는 삼아 작성한거기도 하고, 대충 짰으며, 

SwiftSocket 이라는 오픈소스를 사용하였는데, 이 글을 올릴려고 보니 CocoaPods, git submodule 등의 설정이 전혀 안되어 있어서

그냥 주석으로 퉁쳤다. 알아서 참고만 하자.

사실 이름도 BLEHomeKit 이면 안될 것 같지만 이 역시 바꾸기 귀찮으니 패쓰.


실행이 되면 전등 스위치의 HM-10 과 연결하고, tcp 소켓을 열어서 대기한다.

daemonize 는 귀찮아서 그냥 screen 으로 실행해주는 방식을 취했다.



2. node, npm 설치 (Mac)


Homebrew 가 없다면 먼저 설치해주자.

$ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"


그 후 node 와 npm 을 설치해준다. brew 의 npm 은 버전이 낮아서(?) 아래와 같이 따로 설치해줬던 것으로 기억.

$ brew install node --without-npm

$ curl -L https://www.npmjs.com/install.sh | sh


node 가 설치된 경로를 환경변수에 넣어준다.

나의 경우 경로는 /usr/local/Cellar/node/7.6.0/bin/ 였으며, ~/.bash_profile 에 넣어주었다.

$ vi ~/.bash_profile

export PATH="/usr/local/Cellar/node/7.6.0/bin:$PATH"


이후 source 를 하든 쉘을 다시 로그인하든 알아서 하자.



3. 의존성 및 HAP-NodeJS 설치


나의 경우 아래와 같이 진행했는데 원래 node 를 안써서 뭔가 이상한 부분이 있을 수 있음.

$ npm install -g node-gyp

$ npm install node-persist debug mdns fast-srp-hap ed25519 buffer-shims curve25519-n ip


HAP-NodeJS 패키지도 npm 에 있는 듯 하지만, 나는 설치가 안되었음.그래서 git 에서 받아서 진행했다.

아마 npm 에서 바로 받으면 위 의존성들도 설치를 해주겠지?

$ git clone https://github.com/KhaosT/HAP-NodeJS.git

$ cd HAP-NodeJS/

$ npm rebuild



4. 액세서리 파일 편집


예시 파일들을 보고 적당히 수정해주면 된다.

나는 아래 접어둔 것과 같이 구성하였다.


이것저것 테스트해보면서 대충 짠거라 코드가 좀 부끄러웠던 것 같지만,

다시 보기도, 수정하기도 귀찮으니 일단 패쓰. 잘 작동하면 됐지...


위 BLEHomeKit 으로 tcp 커넥션이 필요하며 이게 비동기로만 가능한 node 의 조건상, feedback 이 제대로 안 올 수도 있는데,

뭐... 대충 잘 작동한다. ㅋ...





5. HAP-NodeJS 실행


$ cd /path/to/HAP-NodeJS

$ node Core.js


이렇게 실행해주면 끝!

마찬가지로 daemonize 는 귀찮아서 screen 으로 실행해주면 된다.





6. HomeKit 에 등록 및 사용


등록하는 과정은 귀찮아서 생략. 걍 홈 앱을 열면 알아서 잘 해준다.
그러면 아래와 같이 컨트롤센터 가장 우측에서 제어를 하거나, 시리로 제어가 가능해진다.

    


스크린샷에 보이는 에어컨은 아두이노로 에어컨 제어하기 (IR, HomeKit) 1탄  이 글에서... 다루다 말았다. ㅋ



여튼 끝. 개선할 점이 군데군데 많지만 수개월째 매우 만족스럽게 잘 사용하고 있다.


방에 에어컨을 달았는데, 마찬가지로 HomeKit 으로 제어해보고 싶었다.

리모컨이 있으니 전등에 비해 꼭 필요한건 아니였지만...

시리로 켜고 끈다거나,, 온도에 따라 자동 제어 같은걸 해보고 싶어서...


가장 먼저 에어컨 리모컨 신호를 받아서, 아두이노로 다시 보내서 테스트해보는걸 먼저 해보았다.



이번에 방에 설치한 에어컨.

LG WHISEN SUC066BC 모델...

이모가 쓰시던걸 받아왔다.



IR 은 예전에 적외선 송수신 킷을 구매했던걸 활용하였다.


구매처는 아트로봇, 링크

무려 13년도에 샀던건데, 구매내역에 잘 보관되어 있었다..


어떻게 연결하는지 등은 Hook-up Guide 글을 보자.

연결 후에는 아두이노에서 IRremote 라이브러리를 내려받고 사용하면 된다.


라이브러리를 받은 후에

libraries/IRremote/examples/ 폴더로 가면

IRsendRawDemo, IRrecvDumpV2 예제가 있으니, 이 스케치로 원래 리모컨의 신호를 읽고, 날려보면 된다.


예시 폴더에 LGACSendDemo.. 가 있는 것은 이 글을 보면서 발견했는데,,

https://github.com/chaeplin/lgwhisen 이런 오픈소스도 있지만 결과적으로 나는 제대로 작동하지 않아서, 다시 코드를 짰다.



여튼 돌아와서, IRrecvDumpV2 스케치를 업로드한 후에 리모컨으로 눌러보면



이런식으로 신호가 나오게된다.


rawData 를 복사해서 IRSendRawDemo 의 예시처럼,

irsend.sendRaw(rawData, sizeof(rawData) / sizeof(rawData[0]), khz)

이렇게 보내주면 그대로 복사하는거라고 하는데....


실제로 해보면 안된다. ㅡㅡ;


또한 에어컨 리모컨은 특성상, 각 신호가 온도, 바람세기 등의 정보를 가지고 있는데 저걸 어떻게 분석해야하나.. 난감했는데,

위의 LG 에어컨 코드들이 제대로 작동은 안할지언정 기본 베이스가 같아서 도움이 되었다.


위 코드와 IRremote 라이브러리의 ir_LG.cpp 등의 코드를 보면,

업다운 신호가 한 세트로, +500, -500 이면 0, +500, -1500 이면 1 이 되어서 28 bit 의 신호를 만들게 된다.

위 사진의 경우 1000 1000 1100 0000 0000 0101 0001 이 되겠지.


이제 IRrecvDumpV2 스케치에서 loop 함수를 이렇게(접어둠) 바꿔두고 리모컨을 눌러보며 신호를 분석해보면 된다.




git 에 https://github.com/chaeplin/lgwhisen/blob/master/decoding.md 이것도 참고 사항이 되긴 하지만...

리모컨 몇번 눌러보면 금방 파악이 되긴 한다.



나의 버전으로 다시 정리를 해보자면 28bit 가

1000 1000 (1) (2) (3) (4) CRC

이렇게 생겨먹었고, CRC 는 ( (1)+(2)+(3)+(4) ) & 0xFF


모드별로 보면

                    (2)

    냉방:          0  =>    0000 x000 xxxx xxxx

    제습:           1  =>     0000 x001 1001 xxxx

    송풍:          2  =>     0000 x010 0011 xxxx

    인공지능:    3  =>     0000 x011 0010 0101

                                               ㄴ 0: 전원을 켤때, 1: 이미 켠 후 조작시


대충 이렇게 생겼다.


(3) 은 주로 온도. 온도에서 15를 뺀 값

 

 (4) 는 바람 세기.

    low:      0

    mid:      2

    hight:    4

    auto:     5

이렇게였는데, 이건 위의 예제들의 분석과 동일하다.



여튼 이제 원하는 28bit 를 만들 수 있으니 이 신호를 보내면 된다.




아두이노를 두개 준비해서 보낸 신호를 확인해봐도 좋다.



먼저 적외선 LED 를 아두이노에 연결는데, 타이머를 사용해서 핀이 정해져있다.

Uno, Nano 등의 보드의 경우 PIN 3 을 사용하면 된다.


연결 후 스케치를 업로드 해보면 sendRaw 함수로는 여전히 작동을 안하는데..

28bit 를 long 으로 만들어서 irsend.sendLG 함수를 이용하면 된다.


다만 내가 쓴 위 적외선 송수신 킷의 경우, 신호가 많이 약해서 상당히 가까이,

약 30cm 거리에서 작동해서 처음에 안되는 줄 알았다..


앞으로 코드가 많이 수정되겠지만, 이 단계까지의 나의 코드는 아래와 같다.



[목차]

1탄 - 아두이노 세팅 및 코딩

2탄 - 벽 스위치에 교체 설치

3탄 - HomeKit 연동


============================


IoT 전등 스위치를 직접 만들어보기 (아두이노, BLE, HomeKit) 1탄 글에 이어서...



설치는 별거 없으니 대충 작성.


배터리를 쓰기 싫고, 중립선이 없으며, 그래도 어떻게 형광등과 전원을 같이 쓸 수 있는 것 같지만 잘 모르겠기에,

아두이노의 전원은 외부에서 끌어오기로 했다.


그래서 먼저 한게 전원선 설치. 역시 이번에도 랜선님이 수고해주셨다.ㅋㅋ



조금이라도 깔끔하게 보이기 위해, 벽에 붙은 스위치를 뜯어내고, 벽지 뒤로 전선을 넘겼다.

이후 전선은 문틀을 따라 밑으로 쭉 내려가서 바로 밑에 있는 콘센트에 휴대폰 충전기로 연결될 예정.


매우 별로지만... 당장 어떻게 해야할지도 모르겠고 더 손보긴 귀찮아서 이정도로 타협을 봤다.

형광등 배선만으로도 가능한 것 같긴 한데... 흠....



그 다음 릴레이만 먼저 넣어서 기존 전선을 연결해준다.

회로에 별다른 안전장치가 전혀 없고, 릴레이 모듈도 제대로 절연이 안되어 있기 때문에

(기판 아래쪽에 핀이 그대로 노출... 감점될 뻔, 아니 잠깐 감전됐다. 꼭 차단기를 내리고 하자...ㅠㅠ)

무서워서 릴레이를 검정테이프로 돌돌 감아버렸다.



그 다음 원래 스위치 부분에 아까 내놓은 두가닥의 전선을 대신 끼워놓고,(사진 없음)

커넥터 점퍼선으로 탈부착이 쉬운 릴레이와 연결 후 빈 공간에 쑤셔넣으면 끝.


     


릴레이 모듈에 LED 가 달려있어서 빛이 번쩍번쩍한다. 스위치까지 덮어버리면 티가 안나서 무시.




  



설치는 끝.


이제 HomeKit 연동만 해주면 된다.

[목차]

1탄 - 아두이노 세팅 및 코딩

2탄 - 벽 스위치에 교체 설치

3탄 - HomeKit 연동


============================




올해 2월달에 했던건데, 미루고 미루다 더 잊기 전에 써본다.

따라서 기억이 안나는 부분, 사진이 없는 부분 등등이 많을 예정....ㅠ



어쩌다 형과 방을 같이 쓰게되면서 방에 2층 침대를 놓게 되었는데, 2층 침대에서 불을 끄기 위해 내려가는게 매우 귀찮았다.

2층 침대가 아니더라도 침대와 전등 스위치가 끝과 끝이라서 귀찮기도 하고....

요즘에 휴대폰으로 전등 스위치를 제어하는 제품들이 많이 있지만, 직접 만들어보기로 했다.



나의 조건은 3가지 정도였고,,

1. 기존 전등 스위치 외관을 그대로 가지고 있으며, 그 스위치 사용도 가능할 것

2. 휴대폰으로 손쉽게 제어가능할 것 - iOS HomeKit 을 사용하였다.

3. 차라리 배선이 조금 지저분해지더라도 배터리를 사용하지 않을 것


필요한 부품들을 사야했다면 안했겠지만, 모든 부품을 다 가지고 있었다... 걍 생각만 하고 사모으기만한 부품들이 많아서..ㅎㅎ



먼저 주요 부품은,

1. 아두이노

2. 형광등 전원을 on/off 해줄 릴레이

3. 어떤 방식이든 통신할 수 있는 모듈


일테고, 난 각각 이렇게 사용했다.

1. 아두이노 나노 호환보드

저렴하며, 코드 업로드가 편하고 나에게 남아돌았음.

2. 제어 5V, 220AVC 1채널 릴레이 모듈

모듈이 아닌건 기판을 만들지 않는 이상 사용하기 매우 까다롭다.

3. HM-10 BLE 모듈

가지고 있는 무선통신 모듈들 중에 가장 만만했음

3-2. 3.3-5V 2CH 로직 레벨 컨버터

HM-10 은 3.3v 로 구동되어서 레벨 컨버터가 필요하다. 컨버터가 이미 붙어있는 모듈은 몇개 없었기 때문에 남아도는 레벨컨버터를 사용하기로 함.



사진은 번호 순서대로... 개별 부품 가격은 마지막에 따로 다 정리할 예정.



1. 릴레이/BLE 모듈 작동 테스트 및 기본 코드 작성


간단하게 버튼으로 릴레이를 토글시키는 스케치를 업로드해서, 작동테스트를 해본다. 잘됨.



HM-10 의 경우 테스트할때는 브레드보드에 장착이 쉬우며 로직레벨컨버터가 달려있는 모듈버전으로 코드를 작성했다.


HM10 의 경우 AT 커맨드로 간단한 세팅을 해줬던 것 같은데.. 기억이 나지 않는다ㅠㅠ

AT 커맨드를 위한 스케치는 아래와 같다. pin 번호는 알아서 세팅해주자.



2. 아두이노 스케치 작성

아두이노에서 해줘야하는 것은 원래 있던 물리적인 스위치와 블루투스로 제어되는 신호를 적당히 처리해서 릴레이를 on/off 해줘야한다.

또한 현재 on/off 상태를 블루투스를 통해 전달해주는 기능정도 까지.


대충 작성한 다음에 업로드하고, 테스트해보자. 릴레이 모듈은 친절하게 LED 가 달려있어서 결과를 확인하기도 용이하다.




3. 회로 구성... 및 납땜

회로를 제대로 그렸다고 할 순 없고, 종이에 대충 그린 후 제작하였다. 다만,, 수개월의 시간이 지나면서 어디갔는지 모르겠음ㅠㅠ


스위치 뒤의 빈공간에 우겨넣어야 했기 때문에, 그리고 귀찮았기 때문에 납땜 자체도 상당히 대충했다.

사진을 올리기 부끄럽지만 결과물은 아래와 같다.



위로 뻗은 두개의 가닥은 원래 전등 스위치와 연결할 선이고, 저항은 아두이노 안에 풀업저항이 있는지 모르고 물리 스위치 풀업 저항용으로 달아둔 것.


만능보드를 적당히 잘라낸 후, 점퍼선을 남발하여 회로를 구성하였다. 랜선도 잘라서 종종 쓰는데 쓸만하다..ㅋㅋ

pcb 기판을 만들지 않고 만능보드를 사용하면서도, 가로세로 크기가 작아야했기 때문에 반쯤은 어쩔 수 없는 선택이였으나.. 납땜할때 매우 짜증났다.




설치 및 HomeKit 연동은 다음 글에...





부록(?). 부품 가격

제작에 사용된 각 부품가격을 대충 계산해보면


품명 

구매방식 

가격 

 아두이노

 ebay | $22.5/10개

 $2.25

 HM-10

 ebay | $24.7/5개

 $5

 3.3-5V 2CH 로직레벨컨버터

 ebay | $5.88/10개

 $0.6

 220AVC Relay

 국내 부품몰 어딘가..

 아마.. 1,500원?

 만능보드, 저항, 전선 등등..

 국내 부품몰 어딘가...

 계산이 필요함?

 합계

 

 약 1만원


개당 가격으로 따지면 저렇지만 다른 부품이든 저항/전선이든 딱 필요한 만큼만 살 수 없으며,

땜납이나 인두 등등을 고려하고, 소요 시간을 고려하면 절대 저렴하진 않다.



인생에 한번쯤 만들어볼만한걸로...

다만 pcb 기판을 만들어서 예쁘게 제작을 해볼 기회가 생긴다면, 해보고 싶은 생각은 계속 든다.

이미 시중에 나온 제품들도 있지만.. 아무래도 그런건 내 맘대로 가지고 놀기가 어려워서.. 대표적으로 HomeKit 이라던가....



+ Recent posts