라즈베리파이 + Docker + Mi Connector + SmartThings

category 서버/리눅스 서버 2019.07.31 22:26

안녕하세요? 일단 IOT 플랫폼으로 SmartThings 가 좋을 것 같아서 샤오미 제품을 연동해보려고 하고 있습니다.


라즈베리파이 --> Docker : Mi Connector --> ST 이런식으로 연동이 됩니다.


Home Assistant / Home Bridge 등의 방법이 있습니다만, 일단 ST를 스터디 중이라 가봅니다. ㅎㅎㅎ



ST를 위해서 지그비 허브(게이트웨이)를 가지고 있는 상태이며 IOT는 크게 와이파이 / 블루투스 / 지그비 방식이 있음으로 ST 지그비 허브만 있으면 아무래도 거의 모든게 가능하지 않을까 합니다.


아직 초짜임으로 차후에 스터디를 더 한 다음이면 글이 더 정제되어 새로 작성될 것입니다.



기본적으로 스마트띵스가 제공하는 API를 사용하려면 스마트띵스 허브(이하 ST허브)를 설치하셔야합니다. 커스텀기기로 등록한 제품은 ST허브에 물리기 때문에 허브가 없으면 작동하지 않습니다.


처음에 API 형식으로 되어 있어서 그냥 될 줄 알았으나, 허브에 커스텀 기기가 연동되는 방식으로 되기 때문에 허브가 없으시면 헛삽질이 됩니다. ㅎㅎ


여간 스터디 결과 IOT로 사용할 수 있는 것이 아래와 같았습니다.


1. 구글 API 이용

구글 HOME 앱으로 설정하여 구글 계정과 연동하는 부분입니다. 실제로는 지원하는 제품들이 가격이 너무 비싸기 때문에 샤오미 MiHome 에 연동하여 다른 API추가를 통해 연동하는 편입니다.


2. SmartThings IDE / API 이용

삼성이 ST를 매입하였고 현재 구버전 앱 및 삼성 최신버전 앱이 존재합니다. 이전에 사용하던 커스텀 기능을 지원하기 위한 WebIDE 기능이 있고 웹코어 기능이 있습니다.


구버전신버전 모두 사용이 가능하여 커스텀을 더 원하신다면 구버전 앱을 사용하시면 됩니다.


다만, 8월 말부터 IDE를 사용가능한 북미계정 가입이 차단되어 앞으로 어떻게 해야할지...


3. Home Assistant 사용

다른 기기를 yml 형태로 쉬운 연동이 가능합니다.


4. Home Bridge 사용


5. 샤오미 MiHome 사용


기본적으로 상기의 부분이 있는데 설명이 틀린것도 있을 것입니다. 다만, 여간 기술 조사를 통해서 느낀점은 ST 의 WebIDE / WebCore 기능을 기반으로 와이파이 / 블루투스 장비를 연동하고 지그비의 경우 ST허브로 연동이 문제 없이 가능함을 느꼈습니다.


와이파이 기반 제품의 경우 라즈베리파이나 나스를 통해서 연동하고 그것을 ST허브에 연동하는 DTH를 ST IDE에 등록하면 문제 없이 연동이 되고, 지그비의 경우에도 문제없이 등록이 되고 등록 후 작동이 되지 않는 문제는 DTH를 추가해주면 문제 없이 가능하다는 것입니다.


DTH의 경우 직접 개발해주신 분들에게 감사의 말씀을 드리며, 기부 문화로 이러한 부분에 감사의 마음을 표현할 수 있습니다.


한편, ST 지원 정식 제품을 사면 되지 않느냐 하긴 하나, 특히 샤오미의 가성비가 좋다 보니 샤오미 기기를 ST에 붙이고 이외 ST와 Google과 연동하여 음성 인식을 담당하는게 제일 좋은 방안이라고 생각합니다.


ST에 붙지 않는 것들은 HomeAssistant 에 연동하여 사용해볼까 하고 있습니다.


다만, API가 공개되어 있지 않는 제품들은 이렇게 연동이 불가능합니다. SONOFF 의 경우에도 커펌을 올려서 ST 등 다른 제품과 연동을 하고 있는 부분이 크고.. 이런 일을 하는 이유는 SONOFF 가 가격이 저렴하기 때문입니다.


한편, 지그비의 경우에는 한 허브에 연결 할 수 있는 최대 장비댓수가 32개 ? 임으로 지그비 리피터가 지원되는 IOT 장비를 사시면 32개 제한을 넘어서실 수 있습니다.


일단 공부한 것은 위의 부분인데 차후에 홈어시스턴트와 홈브릿지를 공부하고 HomeKit 부분까지 가보려고 하고 있습니다. 이후에 한 플랫폼을 정하게 되면 기기 커스텀화를 시도해 보려고 합니다.


생각보다 IOT 장비를 사서 연동하는 것은 쉽지만, 커스텀화 하기 시작하면 굉장히 어려워 지는 것 같습니다. 그러나 수많은 공부와 삽질이 해결해 줄 것이라 믿고... 달려 봅니다.


