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'