이전에 글로 샤오미 로봇청소기에 관한 홈킷 등록방법을 다루긴 했었지만 HA에 등록하는 방법은 생략을 했었습니다.
오늘은 샤오미 1세대 로봇청소기를 Home Assistant(HA)에 등록해 보도록 하겠습니다.

HA에 등록을 위해서는 샤오기 기기의 토큰(Token)을 알아야 합니다.
해당 내용은 HA 공식 홈페이지의 자료를 참고하였습니다.
여러가지 방법들이 존재하는데 제가 사용할 방법은 아이폰을 이용한 방법입니다.
제가 안드로이드 스마트폰이 없어서 안드로이드 폰을 이용한 방법을 사용할 수가 없어요.
그리고 휴대폰(아이폰이든 안드로이드든)을 사용하지 않고 라즈베리파이에서 바로 찾아내는 방법도 존재합니다만 생략했습니다.
이전 글에서 설명했다시피 최대한 라즈베리파이에는 접속을 안하려고 노력 중입니다. (콘솔화면 어려워요!)
그리고 라즈베리파이에서 바로 찾는 방법은 실패하는 경우도 있더라고요. (전 실패했어요. 못찾더라고요.)

이제 본격적으로 시작을 해봅시다.


아이폰(iOS)과 맥(혹은 윈도우)를 이용한 방법

시작하기 앞서 저는 컴퓨터로 맥을 이용하기 때문에 맥 화면을 캡쳐해서 보여드리지만, 윈도우용 프로그램도 똑같기 때문에 
문제가 생기지는 않을겁니다. 


1. 우선은 아이폰에 샤오미 앱(Mi Home)을 설치하고 가이드에 따라서 설정을 완료합니다.

(아마 이 글을 보는 분들은 이미 설정을 완료했을겁니다.)

2. 아이튠즈를 이용하여 컴퓨터에 아이폰 백업을 합니다.

아이튠즈에서 폰 설정에 들어간다음 수동으로 백업을 하면 됩니다. 
(굳이 앞에 자동뱁업 부분을 건드릴 필요없이 오른쪽 부분의 ‘지금 백업’을 누르면 됩니다. )

<iTunes 휴대폰 설정 화면 - 백업>


3. iBackup Viewer 를 다운 받아서 설치합니다.


4. iBackup Viewer 를 실행하고 백업 파일을 불러옵니다.

4-1. 맥
맥에서는 파일 접근권한 문제로 백업파일을 불러올 수가 없습니다.
시스템 환경설정 - 보안 및 개인 정보 보호 - 개인 정보 보호 탭으로 이동하 여
전체 디스크 접근 권한 에 iBackup Viewer 앱을 등록합니다.
그리고 iBackup Viewer 를 실행하면 백업파일을 자동으로 불러오게 됩니다.
4-2. 윈도우
윈도우는 별다른 문제없이 자동으로 백업파일을 불러올겁니다. 
<iBackup Viewer 실행화면 초기>

폰의 배경화면으로 백업이 되어 있군요. (엄한 사진은 지웠습니다.)
배경화면을 클릭하면 백업파일을 불러옵니다.
<iBackup Viewer - 백업파일을 불러온 화면>

5. 맨 마지막 아이콘인 Raw Data를 선택하고 파일을 선택합니다.

아래 캡쳐의 번호에 맞춰 123456789_mihome.sqlite 파일을 저장합니다. 
<iBackup Viewer - Raw Data 화면>

①-②-③ 순으로 파일을 찾고 ④의 Export를 클릭하여 Selected 를 클릭하면 저장이 됩니다.
(파일앞에 숫자는 계정마다 다르니 숫자 뒤에 mihome.sqlite 이 붙었는지 확인하세요.)


6. DB Browser for SQLite 를 다운받아 설치하고 따라하세요.


<DB Browser for SQLite 실행 화면>

①을 누르고 iBackup Viewer에서 저장한 파일을 선택합니다.
②를 누르고 ③ 에 다음을 적습니다.
SELECT ZTOKEN FROM ZDEVICE WHERE ZMODEL LIKE "%vacuum%"
④를 누르면 ⑤의 목록이 뜹니다. 그 내용을 마우스 오른쪽을 눌러서 복사합니다.

7. 다음 사이트에서 디크립션을 해줍니다.



