dishwasher:
# инпут для ввода времени отложенного старта
input_datetime:
dishwasher_startinrelative:
name: INPT|dishwasher_startinrelative
has_date: false
has_time: true
input_boolean:
dishwasher_needs_unloading:
name: Нужно разобрать посуду
icon: mdi:dishwasher
script:
dw_start_select_program:
alias: dw_start_select_program_relative
sequence:
- action: homeconnect_ws.start_program
data:
device_id: 0166c54489231f7edaf804c02ab6a652
start_in:
hours: "{{ state_attr('input_datetime.dishwasher_startinrelative', 'hour') }}"
minutes: "{{ state_attr('input_datetime.dishwasher_startinrelative', 'minute') }}"
seconds: "{{ state_attr('input_datetime.dishwasher_startinrelative', 'second') }}"
dw_stop_program:
alias: dw_stop_program
sequence:
- action: button.press
target:
entity_id: button.bosch_dishwasher_abort
- service: input_datetime.set_datetime
data:
time: "00:00:00"
target:
entity_id: input_datetime.dishwasher_startinrelative
dw_install_auto_45_65_extradry_extrarinse:
alias: dw_install_auto_45_65_extradry_extrarinse
sequence:
- service: select.select_option
data:
entity_id: select.bosch_dishwasher_selected_program
option: dishcare_dishwasher_program_auto2
dw_install_quick_65_extradry_extrarinse:
alias: dw_install_quick_65_extradry_extrarinse
sequence:
- service: select.select_option
data:
entity_id: select.bosch_dishwasher_selected_program
option: dishcare_dishwasher_program_quick65
dw_install_int_70_extradry_extrarinse:
alias: dw_install_int_70_extradry_extrarinse
sequence:
- service: select.select_option
data:
entity_id: select.bosch_dishwasher_selected_program
option: dishcare_dishwasher_program_intensiv70
dw_install_eco_50_extradry_extrarinse:
alias: dw_install_eco_50_extradry_extrarinse
sequence:
- service: select.select_option
data:
entity_id: select.bosch_dishwasher_selected_program
option: dishcare_dishwasher_program_eco50
dw_install_care:
alias: dw_install_care
sequence:
- service: select.select_option
data:
entity_id: select.bosch_dishwasher_selected_program
option: dishcare_dishwasher_program_machinecare
automation:
# ==========================================
# --- СБРОС ТАЙМЕРА ПРИ СТАРТЕ ---
# ==========================================
- id: dw_refresh_inp_dttm_dw
alias: "dw|refresh_inp_dttm_dw"
description: "Сброс времени отложенного старта"
mode: single
trigger:
- platform: state
entity_id: sensor.bosch_dishwasher_operation_state
from: null
to: "Run"
- platform: state
entity_id: sensor.bosch_dishwasher_operation_state
from: null
to: "DelayedStart"
action:
- service: input_datetime.set_datetime
data:
time: "00:00:00"
target:
entity_id: input_datetime.dishwasher_startinrelative
# ==========================================
# --- УВЕДОМЛЕНИЕ О ЗАВЕРШЕНИИ И РАЗБОРЕ ---
# ==========================================
- id: ntf_tg_dw_end_wash
alias: "ntf|tg|dw|end_wash"
description: "Уведомление о завершении мойки с проверкой открытия дверцы"
mode: single
trigger:
- platform: state
entity_id: sensor.bosch_dishwasher_operation_state
from: "Run"
to: "Finished"
action:
- service: input_boolean.turn_on
target:
entity_id: input_boolean.dishwasher_needs_unloading
- repeat:
sequence:
# Отправляем уведомление в обе группы!
- service: telegram_bot.send_message
data:
chat_id:
- -1002006010424
- -1003233671944
message: "✅ Мойка посуды завершена! Необходимо разобрать её."
parse_mode: html
inline_keyboard:
- '🌊 Посудомойка:/dw_control'
- '🔙 Главное меню:/menu_back, 🗑️ Прочитано:/menu_hide'
# Ждем открытия дверцы до 3 часов
- wait_for_trigger:
- platform: state
entity_id: binary_sensor.bosch_dishwasher_door
to: "on"
timeout: "03:00:00"
continue_on_timeout: true
# Если дверцу открыли
- choose:
- conditions:
- condition: state
entity_id: binary_sensor.bosch_dishwasher_door
state: "on"
sequence:
- delay: "00:01:00"
# Проверяем, что она всё ещё открыта (посуду разбирают)
- condition: state
entity_id: binary_sensor.bosch_dishwasher_door
state: "on"
- service: telegram_bot.send_message
data:
chat_id:
- -1002006010424
- -1003233671944
message: "🎉 Посудомойка успешно разобрана!"
parse_mode: html
- service: input_boolean.turn_off
target:
entity_id: input_boolean.dishwasher_needs_unloading
until:
- condition: state
entity_id: binary_sensor.bosch_dishwasher_door
state: "on"
for:
minutes: 1
# ==========================================
# --- КОМАНДА: УСТАНОВКА ТАЙМЕРА (/time) ---
# ==========================================
- id: dw_install_time_startinrelative
alias: "dw|install_time_startinrelative"
mode: single
trigger:
- platform: event
event_type: telegram_command
event_data:
command: "/time"
- platform: event
event_type: telegram_command
event_data:
command: "/time@ha_dddennnisss_bot"
action:
- choose:
# Вариант 1: формат HH:MM (например /time 14:30)
- conditions: >
{{ trigger.event.data.args is defined and
trigger.event.data.args | length > 0 and
':' in trigger.event.data.args[0] }}
sequence:
- variables:
time_parts: "{{ trigger.event.data.args[0].split(':') }}"
- service: input_datetime.set_datetime
data:
time: "{{ '%02d:%02d:00' | format(time_parts[0] | int, time_parts[1] | int) }}"
target:
entity_id: input_datetime.dishwasher_startinrelative
- service: telegram_bot.send_message
data:
chat_id: "{{ trigger.event.data.chat_id }}"
message: "✅ Отложенный запуск через {{ '%02d:%02d' | format(time_parts[0] | int, time_parts[1] | int) }}"
parse_mode: html
inline_keyboard:
- '▶️ Старт программы:/toggle_dw_start, ❌ Сброс пуска:/toggle_dw_delay_clear'
- '🔙 Меню:/menu_back, 🌊 Посудомойка:/dw_control'
# Вариант 2: только минуты (например /time 45)
- conditions: >
{{ trigger.event.data.args is defined and
trigger.event.data.args | length > 0 and
trigger.event.data.args[0] | int(default=0) > 0 and
':' not in trigger.event.data.args[0] }}
sequence:
- variables:
minutes_only: "{{ trigger.event.data.args[0] | int }}"
target_hour: "{{ (minutes_only // 60) % 24 }}"
target_minute: "{{ minutes_only % 60 }}"
- service: input_datetime.set_datetime
data:
time: "{{ '%02d:%02d:00' | format(target_hour, target_minute) }}"
target:
entity_id: input_datetime.dishwasher_startinrelative
- service: telegram_bot.send_message
data:
chat_id: "{{ trigger.event.data.chat_id }}"
message: "✅ Отложенный запуск через {{ '%02d:%02d' | format(target_hour, target_minute) }}"
parse_mode: html
inline_keyboard:
- '▶️ Старт программы:/toggle_dw_start, ❌ Сброс пуска:/toggle_dw_delay_clear'
- '🔙 Меню:/menu_back, 🌊 Посудомойка:/dw_control'
# Ошибка: неверный формат
default:
- service: telegram_bot.send_message
data:
chat_id: "{{ trigger.event.data.chat_id }}"
message: "⚠️ Укажите время в правильном формате:\n/time 14:30 (часы:минуты)\nили\n/time 45 (только минуты)"
parse_mode: html
# ==========================================
# --- УВЕДОМЛЕНИЕ: МАЛО СОЛИ ---
# ==========================================
- id: ntf_tg_dw_salt_off
alias: "ntf|tg|dw_salt_off"
description: "Каждые 6 часов уведомлять, если соль закончилась"
trigger:
- platform: time_pattern
hours: "/6"
condition:
- condition: state
entity_id: sensor.bosch_dishwasher_salt
state: "nearly_empty"
action:
- service: telegram_bot.send_message
data:
chat_id:
- -1002006010424
- -1003233671944
parse_mode: html
message: |
🧂❌ Внимание! Соль в посудомоечной машине почти закончилась.
Пожалуйста, пополните резервуар как можно скорее.
inline_keyboard:
- '🔙 Главное меню:/menu_back, 🗑️ Прочитано:/menu_hide'