178 lines
6.1 KiB
YAML
178 lines
6.1 KiB
YAML
################################################################
|
|
## Packages / Persistent States
|
|
################################################################
|
|
|
|
################################################################
|
|
## Add `persistent: true` in the customize section to enable
|
|
## persistence on an entity.
|
|
##
|
|
## This currently supports: automation, input_boolean,
|
|
## input_select, input_number, light, and switch.
|
|
##
|
|
## Example Configuration:
|
|
##
|
|
## homeassistant:
|
|
## customize:
|
|
## automation.good_morning_lights:
|
|
## persistent: true
|
|
##
|
|
## input_boolean.notify_arrival:
|
|
## persistent: true
|
|
##
|
|
## input_select.light_color_1:
|
|
## persistent: true
|
|
##
|
|
## input_number.bedroom_brightness:
|
|
## persistent: true
|
|
##
|
|
## light.bedroom:
|
|
## persistent: true
|
|
##
|
|
## switch.bedroom_fan:
|
|
## persistent: true
|
|
################################################################
|
|
|
|
################################################
|
|
## Customize
|
|
################################################
|
|
|
|
homeassistant:
|
|
customize:
|
|
################################################
|
|
## Node Anchors
|
|
################################################
|
|
|
|
package.node_anchors:
|
|
customize: &customize
|
|
package: 'persistence'
|
|
|
|
expose: &expose
|
|
<<: *customize
|
|
haaska_hidden: false
|
|
homebridge_hidden: false
|
|
|
|
################################################
|
|
## Automation
|
|
################################################
|
|
|
|
automation.persistence_enable_automations:
|
|
<<: *customize
|
|
friendly_name: "Persistence Enable Automations"
|
|
|
|
automation.persistence_publish:
|
|
<<: *customize
|
|
friendly_name: "Persistence Publish"
|
|
|
|
automation.persistence_subscribe_binary:
|
|
<<: *customize
|
|
friendly_name: "Persistence Subscribe (Binary)"
|
|
|
|
automation.persistence_subscribe_select_option:
|
|
<<: *customize
|
|
friendly_name: "Persistence Subscribe (Select Option)"
|
|
|
|
automation.persistence_subscribe_select_value:
|
|
<<: *customize
|
|
friendly_name: "Persistence from MQTT (Select Value)"
|
|
|
|
################################################
|
|
## Automation
|
|
################################################
|
|
|
|
automation:
|
|
################################################
|
|
## Persistent Publisher
|
|
################################################
|
|
|
|
- alias: persistence_publish
|
|
initial_state: 'on'
|
|
hide_entity: true
|
|
trigger:
|
|
- platform: event
|
|
event_type: state_changed
|
|
condition:
|
|
- condition: template
|
|
value_template: "{{ trigger.event.data is not none }}"
|
|
- condition: template
|
|
value_template: "{{ trigger.event.data.new_state is not none }}"
|
|
- condition: template
|
|
value_template: "{{ trigger.event.data.new_state.attributes is not none }}"
|
|
- condition: template
|
|
value_template: "{{ trigger.event.data.new_state.attributes.persistent|default(false, true) }}"
|
|
- condition: template
|
|
value_template: "{{ trigger.event.data.old_state is not none }}"
|
|
- condition: template
|
|
value_template: "{{ trigger.event.data.new_state.state != trigger.event.data.old_state.state }}"
|
|
- condition: or
|
|
conditions:
|
|
- condition: template
|
|
value_template: "{{ trigger.event.data.entity_id.split('.')[0] == 'automation' }}"
|
|
- condition: template
|
|
value_template: "{{ trigger.event.data.entity_id.split('.')[0] == 'input_boolean' }}"
|
|
- condition: template
|
|
value_template: "{{ trigger.event.data.entity_id.split('.')[0] == 'input_select' }}"
|
|
- condition: template
|
|
value_template: "{{ trigger.event.data.entity_id.split('.')[0] == 'input_number' }}"
|
|
- condition: template
|
|
value_template: "{{ trigger.event.data.entity_id.split('.')[0] == 'light' }}"
|
|
- condition: template
|
|
value_template: "{{ trigger.event.data.entity_id.split('.')[0] == 'switch' }}"
|
|
action:
|
|
- service: mqtt.publish
|
|
data_template:
|
|
topic: "home-assistant/{{ trigger.event.data.entity_id|replace('.', '/') }}"
|
|
payload: "{{ trigger.event.data.new_state.state }}"
|
|
retain: true
|
|
|
|
################################################
|
|
## Persistent Subscriptions
|
|
################################################
|
|
|
|
- alias: persistence_subscribe_binary
|
|
initial_state: 'on'
|
|
hide_entity: true
|
|
trigger:
|
|
- platform: mqtt
|
|
topic: home-assistant/automation/+
|
|
- platform: mqtt
|
|
topic: home-assistant/input_boolean/+
|
|
- platform: mqtt
|
|
topic: home-assistant/light/+
|
|
- platform: mqtt
|
|
topic: home-assistant/switch/+
|
|
condition: &subscribe_condition
|
|
- condition: template
|
|
value_template: "{{ ((states[trigger.topic.split('/')[1]][trigger.topic.split('/')[2]]|default).attributes|default).persistent|default(false, true) }}"
|
|
- condition: template
|
|
value_template: "{{ not is_state(trigger.topic|replace('home-assistant/', '')|replace('/', '.'), trigger.payload) }}"
|
|
action: &subscribe_action
|
|
- service_template: "{{ trigger.topic.split('/')[1] }}.turn_{{ trigger.payload|lower }}"
|
|
data_template:
|
|
entity_id: "{{ trigger.topic|replace('home-assistant/', '')|replace('/', '.') }}"
|
|
|
|
- alias: persistence_subscribe_select_option
|
|
initial_state: 'on'
|
|
hide_entity: true
|
|
trigger:
|
|
- platform: mqtt
|
|
topic: home-assistant/input_select/+
|
|
condition: *subscribe_condition
|
|
action:
|
|
- service_template: "{{ trigger.topic.split('/')[1] }}.select_option"
|
|
data_template:
|
|
entity_id: "{{ trigger.topic|replace('home-assistant/', '')|replace('/', '.') }}"
|
|
option: "{{ trigger.payload }}"
|
|
|
|
- alias: persistence_subscribe_select_value
|
|
initial_state: 'on'
|
|
hide_entity: true
|
|
trigger:
|
|
- platform: mqtt
|
|
topic: home-assistant/input_number/+
|
|
condition: *subscribe_condition
|
|
action:
|
|
- service_template: "{{ trigger.topic.split('/')[1] }}.select_value"
|
|
data_template:
|
|
entity_id: "{{ trigger.topic|replace('home-assistant/', '')|replace('/', '.') }}"
|
|
value: "{{ trigger.payload }}"
|