Files

104 lines
3.3 KiB
YAML
Executable File

input_boolean:
sleep_mode:
name: Schlafmodus
icon: mdi:sleep
bed_sabrina:
name: Bett Sabrina
bed_dimitri:
name: Bett Dimitri
input_select:
# Sleep state Dimitri
sleep_state_dimitri:
name: Schlaf Dimitri
options:
- gerade hingelegt
- gerade aufgestanden
- wach
- schläft
- zurück im Bett
# Sleep state Sabrina
sleep_state_sabrina:
name: Schlaf Sabrina
options:
- gerade hingelegt
- gerade aufgestanden
- wach
- schläft
- zurück im Bett
automation:
# Sets the sleep state of the persons
- id: set_person_sleep_state
alias: "Bestimme Schlafstatus Personen"
mode: parallel
trigger:
- platform: state
entity_id: binary_sensor.bed_dimitri
for:
seconds: 10
- platform: state
entity_id: input_boolean.bed_dimitri
- platform: state
entity_id: input_select.sleep_state_dimitri
for:
minutes: 5
- platform: state
entity_id: input_boolean.bed_sabrina
- platform: state
entity_id: input_select.sleep_state_sabrina
for:
minutes: 5
action:
- variables:
person: "{{ trigger.to_state.entity_id.split('_')[-1] }}"
input_select: "input_select.sleep_state_{{ person }}"
new: "{{ trigger.to_state.state }}"
- service: input_select.select_option
data:
entity_id: "{{ input_select }}"
option: >
{% if new == 'on' and is_state(input_select, 'gerade aufgestanden') %}
zurück im Bett
{% elif new == 'on' %}
gerade hingelegt
{% elif new == 'off' %}
gerade aufgestanden
{% elif new == 'gerade aufgestanden' %}
wach
{% elif new in ['zurück im Bett', 'gerade hingelegt'] %}
schläft
{% else %}
{{ states(input_select) }}
{% endif %}
# Enable sleep mode when everyone is in bed, disable when everyone is awake
- id: set_sleep_mode_based_on_bed_occupancy
alias: "Schlafmodus einschalten wenn alle im Bett und ausschalten wenn alle wach sind."
mode: parallel
variables:
in_bed_states: ['gerade hingelegt', 'schläft', 'zurück im Bett']
trigger:
- platform: state
entity_id: input_select.sleep_state_dimitri
- platform: state
entity_id: input_select.sleep_state_sabrina
action:
- choose:
# IF everyone just laid down/sleeping/back to bed -> turn on sleep mode
- conditions:
- "{{ is_state('input_boolean.sleep_mode', 'off') }}"
- "{{ states('input_select.sleep_state_dimitri') in in_bed_states }}"
- "{{ states('input_select.sleep_state_sabrina') in in_bed_states }}"
sequence:
service: input_boolean.turn_on
entity_id: input_boolean.sleep_mode
# IF everyone awake -> turn off sleep mode
- conditions:
- "{{ is_state('input_boolean.sleep_mode', 'on') }}"
- "{{ is_state('input_select.sleep_state_dimitri', 'wach') }}"
- "{{ is_state('input_select.sleep_state_sabrina', 'wach') }}"
sequence:
service: input_boolean.turn_off
entity_id: input_boolean.sleep_mode