①에 위에서 복사한 내용을 붙혀넣습니다.
②(Hex)를 선택합니다.
③에 0을 32개 넣어줍니다.
④(Decrypt)를 누릅니다.
⑤에 나오는 글자를 차례대로 적습니다. 두줄로 나오는데요. 각각 16개씩 총 32개입니다.

그걸 주욱 붙힌게 토큰입니다. (우리가 HA 설정에 적을 내용입니다.)

이렇게 해서 토큰을 얻게 되었습니다. 이제 이 토큰으로 HA에 등록을 하면 됩니다.


HA에 로봇청소기 등록하기

Filezilla와 Atom을 이용하여 configuration.yaml 설정 파일을 불러옵니다.

적당한 위치에 다음을 추가합니다.
#
vacuum:
- platform: xiaomi_miio
host: rockrobo
token: []
들여쓰기는 꼭 신경써서 적도록 합니다.
host 에는 ip를 적게 되어 있는데 보통 로봇청소기에 인터넷을 등록될 때 rockrobo라는 이름으로 공유기에 등록을 하기 때문에 
아이피가 아니라 rockrobo 라고 적어도 됩니다. 
토큰에는 위에서 얻은 32글자를 적어줍니다.

그리고 재시작을 하면 로봇청소기가 등록이 됩니다. 
끝!

토큰얻기만 어렵지 등록은 참 쉽네요. ㅎㅎ


이전에 샤오미 로봇청소기 1세대에 대한 홈킷 등록에 대해서 다루었는데요.


오늘은 청소기에 문제가 있을 때 알려주는 작업을 해보려고 합니다.


우선 사용할 것은 바이너리 센서(binary sensor)입니다. 

바이너리 센서는 간단하게 온오프 만 알려주는 센서인데요.

모션, 재실, 빛, 가스 등 있다,없다를 알려주는 센서 컴포넌트입니다.

자세한 설명은 HA 홈페이지를 참고하세요.


우리가 사용할 건 바이너리 센서의 problem 클래스 입니다.

사실 problem이 아니고 그냥 일반 다른 센서로 선택해도 큰 상관은 없을거 같아요.

홈킷이 바이너리 센서를 딱히 세세히 분류를 안하는거 같더라고요.

그냥 단순히 켜지면 "작동됨"이라는 글이 올라 올 뿐입니다.

물론 아직 많이 실험을 해보지 않아서 다를지도 모르겠지만 우선 재실(presence) 클래스하고는 별 차이가 없더라고요.


configuration.yaml 파일에 다음을 추가합니다.

- platform: template
sensors:
vacuum_problem:
device_class: problem
friendly_name: " "
value_template: "{{ not (is_state('vacuum.xiaomi_vacuum_cleaner','docked') or is_state('vacuum.xiaomi_vacuum_cleaner','cleaning') or is_state('vacuum.xiaomi_vacuum_cleaner','returning'))}}"

value_template 부분은 한줄이에요.


대략적인 설명은 docked, cleaning 또는 returning 상태가 아니면 센서를 켜라는 명령입니다.

docked는 독에서 충전 혹은 대기중인 상태, cleaning은 청소 중, returning은 독으로 돌아가는 상태죠.


이렇게 해두면 저 3가지 상태가 아닐때 센서가 켜지게 됩니다. 

그런데 켜지는거 까지는 좋은데 푸시 알림을 안해주더라고요.

직접 켜야되는 모양입니다.

홈 앱을 실행해 봐요. 그리고 왼쪽 위에 집모양 아이콘을 클릭해서 홈 설정으로 들어가세요.

     


알림 쪽에 센서가 있죠? 그걸 클릭하면 우리가 만들어둔 센서가 있을겁니다.

그걸 키면 센서가 켜질때 푸시로 알려주게 됩니다.


나름 괜찮죠?


사실 문제알림은 필요가 없을 수도 있어요. 왜냐면 미홈앱이 푸시를 해주니까요.

하지만 저희집 상황처럼 저 혼자만 미홈앱을 쓰고 와이파이님은 홈앱으로 컨트롤을 한다면 문제가 생긴걸 저밖에 알 수가 없으니까 

그게 좀 불편하지 않을까 싶어 만들어 봤습니다.



이전에 Home Assistant의 기기를 Homekit에 등록하는 방법을 해봤었는데요.



