최근에 샤오미 가습기를 구입하여 추가 연동하였다.
연동 자체는 매우 쉽기 때문에 금방할 수 있었지만, 해당 디바이스의 target_humidity 라는 값을 조절하고 싶었다.
그래서 처음에는 심플하게 텍스트 박스를 넣을까 하다가, 그래도 이왕하는 김에 바를 만들어서 조절되도록 하고 싶었다.
그래서 검색 결과, input_number와 automation을 사용하면 된다는 결론이 내려졌다.
그래서 관련 정보를 찾아서 먼저 input_number를 만들었다.
input_number:
humidifier_bedroom_slider:
name: "침실 가습기 목표 습도"
initial: 60
min: 30
max: 80
step: 10
위와 같이 추가 하였다. 여기까지 진행하면 “비어있는” 슬라이드바는 생성된다.
그 다음으로 작업한 부분은 현재 값을 슬라이드바에 반영하는 것이었다. 예를 들어 가습기의 target_humidity 값이 70 이라면 슬라이드바의 값도 70으로 되어 있길 바랬고 아래와 같이 구현하였다.
- id: '1573523243847'
alias: update slider humi
trigger:
- platform: time_pattern
seconds: /3
condition: []
action:
- data:
entity_id: input_number.humidifier_bedroom_slider
value: '{{ states.fan.humidifier_bedroom.attributes.target_humidity | float }}'
service: input_number.set_value
여기서부터 문제였다. 에러 메시지가 찍히기 시작한 것이었다.
xxxx-xx-xx xx:xx:xx ERROR (MainThread) [homeassistant.components.automation] Error while executing automation automation.update_slider_humi. Invalid data for call_service at pos 1: expected float for dictionary value @ data['value']
내가 해석하기로는 data 형태가 float이어야 하는데 아니다라는 오류로 인식하고 여러가지 시도를 수행해보았다.
value: '{{ states.fan.humidifier_bedroom.attributes.target_humidity | float }}'
value: '{{ states("fan.humidifier_bedroom.attributes.target_humidity") | float}}'
value: '{{ state_attr("fan.humidifier_bedroom", "target_humidity") | float}}'
.
.
.
진짜 할 수 있는 방법은 다 써봤지만 정상 동작하지 않았다. 그래서 구글링을 하루 종일 한 끝에 일부 automation에서 data 대신, data_template이 사용된다는 것을 확인하였고 혹시나 하고 적용해보았다.
- id: '1573523243847'
alias: update slider humi
trigger:
- platform: time_pattern
seconds: /3
condition: []
action:
- data_template:
entity_id: input_number.humidifier_bedroom_slider
value: '{{ states.fan.humidifier_bedroom.attributes.target_humidity | float }}'
service: input_number.set_value
… 아… 해결했다.