안녕하세요?
이제 자동화를 해보기 위해서 노력을 하고 있습니다.
일단 자동화를 생각해본 것이 아래와 같습니다.
1. 자동화
1) 온수 자동화
샤오미 조도 센서를 통해 화장실에 불이 감지되면 보일러 외출모드 설정
실제로, 화장실 등 스위치를 직비로 했다면, 쉽게 자동화가 가능하겠지만, 제 집의 스위치가 특이하게 생겨서.. 그리고 제 집이 아니라서 뜯지를 않았습니다. 그래서 조도 센서를 통해서 자동화 하려고 마음 먹었네요.
2) 재실 센서
재실을 감지하기 위해서 nmap 을 쓰거나 위치 기반으로 하거나 혹은 블루투스로 가능할 것 같았습니다.
그런데 nmap 으로 하기에는 조금 배터리에 문제가 있어서... 그래서 아무래도 블루투스를 통해서 재실을 감지하는게 좋을 것 같았습니다.
3) 에어컨 자동화
특정 습도, 특정 온도에 대해서 온도 조절이 되고, 실제로 켜고 끄는 부분은 27도로 고정으로 설정해 두었습니다.
이번에는 디바이스 트래커를 통해 불을 켜고 끄는 등의 자동화를 만들어 보겠습니다.
2. 위치 트래커
위치로 트래킹 하면 아래와 같이 나옵니다.
실제로 지금 집에 있음에도 불구하고 위치가 튀어서 상기처럼 외출로 설정이 되어 버렸습니다.
그래서 아무래도.. 와이파이 연결을 사용해 보기로 합니다.
3. nmap 트래커
일단 configuration.yaml 에 아래와 같이 등록합니다.
물론 아이피를 공유기에서 고정으로 해주셔야합니다.
124 device_tracker:
125 - platform: nmap_tracker
126 hosts:
127 - 192.168.0.62
128 home_interval: 1
그러면, HASS 에서 아래와 같이 확인이 됩니다.
그럼 이를 기반으로 자동화를 하나 생성해봅니다.
4. 자동화 생성
자동화는 트리커 / 상태 / 액션 3가지로 나뉩니다.
생각을 해보면, 트리거만 있으면 될 것 같은데 왜 상태까지 있어야 하는지에 대한 부분이 있었는데요. 상태 체크 없이 그냥 트리거에만 의존하게 되면 오동작을 할 가능성이 높아지기 때문인것 같습니다.
그리고 실제로 설정할 때, 컨디션에 값을 넣지 않아도 문제가 없지만, 저는 아래와 같이 디바이스 트래커의 상태를 한번 더 체크하도록 설정하였습니다.
참고로, or and 설정이 가능하고, 관련 문서는 https://www.home-assistant.io/docs/automation/examples/ 를 참고하시길 바랍니다.
켜기 끄기의 경우 대부분 서비스 호출을 하게 되며, HASS 에서는 각기 스위치 / 라이트 / FAN / 센서 로 그루핑을 하고 있기 때문에 하기와 같이 호출을 해주셔야합니다.
service: switch.turn_off
entity_id: switch.airconditioner
스위치 오프에 오프할 대상 기기를 엔티티에 적어주셔야 합니다.
# 집에 없을 때
- id: '1590309009649'
alias: away_home
description: ''
trigger: # 트리거 : 와이파이 트래커가 home --> not_home 으로 바뀔때
- entity_id: device_tracker.8e_0b_14
for: 00:00:30 # 감지되고 30초 뒤에 액션이 시작됩니다.
from: home
platform: state
to: not_home
condition: # 상태 : 와이파이 트래커가 not_home 일때
- condition: state
entity_id: device_tracker.8e_0b_14
state: not_home
action: # 하기 액션들을 실행
- data: {}
entity_id: switch.airconditioner
service: switch.turn_off
- data: {}
entity_id: switch.boiler_bath_onoff
service: switch.turn_off
- data: {}
entity_id: switch.ilgwalsodeung
service: switch.turn_on
- data: {}
entity_id: switch.elribeiteo
service: switch.turn_on
- data: {}
entity_id: fan.seonpunggi
service: fan.turn_off
- data: {}
entity_id: fan.xiaomi_air_purifier_2s
service: fan.turn_off
- data: {}
entity_id: switch.dawondns_b540_w_
service: switch.turn_off
- alias: at_home
description: ''
trigger:
- entity_id: device_tracker.8e_0b_
for: 00:00:1
from: not_home
platform: state
to: home
condition:
- condition: state
entity_id: device_tracker.8e_0b_
state: home
action:
- data: {}
entity_id: switch.airconditioner
service: switch.turn_on
- data: {}
entity_id: switch.boiler_bath_onoff
service: switch.turn_off
- data: {}
entity_id: switch.ilgwalsodeung
service: switch.turn_off
- data: {}
entity_id: switch.elribeiteo
service: switch.turn_off
- data: {}
entity_id: fan.seonpunggi
service: fan.turn_on
- data: {}
entity_id: fan.xiaomi_air_purifier_2s
service: fan.turn_on
그러면 와이파이 연결이 되면 거진 5초내에 자동화가 실행되고, 와이파이 연결이 끊기면 3분 정도 내에 자동화가 실행됩니다.
서비스들을 한곳에 묶어서 아래와 같이 작성도 가능합니다.
- id: '1590309009649'
alias: away_home
description: ''
trigger:
- entity_id: device_tracker.8e_0b_
for: 00:00:30
from: home
platform: state
to: not_home
condition:
- condition: state
entity_id: device_tracker.8e_0b_
state: not_home
action:
- service: switch.turn_off
data:
entity_id:
- switch.airconditioner
- switch.boiler_bath_onoff
- switch.dawondns_b540_w_
- service: switch.turn_on
data:
entity_id:
- switch.ilgwalsodeung
- service: fan.turn_off
data:
entity_id:
- fan.seonpunggi
- fan.xiaomi_air_purifier_2s
- alias: at_home
description: ''
trigger:
- entity_id: device_tracker.8e_0b_
for: 00:00:1
from: not_home
platform: state
to: home
condition:
- condition: state
entity_id: device_tracker.8e_0b_
state: home
action:
- service: switch.turn_on
data:
entity_id:
- switch.airconditioner
- switch.boiler_bath_onoff
- service: switch.turn_off
data:
entity_id:
- switch.ilgwalsodeung
- service: fan.turn_on
data:
entity_id:
- fan.seonpunggi
- fan.xiaomi_air_purifier_2s
5. 블루투스 자동화 설정
아무래도 와이파이에 ACK 를 보내기 때문에 핸드폰이 깨어나는 단점이 있습니다.
그리고 와이파이를 꺼두는 경우도 있어서, 항상 샤오미 GTR 과 연동중인 블루투스를 이용해서 해보기로 했습니다.
물론, 휴대폰이 아니더라도, 시계로만으로도 재실을 판단할 수 있습니다.
일단 armbian 에서 블루투스가 동작되는지 아래와 같이 테스트를 해봤습니다.
root@aml:/opt/hass/config# bluetoothctl
Agent registered
[bluetooth]# scan on
Discovery started
[CHG] Controller AA:AA:AA:AA:AA:AA Discovering: yes
[NEW] Device C8:0F:10:C3:34:FA MI_SCALE
[NEW] Device A4:50:46:0C:37:F0 A4-50-46-0C-37-F0
[CHG] Device A4:50:46:0C:37:F0 Name: Pocophone F1
[CHG] Device A4:50:46:0C:37:F0 Alias: Pocophone F1
[CHG] Device A4:50:46:0C:37:F0 UUIDs: 00001105-0000-1000-8000-00805f9b34fb
[CHG] Device A4:50:46:0C:37:F0 UUIDs: 0000110a-0000-1000-8000-00805f9b34fb
[CHG] Device A4:50:46:0C:37:F0 UUIDs: 0000110c-0000-1000-8000-00805f9b34fb
[CHG] Device A4:50:46:0C:37:F0 UUIDs: 0000110e-0000-1000-8000-00805f9b34fb
[CHG] Device A4:50:46:0C:37:F0 UUIDs: 00001112-0000-1000-8000-00805f9b34fb
[CHG] Device A4:50:46:0C:37:F0 UUIDs: 00001115-0000-1000-8000-00805f9b34fb
[CHG] Device A4:50:46:0C:37:F0 UUIDs: 00001116-0000-1000-8000-00805f9b34fb
[CHG] Device A4:50:46:0C:37:F0 UUIDs: 0000111f-0000-1000-8000-00805f9b34fb
[CHG] Device A4:50:46:0C:37:F0 UUIDs: 0000112d-0000-1000-8000-00805f9b34fb
[CHG] Device A4:50:46:0C:37:F0 UUIDs: 0000112f-0000-1000-8000-00805f9b34fb
[CHG] Device A4:50:46:0C:37:F0 UUIDs: 00001200-0000-1000-8000-00805f9b34fb
[CHG] Device A4:50:46:0C:37:F0 UUIDs: 00001132-0000-1000-8000-00805f9b34fb
[CHG] Device A4:50:46:0C:37:F0 UUIDs: 00000000-0000-0000-0000-000000000000
[CHG] Device C8:0F:10:C3:34:FA RSSI: -72
[CHG] Device C8:0F:10:C3:34:FA RSSI: -64
[bluetooth]#
오 잘 보입니다.
이 부분을 HA에 등록해 보겠습니다.
일단 디바이스 넘버를 확인해보면 1로 나오네요.
root@aml:/dev# hcitool dev
Devices:
hci1 AA:AA:AA:AA:AA:AA
그리고 configuration.yaml 에 등록합니다.
device_tracker:
- platform: bluetooth_tracker
device_id: 1
그런데 결과적으로 하기의 에러 로그가 뜨면서 작동이 안되었습니다. 실제로 docker 내부에서도 장치가 감지되고 있기 때문에 별 문제가 없을 것이라고 생각했는데요.
docker 컨테이너라서 device 를 패쓰쓰루 해줘야 작동이 될것으로 보입니다.
2020-05-24 21:30:51 ERROR (MainThread) [homeassistant.components.bluetooth_tracker.device_tracker] Error looking up Bluetooth device
Traceback (most recent call last):
File "/usr/local/lib/python3.7/site-packages/bluetooth/bluez.py", line 31, in discover_devices
lookup_class=lookup_class, device_id=device_id)
_bluetooth.error: (4, 'Interrupted system call')
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/usr/src/homeassistant/homeassistant/components/bluetooth_tracker/device_tracker.py", line 140, in perform_bluetooth_update
devices = await hass.async_add_executor_job(discover_devices, device_id)
File "/usr/local/lib/python3.7/concurrent/futures/thread.py", line 57, in run
result = self.fn(*self.args, **self.kwargs)
File "/usr/src/homeassistant/homeassistant/components/bluetooth_tracker/device_tracker.py", line 62, in discover_devices
device_id=device_id,
File "/usr/local/lib/python3.7/site-packages/bluetooth/bluez.py", line 34, in discover_devices
raise BluetoothError ("error communicating with local "
일단은, 상기 에러를 해결하려면 컨테이너를 새로 생성하고 오래 기다려야 해서, 다음에 한번 시도해 보아야겠습니다.
간단하게 여기서 마치겠습니다.
감사합니다.
'IoT' 카테고리의 다른 글
HomeAssistant 조도 센서를 활용한 보일러 온수 ON/OFF (0) | 2020.06.04 |
---|---|
HomeAssistant 초보자 설정 (0) | 2020.05.27 |
오피스텔 IOT 구축기 (백업용) (1) | 2020.05.10 |
[에어컨 자동화 준비]하트 모양 Smart IR Hub (HA / Tuya Tap to Run 연동) (0) | 2020.05.04 |
HomeAssistant Core / 코콤 월패드 샤오미 공기청정기 연동하기 / Elfin EW11 / RS485 (0) | 2020.04.18 |
댓글