그런데 말입니다.

제가 샤오미 1세대 로봇청소기를 쓰고 있는데요. 얘는 등록이 안되어 있어요... 

https://www.home-assistant.io/components/homekit/ 에 보면 이유가 나와있는데요.


지원되는 컴포넌트에 vacuum이 없어요.


그래서 좀 다른 접근이 필요해요. 


우리가 할 작업은 가상 스위치를 이용하는 겁니다. 

가상의 스위치를 만들고 그 스위치를 켜면 로봇청소기를 작동시키고, 끄면 집으로 돌아가게 설정을 하는거죠.

스위치에 다음을 추가합니다.

- platform: template
switches:
mivacuum:
friendly_name: ""
value_template: "{{ is_state('vacuum.xiaomi_vacuum_cleaner','cleaning') }}"
turn_on:
service: vacuum.start
data:
entity_id: vacuum.xiaomi_vacuum_cleaner
turn_off:
service: vacuum.return_to_base
data:
entity_id: vacuum.xiaomi_vacuum_cleaner

잠깐 설명하자면 friendly_name 은 사용하고자 할 이름입니다.

value_template은 스위치의 상태를 나타내는데 True면 켜짐이고 False 면 꺼짐이에요.

is_state('vacuum.xiaomi_vacuum_cleaner','cleaning') 는 로봇청소기의 상태가 cleaning 즉, 청소중 인지를 물어보는 명령이에요. 청소 중이면 True 가 되어 켜짐 상태가 되고, 아니면 False 가 되어 꺼짐 상태가 되죠.

밑에 있는 turn_on 은 켜있을 때 할 작업, turn_off 는 꺼져있을 때 작업이에요.


이렇게 저장하고 HA를 재시작하면..


짜잔!! 로봇청소기가 등록이 되었어요. 저걸 키면 로봇청소기가 작동을 하게 됩니다. 


참 쉽죠? 이제 시리에게 "로봇청소기 켜" 로 명령을 할 수가 있어요!!



물론 여기에 좀더 다양한 옵션들을 넣을 수도 있을거예요. 하지만 로봇청소기에 기능은 켜고 끄고말고는 거의 안써서 저렇게만 등록해도 사용하는데 전혀 문제가 없을거예요. 


아직은 연구 중이라서 켜고 끄고만 해뒀는데 기기에 문제가 생겼을때의 처리도 한번 생각을 해봐야 될거 같기도 하더라고요.

그건 차후에 알아보고 수정해 두겠습니다.



요즘 들어 애플 홈킷(Apple HomeKit)에 빠져들어 있습니다.

다만 아직 기기를 지를 시기는 아니라서 지르지는 않고 

레트로파이를 설치해서 오락기로 쓰던 라즈베리파이를 삭제하고 하스비안(Hassbian)을 설치했습니다.


제목의 작업을 하기 위해서는 Home Assistant(이하 HA)가 설치된 운영체제가 필요합니다.

나스에 docker를 이용하여 설치하거나, 저처럼 라즈베리파이에 Hassbian 같은 놈들을 설치해서 쓰더라고요.


제가 쓰게 될 내용은 Hassbian 0.84.1이 기준이 될 겁니다. 

파일의 경로가 다를 수도 있으니 확인을 한 후 수정하기 바랍니다.


Hassbian의 설치는 이전 작성글을 확인해보세요.



HA의 기기들은 아주 쉽게 홈킷으로 등록이 가능한데요.


우선 서버에 파일을 하나 설치해줘야되요.

$ sudo apt install libavahi-compat-libdnssd-dev


그리고 configuration.yaml 파일에 homekit: 만 추가해주면 됩니다.

이렇게요.


간단하죠?


그리고 HA를 재시작하고 홈킷에 등록을 해봅시다.

홈 앱을 실행해봅시다.

   

액세서리 추가를 누르고 "코드가 없거나 스캔할 수 없습니까?" 이거를 누르고 오른쪽 그림에 뜨는 Home Assistant Bridge를 선택합니다.


그럼 8자리 번호를 물어보는데요. HA 설정 페이지에 가면 번호가 떠 있을겁니다. 이렇게요.

입력을 해주면 등록이 완료되고 HA에 등록된 기기들을 홈킷에 등록할 수 있죠.



+ Recent posts