본문 바로가기

지이노/ReView & Using

HomeAssistant로 Xiaomi(샤오미) MiAir2(공기청정기) 자동화






Mi Air2(이하 미에어)를 HomeAssistant(이하 HA)에 페어링 해야 하는 이유는 무엇일까?


그냥 단순히 원격으로 켜고 끄는 것 이라면 MiHome앱을 사용해도 할 수 있다.


물론 더불어 미세먼지에 따라 자동으로 켜고 끄는 것 까지도 할 수 있다.


그렇다면 무엇하러?


플랫폼의 통합이다.


조명을 조작할 때는 A어플, 공기청정기를 조작할 때에는 B어플, 커튼을 조작 할 때에는 C어플...


이러면 안 하게 된다.


아무리 편하다고 해도 이 어플 저 어플 돌아다녀가며 해야 한다면 가족들은 싫어 할 수 있다.


머리는 항상 하나여야 한다.


중앙에서 플랫폼을 하나로 묶고 하나로 묶은 플랫폼이 자동제어까지 한다면 복잡할 일이 없다.


플랫폼이 하나가 되면 집 안의 모든 장비가 연동되어 자동화 할 수 있게 되는 것이다.


매력적.






1. 준비


자동화를 준비 하기 위해 나는 몇 가지가 필요하다고 본다.


첫째, 자동/수동 모드


이거 은근히 중요하다.


항상 자동 모드이면 내가 수동으로 끄고 싶을 때, 조건은 안 되었지만 켜고 싶을 때


조작을 할 수 가 없다.


조작하면 자동으로 동작해야 하는 상태를 실행하겠지...


현장에서 이런 식으로 자동 제어를 구축해주면 다들 싫다고 한다.


그러므로 자동/수동 선택을 할 수 있는 기능이 필요하다.


둘째, 가동/정지 설정 값


만약 공기청정기가 미세 먼지 15에서 돌고 10에서 정지하도록 자동화 해두었다고 치자


상황에 따라 25에서 돌고 11에서 멈춰야 하는 경우도 있고


때에 따라 더 적은 미세 먼지에서도 가동해야 하는 경우가 있을 수 있다.


자동화에서 설정 값은 사용자가 설정 할 수 있게 하는 것이 중요하다고 생각한다.


설정을 바꿀 때 마다 프로그래머 당사자가 수정해 줄 수는 없는 일이니 말이다.


이번 포스트에서는 이 두 가지를 가지고 미에어를 자동제어 할 계획이다.






2. 자동/수동 모드 생성


모드 선택을 하기 위해 버튼이 필요하다.


일반적인 Boolean 버튼으로 off 일 때는 수동, on 일 때는 자동 으로 인식해도 되지만


HA에는 콤보 박스와 같은 input select 라는 기능이 존재한다.


https://www.home-assistant.io/components/input_select/


이 기능은 HA에 가상의 콤보박스를 생성해 주고 그 값을 자동화 등에 사용 할 수 있게 해준다.


이번 포스팅에서는 Manual과 Auto를 선택 할 수 있는 select 센서를 생성 할 것이다.


A configuration.yaml 파일을 연다.


파일의 빈 공간에 아래 구문을 추가한다. (위치는 상관없음)


input_select: !include input_select.yaml


configuration.yaml 파일에 생성해도 되지만 include 를 통해 별도 파일로 생성하는 것이


나중에 늘어날 entity를 위해 정리하기 편리하다.


B \config 경로에 input_select.yaml 파일을 생성하고 해당 파일을 연다.


생성된 파일에 아래의 구문을 추가한다.


  miair2_am:

    name: '미에어2 자동여부 설정'

    options:

      - Manual

      - Auto

    icon: mdi:brightness-auto



miair2_am은 entity 이름이고 


name은 데시보드에 표시될 이름, 일종의 별칭이다.


options에는 콤보박스에 표현하고 싶은 값을 적어 넣을 수 잇다.


                 이번에는 Manual 과 Auto 만 추가한다.


icon은 있어도 그만 없어도 그만이다. 그냥 아이콘을 이쁘게 하고 싶었다.


C 모든 설정이 끝났으므로 HA 를 재 시작한다.


HA가 재 시작 되면 아래와 같은 entity가 생성된다.



콤보박스를 클릭 혹은 터치하면 앞에서 설정한 대로 Manual 과 Auto를 선택 할 수 있다.


사용자의 선택에 따라 이 entity의 status 값은 Manual 혹은 Auto로 변경된다.






3. 설정 값 생성


내가 필요한 설정 값은 두 가지 이다.


가동 설정 값 과 정지 설정 값.


미세 먼지 값이 가동 설정 값 초과일 때 미에어가 가동하고 정지 설정 값 미만 일 때 미에어가 정지하도록 할 계획이다.


그렇다면 이 설정 값을 입력 할 수 있는 entity가 필요하다.


HA에는 input number 라는 기능이 존재하고 이 컴포넌트로 생성된 엔티티는 숫자 값을 입력하는 것이 가능하다.


https://www.home-assistant.io/components/input_number/


이번에는 그 중에서 slider 기능을 사용 할 것이다.


앞서 했던 것 과 거의 비슷하게 진행한다.


A configuration.yaml 파일을 열고 아래 구문을 추가한다.


