246 lines
8.9 KiB
YAML
246 lines
8.9 KiB
YAML
###############################################################################
|
|
# PACKAGE: OpenHASP Lounge 1 Wall Plate Backlight Control
|
|
# NODE/TOPIC ROOT: hasp/openhasp_1/
|
|
#
|
|
# INTENT:
|
|
# - Keep backlight control separate from the thermostat/heater UI package.
|
|
# - Avoid using brightness 0 as the main OFF method.
|
|
# - Wake the panel with "idle off" before applying brightness.
|
|
# - Quiet Time overrides everything and forces the backlight OFF.
|
|
#
|
|
# OPENHASP NOTES:
|
|
# - backlight brightness range is 1..255
|
|
# - backlight off is a state, not a brightness level
|
|
# - idle off clears idle/sleep state and behaves like a wake-up
|
|
###############################################################################
|
|
|
|
###############################################################################
|
|
# HELPERS
|
|
###############################################################################
|
|
input_boolean:
|
|
openhasp_1_backlight_enable:
|
|
name: OpenHASP 1 Backlight Enable
|
|
icon: mdi:television-ambient-light
|
|
initial: true
|
|
|
|
input_number:
|
|
openhasp_1_backlight_level:
|
|
name: OpenHASP 1 Backlight Level
|
|
min: 1
|
|
max: 255
|
|
step: 1
|
|
mode: slider
|
|
initial: 255
|
|
|
|
###############################################################################
|
|
# AUTOMATIONS
|
|
###############################################################################
|
|
automation:
|
|
# -------------------------------------------------------------------------
|
|
# Quiet Time override
|
|
# - Quiet Time ON -> force backlight OFF
|
|
# - Quiet Time OFF -> re-apply the requested backlight state
|
|
# -------------------------------------------------------------------------
|
|
- id: openhasp_1_backlight_quiet_time_changed
|
|
alias: "OpenHASP 1: backlight quiet time changed"
|
|
mode: restart
|
|
trigger:
|
|
- platform: state
|
|
entity_id: input_boolean.quiet_time
|
|
action:
|
|
- choose:
|
|
- conditions:
|
|
- condition: state
|
|
entity_id: input_boolean.quiet_time
|
|
state: "on"
|
|
sequence:
|
|
- service: script.openhasp_1_backlight_off
|
|
|
|
default:
|
|
- service: script.openhasp_1_backlight_apply_requested_state
|
|
|
|
# -------------------------------------------------------------------------
|
|
# Backlight enable helper changed
|
|
# - ON -> wake panel and apply current brightness level, unless Quiet Time
|
|
# - OFF -> tell openHASP to switch the backlight off
|
|
# -------------------------------------------------------------------------
|
|
- id: openhasp_1_backlight_enable_changed
|
|
alias: "OpenHASP 1: backlight enable changed"
|
|
mode: restart
|
|
trigger:
|
|
- platform: state
|
|
entity_id: input_boolean.openhasp_1_backlight_enable
|
|
action:
|
|
- choose:
|
|
- conditions:
|
|
- condition: state
|
|
entity_id: input_boolean.openhasp_1_backlight_enable
|
|
state: "on"
|
|
- condition: state
|
|
entity_id: input_boolean.quiet_time
|
|
state: "off"
|
|
sequence:
|
|
- service: script.openhasp_1_backlight_apply
|
|
|
|
default:
|
|
- service: script.openhasp_1_backlight_off
|
|
|
|
# -------------------------------------------------------------------------
|
|
# Backlight level helper changed
|
|
# - If backlight is enabled and Quiet Time is OFF, apply the new level
|
|
# - If disabled or Quiet Time is ON, just store the new level for later
|
|
# -------------------------------------------------------------------------
|
|
- id: openhasp_1_backlight_level_changed
|
|
alias: "OpenHASP 1: backlight level changed"
|
|
mode: restart
|
|
trigger:
|
|
- platform: state
|
|
entity_id: input_number.openhasp_1_backlight_level
|
|
condition:
|
|
- condition: state
|
|
entity_id: input_boolean.openhasp_1_backlight_enable
|
|
state: "on"
|
|
- condition: state
|
|
entity_id: input_boolean.quiet_time
|
|
state: "off"
|
|
action:
|
|
- service: script.openhasp_1_backlight_apply
|
|
|
|
# -------------------------------------------------------------------------
|
|
# Re-apply requested backlight state when Home Assistant starts
|
|
# Quiet Time is checked inside the script.
|
|
# -------------------------------------------------------------------------
|
|
- id: openhasp_1_backlight_on_ha_start
|
|
alias: "OpenHASP 1: apply backlight on HA start"
|
|
mode: queued
|
|
trigger:
|
|
- platform: homeassistant
|
|
event: start
|
|
action:
|
|
- delay: "00:00:10"
|
|
- service: script.openhasp_1_backlight_apply_requested_state
|
|
|
|
# -------------------------------------------------------------------------
|
|
# Re-apply requested backlight state when the panel reconnects
|
|
# Quiet Time is checked inside the script.
|
|
# -------------------------------------------------------------------------
|
|
- id: openhasp_1_backlight_on_panel_online
|
|
alias: "OpenHASP 1: apply backlight on panel online"
|
|
mode: queued
|
|
trigger:
|
|
- platform: mqtt
|
|
topic: "hasp/openhasp_1/LWT"
|
|
condition:
|
|
- condition: template
|
|
value_template: "{{ trigger.payload == 'online' }}"
|
|
action:
|
|
- delay: "00:00:05"
|
|
- service: script.openhasp_1_backlight_apply_requested_state
|
|
|
|
# -------------------------------------------------------------------------
|
|
# If openHASP enters idle while HA says the backlight should be enabled,
|
|
# wake it and re-apply the requested brightness.
|
|
#
|
|
# Quiet Time blocks this recovery, so the panel stays dark overnight.
|
|
# -------------------------------------------------------------------------
|
|
- id: openhasp_1_backlight_recover_from_idle
|
|
alias: "OpenHASP 1: recover backlight from idle"
|
|
mode: restart
|
|
trigger:
|
|
- platform: mqtt
|
|
topic: "hasp/openhasp_1/state/idle"
|
|
condition:
|
|
- condition: state
|
|
entity_id: input_boolean.openhasp_1_backlight_enable
|
|
state: "on"
|
|
- condition: state
|
|
entity_id: input_boolean.quiet_time
|
|
state: "off"
|
|
- condition: template
|
|
value_template: "{{ trigger.payload | lower != 'off' }}"
|
|
action:
|
|
- delay: "00:00:01"
|
|
- service: script.openhasp_1_backlight_apply
|
|
|
|
###############################################################################
|
|
# SCRIPTS
|
|
###############################################################################
|
|
script:
|
|
# -------------------------------------------------------------------------
|
|
# Apply current requested brightness.
|
|
#
|
|
# Important:
|
|
# - Send idle off first so the panel is awake.
|
|
# - Then send a JSON backlight command with state ON and brightness 1..255.
|
|
# -------------------------------------------------------------------------
|
|
openhasp_1_backlight_apply:
|
|
alias: "OpenHASP 1: apply backlight level"
|
|
mode: restart
|
|
sequence:
|
|
- service: mqtt.publish
|
|
data:
|
|
topic: "hasp/openhasp_1/command"
|
|
payload: "idle off"
|
|
|
|
- delay: "00:00:00.25"
|
|
|
|
- service: mqtt.publish
|
|
data:
|
|
topic: "hasp/openhasp_1/command"
|
|
payload: >
|
|
backlight {"state":"on","brightness":{{ states('input_number.openhasp_1_backlight_level') | int(255) }}}
|
|
|
|
# Send once more shortly after. This helps with panels that miss the
|
|
# brightness change while coming out of idle.
|
|
- delay: "00:00:00.75"
|
|
|
|
- service: mqtt.publish
|
|
data:
|
|
topic: "hasp/openhasp_1/command"
|
|
payload: >
|
|
backlight {"state":"on","brightness":{{ states('input_number.openhasp_1_backlight_level') | int(255) }}}
|
|
|
|
# -------------------------------------------------------------------------
|
|
# Turn the backlight off using the openHASP backlight OFF state.
|
|
# Do not set brightness to 0.
|
|
# -------------------------------------------------------------------------
|
|
openhasp_1_backlight_off:
|
|
alias: "OpenHASP 1: backlight off"
|
|
mode: restart
|
|
sequence:
|
|
- service: mqtt.publish
|
|
data:
|
|
topic: "hasp/openhasp_1/command"
|
|
payload: "backlight off"
|
|
|
|
# -------------------------------------------------------------------------
|
|
# Apply either ON/current-level or OFF according to helper state.
|
|
# Used on HA startup, panel reconnect, and Quiet Time changes.
|
|
#
|
|
# Priority:
|
|
# 1. Quiet Time ON -> backlight OFF
|
|
# 2. Backlight Enable ON -> apply current level
|
|
# 3. Backlight Enable OFF -> backlight OFF
|
|
# -------------------------------------------------------------------------
|
|
openhasp_1_backlight_apply_requested_state:
|
|
alias: "OpenHASP 1: apply requested backlight state"
|
|
mode: restart
|
|
sequence:
|
|
- choose:
|
|
- conditions:
|
|
- condition: state
|
|
entity_id: input_boolean.quiet_time
|
|
state: "on"
|
|
sequence:
|
|
- service: script.openhasp_1_backlight_off
|
|
|
|
- conditions:
|
|
- condition: state
|
|
entity_id: input_boolean.openhasp_1_backlight_enable
|
|
state: "on"
|
|
sequence:
|
|
- service: script.openhasp_1_backlight_apply
|
|
|
|
default:
|
|
- service: script.openhasp_1_backlight_off
|