more esphome devices and fixes
This commit is contained in:
@@ -0,0 +1,177 @@
|
||||
#:########################################################################################:#
|
||||
# TITLE: ENTRANCE SPOT PERSON DETECTION
|
||||
# PACKAGE: entrance_spot_person_detection.yaml
|
||||
#:########################################################################################:#
|
||||
# PURPOSE:
|
||||
# - Turn on the entrance illumination when a configured motion/visitor/presence source
|
||||
# becomes active.
|
||||
# - Temporarily force the illumination ramp number to 1 second for fast response.
|
||||
# - Restore the original ramp value after the sequence completes.
|
||||
# - Restart the timing whenever any configured trigger entity activates again.
|
||||
#
|
||||
# HOW THIS PACKAGE IS STRUCTURED:
|
||||
# - Trigger entities are stored in groups for easy future maintenance.
|
||||
# - The automation listens for state_changed events and checks whether the changed
|
||||
# entity is a member of one of those groups.
|
||||
# - This avoids the limitation of group-state triggers, which would not retrigger
|
||||
# if the group was already active from an earlier sensor.
|
||||
#
|
||||
# TO ADD MORE TRIGGERS LATER:
|
||||
# - Add more binary sensors under:
|
||||
# group.entrance_spot_person_detection_binary_sensors
|
||||
# - Add more device trackers under:
|
||||
# group.entrance_spot_person_detection_device_trackers
|
||||
#
|
||||
# DEVICE TRACKER NOTE:
|
||||
# - Device trackers often indicate presence using the state "home".
|
||||
# - If a tracker uses a different detected/present state, change the
|
||||
# tracker_active_state value below.
|
||||
#:########################################################################################:#
|
||||
|
||||
group:
|
||||
entrance_spot_person_detection_binary_sensors:
|
||||
name: Entrance Spot Person Detection Binary Sensors
|
||||
entities:
|
||||
#- binary_sensor.esp_entmulti_outside_entrance_multisensor_moving_target
|
||||
- binary_sensor.view_road_front_door_visitor
|
||||
#- binary_sensor.view_road_front_door_motion
|
||||
- binary_sensor.view_road_front_door_person
|
||||
|
||||
entrance_spot_person_detection_device_trackers:
|
||||
name: Entrance Spot Person Detection Device Trackers
|
||||
entities:
|
||||
- device_tracker.byd_atto3_ibeacon_bur4c2a_bermuda_tracker
|
||||
|
||||
input_number:
|
||||
entrance_spot_person_detection_saved_ramp:
|
||||
name: Entrance Spot Person Detection Saved Ramp
|
||||
min: 0
|
||||
max: 720
|
||||
step: 1
|
||||
mode: box
|
||||
icon: mdi:timer-cog
|
||||
|
||||
input_boolean:
|
||||
entrance_spot_person_detection_ramp_saved:
|
||||
name: Entrance Spot Person Detection Ramp Saved
|
||||
icon: mdi:content-save-check
|
||||
|
||||
automation:
|
||||
- alias: Entrance Spot Person Detection
|
||||
id: entrance_spot_person_detection
|
||||
description: >
|
||||
Turn on the front entranceway doorbell illumination when a configured binary
|
||||
sensor or device tracker activates. Temporarily force the ramp to 1 second,
|
||||
then restore the previous ramp setting after the sequence completes.
|
||||
mode: restart
|
||||
trigger:
|
||||
# Listen for all entity state changes, then filter below so we only respond
|
||||
# to configured sensors/trackers becoming active.
|
||||
- platform: event
|
||||
event_type: state_changed
|
||||
|
||||
variables:
|
||||
# Easy-edit entities.
|
||||
light_switch_entity: switch.front_entranceway_led_light_controls_doorbell_illumination
|
||||
ramp_number_entity: number.front_entranceway_led_light_controls_doorbell_illumination_ramp
|
||||
|
||||
# Easy-edit groups.
|
||||
binary_sensor_group_entity: group.entrance_spot_person_detection_binary_sensors
|
||||
device_tracker_group_entity: group.entrance_spot_person_detection_device_trackers
|
||||
|
||||
# Easy-edit active states.
|
||||
binary_sensor_active_state: "on"
|
||||
tracker_active_state: "home"
|
||||
|
||||
# State-change details from the event trigger.
|
||||
changed_entity_id: "{{ trigger.event.data.entity_id if trigger.event.data is defined else none }}"
|
||||
old_state_value: >
|
||||
{{ trigger.event.data.old_state.state if trigger.event.data.old_state is not none else none }}
|
||||
new_state_value: >
|
||||
{{ trigger.event.data.new_state.state if trigger.event.data.new_state is not none else none }}
|
||||
|
||||
# Members of the configured groups.
|
||||
binary_sensor_entities: >
|
||||
{{ state_attr(binary_sensor_group_entity, 'entity_id') | default([], true) }}
|
||||
device_tracker_entities: >
|
||||
{{ state_attr(device_tracker_group_entity, 'entity_id') | default([], true) }}
|
||||
|
||||
# Trigger logic.
|
||||
binary_sensor_triggered: >
|
||||
{{
|
||||
changed_entity_id in binary_sensor_entities
|
||||
and old_state_value != binary_sensor_active_state
|
||||
and new_state_value == binary_sensor_active_state
|
||||
}}
|
||||
|
||||
device_tracker_triggered: >
|
||||
{{
|
||||
changed_entity_id in device_tracker_entities
|
||||
and old_state_value != tracker_active_state
|
||||
and new_state_value == tracker_active_state
|
||||
}}
|
||||
|
||||
condition:
|
||||
# Only continue if the changed entity is one of our configured trigger entities
|
||||
# and it has transitioned into its active/detected state.
|
||||
- condition: template
|
||||
value_template: >
|
||||
{{ binary_sensor_triggered or device_tracker_triggered }}
|
||||
|
||||
action:
|
||||
# Save the original ramp value only once per active detection cycle.
|
||||
# Because the automation uses restart mode, repeated triggers will restart
|
||||
# the sequence without overwriting the original saved ramp value.
|
||||
- choose:
|
||||
- conditions:
|
||||
- condition: state
|
||||
entity_id: input_boolean.entrance_spot_person_detection_ramp_saved
|
||||
state: "off"
|
||||
sequence:
|
||||
- service: input_number.set_value
|
||||
target:
|
||||
entity_id: input_number.entrance_spot_person_detection_saved_ramp
|
||||
data:
|
||||
value: >
|
||||
{{ states(ramp_number_entity) | float(1) }}
|
||||
|
||||
- service: input_boolean.turn_on
|
||||
target:
|
||||
entity_id: input_boolean.entrance_spot_person_detection_ramp_saved
|
||||
|
||||
# Force the illumination ramp to 1 second for a fast response.
|
||||
- service: number.set_value
|
||||
target:
|
||||
entity_id: "{{ ramp_number_entity }}"
|
||||
data:
|
||||
value: 5
|
||||
|
||||
# Turn on the entrance illumination.
|
||||
# The controlled device/light logic is expected to turn itself off later.
|
||||
- service: switch.turn_on
|
||||
target:
|
||||
entity_id: "{{ light_switch_entity }}"
|
||||
|
||||
# Hold briefly, then restore the ramp once activity has stopped retriggering
|
||||
# the automation for this cycle.
|
||||
- delay: "00:00:03"
|
||||
|
||||
# Restore the original ramp value that was active before detection.
|
||||
- service: number.set_value
|
||||
target:
|
||||
entity_id: "{{ ramp_number_entity }}"
|
||||
data:
|
||||
value: >
|
||||
{{ states('input_number.entrance_spot_person_detection_saved_ramp') | float(1) }}
|
||||
|
||||
# Clear the saved-state flag ready for the next fresh trigger cycle.
|
||||
- service: input_boolean.turn_off
|
||||
target:
|
||||
entity_id: input_boolean.entrance_spot_person_detection_ramp_saved
|
||||
|
||||
# Optional tidy reset of the helper value.
|
||||
- service: input_number.set_value
|
||||
target:
|
||||
entity_id: input_number.entrance_spot_person_detection_saved_ramp
|
||||
data:
|
||||
value: 0
|
||||
@@ -1,144 +1,546 @@
|
||||
###############################################################################
|
||||
# PACKAGE: OpenHASP Thermostat (MQTT-only, all BUTTON objects)
|
||||
# PACKAGE: OpenHASP Thermostat / Gas Heater Control
|
||||
# NODE/TOPIC ROOT: hasp/openhasp_1/
|
||||
#
|
||||
# PAGE OBJECTS USED
|
||||
# - p1b1 = main temperature display
|
||||
# - p1b2 = alternating Setpoint / Humidity display
|
||||
# - p1b3 = setpoint down
|
||||
# - p1b4 = setpoint up
|
||||
# - p1b5 = heater status text
|
||||
# - p1b6 = heater operation / flame button
|
||||
###############################################################################
|
||||
|
||||
###############################################################################
|
||||
# HELPERS
|
||||
###############################################################################
|
||||
input_boolean:
|
||||
hasp_setpoint_hold_active:
|
||||
name: HASP Setpoint Hold Active
|
||||
initial: false
|
||||
|
||||
input_number:
|
||||
lounge_setpoint:
|
||||
name: Lounge Setpoint
|
||||
min: 10
|
||||
max: 30
|
||||
step: 0.5
|
||||
# How long Setpoint and Humidity are each shown before rotating
|
||||
hasp_setpoint_humidity_cycle_seconds:
|
||||
name: HASP Setpoint Humidity Cycle Seconds
|
||||
min: 1
|
||||
max: 60
|
||||
step: 1
|
||||
mode: box
|
||||
unit_of_measurement: "℃"
|
||||
initial: 21.5
|
||||
unit_of_measurement: s
|
||||
initial: 10
|
||||
|
||||
# After the setpoint changes, hold the setpoint screen for this long
|
||||
hasp_setpoint_hold_seconds:
|
||||
name: HASP Setpoint Hold Seconds
|
||||
min: 1
|
||||
max: 60
|
||||
step: 1
|
||||
mode: box
|
||||
unit_of_measurement: s
|
||||
initial: 15
|
||||
|
||||
###############################################################################
|
||||
# MQTT ENTITIES
|
||||
###############################################################################
|
||||
mqtt:
|
||||
sensor:
|
||||
- name: "Lounge Environment Humidity MQTT"
|
||||
unique_id: "lounge_environment_humidity_mqtt"
|
||||
state_topic: "viewroad-status/lounge-environment/humidity"
|
||||
|
||||
###############################################################################
|
||||
# AUTOMATIONS
|
||||
###############################################################################
|
||||
automation:
|
||||
# --- PUSH LABEL TEXTS (on buttons) ----------------------------------------
|
||||
# -------------------------------------------------------------------------
|
||||
# Main temperature display
|
||||
# - Shows normal lounge temperature
|
||||
# - If heater test mode is ON, shows the test temperature instead
|
||||
# - Normalises values so we do not get duplicated °C or long float strings
|
||||
# -------------------------------------------------------------------------
|
||||
- id: hasp_temp_to_btn_text
|
||||
alias: "HASP: update temp (p1b1.text)"
|
||||
mode: queued
|
||||
trigger:
|
||||
- platform: state
|
||||
entity_id: sensor.lounge_environment_lounge_environment_temperature
|
||||
entity_id:
|
||||
- sensor.lounge_environment_lounge_environment_temperature
|
||||
- switch.rinnai_neo_gas_heater_rinnai_neo_gas_heater_test_mode
|
||||
- sensor.rinnai_neo_gas_heater_rinnai_neo_gas_heater_test_mode_temp
|
||||
action:
|
||||
- service: mqtt.publish
|
||||
data:
|
||||
topic: "hasp/openhasp_1/command/p1b1.text"
|
||||
payload: "{{ states('sensor.lounge_environment_lounge_environment_temperature')|float(0)|round(1) }} °C"
|
||||
|
||||
- id: hasp_setpoint_to_btn_text
|
||||
alias: "HASP: update setpoint (p1b2.text)"
|
||||
mode: queued
|
||||
trigger:
|
||||
- platform: state
|
||||
entity_id: input_number.lounge_setpoint
|
||||
action:
|
||||
- service: mqtt.publish
|
||||
data:
|
||||
topic: "hasp/openhasp_1/command/p1b2.text"
|
||||
payload: "Set: {{ states('input_number.lounge_setpoint')|float(0)|round(1) }} °C"
|
||||
qos: 1
|
||||
retain: true
|
||||
payload: >
|
||||
{% if is_state('switch.rinnai_neo_gas_heater_rinnai_neo_gas_heater_test_mode', 'on') %}
|
||||
{% set raw = states('sensor.rinnai_neo_gas_heater_rinnai_neo_gas_heater_test_mode_temp') %}
|
||||
{% else %}
|
||||
{% set raw = states('sensor.lounge_environment_lounge_environment_temperature') %}
|
||||
{% endif %}
|
||||
{% set cleaned = raw
|
||||
| replace('°C', '')
|
||||
| replace('° C', '')
|
||||
| replace('C', '')
|
||||
| trim %}
|
||||
{% if cleaned not in ['unknown', 'unavailable', '', 'none', 'None'] %}
|
||||
{{ cleaned | float(0) | round(1) }} °C
|
||||
{% else %}
|
||||
-- °C
|
||||
{% endif %}
|
||||
|
||||
# -------------------------------------------------------------------------
|
||||
# Heater status text at bottom of screen
|
||||
# -------------------------------------------------------------------------
|
||||
- id: hasp_heater_status_to_btn_text
|
||||
alias: "HASP: update heater status (p1b5.text)"
|
||||
mode: queued
|
||||
trigger:
|
||||
- platform: state
|
||||
entity_id: switch.lounge_heater
|
||||
entity_id: sensor.rinnai_neo_gas_heater_rinnai_neo_gas_heater_status_text
|
||||
action:
|
||||
- service: mqtt.publish
|
||||
data:
|
||||
topic: "hasp/openhasp_1/command/p1b5.text"
|
||||
payload: >
|
||||
{% if is_state('sensor.gas_heater_operating','ON') %}
|
||||
HEAT ON
|
||||
{% else %}
|
||||
HEAT OFF
|
||||
{% endif %}
|
||||
{% set s = states('sensor.rinnai_neo_gas_heater_rinnai_neo_gas_heater_status_text') %}
|
||||
{{ s if s not in ['unknown', 'unavailable', ''] else 'HEATER --' }}
|
||||
|
||||
# --- BUTTON HANDLING FROM THE PLATE (listens on /state/) ------------------
|
||||
- id: hasp_btn_up_increment
|
||||
alias: "HASP: p1b3 up -> increment setpoint"
|
||||
# -------------------------------------------------------------------------
|
||||
# When setpoint changes:
|
||||
# - immediately show Setpoint
|
||||
# - hold it for hold_seconds
|
||||
# - then allow normal Setpoint/Humidity rotation again
|
||||
# -------------------------------------------------------------------------
|
||||
- id: hasp_setpoint_changed_hold_display
|
||||
alias: "HASP: show setpoint immediately and hold"
|
||||
mode: restart
|
||||
trigger:
|
||||
- platform: state
|
||||
entity_id: sensor.rinnai_neo_gas_heater_setpoint_text
|
||||
action:
|
||||
- service: input_boolean.turn_on
|
||||
target:
|
||||
entity_id: input_boolean.hasp_setpoint_hold_active
|
||||
|
||||
- service: mqtt.publish
|
||||
data:
|
||||
topic: "hasp/openhasp_1/command/p1b2.text"
|
||||
payload: >
|
||||
{% set s = states('sensor.rinnai_neo_gas_heater_setpoint_text') %}
|
||||
{{ 'Setpoint: ' ~ (s if s not in ['unknown', 'unavailable', ''] else '--') }}
|
||||
|
||||
- delay:
|
||||
seconds: "{{ states('input_number.hasp_setpoint_hold_seconds') | int(15) }}"
|
||||
|
||||
- service: input_boolean.turn_off
|
||||
target:
|
||||
entity_id: input_boolean.hasp_setpoint_hold_active
|
||||
|
||||
# -------------------------------------------------------------------------
|
||||
# Up / Down buttons on the HASP plate
|
||||
# These call the existing HA button entities
|
||||
# -------------------------------------------------------------------------
|
||||
- id: hasp_btn_up_press
|
||||
alias: "HASP: p1b4 up -> heater setpoint UP"
|
||||
mode: queued
|
||||
trigger:
|
||||
- platform: mqtt
|
||||
topic: "hasp/openhasp_1/state/p1b4"
|
||||
condition:
|
||||
- condition: template
|
||||
value_template: "{{ trigger.payload_json.event|default('') == 'up' }}"
|
||||
value_template: "{{ trigger.payload_json.event | default('') == 'up' }}"
|
||||
action:
|
||||
- service: input_number.increment
|
||||
- service: button.press
|
||||
target:
|
||||
entity_id: input_number.lounge_setpoint
|
||||
entity_id: button.rinnai_neo_gas_heater_rinnai_neo_gas_heater_setpoint_up
|
||||
|
||||
- id: hasp_btn_down_decrement
|
||||
alias: "HASP: p1b4 up -> decrement setpoint"
|
||||
- id: hasp_btn_down_press
|
||||
alias: "HASP: p1b3 up -> heater setpoint DOWN"
|
||||
mode: queued
|
||||
trigger:
|
||||
- platform: mqtt
|
||||
topic: "hasp/openhasp_1/state/p1b3"
|
||||
condition:
|
||||
- condition: template
|
||||
value_template: "{{ trigger.payload_json.event|default('') == 'up' }}"
|
||||
value_template: "{{ trigger.payload_json.event | default('') == 'up' }}"
|
||||
action:
|
||||
- service: input_number.decrement
|
||||
- service: button.press
|
||||
target:
|
||||
entity_id: input_number.lounge_setpoint
|
||||
entity_id: button.rinnai_neo_gas_heater_rinnai_neo_gas_heater_setpoint_down
|
||||
|
||||
# --- PUSH INITIAL VALUES ON HA START / PANEL ONLINE -----------------------
|
||||
- id: hasp_push_on_ha_start
|
||||
alias: "HASP: push texts on HA start"
|
||||
# -------------------------------------------------------------------------
|
||||
# Middle flame button
|
||||
# - Tap toggles heater operation
|
||||
# -------------------------------------------------------------------------
|
||||
- id: hasp_btn_heat_toggle
|
||||
alias: "HASP: p1b6 up -> heater operation toggle"
|
||||
mode: queued
|
||||
trigger:
|
||||
- platform: mqtt
|
||||
topic: "hasp/openhasp_1/state/p1b6"
|
||||
condition:
|
||||
- condition: template
|
||||
value_template: "{{ trigger.payload_json.event | default('') == 'up' }}"
|
||||
action:
|
||||
- service: switch.toggle
|
||||
target:
|
||||
entity_id: switch.rinnai_neo_gas_heater_heater_operation
|
||||
|
||||
# -------------------------------------------------------------------------
|
||||
# Flame button appearance
|
||||
# - Operation OFF: solid light grey background, white flame
|
||||
# - Operation ON, flame OFF: solid dark background, white flame
|
||||
# - Operation ON, flame ON: solid dark background, continuous red/orange flicker
|
||||
# -------------------------------------------------------------------------
|
||||
- id: hasp_heat_button_state
|
||||
alias: "HASP: update heat button state (p1b6)"
|
||||
mode: restart
|
||||
trigger:
|
||||
- platform: state
|
||||
entity_id:
|
||||
- switch.rinnai_neo_gas_heater_heater_operation
|
||||
- switch.rinnai_neo_gas_heater_rinnai_neo_gas_heater_power
|
||||
action:
|
||||
- choose:
|
||||
# OFF → dark grey (same as your other inactive buttons)
|
||||
- conditions:
|
||||
- condition: state
|
||||
entity_id: switch.rinnai_neo_gas_heater_heater_operation
|
||||
state: "off"
|
||||
sequence:
|
||||
- service: script.turn_off
|
||||
target:
|
||||
entity_id: script.hasp_heat_flame_flicker
|
||||
|
||||
- service: mqtt.publish
|
||||
data:
|
||||
topic: "hasp/openhasp_1/command/p1b6.text"
|
||||
payload: "\uE238"
|
||||
|
||||
- service: mqtt.publish
|
||||
data:
|
||||
topic: "hasp/openhasp_1/command/p1b6.text_color"
|
||||
payload: "#FFFFFF"
|
||||
|
||||
# solid dark grey (no gradient)
|
||||
- service: mqtt.publish
|
||||
data:
|
||||
topic: "hasp/openhasp_1/command/p1b6.bg_color"
|
||||
payload: "#2F3240"
|
||||
- service: mqtt.publish
|
||||
data:
|
||||
topic: "hasp/openhasp_1/command/p1b6.bg_grad_color"
|
||||
payload: "#2F3240"
|
||||
- service: mqtt.publish
|
||||
data:
|
||||
topic: "hasp/openhasp_1/command/p1b6.border_color"
|
||||
payload: "#2F3240"
|
||||
|
||||
# ON (not firing) → theme blue
|
||||
- conditions:
|
||||
- condition: state
|
||||
entity_id: switch.rinnai_neo_gas_heater_heater_operation
|
||||
state: "on"
|
||||
- condition: state
|
||||
entity_id: switch.rinnai_neo_gas_heater_rinnai_neo_gas_heater_power
|
||||
state: "off"
|
||||
sequence:
|
||||
- service: script.turn_off
|
||||
target:
|
||||
entity_id: script.hasp_heat_flame_flicker
|
||||
|
||||
- service: mqtt.publish
|
||||
data:
|
||||
topic: "hasp/openhasp_1/command/p1b6.text"
|
||||
payload: "\uE238"
|
||||
|
||||
- service: mqtt.publish
|
||||
data:
|
||||
topic: "hasp/openhasp_1/command/p1b6.text_color"
|
||||
payload: "#FFFFFF"
|
||||
|
||||
# MATCH THEME BLUE
|
||||
- service: mqtt.publish
|
||||
data:
|
||||
topic: "hasp/openhasp_1/command/p1b6.bg_color"
|
||||
payload: "#0095D9"
|
||||
- service: mqtt.publish
|
||||
data:
|
||||
topic: "hasp/openhasp_1/command/p1b6.bg_grad_color"
|
||||
payload: "#00B6FF"
|
||||
- service: mqtt.publish
|
||||
data:
|
||||
topic: "hasp/openhasp_1/command/p1b6.border_color"
|
||||
payload: "#0095D9"
|
||||
|
||||
# ON + flame → blue background + flicker
|
||||
- conditions:
|
||||
- condition: state
|
||||
entity_id: switch.rinnai_neo_gas_heater_heater_operation
|
||||
state: "on"
|
||||
- condition: state
|
||||
entity_id: switch.rinnai_neo_gas_heater_rinnai_neo_gas_heater_power
|
||||
state: "on"
|
||||
sequence:
|
||||
- service: mqtt.publish
|
||||
data:
|
||||
topic: "hasp/openhasp_1/command/p1b6.text"
|
||||
payload: "\uE238"
|
||||
|
||||
# keep blue background
|
||||
- service: mqtt.publish
|
||||
data:
|
||||
topic: "hasp/openhasp_1/command/p1b6.bg_color"
|
||||
payload: "#0095D9"
|
||||
- service: mqtt.publish
|
||||
data:
|
||||
topic: "hasp/openhasp_1/command/p1b6.bg_grad_color"
|
||||
payload: "#00B6FF"
|
||||
- service: mqtt.publish
|
||||
data:
|
||||
topic: "hasp/openhasp_1/command/p1b6.border_color"
|
||||
payload: "#0095D9"
|
||||
|
||||
- service: script.turn_on
|
||||
target:
|
||||
entity_id: script.hasp_heat_flame_flicker
|
||||
|
||||
# -------------------------------------------------------------------------
|
||||
# Start / restart display when HA starts
|
||||
# -------------------------------------------------------------------------
|
||||
- id: hasp_start_on_ha_start
|
||||
alias: "HASP: start display loop on HA start"
|
||||
trigger:
|
||||
- platform: homeassistant
|
||||
event: start
|
||||
action:
|
||||
- service: script.hasp_push_all_texts
|
||||
- service: script.hasp_push_static_texts
|
||||
- service: script.turn_on
|
||||
target:
|
||||
entity_id: script.hasp_rotate_setpoint_humidity
|
||||
|
||||
- id: hasp_push_on_panel_online
|
||||
alias: "HASP: push texts when panel goes online"
|
||||
mode: queued
|
||||
# -------------------------------------------------------------------------
|
||||
# Re-push screen state when panel comes online
|
||||
# -------------------------------------------------------------------------
|
||||
- id: hasp_start_on_panel_online
|
||||
alias: "HASP: start display loop when panel goes online"
|
||||
trigger:
|
||||
- platform: mqtt
|
||||
topic: "hasp/openhasp_1/status"
|
||||
topic: "hasp/openhasp_1/LWT"
|
||||
condition:
|
||||
- condition: template
|
||||
value_template: "{{ trigger.payload == 'online' }}"
|
||||
action:
|
||||
- delay: "00:00:05"
|
||||
- service: script.hasp_push_all_texts
|
||||
- service: script.hasp_push_static_texts
|
||||
- service: script.turn_on
|
||||
target:
|
||||
entity_id: script.hasp_rotate_setpoint_humidity
|
||||
|
||||
###############################################################################
|
||||
# SCRIPT: Push all texts to buttons
|
||||
# SCRIPTS
|
||||
###############################################################################
|
||||
script:
|
||||
hasp_push_all_texts:
|
||||
alias: "HASP: push all texts"
|
||||
# -------------------------------------------------------------------------
|
||||
# Push all current values / colours to the panel
|
||||
# Useful on HA startup and panel reconnect
|
||||
# -------------------------------------------------------------------------
|
||||
hasp_push_static_texts:
|
||||
alias: "HASP: push static texts"
|
||||
mode: queued
|
||||
sequence:
|
||||
- service: mqtt.publish
|
||||
data:
|
||||
topic: "hasp/openhasp_1/command/p1b1.text"
|
||||
payload: "{{ states('sensor.lounge_environment_lounge_environment_temperature')|float(0)|round(1) }} °C"
|
||||
|
||||
- service: mqtt.publish
|
||||
data:
|
||||
topic: "hasp/openhasp_1/command/p1b2.text"
|
||||
payload: "Set: {{ states('input_number.lounge_setpoint')|float(0)|round(1) }} °C"
|
||||
qos: 1
|
||||
retain: true
|
||||
payload: >
|
||||
{% if is_state('switch.rinnai_neo_gas_heater_rinnai_neo_gas_heater_test_mode', 'on') %}
|
||||
{% set raw = states('sensor.rinnai_neo_gas_heater_rinnai_neo_gas_heater_test_mode_temp') %}
|
||||
{% else %}
|
||||
{% set raw = states('sensor.lounge_environment_lounge_environment_temperature') %}
|
||||
{% endif %}
|
||||
{% set cleaned = raw
|
||||
| replace('°C', '')
|
||||
| replace('° C', '')
|
||||
| replace('C', '')
|
||||
| trim %}
|
||||
{% if cleaned not in ['unknown', 'unavailable', '', 'none', 'None'] %}
|
||||
{{ cleaned | float(0) | round(1) }} °C
|
||||
{% else %}
|
||||
-- °C
|
||||
{% endif %}
|
||||
|
||||
- service: mqtt.publish
|
||||
data:
|
||||
topic: "hasp/openhasp_1/command/p1b5.text"
|
||||
payload: >
|
||||
{% if is_state('sensor.gas_heater_operating','ON') %}
|
||||
HEAT ON
|
||||
{% else %}
|
||||
HEAT OFF
|
||||
{% endif %}
|
||||
{% set s = states('sensor.rinnai_neo_gas_heater_rinnai_neo_gas_heater_status_text') %}
|
||||
{{ s if s not in ['unknown', 'unavailable', ''] else 'HEATER --' }}
|
||||
|
||||
- service: mqtt.publish
|
||||
data:
|
||||
topic: "hasp/openhasp_1/command/p1b2.text"
|
||||
payload: >
|
||||
{% set s = states('sensor.rinnai_neo_gas_heater_setpoint_text') %}
|
||||
{{ 'Setpoint: ' ~ (s if s not in ['unknown', 'unavailable', ''] else '--') }}
|
||||
|
||||
# Push middle flame button state
|
||||
- service: mqtt.publish
|
||||
data:
|
||||
topic: "hasp/openhasp_1/command/p1b6.text"
|
||||
payload: "\uE238"
|
||||
|
||||
- choose:
|
||||
- conditions:
|
||||
- condition: state
|
||||
entity_id: switch.rinnai_neo_gas_heater_heater_operation
|
||||
state: "off"
|
||||
sequence:
|
||||
- service: mqtt.publish
|
||||
data:
|
||||
topic: "hasp/openhasp_1/command/p1b6.text_color"
|
||||
payload: "#FFFFFF"
|
||||
- service: mqtt.publish
|
||||
data:
|
||||
topic: "hasp/openhasp_1/command/p1b6.bg_color"
|
||||
payload: "#2F3240"
|
||||
- service: mqtt.publish
|
||||
data:
|
||||
topic: "hasp/openhasp_1/command/p1b6.bg_grad_color"
|
||||
payload: "#2F3240"
|
||||
- service: mqtt.publish
|
||||
data:
|
||||
topic: "hasp/openhasp_1/command/p1b6.border_color"
|
||||
payload: "#2F3240"
|
||||
|
||||
- conditions:
|
||||
- condition: state
|
||||
entity_id: switch.rinnai_neo_gas_heater_heater_operation
|
||||
state: "on"
|
||||
- condition: state
|
||||
entity_id: switch.rinnai_neo_gas_heater_rinnai_neo_gas_heater_power
|
||||
state: "off"
|
||||
sequence:
|
||||
- service: mqtt.publish
|
||||
data:
|
||||
topic: "hasp/openhasp_1/command/p1b6.text_color"
|
||||
payload: "#FFFFFF"
|
||||
- service: mqtt.publish
|
||||
data:
|
||||
topic: "hasp/openhasp_1/command/p1b6.bg_color"
|
||||
payload: "#0095D9"
|
||||
- service: mqtt.publish
|
||||
data:
|
||||
topic: "hasp/openhasp_1/command/p1b6.bg_grad_color"
|
||||
payload: "#00B6FF"
|
||||
- service: mqtt.publish
|
||||
data:
|
||||
topic: "hasp/openhasp_1/command/p1b6.border_color"
|
||||
payload: "#0095D9"
|
||||
|
||||
- conditions:
|
||||
- condition: state
|
||||
entity_id: switch.rinnai_neo_gas_heater_heater_operation
|
||||
state: "on"
|
||||
- condition: state
|
||||
entity_id: switch.rinnai_neo_gas_heater_rinnai_neo_gas_heater_power
|
||||
state: "on"
|
||||
sequence:
|
||||
- service: mqtt.publish
|
||||
data:
|
||||
topic: "hasp/openhasp_1/command/p1b6.bg_color"
|
||||
payload: "#0095D9"
|
||||
- service: mqtt.publish
|
||||
data:
|
||||
topic: "hasp/openhasp_1/command/p1b6.bg_grad_color"
|
||||
payload: "#00B6FF"
|
||||
- service: mqtt.publish
|
||||
data:
|
||||
topic: "hasp/openhasp_1/command/p1b6.border_color"
|
||||
payload: "#0095D9"
|
||||
- service: script.turn_on
|
||||
target:
|
||||
entity_id: script.hasp_heat_flame_flicker
|
||||
|
||||
# -------------------------------------------------------------------------
|
||||
# Rotate the middle information line between Setpoint and Humidity
|
||||
# Pauses humidity display while the setpoint hold flag is active
|
||||
# -------------------------------------------------------------------------
|
||||
hasp_rotate_setpoint_humidity:
|
||||
alias: "HASP: rotate setpoint and humidity"
|
||||
mode: restart
|
||||
sequence:
|
||||
- repeat:
|
||||
while:
|
||||
- condition: template
|
||||
value_template: "{{ true }}"
|
||||
sequence:
|
||||
- service: mqtt.publish
|
||||
data:
|
||||
topic: "hasp/openhasp_1/command/p1b2.text"
|
||||
payload: >
|
||||
{% set s = states('sensor.rinnai_neo_gas_heater_setpoint_text') %}
|
||||
{{ 'Setpoint: ' ~ (s if s not in ['unknown', 'unavailable', ''] else '--') }}
|
||||
|
||||
- delay:
|
||||
seconds: "{{ states('input_number.hasp_setpoint_humidity_cycle_seconds') | int(10) }}"
|
||||
|
||||
- condition: state
|
||||
entity_id: input_boolean.hasp_setpoint_hold_active
|
||||
state: "off"
|
||||
|
||||
- service: mqtt.publish
|
||||
data:
|
||||
topic: "hasp/openhasp_1/command/p1b2.text"
|
||||
payload: >
|
||||
{% set h = states('sensor.lounge_environment_humidity_mqtt') %}
|
||||
{% if h in ['unknown', 'unavailable', ''] %}
|
||||
Humidity: Unknown
|
||||
{% else %}
|
||||
Humidity: {{ h }}%
|
||||
{% endif %}
|
||||
|
||||
- delay:
|
||||
seconds: "{{ states('input_number.hasp_setpoint_humidity_cycle_seconds') | int(10) }}"
|
||||
|
||||
# -------------------------------------------------------------------------
|
||||
# Continuous flame flicker while heater operation is ON and flame/power is ON
|
||||
# Only the icon colour flickers. Background stays fixed.
|
||||
# Flicker colours are red <-> orange
|
||||
# -------------------------------------------------------------------------
|
||||
hasp_heat_flame_flicker:
|
||||
alias: "HASP: heat flame flicker"
|
||||
mode: restart
|
||||
sequence:
|
||||
- repeat:
|
||||
while:
|
||||
- condition: state
|
||||
entity_id: switch.rinnai_neo_gas_heater_heater_operation
|
||||
state: "on"
|
||||
- condition: state
|
||||
entity_id: switch.rinnai_neo_gas_heater_rinnai_neo_gas_heater_power
|
||||
state: "on"
|
||||
sequence:
|
||||
- service: mqtt.publish
|
||||
data:
|
||||
topic: "hasp/openhasp_1/command/p1b6.text_color"
|
||||
payload: "#FF3030"
|
||||
- delay: "00:00:00.35"
|
||||
|
||||
- service: mqtt.publish
|
||||
data:
|
||||
topic: "hasp/openhasp_1/command/p1b6.text_color"
|
||||
payload: "#FF8C00"
|
||||
- delay: "00:00:00.20"
|
||||
|
||||
- service: mqtt.publish
|
||||
data:
|
||||
topic: "hasp/openhasp_1/command/p1b6.text_color"
|
||||
payload: "#FF5A36"
|
||||
- delay: "00:00:00.30"
|
||||
|
||||
- service: mqtt.publish
|
||||
data:
|
||||
topic: "hasp/openhasp_1/command/p1b6.text_color"
|
||||
payload: "#FFA500"
|
||||
- delay: "00:00:00.18"
|
||||
|
||||
@@ -1,98 +0,0 @@
|
||||
# ESPresence Sensing
|
||||
# https://espresense.com/home_assistant
|
||||
#
|
||||
|
||||
# In the secrets.yaml file you want something like this to match each one.
|
||||
# Obviously you don't need to use secrets, but it helps if you are sharing your
|
||||
# home assistant config with others.
|
||||
#
|
||||
# btb09_uID: My_tracked_item_name_(ID)"
|
||||
# btb09_dID: "known:xxxxxxxxxxxx"
|
||||
# btb09_name: "My Tracked Item Name (ID)"
|
||||
# btb09_topic: espresense/devices/known:xxxxxxxxxxxx
|
||||
|
||||
sensor:
|
||||
- platform: mqtt_room
|
||||
unique_id: !secret btb01_uID
|
||||
device_id: !secret btb01_dID
|
||||
name: !secret btb01_name
|
||||
state_topic: !secret btb01_topic
|
||||
timeout: 60
|
||||
away_timeout: 120 # number of seconds after which the enitity will get status not_home
|
||||
- platform: mqtt_room
|
||||
unique_id: !secret btb02_uID
|
||||
device_id: !secret btb02_dID
|
||||
name: !secret btb02_name
|
||||
state_topic: !secret btb02_topic
|
||||
timeout: 60
|
||||
away_timeout: 120 # number of seconds after which the enitity will get status not_home
|
||||
- platform: mqtt_room
|
||||
unique_id: !secret btb03_uID
|
||||
device_id: !secret btb03_dID
|
||||
name: !secret btb03_name
|
||||
state_topic: !secret btb03_topic
|
||||
timeout: 60
|
||||
away_timeout: 120 # number of seconds after which the enitity will get status not_home
|
||||
- platform: mqtt_room
|
||||
unique_id: !secret btb04_uID
|
||||
device_id: !secret btb04_dID
|
||||
name: !secret btb04_name
|
||||
state_topic: !secret btb04_topic
|
||||
timeout: 60
|
||||
away_timeout: 120 # number of seconds after which the enitity will get status not_home
|
||||
- platform: mqtt_room
|
||||
unique_id: !secret btb05_uID
|
||||
device_id: !secret btb05_dID
|
||||
name: !secret btb05_name
|
||||
state_topic: !secret btb05_topic
|
||||
timeout: 60
|
||||
away_timeout: 120 # number of seconds after which the enitity will get status not_home
|
||||
- platform: mqtt_room
|
||||
unique_id: !secret btb06_uID
|
||||
device_id: !secret btb06_dID
|
||||
name: !secret btb06_name
|
||||
state_topic: !secret btb06_topic
|
||||
timeout: 60
|
||||
away_timeout: 120 # number of seconds after which the enitity will get status not_home
|
||||
- platform: mqtt_room
|
||||
unique_id: !secret btb07_uID
|
||||
device_id: !secret btb07_dID
|
||||
name: !secret btb07_name
|
||||
state_topic: !secret btb07_topic
|
||||
timeout: 60
|
||||
away_timeout: 120 # number of seconds after which the enitity will get status not_home
|
||||
- platform: mqtt_room
|
||||
unique_id: !secret btb08_uID
|
||||
device_id: !secret btb08_dID
|
||||
name: !secret btb08_name
|
||||
state_topic: !secret btb08_topic
|
||||
timeout: 60
|
||||
away_timeout: 120 # number of seconds after which the enitity will get status not_home
|
||||
- platform: mqtt_room
|
||||
unique_id: !secret btb09_uID
|
||||
device_id: !secret btb09_dID
|
||||
name: !secret btb09_name
|
||||
state_topic: !secret btb09_topic
|
||||
timeout: 60
|
||||
away_timeout: 120 # number of seconds after which the enitity will get status not_home
|
||||
- platform: mqtt_room
|
||||
unique_id: !secret btb10_uID
|
||||
device_id: !secret btb10_dID
|
||||
name: !secret btb10_name
|
||||
state_topic: !secret btb10_topic
|
||||
timeout: 60
|
||||
away_timeout: 120 # number of seconds after which the enitity will get status not_home
|
||||
- platform: mqtt_room
|
||||
unique_id: !secret btb11_uID
|
||||
device_id: !secret btb11_dID
|
||||
name: !secret btb11_name
|
||||
state_topic: !secret btb11_topic
|
||||
timeout: 60
|
||||
away_timeout: 120 # number of seconds after which the enitity will get status not_home
|
||||
- platform: mqtt_room
|
||||
unique_id: !secret btb12_uID
|
||||
device_id: !secret btb12_dID
|
||||
name: !secret btb12_name
|
||||
state_topic: !secret btb12_topic
|
||||
timeout: 60
|
||||
away_timeout: 120 # number of seconds after which the enitity will get status not_home
|
||||
Reference in New Issue
Block a user