input_number: !include input_number.yaml


B 동일한 방식으로 \config 경로에 input_number.yaml 파일을 생성한다.


C 생성한 input_number.yaml 파일을 열고 아래 구문을 추가한다.


  miair2_start:

    name: '미에어2 자동가동 설정'

    initial: 25

    min: 5

    max: 40

    step: 1.0

    icon: mdi:play-circle-outline

    unit_of_measurement: '㎍/㎥'


  miair2_stop:

    name: '미에어2 자동정지 설정'

    initial: 11

    min: 5

    max: 40

    step: 1.0

    icon: mdi:pause-circle-outline

    unit_of_measurement: '㎍/㎥'



설명은 앞선 모드 생성과 비슷하다.


miair2_start(stop)은 entity의 명칭이고 name은 별칭이다.


initail은 초기 값을 설정 하는 것이고 min/max는 최소/최대값을 말한다.


step은 슬라이더가 움직일 때 한번에 최소 몇 의 값을 움직일지 설정하며


icon은 앞서 말했 듯이 아이콘을 설정한다.


마지막으로 unit_of measurement는 표시할 단위를 설정한다.


D 모든 설정을 마쳤다면 다시 한번 HA를 재 시작 해준다.(한 번에 다 작성하고 재 시작해도 무방하다)


정상적으로 HA가 재 시작되었다면 아래 처럼 entity가 추가된다.







4. 자동화


준비가 끝났다.


이제 자동화를 진행하도록 한다.


작동 방식은 앞서 설명했으므로 생략, 바로 automations.yaml 파일을 열도록 하자.


- id: miair2_auto_start

  alias: 'Mi Air2 Auto Start'

  trigger:

    platform: template

    value_template: "{{ states.fan.xiaomi_air_purifier.attributes.aqi | float >

states.input_number.miair2_start.state | float -2 }}"

  condition:

    condition: state

    entity_id: input_select.miair2_am

    state: 'Auto'

  action:

    service: fan.turn_on

    entity_id: fan.xiaomi_air_purifier

미에어가 자동으로 시작하도록 하는 구문이다.


위 구문은 [ 미에어의 aqi 값이 가동 설정 값 보다 클 때 모드가 Auto 상태라면 미에어를 켜라. ]라는 구문이 된다.


automation의 구문 설명은 다음에 추가 포스트로 진행하기로 하고 생략한다.


여기서 주의 해야 할 점은 자동으로 가동하는 것에 대한 방식이다.


분명히 앞서서 Auto 모드일 때에만 자동으로 동작을 해야 한다고 설명 했듯이


아무리 설정 값 보다 미세먼지 값이 높더라도 자동상태가 아니면 가동 할 수 없도록 2중으로 조건을 걸어 두었다.


아래는 정지 설정 값에 의한 미에어 자동 정지를 위한 구문이다.

- id: miair2_auto_stop

  alias: 'Mi Air2 Auto Stop'

  trigger:

    platform: template

    value_template: "{{ states.fan.xiaomi_air_purifier.attributes.aqi | float <

states.input_number.miair2_stop.state | float -2 }}"

  condition:

    condition: state

    entity_id: input_select.miair2_am

    state: 'Auto'

  action:

    service: fan.turn_off

    entity_id: fan.xiaomi_air_purifier

가동 구문과 거의 동일하지만 부등호가 반대이고 정지 설정 값을 비교한다.


entity 이름만 변경한다면 다른 곳에도 활용 가능.


테스트 해보니 정상적으로 가동/정지 한다.






5. 그룹화


이렇게 만들었는데 미에어는 여기에 운전모드는 저기에 설정 값은 쩌~쪽에 있으면 불편하다.


이 3개의 entity를 그룹화 하여 가독성을 높여주자.


\config 경로 상에 groups.yaml 이라는 파일이 있다.  이 파일을 오픈한다.


Purifier:

  name: Purifier

  entities:

  - fan.xiaomi_air_purifier

  - input_select.miair2_am

  - input_number.miair2_start

  - input_number.miair2_stop


그룹을 만들어 주는 방식은 이름을 정하고 하나의 그룹으로 만들고 싶은 entity들을 나열하면 된다.


여기에서 나열한 순서가 HA 데시보드의 카드에 표기되는 순서가 되니 원하는 순서대로 정렬한다.


그룹화를 끝내고 다시 HA를 재 시작....해야 하지만


Automation과 Script, Group은 개별 재시작이 가능하다.


HomeAssistant로 로지텍 하모니 허브 (Harmony Hub) 제어하기


관련 내용은 위 링크에 적혀있으므로 참고.



이제 미에어 자동화를 마쳤다.


그룹화로 인해 가독성이 좋아졌다.


각각의 설정을 해두면 이제 미에어는 자동으로 가동/정지를 반복하게 된다.






6. 마치며


사실은 이 포스팅을 작성한 시점에서는 이미 저 자동화로 몇 달을 사용하고 있었다.


이게 밀린 포스팅을 쓰다 보니 새로 한 것 처럼 쓰거나


기존에 있던 것을 삭제하고 작성하려니 더 어려운 듯 하다.


앞으로도 한동안은 이런 밀린 포스트를 작성 할 텐데...


눈 앞이 깜깜하다.