1. 라즈베리파이 기초 세팅


(친구가 헐값에 준 라즈2 .. 이때 쓰네요..)



운영체제 설치하시고 boot 파티션에 ssh 파일 추가


로그인 하신 다음 작업하시면 됩니다.


raspi-config 으로 설정하실 것들 세팅해주시길 바랍니다.


일단 apt 가 굉장히 느리기 때문에 아래와 같이 source.list 를 수정합니다.


deb http://ftp.kaist.ac.kr/raspbian/raspbian/ buster main contrib non-free rpi


다음으로 docker 를 설치합니다.


root@raspberrypi:~# apt install apt-transport-https ca-certificates software-properties-common -y

root@raspberrypi:~# curl -fsSL get.docker.com -o get-docker.sh && sh get-docker.sh


2. Mi-Connector 설치


https://github.com/fison67/mi_connector


아기나무집님께 감사의 말씀을 드립니다.


# 설정 저장 폴더 생성 및 이미지 다운

root@raspberrypi:~# mkdir /home/miconnector

root@raspberrypi:~# docker pull fison67/mi-connector-arm:latest


(어우야.. SD카드에 운영체제가 있어서 너무 오래 걸립니다.)


아래의 명령으로 컨테이너를 실행합니다.


root@raspberrypi:~# docker run --detach --volume /home/miconnector:/config --net=host --restart=always --name miconnector fison67/mi-connector-arm:latest

ba0eaf17249dd49acbcd0571ecd7ffac01f2223797fca9693a00dbaf5fe4dcb3


다음으로 그래프를 보려면 mysql 이 필요합니다. 아래와 같이 설정합니다.


비밀번호는 신경쓰지 않으셔도 됩니다. 로컬에서만 사용할 것이기 때문입니다. 혹시 밖에서 DB 접속을 해야한다면... 비번을 설정하시길 바랍니다.


root@raspberrypi:~# docker pull jsurf/rpi-mariadb:latest

root@raspberrypi:~# docker run --detach --name mariadb --restart=always -e MYSQL_ROOT_PASSWORD=password -e TZ=Asia/Seoul -p 33006:3306 -d jsurf/rpi-mariadb


실행중인지 확인합니다.


root@raspberrypi:~# docker ps -a

CONTAINER ID        IMAGE                             COMMAND                  CREATED              STATUS              PORTS                     NAMES

3b9c7ff8cb56        jsurf/rpi-mariadb                 "docker-entrypoint.s…"   About a minute ago   Up About a minute   0.0.0.0:33006->3306/tcp   mariadb

ba0eaf17249d        fison67/mi-connector-arm:latest   "/usr/bin/entry.sh /…"   8 minutes ago        Up 8 minutes                                  miconnector


3. Mi-Connector 기초 세팅


https://rpi-ip-addr:30000/



일단 잘 설치가 되었습니다. DB가 연결이 잘 되는지 확인합니다.


설정 --> 설정 --> DB설정에 이동해서 등록을 누릅니다. 


상기에 mysql 비번이.. password로 사전에 맞춰놔서 기본 설정으로도 잘 작동합니다.




로그를 확인합니다. 아래와 같이 DB 연결이 성공하였습니다.



4. 디바이스 세팅


저는 미에어2S 와 샤오미IR블라스터 2개를 가지고 있습니다.


연동을 해보겠습니다.


일단 큰일났습니다. 자동으로 알아채지 못하네요..



음 폭풍 자료 서칭을 해봅니다.


아무래도 수동 등록을 해야겠습니다.


미컨넥터를 수동모드로 바꿉니다.



토큰은 mirobo로 스캔을 돌려야겠네요.


root@raspberrypi:/home/miconnector# apt install npm

root@raspberrypi:/home/miconnector# npm install -g miio


다음으로 스캔돌려 토큰을 찾아봅니다.


root@raspberrypi:/home/miconnector# miio discover

 INFO  Discovering devices. Press Ctrl+C to stop.


Device ID: 77398861

Model info: Unknown

Address: 192.168.0.3

Token: ???

Support: Unknown


Device ID: 106547825

Model info: Unknown

Address: 192.168.0.13

Token: ???

Support: Unknown



상기처럼 토큰이 안나옵니다. ㅠㅠ 음.. 이게 왜 이런지는 모르겠는데 구식의 방법을 사용해야 할지.. 고민이 크게 드네요.


방법 2번째 ... 안드로이드 미홈앱을 구버전을 설치하고.. 


https://android-apk.app/com.xiaomi.smarthome/43397902-mi-home/


로그인 하신 다음에 /sdcard/SmartHome/logs/Plug_Devicemanager/ 경로의 파일을 읽습니다.



하기의 방법으로 수동 등록을 진행합니다.



수동 등록 후 대시보드에 잘 나옵니다.




5. ST 연동하기



















댓글을 달아 주세요