이전 글 모음
https://blog.djjproject.com/604 - ST 허브 개봉
https://blog.djjproject.com/607 - HA 설치
https://blog.djjproject.com/608 - mi connector 설치
https://blog.djjproject.com/609 - 홈브릿지 설치
https://blog.djjproject.com/614 - 구글 홈 컨넥터 설치
https://blog.djjproject.com/615 - dw connector 설치
https://blog.djjproject.com/617 - 중간 정리
https://blog.djjproject.com/618 - Beelink GT-Mini A armbian 설치
https://blog.djjproject.com/625 - 구글 홈 미니
https://blog.djjproject.com/626 - 도커 이미지 뽑기
https://blog.djjproject.com/643 - SSL 인증서 발급 (Let's Encrypt)
https://blog.djjproject.com/646 - HA 코콤 월패드 연동
https://github.com/djjproject/hass - HA 설정 저장소
https://blog.djjproject.com/648 - SMART IR HUB (하트모양) 연동
https://blog.djjproject.com/650 - 오피스텔 IOT 구축기
https://blog.djjproject.com/653 - Armbian 실전 옮기기!
https://blog.djjproject.com/654 - HA 디바이스 트래커 설정
https://blog.djjproject.com/655 - HA 초보자 설정 (현재글)
안녕하세요? 백업용으로 작성합니다.
1. 설정파일 구조
configuration.yaml 이 기본 파일입니다.
이 파일에서 include 같은 기능을 할 수 있는데요.
23 group: !include groups.yaml
24 automation: !include automations.yaml
25 script: !include scripts.yaml
26 switch: !include switchs.yaml
27 sensor: !include sensors.yaml
이런식으로 가능합니다.
그렇다면, include 된 파일에 group: 이걸 적으면 안됩니다. 바로 아래 내용이 나와야합니다.
2. scene 으로 template 스위치 만들기
플랫폼으로 template 지정, 그리고 스위치에 airconditioner 이름 지정
상태값으로는 아카라 도어 센서의 값을 사용합니다.
상태값으로 is_state / is_state_attr 등이 사용가능하고 이걸 어떻게 사용가능한지 보려면, 개발자 도구에서 확인이 가능합니다.
181 # airconditioner tuya ir / xiaomi door seneor
182 - platform: template
183 switches:
184 airconditioner:
185 value_template: "{{ is_state('sensor.st_xiaomi_aqara_door_sensor_10e e','open') }}"
186 turn_on:
187 service: scene.turn_on
188 data:
189 entity_id: scene.bpgyeqe # 27
190 turn_off:
191 service: scene.turn_on
192 data:
193 entity_id: scene.uqlkc
194 icon_template: >-
195 {% if is_state('st_xiaomi_aqara_door_sensor_10ee', 'open') %}
196 mdi:air-conditioner-on
197 {% else %}
198 mdi:air-conditioner
199 {% endif %}
3. 스크립트를 스위치 onoff 로 사용
다원 플러그의 경우, 한번에 켜지지 않는 경우가 많습니다.
그럼, template 스위치를 만들어서 스크립트를 거기에 등록합니다.
200 # computer
201 - platform: template
202 switches:
203 computer:
204 value_template: "{{ is_state('switch.dawondns_b540_w_',' on') }}"
205 turn_off:
206 service: shell_command.hibernate_desktop
207 turn_on:
208 service: script.computer_turn_on
물론 밸류값을 state 로 읽어오고 turn onoff 에는 shell_command / script 등을 사용합니다.
스위치를 바로 꺼버리면, 문제가 있기 때문에 hibernate 시그널을 보내고, 딜레이를 주거나, 다원 스위치의 대기전력차단 기능을 사용해서 구현합니다.
스크립트는 아래와 같습니다.
시퀀스 설정으로 되어 있습니다. 한번 켜기 서비스를 하고 2초 대기후 한번 더 켜줍니다.
1 computer_turn_on:
2 sequence:
3 - service: switch.turn_on
4 data:
5 entity_id: switch.dawondns_b540_w_
6 - delay: '00:00:02'
7 - service: switch.turn_on
8 data:
9 entity_id: switch.dawondns_b540_w_
한편, 컴퓨터 절전의 경우에는 아래와 같이 구현합니다.
상기 프로그램을 통해서 웹서버를 열고 curl 로 요청을 보내는 방법으로 사용합니다.
하기 주소들을 shell command 로 등록합니다.
119 shell_command:
120 shutdown_desktop: 'curl -k http://192.168.0.8:8000/?action=System.Shutdown '
121 restart_desktop: 'curl -k http://192.168.0.8:8000/?action=System.Restart'
122 hibernate_desktop: 'curl -k http://192.168.0.8:8000/?action=System.Hibernate'
4. 자동화 중 상태값을 기억해야할 때
인풋 불린을 사용합니다.
자동화 중, 재실 센서를 와이파이 블루투스로 할때,
자동화 트리거를 와이파이 / 블루투스 상태가 바뀔 때로 해 두면 분명 둘 중에 하나가 바뀔 때 재실 상태가 변해버립니다.
하기 자동화를 참고하면, 실제로 컨디션 체크는 필요없습니다. 아무리 해도 작동이 되지 않길래 어쩔 수 없이 ㅎㅎ 문법에 다 맞춘것 뿐입니다. 찾고 나니 결국에 문제는
'on' 에서 작은 따옴표를 써주지 않아서 생기는 문제였습니다.
일단 인풋 불린은 아래와 같이 만듭니다.
141 input_boolean:
142 home_state:
143 icon: mdi:home
144 initial: on
그러면 HA 에 아래와 같이 올라올 것입니다.
직접적으로 상기 인풋 불린을 조정하고, 그 조정에 대해서 반응하는 자동화를 하면 됩니다.
처음에는 이걸 몰라서 쉘 스크립트로 어떤 파일에 값을 써두고 읽어가는 형식으로 구현하려다 좋은 방법을 찾게 되었습니다.
일단 그럼 상기 home_state 를 바꾸는 자동화를 구현해 봅니다. 재차 말씀드리지만, condition 은 필요없습니다.
그러나 2가지 기기를 확인하기 때문에 둘 중에 하나가 에러가 나서 상태가 바뀌는 경우, 외출 처리 방지를 위해서 사용해야합니다.
106 - alias: away_home_state # 외출일때
107 initial_state: on # 자동으로 자동화를 켜둠
108 trigger: # 블루투스와 와이파이가 상태가 home --> not_home 으로 바뀔때
109 - entity_id: device_tracker.pocophone_f1
110 for: 00:00:1
111 from: home
112 platform: state
113 to: not_home
114 - entity_id: device_tracker.8e_
115 for: 00:00:1
116 from: home
117 platform: state
118 to: not_home
119 condition: # 둘다 재실이 아닐때
120 condition: and
121 conditions:
122 - condition: state
123 entity_id: device_tracker.pocophone_f1
124 state: not_home
125 - condition: state
126 entity_id: device_tracker.8e_
127 state: not_home
128 action: # 불린 값을 off 로 바꿈
129 - service: input_boolean.turn_off
130 data:
131 entity_id:
132 - input_boolean.home_state
그러면 상기 불린 값을 트리거로 하여 실제적으로 켜고 끄는 자동화를 하나 더 생성합니다.
160 - alias: away home state turn off
161 trigger:
162 - entity_id: input_boolean.home_state
163 platform: state
164 to: 'off'
165 action:
166 - service: switch.turn_off
167 data:
168 entity_id:
169 - switch.airconditioner
170 - switch.boiler_bath_onoff
171 - switch.dawondns_b540_w_
172 - service: switch.turn_on
173 data:
174 entity_id:
175 - switch.ilgwalsodeung
176 - service: fan.turn_off
177 data:
178 entity_id:
179 - fan.seonpunggi
180 - fan.xiaomi_air_purifier_2s
181 - alias: at home turn on
182 trigger:
183 - entity_id: input_boolean.home_state
184 platform: state
185 to: 'on'
186 action:
187 - service: switch.turn_on
188 data:
189 entity_id:
190 - switch.airconditioner
191 - switch.boiler_bath_onoff
192 - service: switch.turn_off
193 data:
194 entity_id:
195 - switch.ilgwalsodeung
196 - service: fan.turn_on
197 data:
198 entity_id:
199 - fan.seonpunggi
200 - fan.xiaomi_air_purifier_2s
5. 샤오미 선풍기 등록
물론 토큰을 등록해야 합니다.
57 fan:
58 # Xiaomi Air Purifier 2S
59 - platform: xiaomi_miio
60 host: 192.168.0.5
61 token: 4cdfbf4e042065
62 name: "공기청정기"
63
64 # Xiaomi Fan
65 - platform: xiaomi_miio_fan
66 host: 192.168.0.65
67 token: ba7bc411ba5b0
68 name: "선풍기"
이후, 센서 스위치를 등록합니다.
센서로 가지고 올 수 있는 값들은 아래와 같습니다.
센서 등록
1 - platform: template
2 sensors:
20 xiaomi_airpurifier_speed:
21 friendly_name: 팬속도
22 value_template: '{{ state_attr(''fan.xiaomi_air_purifier_2s'', ''motor_speed'')
23 }}'
24 unit_of_measurement: rpm
25 icon_template: mdi:speedometer
26 xiaomi_airpurifier_filter_remaining:
27 friendly_name: 필터잔량
28 value_template: '{{ state_attr(''fan.xiaomi_air_purifier_2s'', ''filter_life_remaining'')
29 }}'
30 unit_of_measurement: '%'
31 icon_template: mdi:heart-outline
32 xiaomi_fan_speed:
33 friendly_name: 팬속도
34 value_template: '{{ state_attr(''fan.seonpunggi'', ''raw_speed'') }}'
35 unit_of_measurement: rpm
36 icon_template: mdi:speedometer
파워 온오프 / 기능 스위치 등록
94 xiaomi_fan_child_lock:
95 friendly_name: "잠금"
96 value_template: "{{ is_state_attr('fan.seonpunggi', 'child_lock', true) }}"
97 turn_on:
98 service: fan.xiaomi_miio_set_child_lock_on
99 data:
100 entity_id: fan.seonpunggi
101 turn_off:
102 service: fan.xiaomi_miio_set_child_lock_off
103 data:
104 entity_id: fan.seonpunggi
105 icon_template: "mdi:lock-outline"
106 xiaomi_fan_buzzer:
107 friendly_name: "부저"
108 value_template: "{{ is_state_attr('fan.seonpunggi', 'buzzer', true) }}"
109 turn_on:
110 service: fan.xiaomi_miio_set_buzzer_on
111 data:
112 entity_id: fan.seonpunggi
113 turn_off:
114 service: fan.xiaomi_miio_set_buzzer_off
115 data:
116 entity_id: fan.seonpunggi
117 icon_template: "mdi:volume-high"
118 xiaomi_fan_oscillate:
119 friendly_name: "회전"
120 value_template: "{{ is_state_attr('fan.seonpunggi', 'oscillating', true) }}"
121 turn_on:
122 service: fan.oscillate
123 data:
124 entity_id: fan.seonpunggi
125 oscillating: true
126 turn_off:
127 service: fan.oscillate
128 data:
129 entity_id: fan.seonpunggi
130 oscillating: false
131 icon_template: "mdi:rotate-3d"
132 xiaomi_fan_natural:
133 friendly_name: "자연풍"
134 value_template: "{{ state_attr('fan.seonpunggi', 'natural_speed') != 0 }}"
135 turn_on:
136 service: fan.xiaomi_miio_set_natural_mode_on
137 data:
138 entity_id: fan.seonpunggi
139 turn_off:
140 service: fan.xiaomi_miio_set_natural_mode_off
141 data:
142 entity_id: fan.seonpunggi
143 icon_template: "mdi:sprout"
왼쪽으로 돌리는 등의 버튼들을 만듭니다.
그리고 속도 조절 슬라이더 빠 / 그리고 각도 선택 창을 만듭니다.
71 input_select:
81 xiaomi_fan_angle:
82 name: angle
83 options:
84 - 30
85 - 60
86 - 90
87 - 120
88 icon: "mdi:animation-outline"
101 input_number:
111 xiaomi_fan_speed:
112 name: "속도조절"
113 initial: 1
114 min: 1
115 max: 100
116 step: 1
117 icon: "mdi:weather-windy"
그리고 이 값이 바뀔 때 트리거를 하기 위해서 자동화를 등록합니다.
42 - alias: xiaomi fan speed changed
43 trigger:
44 platform: state
45 entity_id: fan.seonpunggi
46 action:
47 service: input_number.set_value
48 entity_id: input_number.xiaomi_fan_speed
49 data_template:
50 value: '{{ states.fan.seonpunggi.attributes.direct_speed }}'
52 - alias: xiaomi fan speed change
53 trigger:
54 entity_id: input_number.xiaomi_fan_speed
55 platform: state
56 action:
57 service: fan.set_speed
58 data_template:
59 entity_id: fan.seonpunggi
60 speed: '{{ states.input_number.xiaomi_fan_speed.state | int }}'
62 - alias: xiaomi fan angle changed
63 trigger:
64 platform: state
65 entity_id: fan.seonpunggi
66 action:
67 service: input_select.select_option
68 entity_id: input_select.xiaomi_fan_angle
69 data_template:
70 value: '{{ states.fan.seonpunggi.attributes.angle }}'
72 - alias: xiaomi fan angle change
73 trigger:
74 entity_id: input_select.xiaomi_fan_angle
75 platform: state
76 action:
77 service: fan.xiaomi_miio_set_oscillation_angle
78 data_template:
79 entity_id: fan.seonpunggi
80 angle: '{{ states.input_select.xiaomi_fan_angle.state | int }}'
스피드를 예로 들면, 스피드 값이 바뀌었을 경우 input_select 의 슬라이더 빠를 초기화 해주는 부분과
실제로 input_select 의 슬라이더가 바뀌면 값을 불러주는 구조입니다.
service:
entitiy_id:
data:
의 구조로 서비스를 호출하게 됩니다.
그러면 하기와 같은 구성이 가능하게 됩니다.
러브레이스는 꾸미기 나름이기 때문에 기본적으로 존재하는 템플릿으로만 하기와 같이 가능합니다.
6. 블루투스 재실 설정
실제로 docker 를 디바이스 패쓰쓰루 하거나 그런 필요가 없습니다.
bluetoothctl 을 통해 power on 만 해주시면 잘 작동합니다.
스캔을 통해 자동으로 known_devices.xml 에 등록되며, 등록되면 추적이 일어납니다.
물론 트래커를 등록해주셔야 동작합니다.
124 device_tracker:
125 - platform: nmap_tracker
126 hosts:
127 - 192.168.0.62
128 home_interval: 1
129 consider_home: 180
130 - platform: bluetooth_tracker
131 device_id: 1
132 consider_home: 180
2 poco_wifi:
3 icon:
4 mac: MA:CA:DD:RE:SS
5 name: POCO_F1_WIFI
6 picture:
7 track: true
8
9 pocophone_f1:
10 icon:
11 mac: BT_A4:50:46:0C:37:F0
12 name: POCO_F1_BLE
13 picture:
14 track: true
7. 특정 값으로 template 센서 생성
등록한 엔티티의 값으로 각각 쪼개서 센서 생성이 가능합니다.
97 - platform: template
98 sensors:
99 xiaomi_aquara_temp:
100 friendly_name: 온도
101 value_template: '{{ state_attr(''sensor.st_xiaomi_aqara_temp_sensor_de6f'', ''temperature'') }}'
102 unit_of_measurement: °C
103 device_class: temperature
104 xiaomi_aquara_humidity:
105 friendly_name: 습도
106 value_template: '{{ state_attr(''sensor.st_xiaomi_aqara_temp_sensor_de6f'', ''humidity'') }}'
107 unit_of_measurement: '%'
108 device_class: humidity
기기 내부의 커맨드로도 센서 만들기가 가능합니다.
37 - platform: systemmonitor
38 resources:
39 - type: last_boot
40 - type: processor_use
41 - type: memory_free
42 - type: throughput_network_in
43 arg: eth0
44 - type: throughput_network_out
45 arg: eth0
46 - type: disk_use_percent
47 arg: /
48 - type: disk_use_percent
49 arg: /media
50 - platform: command_line
51 name: CPU Temp
52 command: cat /sys/class/thermal/thermal_zone0/temp
53 unit_of_measurement: °C
54 value_template: '{{ (value | multiply(0.001)) | round(1) }}'
55 - platform: command_line
56 name: CPU Speed
57 command: cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq
58 unit_of_measurement: GHz
59 value_template: '{{ (value | multiply(0.000001)) | round(1) }}'
7. 이후에 해볼것
자동화 짜기가 너무 귀찮아서 node red 로 한번 해볼 예정입니다.
조도 센서를 통해서 자동화를 조금 더 탄력감 있게 짜볼 예정입니다.
감사합니다.
'IoT' 카테고리의 다른 글
다원 플러그 API 키 사태 대응하기 (2) | 2020.06.13 |
---|---|
HomeAssistant 조도 센서를 활용한 보일러 온수 ON/OFF (0) | 2020.06.04 |
HASS 디바이스 트래커 설정 (0) | 2020.05.24 |
오피스텔 IOT 구축기 (백업용) (1) | 2020.05.10 |
[에어컨 자동화 준비]하트 모양 Smart IR Hub (HA / Tuya Tap to Run 연동) (0) | 2020.05.04 |
댓글