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. 마치며
사실은 이 포스팅을 작성한 시점에서는 이미 저 자동화로 몇 달을 사용하고 있었다.
이게 밀린 포스팅을 쓰다 보니 새로 한 것 처럼 쓰거나
기존에 있던 것을 삭제하고 작성하려니 더 어려운 듯 하다.
앞으로도 한동안은 이런 밀린 포스트를 작성 할 텐데...
눈 앞이 깜깜하다.
'지이노 > ReView & Using' 카테고리의 다른 글
GoogleHome mini 설치하기 (0) | 2018.12.13 |
---|---|
GoogleHome 설치하기 (0) | 2018.12.12 |
HomeAssistant에 Xiaomi(샤오미) Zigbee(지그비) Soket(소켓/플러그) 연결하기 (2) | 2018.12.10 |
HomeAssistant에 Xiaomi(샤오미) MiAir2(공기청정기) 연결하기 (0) | 2018.12.09 |
Xiaomi(샤오미) 장치 Token(토큰) 얻기 - 루팅 안드로이드 (4) | 2018.12.08 |