나비엔보일러 ON/OFF상태를 토글하는 가상스위치를 st에 만들지 않고 HA에 input_boolean으로 만듬. 그걸 바탕으로 템플릿스위치를 만들고 ST의 가상스위치는 on/off시 같은 동작(가동)을 하게 만듬.
이렇게 하면 보일러 가동/미가동시 toggle스위치 신호를 한번 더 보내면 되니 훨씬 간단해짐.(HA에서 스크립트를 한번 더 실행하는 것과 같은 역할)
** 나비엔 실내제어기는 명령을 받으면 wifi신호 아이콘이 몇번 깜박이고 이후 동작하게 되는데 깜박임후 아무 동작이 없으면 신호는 갔는데 명령이 씹혔다는 걸 알 수 있음. 테스트 해보니 짧은 시간에는 이상없는데 긴 휴지시간후에는 몇번 발생함.
** 구글홈 명령도 마찬가지로 신호는 가는데 명령이 씹히는 경우가 있고 온수명령은 따로 없어 ST에서 명령을 한 번 더 보내는 게 나을 수도 있음. 보통 짧은 텀을 두고 보내는 두번째 명령은 대부분 실행됐음.
** st에서 ha로 나비엔 항목을 가져오면 실내온도설정과 현재온도 확인하는 구성요소만 등록되니 그 외 필요한 항목은 st에서 나비엔 관련기능을 가상스위치로 만들면 등록가능.
** st의 가상스위치는 메뉴/실험실/가상스위치에서 만들 수 있는데 추가할때 '허브에서 등록'항목에 체크하면 클라우드 대신 허브에 만들어져 빠른 응답 가능. (뭐 여전히 나비엔 C2C로 가니 의미가 없을수도 있으나 뭐 한단계 덜 거치는 것이니)
** 나비엔 보일러 상태변경 논리스위치
input_boolean.yaml
heating:
name: 난방
icon: mdi:heating-coil
hotwater:
name: 온수
icon: mdi:coolant-temperature
** 온돌/외출모드 템플릿스위치와 온수30도/50도 템플릿스위치
** ondolnanbang/oeculmodeu, onsu50do/onsu30do는 st에서 가져온 가상스위치
switch.yaml
- platform: template
switches:
heater:
friendly_name: '난방'
unique_id: 'ondol'
value_template: "{{ is_state('input_boolean.heating', 'on') }}"
turn_on: #온돌난방
- action: input_boolean.turn_on
entity_id: input_boolean.heating
- action: switch.toggle
entity_id: switch.ondolnanbang
turn_off: #외출모드
- action: input_boolean.turn_off
entity_id: input_boolean.heating
- action: switch.toggle
entity_id: switch.oeculmodeu
heater3:
friendly_name: '온수'
unique_id: 'onsu'
value_template: "{{ is_state('input_boolean.hotwater', 'on') }}"
turn_on: #온수50도
- action: input_boolean.turn_on
entity_id: input_boolean.hotwater
- action: switch.toggle
entity_id: switch.onsu50do
turn_off: #온수30도
- action: input_boolean.turn_off
entity_id: input_boolean.hotwater
- action: switch.toggle
entity_id: switch.onsu30do
** 야간 보일러 가동 자동화와 10분/15분/20분 타이머후 보일러 가동중지(외출모드) 자동화
automations.yaml
- id: boiler-night
alias: boiler-night
mode: single
triggers:
- trigger: time_pattern
minutes: '/5'
conditions:
- condition: state
entity_id: sun.sun
state: below_horizon
- condition: state
entity_id:
- timer.boiler7
- timer.boiler10
- timer.boiler15
- timer.boiler20
state: idle
- condition: numeric_state
entity_id: sensor.air_monitor_temperature
below: 23.50
- condition: numeric_state
entity_id: sensor.livingroom_pvvx_temperature
below: 23.50
- condition: template
value_template: >
{% if is_state('input_select.temperature_check', 'lv2') %}
{{ states('sensor.boiler_1_temperature') | float < 32 }}
{% elif is_state('input_select.temperature_check', 'lv1') %}
{{ states('sensor.boiler_1_temperature') | float < 31 }}
{% else %}
{{ states('sensor.boiler_1_temperature') | float < 30 }}
{% endif %}
actions:
- choose:
- conditions:
- condition: numeric_state
entity_id: sensor.outdoor_thmeter_temperature
above: 7.99
sequence:
- action: script.boiler_7min_once
- conditions:
- condition: numeric_state
entity_id: sensor.outdoor_thmeter_temperature
below: 8.00
above: 1.99
sequence:
- action: script.boiler_10min_once
- conditions:
- condition: numeric_state
entity_id: sensor.outdoor_thmeter_temperature
below: 2.00
above: -5.00
sequence:
- action: script.boiler_15min_once
- conditions:
- condition: numeric_state
entity_id: sensor.outdoor_thmeter_temperature
below: -4.99
sequence:
- action: script.boiler_20min_once
- id: 시간-타이머/Boiler
alias: 시간-타이머/Boiler
mode: restart
triggers:
- trigger: event
event_type: timer.finished
event_data:
entity_id: timer.boiler10
- trigger: event
event_type: timer.finished
event_data:
entity_id: timer.boiler15
- trigger: event
event_type: timer.finished
event_data:
entity_id: timer.boiler20
actions:
- action: switch.turn_off
entity_id: switch.heater
- delay: '00:00:15'
- action: switch.toggle
entity_id: switch.oeculmodeu
- delay: '00:05:00'
- condition: template
value_template: "{{ states('sensor.neo03_watt') | float(0) > 50 }}"
- action: media_player.volume_mute
data:
is_volume_muted: true
entity_id: media_player.notify
- delay: '00:00:10'
- action: google_assistant_sdk.send_text_command
data:
command: '나비엔보일러 모드를 외출로 해줘'
media_player: media_player.notify
- delay: '00:00:30'
- action: media_player.volume_mute
data:
is_volume_muted: false
entity_id: media_player.notify
** 보일러 10분 / 20분 가동 스크립트와 가동실패시 백업 스크립트
script.yaml
boiler_backup:
sequence:
- action: switch.toggle
entity_id: switch.ondolnanbang
- delay: '00:00:15'
- condition: template
value_template: "{{ states('sensor.neo03_watt') | float(0) < 10 }}"
- action: media_player.volume_mute
data:
is_volume_muted: true
entity_id: media_player.notify
- action: google_assistant_sdk.send_text_command
data:
command: '나비엔보일러 모드를 온돌로 해줘'
media_player: media_player.notify
- delay: '00:00:30'
- action: media_player.volume_mute
data:
is_volume_muted: false
entity_id: media_player.notify
boiler_10min_once:
sequence:
- service: switch.turn_on
entity_id: switch.heater
- service: timer.start
entity_id: timer.boiler10
- delay: '00:00:30'
- condition: template
value_template: "{{ states('sensor.neo03_watt') | float(0) < 10 }}"
- service: script.turn_on
entity_id: script.boiler_backup
boiler_20min_once:
sequence:
- service: switch.turn_on
entity_id: switch.heater
- service: timer.start
entity_id: timer.boiler20
- delay: '00:00:30'
- condition: template
value_template: "{{ states('sensor.neo03_watt') | float(0) < 10 }}"
- service: script.turn_on
entity_id: script.boiler_backup