Xiaomi Vacuum 1s, Homebridge 연동 성공

2019-08-25 20:45:04

샤오미 로봇청소기 1s 모델을 홈브리지에 연동시키기 위해 몇일을 삽질하다가... 그냥 업데이트 라이브러리 나올때 까지 기다리자... 하다가 결국 수정을 해서 정상 동작하게 만들었다.

결론만 보고 싶다면 맨 아래쪽으로 내려서 코드만 참조하면 된다.

기본 코드는 homebridge-xiaomi-roborock-vacuum 모듈를 이용했다.
기본 설치 방법은 링크에 잘 나와 있기 때문에, 별 문제 없이 설치할 수 있었다.

가장 먼저 수행한 것은 homebridge-xiaomi-roborock-vacuum 프로그램에서 index.js를 살펴보는 부분이었다. 오류 자체가 undefined 모델 문제였기 때문에 모델명을 검색해보았는데... 화면을 열자 마자 보였다. 그래서 수정을 수행했다.

기존 코드  
class XiaomiRoborockVacuum {  
  static get models() {  
    return {  
      'rockrobo.vacuum.v1': XiaomiRoborockVacuum.speedmodes_gen1,  
      'roborock.vacuum.c1': XiaomiRoborockVacuum.speedmodes_gen1,  
      'roborock.vacuum.s5': XiaomiRoborockVacuum.speedmodes_gen2,  
      'roborock.vacuum.s6': XiaomiRoborockVacuum.speedmodes_gen3,  
      'undefined': XiaomiRoborockVacuum.speedmodes_gen3,  
    }  
  }  
  .  
  .  
  .  

수정 코드
class XiaomiRoborockVacuum {  
  static get models() {  
    return {  
      'rockrobo.vacuum.v1': XiaomiRoborockVacuum.speedmodes_gen1,  
      'roborock.vacuum.c1': XiaomiRoborockVacuum.speedmodes_gen1,  
      'roborock.vacuum.s5': XiaomiRoborockVacuum.speedmodes_gen2,  
      'roborock.vacuum.s6': XiaomiRoborockVacuum.speedmodes_gen3,  
      'roborock.vacuum.m1s': XiaomiRoborockVacuum.speedmodes_gen3,  
      'undefined': XiaomiRoborockVacuum.speedmodes_gen3,  
    }  
  }  
  .  
  .  
  .  

기존 코드와 수정 코드의 차이를 보면..., roborock.vacuum.m1s 부분을 추가한 것이다. 샤오미 로봇 청소기 s1 모델명을 추가해준것이다.

하지만 여전히 undefined 길래 코드 전체를 훝어 보았더니... 해당 모듈에서 undefined를 넘겨 주는게 아니라 miio에서 해당 모듈이 청소기라고 인지해야 하는데 undefined로 되어있기에 생기는 문제였다. 그래서 miio를 수정하고 miio cli 명령어를 통해서 정상 동작하는 것을 확인했다.

/homebridge # miio inspect [MY_VACUUM_IP] --token [MY_VACUUM_TOKEN]
 INFO  Attempting to inspect [MY_VACUUM_IP]
Device ID: 260917297
Model info: roborock.vacuum.m1s
Address: [MY_VACUUM_IP]
Token: [MY_TOKEN] via stored token
Support: At least basic

Type info: miio:vacuum, miio, vaccuum
Capabilities: adjustable-fan-speed, fan-speed, spot-cleaning, autonomous-cleaning,
              cleaning-state, error-state, charging-state, battery-level, state

Firmware version: 3.4.5_0848
Hardware version: Linux
WiFi: sookigom_2g (B4:A9:4F:0F:D6:2E) RSSI: -42
Remote access (Mi Home App): Maybe
Properties:
  - state: charging
  - batteryLevel: 100
  - cleanTime: 1
  - cleanArea: 0
  - fanSpeed: 101
  - in_cleaning: 0
  - mainBrushWorkTime: 7713
  - sideBrushWorkTime: 7713

만세.... 만세다.... 성공적이다. 현재 충전중이고 베터리 레벨 등의 모든 정보가 출력되는 것을 확인하고 홈브리지를 재시동 하였다. 이야 되나...? 안된다.

안되는 이유는 심플했다. 참조하는 miio 라이브러리가 달랐다.

해당 문제를 해결하기 위해 나는 아래와 같은 파일을 수정했다. 해당 파일은 시놀로지 도커로 홈브리지를 설치하고, -g 옵션, 글로벌로 설치했을 때 기준이다.

/usr/local/lib/node_modules/homebridge-xiaomi-roborock-vacuum/index.js

19
20  class XiaomiRoborockVacuum {
21    static get models() {
22      return {
23        'rockrobo.vacuum.v1': XiaomiRoborockVacuum.speedmodes_gen1,
24        'roborock.vacuum.c1': XiaomiRoborockVacuum.speedmodes_gen1,
25        'roborock.vacuum.s5': XiaomiRoborockVacuum.speedmodes_gen2,
26        'roborock.vacuum.s6': XiaomiRoborockVacuum.speedmodes_gen3,
27        'roborock.vacuum.m1s': XiaomiRoborockVacuum.speedmodes_gen3,   // <- add here
28        'undefined': XiaomiRoborockVacuum.speedmodes_gen3,
29      }
30    }


/usr/local/lib/node_modules/homebridge-xiaomi-roborock-vacuum/node_modules/miio/lib/model.js
41          'rockrobo.vacuum.v1': Vacuum,
42          'roborock.vacuum.s5': Vacuum,
43          'roborock.vacuum.c1': Vacuum,
44          'roborock.vacuum.s6': Vacuum,
45          'roborock.vacuum.t6': Vacuum,
46          'roborock.vacuum.m1s': Vacuum,

위의 두 파일, index.js와 model.js에 각각 roborock.vacuum.m1s 모델을 추가하니 정상으로 작동하는 것을 확인했다.

조금 더 두고 봐야 할 것 같지만... 현재로서는 아주 잘 동작하고 있따.

tag :  코드수정모델설치문제miioundefined해당s청소기파일roborock확인js모듈정상추가vacuum동작브리지부분연동로봇성공수행index참조때문샤오미기존기본m라이브러리로지기준정보화면차이시동오류xiaomi글로벌자체업데이트작동인지몇일방법레벨프로그램만세전체삽질model아래쪽옵션심플검색g현재명령어아래homebridgecli링크해결충전결론출력터리이용도커이유결국