Enhance vacuum automation logic by refining room state tracking and adding wait conditions to ensure proper phase transitions. Update logbook messages for clarity and improve handling of cleaning state changes.

This commit is contained in:
Carlo Costanzo
2025-12-15 10:41:57 -05:00
parent 7a6491709b
commit 69edb0658d

View File

@@ -7,6 +7,9 @@
# Related Issue: 1550
# Phases: sweep main, sweep baths, mop main, mop baths; notifications + idle auto-start
# -------------------------------------------------------------------
# Notes:
# - `sensor.l10s_vacuum_current_room` can change during transit; require a dwell (`for:`) and then wait for the vacuum to leave before dequeue/phase advance.
# - Avoid reissuing `dreame_vacuum.vacuum_clean_segment` while already cleaning; only send a new segment job when starting/resuming or switching phases.
######################################################################
## 1. Helpers
@@ -206,8 +209,9 @@ automation:
room_map: {14:'kitchen',12:'dining-room',10:'living room',7:'master-bedroom',15:'foyer',9:'stacey-office',17:'formal-dining',13:'hallway',8:'justin-bedroom',6:'paige-bedroom',4:'master-bathroom',2:'office',1:'pool-bath',3:'kids-bathroom'}
queue_raw: "{{ states('input_text.l10s_vacuum_room_queue') | default('', true) | string | replace(' ', '') }}"
queue_ints: "{{ queue_raw | regex_findall('[0-9]+') | map('int') | list | default([], true) }}"
current_room_id: "{{ trigger.to_state.attributes.room_id | default(state_attr('sensor.l10s_vacuum_current_room', 'room_id'), true) | int(0) }}"
matched_room_id: "{{ current_room_id if current_room_id > 0 and current_room_id in (queue_ints | default([], true)) else 0 }}"
cleaned_room_state: "{{ trigger.to_state.state if trigger.to_state is not none else '' }}"
cleaned_room_id: "{{ (trigger.to_state.attributes.room_id if trigger.to_state is not none else 0) | int(0) }}"
matched_room_id: "{{ cleaned_room_id if cleaned_room_id > 0 and cleaned_room_id in (queue_ints | default([], true)) else 0 }}"
remaining_list: >
{% set rem = [] %}
{% set removed = namespace(done=false) %}
@@ -229,6 +233,9 @@ automation:
next_phase: "{{ phase_order[phase_index + 1] if has_next_phase else '' }}"
condition:
- condition: template
value_template: >
{{ trigger.from_state is not none and trigger.to_state is not none and trigger.from_state.state != trigger.to_state.state }}
- condition: template
value_template: "{{ queue_ints | length > 0 }}"
- condition: template
@@ -241,6 +248,9 @@ automation:
state: 'on'
action:
- wait_template: "{{ states('sensor.l10s_vacuum_current_room') != cleaned_room_state }}"
timeout: '02:00:00'
continue_on_timeout: false
- service: input_text.set_value
target:
entity_id: input_text.l10s_vacuum_room_queue
@@ -249,7 +259,7 @@ automation:
- variables:
cleaned_raw: "{{ states('input_text.l10s_vacuum_rooms_cleaned_today') | default('', true) | string }}"
cleaned_parts: "{{ cleaned_raw | regex_findall('[^,]+') | map('trim') | reject('equalto','') | list }}"
room_name: "{{ room_map.get(matched_room_id, states('sensor.l10s_vacuum_current_room')) }}"
room_name: "{{ room_map.get(matched_room_id, cleaned_room_state) }}"
updated_cleaned: >
{% set parts = cleaned_parts %}
{% if room_name not in parts %}
@@ -265,11 +275,11 @@ automation:
- service: script.send_to_logbook
data:
topic: "VACUUM"
message: "{{ room_name }} is clean. Phase: {{ phase }}. Remaining: {{ remaining_count }}."
message: "{{ room_name }} completed. Phase: {{ phase }}. Remaining: {{ remaining_count }}."
- choose:
- conditions:
- condition: template
value_template: "{{ remaining_count > 0 }}"
value_template: "{{ remaining_count > 0 and not is_state('vacuum.l10s_vacuum', 'cleaning') }}"
sequence:
- service: script.l10s_vacuum_start_next_room
- conditions:
@@ -286,6 +296,9 @@ automation:
entity_id: input_text.l10s_vacuum_room_queue
data:
value: ""
- wait_template: "{{ not is_state('vacuum.l10s_vacuum', 'cleaning') }}"
timeout: '01:00:00'
continue_on_timeout: false
- service: script.l10s_vacuum_start_next_room
- conditions:
- condition: template
@@ -304,7 +317,10 @@ automation:
- service: input_boolean.turn_off
target:
entity_id: input_boolean.l10s_vacuum_on_demand
- service: script.l10s_vacuum_start_next_room
- service: vacuum.return_to_base
target:
entity_id: vacuum.l10s_vacuum
default: []
- alias: 'Vacuum Sensor Cleaning Silencer'
id: 6548de52-a4a4-4df2-9d66-9c2c15577a7f