Home Assistant 삽질기 3 (Automation, data, data_template)

최근에 샤오미 가습기를 구입하여 추가 연동하였다.

연동 자체는 매우 쉽기 때문에 금방할 수 있었지만, 해당 디바이스의 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

… 아… 해결했다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다