telegramv2: automation: ## --------------------------------------------------------- ## СТАРТОВАЯ АВТОМАТИЗАЦИЯ ГЛАВНОГО МЕНЮ (/go) ## --------------------------------------------------------- - id: telegram_menu_start alias: "Вызов меню управления телеграм" initial_state: true trigger: - platform: event event_type: telegram_command event_data: command: "/go" # --- ДОБАВЛЕННЫЙ ТРИГГЕР ДЛЯ ГРУППЫ --- - platform: event event_type: telegram_command event_data: command: "/go@ha_dddennnisss_bot" action: - service: weather.get_forecasts continue_on_error: true data: type: hourly target: entity_id: weather.yandex_pogoda response_variable: hourly_data - service: telegram_bot.send_message data: chat_id: "{{ trigger.event.data.chat_id }}" parse_mode: html message: | {%- set s = (as_timestamp(now()) - as_timestamp(states('sensor.system_monitor_last_boot'))) | int -%} {%- set current_cond = states('weather.yandex_pogoda') -%} {%- set weather_available = current_cond not in ['unavailable', 'unknown'] and hourly_data is defined and 'weather.yandex_pogoda' in hourly_data -%} {%- if weather_available -%} {%- set condition_map = {'clear': '☀️', 'partlycloudy': '🌤', 'cloudy': '☁️', 'overcast': '🌫', 'rainy': '🌧', 'pouring': '🌧', 'lightrain': '🌦', 'snowy': '🌨', 'snowyrainy': '🌨🌧', 'exceptional': '❗', 'hail': '🌨', 'lightning': '⛈', 'lightning-rainy': '⛈', 'fog': '🌫', 'windy': '💨', 'windy-variant': '💨', 'partly-cloudy-day': '🌤', 'partly-cloudy-night': '🌤', 'clear-night': '🌙', 'none': '❓'} -%} {%- set t = state_attr('weather.yandex_pogoda', 'temperature') | default('?', true) -%} {%- set w = state_attr('weather.yandex_pogoda', 'wind_speed') | float(0) -%} {%- set wind_desc = 'Штиль' if w < 1 else 'Тихий' if w < 5 else 'Лёгкий' if w < 11 else 'Слабый' if w < 19 else 'Умеренный' if w < 28 else 'Свежий' if w < 38 else 'Сильный' if w < 49 else 'Крепкий' if w < 61 else 'Очень крепкий' if w < 74 else 'Шторм' if w < 88 else 'Сильный шторм' if w < 102 else 'Жестокий шторм' if w < 117 else 'Ураган' -%} {%- set weather_text = '🌍 Погода: 🌡️ ' ~ t ~ '° - ' ~ condition_map.get(current_cond, '❓') ~ '\n💨 ' ~ w ~ ' км/ч — ' ~ wind_desc -%} {%- if hourly_data['weather.yandex_pogoda'].forecast is defined -%} {%- set ns = namespace(f_list=[]) -%} {%- for hour in hourly_data['weather.yandex_pogoda'].forecast[:3] -%} {%- set ns.f_list = ns.f_list + [hour.datetime.strftime("%H:%M") ~ ' ' ~ (hour.temperature | round(0)) ~ '° ' ~ condition_map.get(hour.condition, '☁️')] -%} {%- endfor -%} {%- set weather_text = weather_text ~ '\n🕒 ' ~ ns.f_list | join(' | ') -%} {%- endif -%} {%- else -%} {%- set weather_text = '🌍 Погода: ⚠️ Данные погоды временно недоступны' -%} {%- endif -%} 🔧 HA: ⚙️ {{ states('sensor.qemu_haos10_5_100_cpu_used') | round(1) }}% | 💾 {{ states('sensor.qemu_haos10_5_100_memory_used_percentage') | round(1) }}% | 🌡️ {{ states('sensor.proxmox_cpu_temperature') }}°C | ⏱️ {{ s // 86400 }}d {{ '%02d:%02d' % ((s % 86400) // 3600, (s % 3600) // 60) }} 🚪 Дверь: {% if is_state('binary_sensor.e4aaec3747b2_contact', 'off') %}закрыта{% else %}открыта{% endif %} 🏡 Дома: {% set denis_home = is_state('device_tracker.google_maps_108918666344169166438', 'home') %}{% set lena_home = is_state('device_tracker.google_maps_118311730364158481019', 'home') %}{% if denis_home and lena_home %}Денис и Лена{% elif denis_home %}Денис{% elif lena_home %}Лена{% else %}Все ушли{% endif %} 🚶 Присутствие: {% if not is_state('sensor.room_motion', 'False') %}Зал✔ {% endif %}{% if is_state('binary_sensor.datchik_prisutstviia_kukhnia_presence', 'on') %}Кухня✔ {% endif %}{% if is_state('binary_sensor.datchik_prisutstviia_vannaia_presence', 'on') %}Ванна✔ {% endif %}{% if is_state('binary_sensor.0x00158d000707efdf_motion', 'on') %}Коридор✔{% endif %} 🌡️ {{ states('sensor.a4c1387695b9_temperature') }}°C | 💧 {{ states('sensor.a4c1387695b9_humidity') }}% 🍽️: {% set dw_status = states('sensor.bosch_dishwasher_operation_state') %}{% set dw_salt = states('sensor.bosch_dishwasher_salt') %}{% if dw_salt == 'full' %}{% if dw_status == 'Ready' %}{% if states('input_datetime.dishwasher_startinrelative') == '00:00:00' %}{% if is_state('input_boolean.dishwasher_needs_unloading', 'on') %}Нужно разобрать посуду{% else %}Ожидание{% endif %}{% else %}Отложенный запуск: {{ states('input_datetime.dishwasher_startinrelative') }}{% endif %}{% elif dw_status == 'Run' %}✅ Выполнено: {{ states('sensor.bosch_dishwasher_program_progress') }}%{% else %}ℹ️ {{ dw_status }}{% endif %}{% else %}⚠️ Проверь соль!{% endif %} 👔: {% if is_state('binary_sensor.stiralnaia_mashina_s_gorizontalnoi_zagruzkoi_error_state', 'on') %}❗ Ошибка стиралки ❗{% else %}{% set wm_state = states('sensor.stiralnaia_mashina_s_gorizontalnoi_zagruzkoi_run_state') %}{% if wm_state in ['Стирка', 'Ополаскивание', 'Отжим', 'Сушка'] %}Осталось: {{ state_attr('sensor.stiralnaia_mashina_s_gorizontalnoi_zagruzkoi','remain_time') }}{% elif wm_state == 'Охлаждение' %}❗ Достань бельё❗{% endif %}{% endif %} 🌀: {% set vac = states('sensor.dreame_mc1808_044c_status') %}{% if vac == 'сухая уборка' %}Уборка: {{ state_attr('vacuum.stytj01zhm','cleaning_time') or 0 }} мин{% elif vac == 'ошибка' %}❗ Ошибка пылесоса ❗{% else %}{{ vac | capitalize }} 🔋{{ states('sensor.dreame_mc1808_044c_battery_level') }}%{% endif %}{% if is_state('sensor.vacuum_water_box', '1') %} ❗ Убери бак с водой ❗{% endif %} {{ weather_text }} inline_keyboard: - '🌍 Proxmox:/prxmx_control, 🌈 Погода:/wthr_control' - '🌀 Пылесос:/vcm_control, 🌊 Посудомойка:/dw_control' - '🏢 Квартира:/kv_control, 🎮 SteamDeck {% if is_state("binary_sensor.steamdeck", "off") %}🔴{% else %}🟢{% endif %}:/sd_control' - '💡 Выкл весь свет:/toggle_off_lght' - '📍 gps:/gps_control, 🛴 Самокат:/sc_control' - '⬇️ Торренты:/tr_control, ⚙️ Автоматизация:/au_control' - '🔔 Домофон:/intercom_menu' - '🔄 Обновить:/menu_back, 🗑 Прочитано:/menu_hide' # Автоматизация отключения света по таймеру \\ /homeassistant/includes/packages/controls_light.yaml ## --------------------------------------------------------- ## КОНТРОЛЛЕР ГЛАВНОГО МЕНЮ (Обработка кнопок) ## --------------------------------------------------------- - id: telegram_menu_control alias: "Главное меню управления телеграм" initial_state: true trigger: - platform: event event_type: telegram_callback action: - choose: # --- КНОПКА: ЗАКРЫТЬ МЕНЮ --- - conditions: "{{ trigger.event.data.command == '/menu_hide' }}" sequence: - service: telegram_bot.delete_message data: message_id: "{{ trigger.event.data.message.message_id }}" chat_id: "{{ trigger.event.data.chat_id }}" # --- КНОПКА: ВЫКЛЮЧИТЬ СВЕТ --- - conditions: "{{ trigger.event.data.command == '/toggle_off_lght' }}" sequence: - service: input_button.press target: entity_id: input_button.btn_vykliuchit_ves_svet - service: telegram_bot.answer_callback_query data: callback_query_id: "{{ trigger.event.data.id }}" message: "💡 Свет выключен!" # --- КНОПКА: ОБНОВИТЬ ГЛАВНОЕ МЕНЮ --- - conditions: "{{ trigger.event.data.command == '/menu_back' }}" sequence: - service: weather.get_forecasts continue_on_error: true data: type: hourly target: entity_id: weather.yandex_pogoda response_variable: hourly_data - service: telegram_bot.edit_message data: message_id: "{{ trigger.event.data.message.message_id }}" chat_id: "{{ trigger.event.data.chat_id }}" parse_mode: html message: | {%- set s = (as_timestamp(now()) - as_timestamp(states('sensor.system_monitor_last_boot'))) | int -%} {%- set current_cond = states('weather.yandex_pogoda') -%} {%- set weather_available = current_cond not in ['unavailable', 'unknown'] and hourly_data is defined and 'weather.yandex_pogoda' in hourly_data -%} {%- if weather_available -%} {%- set condition_map = {'clear': '☀️', 'partlycloudy': '🌤', 'cloudy': '☁️', 'overcast': '🌫', 'rainy': '🌧', 'pouring': '🌧', 'lightrain': '🌦', 'snowy': '🌨', 'snowyrainy': '🌨🌧', 'exceptional': '❗', 'hail': '🌨', 'lightning': '⛈', 'lightning-rainy': '⛈', 'fog': '🌫', 'windy': '💨', 'windy-variant': '💨', 'partly-cloudy-day': '🌤', 'partly-cloudy-night': '🌤', 'clear-night': '🌙', 'none': '❓'} -%} {%- set t = state_attr('weather.yandex_pogoda', 'temperature') | default('?', true) -%} {%- set w = state_attr('weather.yandex_pogoda', 'wind_speed') | float(0) -%} {%- set wind_desc = 'Штиль' if w < 1 else 'Тихий' if w < 5 else 'Лёгкий' if w < 11 else 'Слабый' if w < 19 else 'Умеренный' if w < 28 else 'Свежий' if w < 38 else 'Сильный' if w < 49 else 'Крепкий' if w < 61 else 'Очень крепкий' if w < 74 else 'Шторм' if w < 88 else 'Сильный шторм' if w < 102 else 'Жестокий шторм' if w < 117 else 'Ураган' -%} {%- set weather_text = '🌍 Погода: 🌡️ ' ~ t ~ '° - ' ~ condition_map.get(current_cond, '❓') ~ '\n💨 ' ~ w ~ ' км/ч — ' ~ wind_desc -%} {%- if hourly_data['weather.yandex_pogoda'].forecast is defined -%} {%- set ns = namespace(f_list=[]) -%} {%- for hour in hourly_data['weather.yandex_pogoda'].forecast[:3] -%} {%- set ns.f_list = ns.f_list + [hour.datetime.strftime("%H:%M") ~ ' ' ~ (hour.temperature | round(0)) ~ '° ' ~ condition_map.get(hour.condition, '☁️')] -%} {%- endfor -%} {%- set weather_text = weather_text ~ '\n🕒 ' ~ ns.f_list | join(' | ') -%} {%- endif -%} {%- else -%} {%- set weather_text = '🌍 Погода: ⚠️ Данные погоды временно недоступны' -%} {%- endif -%} 🔧 HA: ⚙️ {{ states('sensor.qemu_haos10_5_100_cpu_used') | round(1) }}% | 💾 {{ states('sensor.qemu_haos10_5_100_memory_used_percentage') | round(1) }}% | 🌡️ {{ states('sensor.proxmox_cpu_temperature') }}°C | ⏱️ {{ s // 86400 }}d {{ '%02d:%02d' % ((s % 86400) // 3600, (s % 3600) // 60) }} 🚪 Дверь: {% if is_state('binary_sensor.e4aaec3747b2_contact', 'off') %}закрыта{% else %}открыта{% endif %} 🏡 Дома: {% set denis_home = is_state('device_tracker.google_maps_108918666344169166438', 'home') %}{% set lena_home = is_state('device_tracker.google_maps_118311730364158481019', 'home') %}{% if denis_home and lena_home %}Денис и Лена{% elif denis_home %}Денис{% elif lena_home %}Лена{% else %}Все ушли{% endif %} 🚶 Присутствие: {% if not is_state('sensor.room_motion', 'False') %}Зал✔ {% endif %}{% if is_state('binary_sensor.datchik_prisutstviia_kukhnia_presence', 'on') %}Кухня✔ {% endif %}{% if is_state('binary_sensor.datchik_prisutstviia_vannaia_presence', 'on') %}Ванна✔ {% endif %}{% if is_state('binary_sensor.0x00158d000707efdf_motion', 'on') %}Коридор✔{% endif %} 🌡️ {{ states('sensor.a4c1387695b9_temperature') }}°C | 💧 {{ states('sensor.a4c1387695b9_humidity') }}% 🍽️: {% set dw_status = states('sensor.bosch_dishwasher_operation_state') %}{% set dw_salt = states('sensor.bosch_dishwasher_salt') %}{% if dw_salt == 'full' %}{% if dw_status == 'Ready' %}{% if states('input_datetime.dishwasher_startinrelative') == '00:00:00' %}{% if is_state('input_boolean.dishwasher_needs_unloading', 'on') %}Нужно разобрать посуду{% else %}Ожидание{% endif %}{% else %}Отложенный запуск: {{ states('input_datetime.dishwasher_startinrelative') }}{% endif %}{% elif dw_status == 'Run' %}✅ Выполнено: {{ states('sensor.bosch_dishwasher_program_progress') }}%{% else %}ℹ️ {{ dw_status }}{% endif %}{% else %}⚠️ Проверь соль!{% endif %} 👔: {% if is_state('binary_sensor.stiralnaia_mashina_s_gorizontalnoi_zagruzkoi_error_state', 'on') %}❗ Ошибка стиралки ❗{% else %}{% set wm_state = states('sensor.stiralnaia_mashina_s_gorizontalnoi_zagruzkoi_run_state') %}{% if wm_state in ['Стирка', 'Ополаскивание', 'Отжим', 'Сушка'] %}Осталось: {{ state_attr('sensor.stiralnaia_mashina_s_gorizontalnoi_zagruzkoi','remain_time') }}{% elif wm_state == 'Охлаждение' %}❗ Достань бельё❗{% endif %}{% endif %} 🌀: {% set vac = states('sensor.dreame_mc1808_044c_status') %}{% if vac == 'сухая уборка' %}Уборка: {{ state_attr('vacuum.stytj01zhm','cleaning_time') or 0 }} мин{% elif vac == 'ошибка' %}❗ Ошибка пылесоса ❗{% else %}{{ vac | capitalize }} 🔋{{ states('sensor.dreame_mc1808_044c_battery_level') }}%{% endif %}{% if is_state('sensor.vacuum_water_box', '1') %} ❗ Убери бак с водой ❗{% endif %} {{ weather_text }} inline_keyboard: - '🌍 Proxmox:/prxmx_control, 🌈 Погода:/wthr_control' - '🌀 Пылесос:/vcm_control, 🌊 Посудомойка:/dw_control' - '🏢 Квартира:/kv_control, 🎮 SteamDeck {% if is_state("binary_sensor.steamdeck", "off") %}🔴{% else %}🟢{% endif %}:/sd_control' - '💡 Выкл весь свет:/toggle_off_lght' - '📍 gps:/gps_control, 🛴 Самокат:/sc_control' - '⬇️ Торренты:/tr_control, ⚙️ Автоматизация:/au_control' - '🔔 Домофон:/intercom_menu' - '🔄 Обновить:/menu_back, 🗑 Прочитано:/menu_hide' # --- МЕНЮ: PROXMOX --- - conditions: "{{ trigger.event.data.command == '/prxmx_control' }}" sequence: - service: telegram_bot.answer_callback_query data: callback_query_id: "{{ trigger.event.data.id }}" message: "🔄 Обновляю статус Proxmox..." - service: telegram_bot.edit_message data: message_id: "{{ trigger.event.data.message.message_id }}" chat_id: "{{ trigger.event.data.chat_id }}" message: >- 🌍 Состояние Proxmox: 📈 CPU: {{ states('sensor.node_pr_cpu_used') | round(2) }} % 🌡️ {{ states('sensor.proxmox_cpu_temperature') }} ℃ 📝 RAM: {{ states('sensor.node_pr_memory_used_percentage') | round(2) }} % 💾 Disk: {{ states('sensor.node_pr_disk_used_percentage') | round(2) }} % 🔄 Обновления: {% if is_state('binary_sensor.node_pr_updates_packages', 'on') %} есть {% else %} нет {% endif %} 🔄 Обновлено: {{ now().strftime('%H:%M:%S') }} inline_keyboard: - '💽 HA - {% if is_state("binary_sensor.qemu_haos10_5_100_status", "off") %}🔴{% else %}🟢{% endif %}:/prxmx_ha_control' - '💽 Samba - {% if is_state("binary_sensor.lxc_docker_101_status", "off") %}🔴{% else %}🟢{% endif %}:/prxmx_smb_control, 📺 Plex - {% if is_state("binary_sensor.lxc_plex_104_status", "off") %}🔴{% else %}🟢{% endif %}:/prxmx_plx_control' - '🪟 Winjob - {% if is_state("binary_sensor.qemu_wni10forjob_105_status", "off") %}🔴{% else %}🟢{% endif %}:/prxmx_winjob_control' - '🔄 Перезагрузить сервер:/toggle_prxm_rstr' - '🔙 Назад:/menu_back, 🔄 Обновить:/prxmx_control' # --- МЕНЮ: WINJOB --- - conditions: "{{ trigger.event.data.command == '/prxmx_winjob_control' }}" sequence: - service: telegram_bot.answer_callback_query data: callback_query_id: "{{ trigger.event.data.id }}" message: "🔄 Обновляю статус Winjob..." - service: telegram_bot.edit_message data: message_id: "{{ trigger.event.data.message.message_id }}" chat_id: "{{ trigger.event.data.chat_id }}" message: >- 🪟 Состояние Winjob: 📈 CPU: {{ states('sensor.qemu_wni10forjob_105_cpu_used') | round(2) }} % 📝 RAM: {{ states('sensor.qemu_wni10forjob_105_memory_used_percentage') | round(2) }} % 💾 Disk: {{ states('sensor.qemu_wni10forjob_105_disk_used_percentage') | round(2) }} % 🔄 Обновлено: {{ now().strftime('%H:%M:%S') }} inline_keyboard: - '▶️ Старт:/toggle_prxm_winjob_strt, 🔄 Рестарт:/toggle_prxm_winjob_rstrt' - '🛑 Выключить:/toggle_prxm_winjob_off' - '🔙 Назад:/prxmx_control, 🔄 Обновить:/prxmx_winjob_control' # --- КНОПКИ УПРАВЛЕНИЯ WINJOB (С плавным обновлением) --- - conditions: "{{ trigger.event.data.command == '/toggle_prxm_winjob_strt' }}" sequence: - service: button.press target: entity_id: button.qemu_wni10forjob_105_start - service: telegram_bot.answer_callback_query data: callback_query_id: "{{ trigger.event.data.id }}" message: "▶️ Winjob запускается..." - service: telegram_bot.edit_message data: message_id: "{{ trigger.event.data.message.message_id }}" chat_id: "{{ trigger.event.data.chat_id }}" message: >- 🪟 Состояние Winjob: 📈 CPU: {{ states('sensor.qemu_wni10forjob_105_cpu_used') | round(2) }} % 📝 RAM: {{ states('sensor.qemu_wni10forjob_105_memory_used_percentage') | round(2) }} % 💾 Disk: {{ states('sensor.qemu_wni10forjob_105_disk_used_percentage') | round(2) }} % ⏳ Команда отправлена: Запуск 🔄 Обновлено: {{ now().strftime('%H:%M:%S') }} inline_keyboard: - '▶️ Старт:/toggle_prxm_winjob_strt, 🔄 Рестарт:/toggle_prxm_winjob_rstrt' - '🛑 Выключить:/toggle_prxm_winjob_off' - '🔙 Назад:/prxmx_control, 🔄 Обновить:/prxmx_winjob_control' - conditions: "{{ trigger.event.data.command == '/toggle_prxm_winjob_rstrt' }}" sequence: - service: button.press target: entity_id: button.qemu_wni10forjob_105_reboot - service: telegram_bot.answer_callback_query data: callback_query_id: "{{ trigger.event.data.id }}" message: "🔄 Winjob ушел в рестарт..." - service: telegram_bot.edit_message data: message_id: "{{ trigger.event.data.message.message_id }}" chat_id: "{{ trigger.event.data.chat_id }}" message: >- 🪟 Состояние Winjob: 📈 CPU: {{ states('sensor.qemu_wni10forjob_105_cpu_used') | round(2) }} % 📝 RAM: {{ states('sensor.qemu_wni10forjob_105_memory_used_percentage') | round(2) }} % 💾 Disk: {{ states('sensor.qemu_wni10forjob_105_disk_used_percentage') | round(2) }} % ⏳ Команда отправлена: Рестарт 🔄 Обновлено: {{ now().strftime('%H:%M:%S') }} inline_keyboard: - '▶️ Старт:/toggle_prxm_winjob_strt, 🔄 Рестарт:/toggle_prxm_winjob_rstrt' - '🛑 Выключить:/toggle_prxm_winjob_off' - '🔙 Назад:/prxmx_control, 🔄 Обновить:/prxmx_winjob_control' - conditions: "{{ trigger.event.data.command == '/toggle_prxm_winjob_off' }}" sequence: - service: button.press target: entity_id: button.qemu_wni10forjob_105_shutdown - service: telegram_bot.answer_callback_query data: callback_query_id: "{{ trigger.event.data.id }}" message: "🛑 Winjob выключается..." - service: telegram_bot.edit_message data: message_id: "{{ trigger.event.data.message.message_id }}" chat_id: "{{ trigger.event.data.chat_id }}" message: >- 🪟 Состояние Winjob: 📈 CPU: {{ states('sensor.qemu_wni10forjob_105_cpu_used') | round(2) }} % 📝 RAM: {{ states('sensor.qemu_wni10forjob_105_memory_used_percentage') | round(2) }} % 💾 Disk: {{ states('sensor.qemu_wni10forjob_105_disk_used_percentage') | round(2) }} % ⏳ Команда отправлена: Выключение 🔄 Обновлено: {{ now().strftime('%H:%M:%S') }} inline_keyboard: - '▶️ Старт:/toggle_prxm_winjob_strt, 🔄 Рестарт:/toggle_prxm_winjob_rstrt' - '🛑 Выключить:/toggle_prxm_winjob_off' - '🔙 Назад:/prxmx_control, 🔄 Обновить:/prxmx_winjob_control' # --- МЕНЮ: ПОГОДА (ГЛАВНОЕ) --- - conditions: "{{ trigger.event.data.command == '/wthr_control' }}" sequence: - service: telegram_bot.answer_callback_query data: callback_query_id: "{{ trigger.event.data.id }}" message: "🌤 Обновляю погоду..." - service: telegram_bot.edit_message data: message_id: "{{ trigger.event.data.message.message_id }}" chat_id: "{{ trigger.event.data.chat_id }}" message: >- 🌈 Текущая погода: 🌡️ Температура: {{ state_attr('weather.yandex_pogoda', 'temperature') }} °C 💨 Ветер: {{ state_attr('weather.yandex_pogoda', 'wind_speed') }} км/ч 🔄 Обновлено: {{ now().strftime('%H:%M:%S') }} inline_keyboard: - '🕒 Почасовой прогноз:/wthr_h_control' - '📆 Прогноз на неделю:/wthr_d_control' - '🔙 Назад:/menu_back, 🔄 Обновить:/wthr_control' # --- МЕНЮ: ПОГОДА (ПОЧАСОВОЙ ПРОГНОЗ) --- - conditions: "{{ trigger.event.data.command == '/wthr_h_control' }}" sequence: - service: telegram_bot.answer_callback_query data: callback_query_id: "{{ trigger.event.data.id }}" message: "🕒 Загружаю прогноз..." - service: weather.get_forecasts data: type: hourly target: entity_id: weather.yandex_pogoda response_variable: hourly_data - service: telegram_bot.edit_message data: message_id: "{{ trigger.event.data.message.message_id }}" chat_id: "{{ trigger.event.data.chat_id }}" message: | 🕒 Прогноз на 12 часов: {% set forecast = hourly_data['weather.yandex_pogoda'].forecast[:12] -%} {%- if forecast -%} {% for hour in forecast %} 🕒 {{ hour.datetime.strftime("%H:%M") }}: {{ hour.temperature }}°C, Ветер: {{ hour.wind_speed }} км/ч {%- endfor %} {%- else %} ⚠️ Прогноз недоступен {%- endif %} 🔄 Обновлено: {{ now().strftime('%H:%M:%S') }} inline_keyboard: - '📆 Ежедневный прогноз:/wthr_d_control' - '🔙 Назад:/wthr_control, 🔄 Обновить:/wthr_h_control' - '🏠 Главное меню:/menu_back' # --- МЕНЮ: ПОГОДА (ЕЖЕДНЕВНЫЙ ПРОГНОЗ) --- - conditions: "{{ trigger.event.data.command == '/wthr_d_control' }}" sequence: - service: telegram_bot.answer_callback_query data: callback_query_id: "{{ trigger.event.data.id }}" message: "📆 Загружаю прогноз..." - service: telegram_bot.edit_message data: message_id: "{{ trigger.event.data.message.message_id }}" chat_id: "{{ trigger.event.data.chat_id }}" message: | {%- set condition_icons = { 'clear': '☀️', 'partlycloudy': '🌤', 'cloudy': '☁️', 'overcast': '🌫', 'rainy': '🌧', 'pouring': '🌧', 'lightrain': '🌦', 'snowy': '🌨', 'snowyrainy': '🌨🌧', 'exceptional': '❗', 'hail': '🌨', 'lightning': '⛈', 'lightning-rainy': '⛈', 'fog': '🌫', 'windy': '💨', 'windy-variant': '💨', 'partly-cloudy-day': '🌤', 'partly-cloudy-night': '🌤', 'clear-night': '🌙', 'none': '❓' } -%} {%- set weekdays = ['Пн', 'Вт', 'Ср', 'Чт', 'Пт', 'Сб', 'Вс'] -%} {%- macro wind_description(speed_kmh) -%} {%- if speed_kmh < 1 %}Штиль {%- elif speed_kmh < 5 %}Тихий {%- elif speed_kmh < 11 %}Лёгкий {%- elif speed_kmh < 19 %}Слабый {%- elif speed_kmh < 28 %}Умеренный {%- elif speed_kmh < 38 %}Свежий {%- elif speed_kmh < 49 %}Сильный {%- elif speed_kmh < 61 %}Крепкий {%- elif speed_kmh < 74 %}Очень крепкий {%- elif speed_kmh < 88 %}Шторм {%- elif speed_kmh < 102 %}Сильный шторм {%- elif speed_kmh < 117 %}Жестокий шторм {%- else %}Ураган {%- endif %} {%- endmacro -%} 📆 Прогноз на 6 дней: {% for i in range(1, 7) %} {%- set cond = states('sensor.home_assistant_condition_forecast_' ~ i ~ 'd')|lower -%} {%- set temp = states('sensor.home_assistant_temperature_forecast_' ~ i ~ 'd') -%} {%- set wind_ms = states('sensor.home_assistant_wind_speed_forecast_' ~ i ~ 'd')|float(0) -%} {%- set wind_kmh = (wind_ms * 3.6)|round(1) -%} {%- set wind_text = wind_description(wind_kmh) -%} {%- set date_obj = now() + timedelta(days=i) -%} {%- set weekday = weekdays[date_obj.weekday()] -%} {%- set date = date_obj.strftime('%d.%m') %} 🔹 {{ weekday }}, {{ date }}: {{ temp }}°C {{ condition_icons.get(cond, '❓') }}, Ветер — {{ wind_text }} {%- endfor %} 🔄 Обновлено: {{ now().strftime('%H:%M:%S') }} inline_keyboard: - '🕒 Почасовой прогноз:/wthr_h_control' - '🔙 Назад:/wthr_control, 🔄 Обновить:/wthr_d_control' - '🏠 Главное меню:/menu_back' # ========================================== # --- МЕНЮ: ПЫЛЕСОС (ГЛАВНОЕ) --- # ========================================== - conditions: "{{ trigger.event.data.command == '/vcm_control' }}" sequence: - service: telegram_bot.answer_callback_query data: callback_query_id: "{{ trigger.event.data.id }}" message: "🔄 Загружаю меню пылесоса..." - service: telegram_bot.edit_message data: message_id: "{{ trigger.event.data.message.message_id }}" chat_id: "{{ trigger.event.data.chat_id }}" message: | 🌀 Пылесос: {{ state_attr('vacuum.dreame_mc1808_044c_robot_cleaner_2', 'vacuum.status_desc') | default('Нет данных') }} 🌪️ Сила всасывания: {{ state_attr('vacuum.dreame_mc1808_044c_robot_cleaner_2', 'fan_speed') | default('Нет данных') }} 🌊 Сила полива: {% set water = state_attr('vacuum.stytj01zhm', 'water_level') %}{% if water == 'High' %}Полная{% elif water == 'Med' %}Средняя{% elif water == 'Low' %}Низкая{% else %}Нет данных{% endif %} 💧 Бак с водой: {% if state_attr('vacuum.dreame_mc1808_044c_robot_cleaner_2','clean.water_box') | int(0) == 1 %}❗Установлен❗{% else %}Снят{% endif %} 🔋 Заряд: {{ state_attr('vacuum.dreame_mc1808_044c_robot_cleaner_2','battery_level') | default(0) }}% {% set status = states("group.all_rooms_for_vac_clean") %} {%- if status == "off" %} ▶️ Запустите уборку всей квартиры, 🔴 либо выберите комнаты: {%- elif status == "on" %} ▶️ Запустите уборку выбранных комнат, 🟢 либо отмените комнаты для уборки всей квартиры: {%- else %} Нет данных {%- endif %} 🔄 Обновлено: {{ now().strftime('%H:%M:%S') }} inline_keyboard: - '▶️ {% set status = states("group.all_rooms_for_vac_clean") %}{% if status == "off" %}Уборка всей квартиры{% elif status == "on" %}Уборка выбранных комнат{% else %}Нет данных{% endif %} :/toggle_vcm_start' - "{% if is_state('input_boolean.room_vacuum', 'off') %}🔴{% else %}🟢{% endif %} Убрать комнату:/toggle_vcm_rm, {% if is_state('input_boolean.lobby_vacuum', 'off') %}🔴{% else %}🟢{% endif %} Убрать прихожую:/toggle_vcm_lb" - "{% if is_state('input_boolean.hallway_vacuum', 'off') %}🔴{% else %}🟢{% endif %} Убрать коридор:/toggle_vcm_hl, {% if is_state('input_boolean.bathroom_vacuum', 'off') %}🔴{% else %}🟢{% endif %} Убрать ванную:/toggle_vcm_br" - "{% if is_state('input_boolean.kitchen_vacuum', 'off') %}🔴{% else %}🟢{% endif %} Убрать кухню:/toggle_vcm_kc" - '🏠 Вернуться на базу:/toggle_vcm_stop' - '🌪️ Сила всасывания:/toggle_vcm_wnd, 🌊 Сила полива:/toggle_vcm_wtr' - '🔙 Назад:/menu_back, 🔄 Обновить:/vcm_control' # --- КНОПКА: ЗАПУСК УБОРКИ --- - conditions: "{{ trigger.event.data.command == '/toggle_vcm_start' }}" sequence: - service: telegram_bot.answer_callback_query data: callback_query_id: "{{ trigger.event.data.id }}" message: "🧹 Запускаю уборку..." # Логика запуска - choose: - conditions: "{{ is_state('group.all_rooms_for_vac_clean', 'off') }}" sequence: - service: vacuum.start target: device_id: 885672257bd73c7492a4ba8b72b83699 - conditions: "{{ is_state('group.all_rooms_for_vac_clean', 'on') }}" sequence: - service: xiaomi_miot.call_action data: entity_id: vacuum.dreame_mc1808_044c_robot_cleaner_2 siid: 18 aiid: 1 params: - piid: 1 value: 18 - >- {{ {'piid':21, 'value': states('sensor.select_rooms_for_clean')} }} force_params: true # Логика настройки силы всасывания - choose: - conditions: "{{ is_state('sensor.select_vacuum_fan_speed', 'Турбо') }}" sequence: - service: script.set_fanspeed_vacum_turbo - conditions: "{{ is_state('sensor.select_vacuum_fan_speed', 'Средний') }}" sequence: - service: script.set_fanspeed_vacum_strong - conditions: "{{ is_state('sensor.select_vacuum_fan_speed', 'Стандартный') }}" sequence: - service: script.set_fanspeed_vacum_standart - conditions: "{{ is_state('sensor.select_vacuum_fan_speed', 'Тихий') }}" sequence: - service: script.set_fanspeed_vacum_silent # Логика настройки полива - choose: - conditions: "{{ is_state('sensor.select_water_vacum', 'Low') }}" sequence: - service: script.set_water_vacum_low - conditions: "{{ is_state('sensor.select_water_vacum', 'Med') }}" sequence: - service: script.set_water_vacum_middle - conditions: "{{ is_state('sensor.select_water_vacum', 'High') }}" sequence: - service: script.set_water_vacum_hight # --- КНОПКА: ВЕРНУТЬ НА БАЗУ --- - conditions: "{{ trigger.event.data.command == '/toggle_vcm_stop' }}" sequence: - service: vacuum.return_to_base target: device_id: 885672257bd73c7492a4ba8b72b83699 - service: telegram_bot.answer_callback_query data: callback_query_id: "{{ trigger.event.data.id }}" message: "🏠 Пылесос возвращается на базу..." # ========================================== # --- КНОПКИ ВЫБОРА КОМНАТ --- # ========================================== - conditions: > {{ trigger.event.data.command in [ '/toggle_vcm_rm', '/toggle_vcm_lb', '/toggle_vcm_hl', '/toggle_vcm_br', '/toggle_vcm_kc' ] }} sequence: - choose: - conditions: "{{ trigger.event.data.command == '/toggle_vcm_rm' }}" sequence: - service: input_boolean.toggle target: { entity_id: input_boolean.room_vacuum } - conditions: "{{ trigger.event.data.command == '/toggle_vcm_lb' }}" sequence: - service: input_boolean.toggle target: { entity_id: input_boolean.lobby_vacuum } - conditions: "{{ trigger.event.data.command == '/toggle_vcm_hl' }}" sequence: - service: input_boolean.toggle target: { entity_id: input_boolean.hallway_vacuum } - conditions: "{{ trigger.event.data.command == '/toggle_vcm_br' }}" sequence: - service: input_boolean.toggle target: { entity_id: input_boolean.bathroom_vacuum } - conditions: "{{ trigger.event.data.command == '/toggle_vcm_kc' }}" sequence: - service: input_boolean.toggle target: { entity_id: input_boolean.kitchen_vacuum } - delay: milliseconds: 200 - service: telegram_bot.answer_callback_query data: callback_query_id: "{{ trigger.event.data.id }}" message: "✅ Выбор комнат обновлен" # Плавно перерисовываем меню пылесоса с новыми зелеными/красными кружками - service: telegram_bot.edit_message data: message_id: "{{ trigger.event.data.message.message_id }}" chat_id: "{{ trigger.event.data.chat_id }}" message: | 🌀 Пылесос: {{ state_attr('vacuum.dreame_mc1808_044c_robot_cleaner_2', 'vacuum.status_desc') | default('Нет данных') }} 🌪️ Сила всасывания: {{ state_attr('vacuum.dreame_mc1808_044c_robot_cleaner_2', 'fan_speed') | default('Нет данных') }} 🌊 Сила полива: {% set water = state_attr('vacuum.stytj01zhm', 'water_level') %}{% if water == 'High' %}Полная{% elif water == 'Med' %}Средняя{% elif water == 'Low' %}Низкая{% else %}Нет данных{% endif %} 💧 Бак с водой: {% if state_attr('vacuum.dreame_mc1808_044c_robot_cleaner_2','clean.water_box') | int(0) == 1 %}❗Установлен❗{% else %}Снят{% endif %} 🔋 Заряд: {{ state_attr('vacuum.dreame_mc1808_044c_robot_cleaner_2','battery_level') | default(0) }}% {% set status = states("group.all_rooms_for_vac_clean") %} {%- if status == "off" %} ▶️ Запустите уборку всей квартиры, 🔴 либо выберите комнаты: {%- elif status == "on" %} ▶️ Запустите уборку выбранных комнат, 🟢 либо отмените комнаты для уборки всей квартиры: {%- else %} Нет данных {%- endif %} 🔄 Обновлено: {{ now().strftime('%H:%M:%S') }} inline_keyboard: - '▶️ {% set status = states("group.all_rooms_for_vac_clean") %}{% if status == "off" %}Уборка всей квартиры{% elif status == "on" %}Уборка выбранных комнат{% else %}Нет данных{% endif %} :/toggle_vcm_start' - "{% if is_state('input_boolean.room_vacuum', 'off') %}🔴{% else %}🟢{% endif %} Убрать комнату:/toggle_vcm_rm, {% if is_state('input_boolean.lobby_vacuum', 'off') %}🔴{% else %}🟢{% endif %} Убрать прихожую:/toggle_vcm_lb" - "{% if is_state('input_boolean.hallway_vacuum', 'off') %}🔴{% else %}🟢{% endif %} Убрать коридор:/toggle_vcm_hl, {% if is_state('input_boolean.bathroom_vacuum', 'off') %}🔴{% else %}🟢{% endif %} Убрать ванную:/toggle_vcm_br" - "{% if is_state('input_boolean.kitchen_vacuum', 'off') %}🔴{% else %}🟢{% endif %} Убрать кухню:/toggle_vcm_kc" - '🏠 Вернуться на базу:/toggle_vcm_stop' - '🌪️ Сила всасывания:/toggle_vcm_wnd, 🌊 Сила полива:/toggle_vcm_wtr' - '🔙 Назад:/menu_back, 🔄 Обновить:/vcm_control' # ========================================== # --- ПОДМЕНЮ: СИЛА ВСАСЫВАНИЯ --- # ========================================== - conditions: "{{ trigger.event.data.command == '/toggle_vcm_wnd' }}" sequence: - service: telegram_bot.answer_callback_query data: callback_query_id: "{{ trigger.event.data.id }}" message: "🌪️ Меню мощности всасывания..." - service: telegram_bot.edit_message data: message_id: "{{ trigger.event.data.message.message_id }}" chat_id: "{{ trigger.event.data.chat_id }}" message: >- 🌪️ Текущая сила всасывания: {{ state_attr('vacuum.dreame_mc1808_044c_robot_cleaner_2', 'fan_speed') | default('Нет данных') }} 🔄 Обновлено: {{ now().strftime('%H:%M:%S') }} inline_keyboard: - "1️⃣ Тихий:/toggle_vcm_wnd_sl, 2️⃣ Стандартный:/toggle_vcm_wnd_st" - "3️⃣ Средний:/toggle_vcm_wnd_md, 4️⃣ Турбо:/toggle_vcm_wnd_tr" - '🔙 Назад:/vcm_control, 🔄 Обновить:/toggle_vcm_wnd' # Кнопки выбора силы всасывания - conditions: > {{ trigger.event.data.command in [ '/toggle_vcm_wnd_sl', '/toggle_vcm_wnd_st', '/toggle_vcm_wnd_md', '/toggle_vcm_wnd_tr' ] }} sequence: - service: xiaomi_miot.set_miot_property data: entity_id: vacuum.dreame_mc1808_044c_robot_cleaner_2 siid: 18 piid: 6 value: >- {% if trigger.event.data.command == '/toggle_vcm_wnd_sl' %}0 {% elif trigger.event.data.command == '/toggle_vcm_wnd_st' %}1 {% elif trigger.event.data.command == '/toggle_vcm_wnd_md' %}2 {% else %}3{% endif %} - delay: milliseconds: 1000 - service: telegram_bot.answer_callback_query data: callback_query_id: "{{ trigger.event.data.id }}" message: "✅ Мощность изменена" # Обновляем подменю - service: telegram_bot.edit_message data: message_id: "{{ trigger.event.data.message.message_id }}" chat_id: "{{ trigger.event.data.chat_id }}" message: >- 🌪️ Текущая сила всасывания: {{ state_attr('vacuum.dreame_mc1808_044c_robot_cleaner_2', 'fan_speed') | default('Обновляется...') }} 🔄 Обновлено: {{ now().strftime('%H:%M:%S') }} inline_keyboard: - "1️⃣ Тихий:/toggle_vcm_wnd_sl, 2️⃣ Стандартный:/toggle_vcm_wnd_st" - "3️⃣ Средний:/toggle_vcm_wnd_md, 4️⃣ Турбо:/toggle_vcm_wnd_tr" - '🔙 Назад:/vcm_control, 🔄 Обновить:/toggle_vcm_wnd' # ========================================== # --- ПОДМЕНЮ: СИЛА ПОЛИВА --- # ========================================== - conditions: "{{ trigger.event.data.command == '/toggle_vcm_wtr' }}" sequence: - service: telegram_bot.answer_callback_query data: callback_query_id: "{{ trigger.event.data.id }}" message: "🌊 Меню силы полива..." - service: telegram_bot.edit_message data: message_id: "{{ trigger.event.data.message.message_id }}" chat_id: "{{ trigger.event.data.chat_id }}" message: >- 🌊 Текущая сила полива: {% set water = state_attr('vacuum.stytj01zhm', 'water_level') %} {% if water == 'High' %}Полный {% elif water == 'Med' %}Средний {% elif water == 'Low' %}Низкий {% else %} Нет данных {% endif %} 🔄 Обновлено: {{ now().strftime('%H:%M:%S') }} inline_keyboard: - "1️⃣ Низкий:/toggle_vcm_wtr_l" - "2️⃣ Средний:/toggle_vcm_wtr_m" - "3️⃣ Полный:/toggle_vcm_wtr_h" - '🔙 Назад:/vcm_control, 🔄 Обновить:/toggle_vcm_wtr' # Кнопки выбора силы полива - conditions: > {{ trigger.event.data.command in [ '/toggle_vcm_wtr_l', '/toggle_vcm_wtr_m', '/toggle_vcm_wtr_h' ] }} sequence: - service: xiaomi_miot.set_miot_property data: entity_id: vacuum.dreame_mc1808_044c_robot_cleaner_2 siid: 18 piid: 20 value: >- {% if trigger.event.data.command == '/toggle_vcm_wtr_l' %}1 {% elif trigger.event.data.command == '/toggle_vcm_wtr_m' %}2 {% else %}3{% endif %} - delay: milliseconds: 2000 - service: telegram_bot.answer_callback_query data: callback_query_id: "{{ trigger.event.data.id }}" message: "✅ Режим полива изменен" # Обновляем подменю - service: telegram_bot.edit_message data: message_id: "{{ trigger.event.data.message.message_id }}" chat_id: "{{ trigger.event.data.chat_id }}" message: >- 🌊 Текущая сила полива: {% set water = state_attr('vacuum.stytj01zhm', 'water_level') %} {% if water == 'High' %}Полный {% elif water == 'Med' %}Средний {% elif water == 'Low' %}Низкий {% else %} Обновляется... {% endif %} 🔄 Обновлено: {{ now().strftime('%H:%M:%S') }} inline_keyboard: - "1️⃣ Низкий:/toggle_vcm_wtr_l" - "2️⃣ Средний:/toggle_vcm_wtr_m" - "3️⃣ Полный:/toggle_vcm_wtr_h" - '🔙 Назад:/vcm_control, 🔄 Обновить:/toggle_vcm_wtr' # ========================================== # --- МЕНЮ: ПОСУДОМОЙКА (ГЛАВНОЕ) --- # ========================================== - conditions: "{{ trigger.event.data.command == '/dw_control' }}" sequence: - service: telegram_bot.answer_callback_query data: callback_query_id: "{{ trigger.event.data.id }}" message: "🔄 Загружаю статус посудомойки..." - service: telegram_bot.edit_message data: message_id: "{{ trigger.event.data.message.message_id }}" chat_id: "{{ trigger.event.data.chat_id }}" message: | 🌊 Посудомойка: 🔖 Состояние: {% set status = states('sensor.bosch_dishwasher_operation_state') %}{% if status == 'Ready' %}Ожидание{% elif status == 'Run' %}Мойка{% elif status == 'Aborting' %}Отмена программы{% elif status == 'DelayedStart' %}Отложенный запуск{% else %}Нет данных{% endif %} 📋 Программа: {% set prog = states('select.bosch_dishwasher_selected_program') %}{% if prog in ['unavailable', 'unknown'] %}{% set prog = states('sensor.bosch_dishwasher_active_program') %}{% endif %}{% if prog == 'dishcare_dishwasher_program_auto2' %}Авто 45–65℃{% elif prog == 'dishcare_dishwasher_program_quick65' %}Экспресс 65℃{% elif prog == 'dishcare_dishwasher_program_eco50' %}Эко 50℃{% elif prog == 'dishcare_dishwasher_program_intensiv70' %}Интенсивная 70℃{% elif prog == 'dishcare_dishwasher_program_prerinse' %}Предв. ополаскивание{% elif prog == 'dishcare_dishwasher_program_nightwash' %}Ночная{% elif prog == 'dishcare_dishwasher_program_machinecare' %}Мойка машины{% else %}Нет данных{% endif %} 🌡️ Доп.сушка: {% set s = states('switch.bosch_dishwasher_extra_dry') %}{% if s == 'on' %}Включена{% elif s == 'off' %}Выключена{% else %}Нет данных{% endif %} 🧂 Соль: {% set salt = states('sensor.bosch_dishwasher_salt') %}{% if salt == 'nearly_empty' %}⚠️ Почти закончилась{% elif salt == 'full' %}✅ В порядке{% elif salt == 'empty' %}❌ Закончилась{% else %}❓ Неизвестно{% endif %} 🚪 Дверца: {% set door = states('binary_sensor.bosch_dishwasher_door') %}{% if door == 'on' %}Открыта{% elif door == 'off' %}Закрыта{% else %}Нет данных{% endif %} 🕒 Окончание: {% set input_dt = state_attr('input_datetime.dishwasher_startinrelative', 'timestamp') | int(0) %}{% set start_in = states('sensor.bosch_dishwasher_start_in') | float(0) %}{% set remaining = states('sensor.bosch_dishwasher_remaining_program_time') | float(0) %}{% set total_delay = input_dt + (start_in * 3600) + (remaining * 3600) %}{{ (now().timestamp() + total_delay) | timestamp_custom('%H:%M:%S') }} {% set delay = states('input_datetime.dishwasher_startinrelative') %}{% set progress = states('sensor.bosch_dishwasher_program_progress') %}{% set start_in_raw = states('sensor.bosch_dishwasher_start_in') | float(0) %}{% set start_in_h = (start_in_raw // 1) | int %}{% set start_in_m = ((start_in_raw % 1) * 60) | round(0) %}{% if status == 'Ready' %}⏳ Отложенный запуск: {% if delay == '00:00:00' %}Не установлено{% else %}{{ delay }}{% endif %}{% elif status == 'DelayedStart' %}🚀 Запуск через: {{ start_in_h }} ч {{ start_in_m }} мин{% elif status == 'Run' %}✅ Прогресс: {{ progress }}%{% endif %} {%- if states('switch.bosch_dishwasher_silence_on_demand') == 'on' %} 🔇 Тихий режим: Включен{% endif %} 🔄 Обновлено: {{ now().strftime('%H:%M:%S') }} inline_keyboard: - "▶️ Старт выбранной программы:/toggle_dw_start" - "1️⃣ Экспресс 65:/toggle_dw_on_quick65, 2️⃣ Авто 45-65:/toggle_dw_on_auto4565" - "3️⃣ Чистка посудомойки:/toggle_dw_on_care" - "{% set quiet = states('switch.401090521617010964_dishcare_dishwasher_option_silenceondemand') %}{{ '🟢' if quiet == 'on' else '🔴' }} Тихий режим:/toggle_dw_on_silence" - "⏳ Отлож.пуск:/dw_control_dl, ❌ Сброс отлож.пуска:/toggle_dw_delay_clear" - "⏹️ Отменить мойку:/toggle_dw_stop" - "🔙 Назад:/menu_back, 🔄 Обновить:/dw_control" # --- КНОПКИ УПРАВЛЕНИЯ ПОСУДОМОЙКОЙ --- - conditions: "{{ trigger.event.data.command == '/toggle_dw_start' }}" sequence: - service: script.dw_start_select_program - service: telegram_bot.answer_callback_query data: callback_query_id: "{{ trigger.event.data.id }}" message: "▶️ Запущена мойка" - conditions: "{{ trigger.event.data.command == '/toggle_dw_on_off' }}" sequence: - service: switch.toggle target: { entity_id: switch.401090521617010964_bsh_common_setting_powerstate } - service: telegram_bot.answer_callback_query data: callback_query_id: "{{ trigger.event.data.id }}" message: "🔌 Питание переключено" - conditions: "{{ trigger.event.data.command == '/toggle_dw_on_quick65' }}" sequence: - service: script.dw_install_quick_65_extradry_extrarinse - service: telegram_bot.answer_callback_query data: callback_query_id: "{{ trigger.event.data.id }}" message: "✅ Выбрана программа Экспресс 65" - conditions: "{{ trigger.event.data.command == '/toggle_dw_on_auto4565' }}" sequence: - service: script.dw_install_auto_45_65_extradry_extrarinse - service: telegram_bot.answer_callback_query data: callback_query_id: "{{ trigger.event.data.id }}" message: "✅ Выбрана программа Авто 45-65" - conditions: "{{ trigger.event.data.command == '/toggle_dw_on_care' }}" sequence: - service: script.dw_install_care - service: telegram_bot.answer_callback_query data: callback_query_id: "{{ trigger.event.data.id }}" message: "✅ Выбрана Чистка посудомойки" - conditions: "{{ trigger.event.data.command == '/toggle_dw_on_silence' }}" sequence: - service: switch.toggle target: { entity_id: switch.bosch_dishwasher_silence_on_demand } - service: telegram_bot.answer_callback_query data: callback_query_id: "{{ trigger.event.data.id }}" message: "🤫 Тихий режим переключен" - conditions: "{{ trigger.event.data.command == '/toggle_dw_stop' }}" sequence: - service: input_datetime.set_datetime target: { entity_id: input_datetime.dishwasher_startinrelative } data: { time: "00:00:00" } - service: script.dw_stop_program - service: telegram_bot.answer_callback_query data: callback_query_id: "{{ trigger.event.data.id }}" message: "⏹️ Мойка отменена" # ========================================== # --- МЕНЮ: ОТЛОЖЕННЫЙ СТАРТ --- # ========================================== - conditions: "{{ trigger.event.data.command == '/dw_control_dl' }}" sequence: - service: telegram_bot.answer_callback_query data: callback_query_id: "{{ trigger.event.data.id }}" message: "⏳ Меню отложенного старта..." - service: telegram_bot.edit_message data: message_id: "{{ trigger.event.data.message.message_id }}" chat_id: "{{ trigger.event.data.chat_id }}" message: | 🌊 Настройки отложенного запуска: {% set status = states('sensor.bosch_dishwasher_operation_state') %}{% set delay = states('input_datetime.dishwasher_startinrelative') %}{% set start_in_raw = states('sensor.bosch_dishwasher_start_in') | float(0) %}{% set start_in_h = (start_in_raw // 1) | int %}{% set start_in_m = ((start_in_raw % 1) * 60) | round(0) %}{% if status == 'Ready' %}Текущая задержка: {% if delay == '00:00:00' %}Не установлено{% else %}{{ delay }}{% endif %}{% elif status == 'DelayedStart' %}Машина уже ждет запуска. Старт через: {{ start_in_h }} ч {{ start_in_m }} мин{% else %}Машина сейчас в работе или недоступна.{% endif %} 🔄 Обновлено: {{ now().strftime('%H:%M:%S') }} inline_keyboard: - '🕐 1:00:/toggle_dw_delay_1, 🕑 2:00:/toggle_dw_delay_2' - '🕒 3:00:/toggle_dw_delay_3, 🕓 4:00:/toggle_dw_delay_4' - '🕔 5:00:/toggle_dw_delay_5, 🕕 6:00:/toggle_dw_delay_6' - '🕖 7:00:/toggle_dw_delay_7, 🕗 8:00:/toggle_dw_delay_8' - '🕘 9:00:/toggle_dw_delay_9, 🕙 10:00:/toggle_dw_delay_10' - '❌ Сброс времени:/toggle_dw_delay_clear' - '🔙 Назад:/dw_control, 🔄 Обновить:/dw_control_dl' # --- КНОПКА: СБРОС ТАЙМЕРА --- - conditions: "{{ trigger.event.data.command == '/toggle_dw_delay_clear' }}" sequence: - service: input_datetime.set_datetime target: { entity_id: input_datetime.dishwasher_startinrelative } data: { time: "00:00:00" } - delay: milliseconds: 500 - service: telegram_bot.answer_callback_query data: callback_query_id: "{{ trigger.event.data.id }}" message: "❌ Время сброшено" # Обновляем меню отложенного старта сразу после сброса - service: telegram_bot.edit_message data: message_id: "{{ trigger.event.data.message.message_id }}" chat_id: "{{ trigger.event.data.chat_id }}" message: | 🌊 Настройки отложенного запуска: {% set status = states('sensor.bosch_dishwasher_operation_state') %}{% set delay = states('input_datetime.dishwasher_startinrelative') %}{% set start_in_raw = states('sensor.bosch_dishwasher_start_in') | float(0) %}{% set start_in_h = (start_in_raw // 1) | int %}{% set start_in_m = ((start_in_raw % 1) * 60) | round(0) %}{% if status == 'Ready' %}Текущая задержка: {% if delay == '00:00:00' %}Не установлено{% else %}{{ delay }}{% endif %}{% elif status == 'DelayedStart' %}Машина уже ждет запуска. Старт через: {{ start_in_h }} ч {{ start_in_m }} мин{% else %}Машина сейчас в работе или недоступна.{% endif %} 🔄 Обновлено: {{ now().strftime('%H:%M:%S') }} inline_keyboard: - '🕐 1:00:/toggle_dw_delay_1, 🕑 2:00:/toggle_dw_delay_2' - '🕒 3:00:/toggle_dw_delay_3, 🕓 4:00:/toggle_dw_delay_4' - '🕔 5:00:/toggle_dw_delay_5, 🕕 6:00:/toggle_dw_delay_6' - '🕖 7:00:/toggle_dw_delay_7, 🕗 8:00:/toggle_dw_delay_8' - '🕘 9:00:/toggle_dw_delay_9, 🕙 10:00:/toggle_dw_delay_10' - '❌ Сброс времени:/toggle_dw_delay_clear' - '🔙 Назад:/dw_control, 🔄 Обновить:/dw_control_dl' # --- КНОПКИ: УСТАНОВКА ВРЕМЕНИ --- - conditions: > {{ trigger.event.data.command.startswith('/toggle_dw_delay_') and trigger.event.data.command != '/toggle_dw_delay_clear' }} sequence: - service: input_datetime.set_datetime target: entity_id: input_datetime.dishwasher_startinrelative data: # Берем цифру из команды и превращаем в часы time: "{{ '%02d:00:00' | format(trigger.event.data.command.split('_')[-1] | int) }}" - delay: milliseconds: 500 - service: telegram_bot.answer_callback_query data: callback_query_id: "{{ trigger.event.data.id }}" message: "✅ Время установлено на {{ trigger.event.data.command.split('_')[-1] }}:00" # Обновляем меню отложенного старта сразу после выбора времени - service: telegram_bot.edit_message data: message_id: "{{ trigger.event.data.message.message_id }}" chat_id: "{{ trigger.event.data.chat_id }}" message: | 🌊 Настройки отложенного запуска: {% set status = states('sensor.bosch_dishwasher_operation_state') %}{% set delay = states('input_datetime.dishwasher_startinrelative') %}{% set start_in_raw = states('sensor.bosch_dishwasher_start_in') | float(0) %}{% set start_in_h = (start_in_raw // 1) | int %}{% set start_in_m = ((start_in_raw % 1) * 60) | round(0) %}{% if status == 'Ready' %}Текущая задержка: {% if delay == '00:00:00' %}Не установлено{% else %}{{ delay }}{% endif %}{% elif status == 'DelayedStart' %}Машина уже ждет запуска. Старт через: {{ start_in_h }} ч {{ start_in_m }} мин{% else %}Машина сейчас в работе или недоступна.{% endif %} 🔄 Обновлено: {{ now().strftime('%H:%M:%S') }} inline_keyboard: - '🕐 1:00:/toggle_dw_delay_1, 🕑 2:00:/toggle_dw_delay_2' - '🕒 3:00:/toggle_dw_delay_3, 🕓 4:00:/toggle_dw_delay_4' - '🕔 5:00:/toggle_dw_delay_5, 🕕 6:00:/toggle_dw_delay_6' - '🕖 7:00:/toggle_dw_delay_7, 🕗 8:00:/toggle_dw_delay_8' - '🕘 9:00:/toggle_dw_delay_9, 🕙 10:00:/toggle_dw_delay_10' - '❌ Сброс времени:/toggle_dw_delay_clear' - '🔙 Назад:/dw_control, 🔄 Обновить:/dw_control_dl' # ========================================== # --- МЕНЮ: КВАРТИРА --- # ========================================== - conditions: "{{ trigger.event.data.command == '/kv_control' }}" sequence: - service: telegram_bot.answer_callback_query data: callback_query_id: "{{ trigger.event.data.id }}" message: "🔄 Загружаю меню квартиры..." - service: telegram_bot.edit_message data: message_id: "{{ trigger.event.data.message.message_id }}" chat_id: "{{ trigger.event.data.chat_id }}" message: | 🏢 Управление: Квартира 🛋️ Комната 🌡️ {{ states('sensor.a4c1387695b9_temperature') | replace('unavailable', '—') | replace('unknown', '—') }}°C • 💡 {% if is_state('binary_sensor.lighton_room', 'on') %}Вкл{% else %}Выкл{% endif %} • 🚶 {% if is_state('sensor.room_motion', 'True') %}Движение{% else %}Тихо{% endif %} 🛁 Ванная 🌡️ {{ states('sensor.0x00158d0007984db7_temperature') | replace('unavailable', '—') | replace('unknown', '—') }}°C • 💡 {% if is_state('binary_sensor.lighton_bathroom', 'on') or is_state('switch.0x00158d00054e8e41_l1', 'on') %}Вкл{% else %}Выкл{% endif %} • 🌊 {% if is_state('sensor.stiralnaia_mashina_s_gorizontalnoi_zagruzkoi', 'on') %}{{ states('sensor.stiralnaia_mashina_s_gorizontalnoi_zagruzkoi_run_state') | capitalize }}{% else %}Выкл{% endif %} 🍽️ Кухня 🌡️ {{ states('sensor.a4c138eb5c2a_temperature') | replace('unavailable', '—') | replace('unknown', '—') }}°C • 💡 {% if is_state('binary_sensor.lighton_kitchen', 'on') %}Вкл{% else %}Выкл{% endif %} • 🍽️ {% if is_state('switch.posudomoechnaia_mashina_power', 'on') %}Вкл{% else %}Выкл{% endif %} 🚪 Прихожая 🚪 {% if is_state('binary_sensor.e4aaec3747b2_contact', 'off') %}Закрыта{% else %}Открыта{% endif %} • 💡 {% if is_state('switch.0x54ef4410003aa472_right', 'on') or is_state('switch.0x54ef4410003aa472_left', 'on') %}Вкл{% else %}Выкл{% endif %} • 🚶 {% if is_state('binary_sensor.0x00158d000707efdf_motion', 'on') %}Движение{% else %}Тихо{% endif %} 🔄 Обновлено: {{ now().strftime('%H:%M:%S') }} inline_keyboard: - '🏠 Комната:/rm_control, 🛁 Ванная:/bt_control' - '🍽️ Кухня:/kn_control, 🚪 Прихожая:/lb_control' - '🔙 Назад:/menu_back, 🔄 Обновить:/kv_control' # ========================================== # --- МЕНЮ: КОМНАТА --- # ========================================== - conditions: "{{ trigger.event.data.command == '/rm_control' }}" sequence: - service: telegram_bot.answer_callback_query data: callback_query_id: "{{ trigger.event.data.id }}" message: "🔄 Загружаю меню комнаты..." - service: telegram_bot.edit_message data: message_id: "{{ trigger.event.data.message.message_id }}" chat_id: "{{ trigger.event.data.chat_id }}" message: | 🏠 Управление: Комната 🌡️ Температура: {{ states('sensor.a4c1387695b9_temperature') }} °C | 💧 Влажность: {{ states('sensor.a4c1387695b9_humidity') }} % 🚶 Присутствие: {% if is_state('sensor.room_motion', 'True') %}Движение{% else %}Нет движения{% endif %} 🔄 Обновлено: {{ now().strftime('%H:%M:%S') }} inline_keyboard: - '💡 Свет {% if is_state("binary_sensor.lighton_room", "off") %}🔴{% else %}🟢{% endif %}:/toggle_rm_ceiling_light' - '☀️ Дневной свет:/toggle_rm_light_day, 🌙 Ночной свет:/toggle_rm_light_night' - '📺 Свет для ТВ:/toggle_rm_light_tv, 💞 Романтика:/toggle_rm_light_lv' - '🔌 Розетка тел. {% if is_state("switch.0xa4c138a1b1cd2be1", "off") %}🔴{% else %}🟢{% endif %}:/toggle_rm_tl' - '🔙 Назад:/kv_control, 🔄 Обновить:/rm_control' # --- КНОПКИ УПРАВЛЕНИЯ КОМНАТОЙ --- - conditions: > {{ trigger.event.data.command in [ '/toggle_rm_ceiling_light', '/toggle_rm_light_day', '/toggle_rm_light_night', '/toggle_rm_light_tv', '/toggle_rm_light_lv', '/toggle_rm_tl' ] }} sequence: - choose: - conditions: "{{ trigger.event.data.command == '/toggle_rm_ceiling_light' }}" sequence: - if: - condition: state entity_id: binary_sensor.lighton_room state: "off" then: - service: scene.turn_on target: { entity_id: scene.komnata_osveshchenie_standart } else: - service: scene.turn_on target: { entity_id: scene.komnata_vykl_svet } - conditions: "{{ trigger.event.data.command == '/toggle_rm_light_day' }}" sequence: - service: scene.turn_on target: { entity_id: scene.komnata_osveshchenie_standart } - conditions: "{{ trigger.event.data.command == '/toggle_rm_light_night' }}" sequence: - service: scene.turn_on target: { entity_id: scene.lght_room_night_on } - conditions: "{{ trigger.event.data.command == '/toggle_rm_light_tv' }}" sequence: - service: scene.turn_on target: { entity_id: scene.komnata_ambilight_sinii } - conditions: "{{ trigger.event.data.command == '/toggle_rm_light_lv' }}" sequence: - service: scene.turn_on target: { entity_id: scene.novaia_stsena } - conditions: "{{ trigger.event.data.command == '/toggle_rm_tl' }}" sequence: - service: switch.toggle target: { entity_id: switch.0xa4c138a1b1cd2be1 } - delay: milliseconds: 500 - service: telegram_bot.answer_callback_query data: callback_query_id: "{{ trigger.event.data.id }}" message: "✅ Команда выполнена" - service: telegram_bot.edit_message data: message_id: "{{ trigger.event.data.message.message_id }}" chat_id: "{{ trigger.event.data.chat_id }}" message: | 🏠 Управление: Комната 🌡️ Температура: {{ states('sensor.a4c1387695b9_temperature') }} °C | 💧 Влажность: {{ states('sensor.a4c1387695b9_humidity') }} % 🚶 Присутствие: {% if is_state('sensor.room_motion', 'True') %}Движение{% else %}Нет движения{% endif %} 🔄 Обновлено: {{ now().strftime('%H:%M:%S') }} inline_keyboard: - '💡 Свет {% if is_state("binary_sensor.lighton_room", "off") %}🔴{% else %}🟢{% endif %}:/toggle_rm_ceiling_light' - '☀️ Дневной свет:/toggle_rm_light_day, 🌙 Ночной свет:/toggle_rm_light_night' - '📺 Свет для ТВ:/toggle_rm_light_tv, 💞 Романтика:/toggle_rm_light_lv' - '🔌 Розетка тел. {% if is_state("switch.0xa4c138a1b1cd2be1", "off") %}🔴{% else %}🟢{% endif %}:/toggle_rm_tl' - '🔙 Назад:/kv_control, 🔄 Обновить:/rm_control' # ========================================== # --- МЕНЮ: ВАННАЯ --- # ========================================== - conditions: "{{ trigger.event.data.command == '/bt_control' }}" sequence: - service: telegram_bot.answer_callback_query data: callback_query_id: "{{ trigger.event.data.id }}" message: "🔄 Загружаю меню ванной..." - service: telegram_bot.edit_message data: message_id: "{{ trigger.event.data.message.message_id }}" chat_id: "{{ trigger.event.data.chat_id }}" message: | 🛁 Управление: Ванная 🌡️ Температура: {{ states('sensor.0x00158d0007984db7_temperature') }} °C | 💧 Влажность: {{ states('sensor.0x00158d0007984db7_humidity') }} % 🚶 Присутствие: {% if is_state('binary_sensor.datchik_prisutstviia_vannaia_presence', 'on') %}Движение{% else %}Нет движения{% endif %} 🌊 Стиральная машина: {%- if is_state('sensor.stiralnaia_mashina_s_gorizontalnoi_zagruzkoi', 'on') %} ▶️ Статус: {{ states('sensor.stiralnaia_mashina_s_gorizontalnoi_zagruzkoi_run_state') }} ⏳ Осталось: {{ state_attr('sensor.stiralnaia_mashina_s_gorizontalnoi_zagruzkoi','remain_time') }} {%- else %} ⏹️ Выключена {%- endif %} 🔄 Обновлено: {{ now().strftime('%H:%M:%S') }} inline_keyboard: - '💡 Свет {% if is_state("binary_sensor.lighton_bathroom", "off") %}🔴{% else %}🟢{% endif %}:/toggle_bt_ceiling_light, 🔲 Зеркало {% if is_state("switch.0x00158d00054e8e41_l1", "off") %}🔴{% else %}🟢{% endif %}:/toggle_bt_mirror' - '☀️ Дневной свет:/toggle_bt_light_day, 🌙 Ночной свет:/toggle_bt_light_night' - '🌊 Стиральная машина:/bt_wh_control' - '🔙 Назад:/kv_control, 🔄 Обновить:/bt_control' # --- КНОПКИ УПРАВЛЕНИЯ ВАННОЙ --- - conditions: > {{ trigger.event.data.command in [ '/toggle_bt_ceiling_light', '/toggle_bt_mirror', '/toggle_bt_light_day', '/toggle_bt_light_night' ] }} sequence: - choose: - conditions: "{{ trigger.event.data.command == '/toggle_bt_ceiling_light' }}" sequence: - if: - condition: state entity_id: binary_sensor.lighton_bathroom state: "off" then: - service: scene.turn_on target: { entity_id: scene.vannaia_standartnyi_svet } else: - service: scene.turn_on target: { entity_id: scene.vannaia_vykl_svet } - conditions: "{{ trigger.event.data.command == '/toggle_bt_mirror' }}" sequence: - service: switch.toggle target: { entity_id: switch.0x00158d00054e8e41_l1 } - conditions: "{{ trigger.event.data.command == '/toggle_bt_light_day' }}" sequence: - service: scene.turn_on target: { entity_id: scene.vannaia_standartnyi_svet } - conditions: "{{ trigger.event.data.command == '/toggle_bt_light_night' }}" sequence: - service: scene.turn_on target: { entity_id: scene.vannaia_nochnik_1 } - delay: milliseconds: 500 - service: telegram_bot.answer_callback_query data: callback_query_id: "{{ trigger.event.data.id }}" message: "✅ Команда выполнена" - service: telegram_bot.edit_message data: message_id: "{{ trigger.event.data.message.message_id }}" chat_id: "{{ trigger.event.data.chat_id }}" message: | 🛁 Управление: Ванная 🌡️ Температура: {{ states('sensor.0x00158d0007984db7_temperature') }} °C | 💧 Влажность: {{ states('sensor.0x00158d0007984db7_humidity') }} % 🚶 Присутствие: {% if is_state('binary_sensor.datchik_prisutstviia_vannaia_presence', 'on') %}Движение{% else %}Нет движения{% endif %} 🌊 Стиральная машина: {%- if is_state('sensor.stiralnaia_mashina_s_gorizontalnoi_zagruzkoi', 'on') %} ▶️ Статус: {{ states('sensor.stiralnaia_mashina_s_gorizontalnoi_zagruzkoi_run_state') }} ⏳ Осталось: {{ state_attr('sensor.stiralnaia_mashina_s_gorizontalnoi_zagruzkoi','remain_time') }} {%- else %} ⏹️ Выключена {%- endif %} 🔄 Обновлено: {{ now().strftime('%H:%M:%S') }} inline_keyboard: - '💡 Свет {% if is_state("binary_sensor.lighton_bathroom", "off") %}🔴{% else %}🟢{% endif %}:/toggle_bt_ceiling_light, 🔲 Зеркало {% if is_state("switch.0x00158d00054e8e41_l1", "off") %}🔴{% else %}🟢{% endif %}:/toggle_bt_mirror' - '☀️ Дневной свет:/toggle_bt_light_day, 🌙 Ночной свет:/toggle_bt_light_night' - '🌊 Стиральная машина:/bt_wh_control' - '🔙 Назад:/kv_control, 🔄 Обновить:/bt_control' # ========================================== # --- ПОДМЕНЮ: СТИРАЛЬНАЯ МАШИНА --- # ========================================== - conditions: "{{ trigger.event.data.command == '/bt_wh_control' }}" sequence: - service: telegram_bot.answer_callback_query data: callback_query_id: "{{ trigger.event.data.id }}" message: "🔄 Загружаю данные стиралки..." - service: telegram_bot.edit_message data: message_id: "{{ trigger.event.data.message.message_id }}" chat_id: "{{ trigger.event.data.chat_id }}" message: | 🌊 Стиральная машина: {% if is_state('sensor.stiralnaia_mashina_s_gorizontalnoi_zagruzkoi', 'on') %} ▶️ Состояние: {{ states('sensor.stiralnaia_mashina_s_gorizontalnoi_zagruzkoi_run_state') }} 📋 Программа: {{ states('sensor.stiralnaia_mashina_s_gorizontalnoi_zagruzkoi_current_course') }} ♻️ Обороты: {{ states('sensor.stiralnaia_mashina_s_gorizontalnoi_zagruzkoi_spin_speed') }} 🌡️ Температура: {{ states('sensor.stiralnaia_mashina_s_gorizontalnoi_zagruzkoi_water_temp') }} 👕 Тип сушки: {{ states('sensor.stiralnaia_mashina_s_gorizontalnoi_zagruzkoi_dry_level') }} 💧 Пред. стирка: {{ state_attr('sensor.stiralnaia_mashina_s_gorizontalnoi_zagruzkoi', 'pre_wash') }} 🌊 Доп. полоскание: {{ states('sensor.stiralnaia_mashina_s_gorizontalnoi_zagruzkoi_rinse_mode') }} ⏳ Осталось времени: {{ state_attr('sensor.stiralnaia_mashina_s_gorizontalnoi_zagruzkoi','remain_time') }} ⏱️ Время окончания: {% if state_attr('sensor.stiralnaia_mashina_s_gorizontalnoi_zagruzkoi','end_time') %}{{ as_timestamp(state_attr('sensor.stiralnaia_mashina_s_gorizontalnoi_zagruzkoi','end_time')) | timestamp_custom('%H:%M:%S') }}{% else %}Нет данных{% endif %} {% else %} ⏹️ В данный момент стиральная машина выключена {% endif %} 🔄 Обновлено: {{ now().strftime('%H:%M:%S') }} inline_keyboard: - '🔌 Питание {% if is_state("switch.stiralnaia_mashina_s_gorizontalnoi_zagruzkoi_power", "unavailable") %}🔴{% else %}🟢{% endif %}:/toggle_bt_washing' - '🔙 Назад:/bt_control, 🔄 Обновить:/bt_wh_control' # --- КНОПКА: ВКЛ/ВЫКЛ СТИРАЛКУ --- - conditions: "{{ trigger.event.data.command == '/toggle_bt_washing' }}" sequence: - service: switch.toggle target: { entity_id: switch.stiralnaia_mashina_s_gorizontalnoi_zagruzkoi_power } - delay: milliseconds: 500 - service: telegram_bot.answer_callback_query data: callback_query_id: "{{ trigger.event.data.id }}" message: "🔌 Питание переключено" - service: telegram_bot.edit_message data: message_id: "{{ trigger.event.data.message.message_id }}" chat_id: "{{ trigger.event.data.chat_id }}" message: | 🌊 Стиральная машина: {% if is_state('sensor.stiralnaia_mashina_s_gorizontalnoi_zagruzkoi', 'on') %} ▶️ Состояние: {{ states('sensor.stiralnaia_mashina_s_gorizontalnoi_zagruzkoi_run_state') }} 📋 Программа: {{ states('sensor.stiralnaia_mashina_s_gorizontalnoi_zagruzkoi_current_course') }} ♻️ Обороты: {{ states('sensor.stiralnaia_mashina_s_gorizontalnoi_zagruzkoi_spin_speed') }} 🌡️ Температура: {{ states('sensor.stiralnaia_mashina_s_gorizontalnoi_zagruzkoi_water_temp') }} 👕 Тип сушки: {{ states('sensor.stiralnaia_mashina_s_gorizontalnoi_zagruzkoi_dry_level') }} 💧 Пред. стирка: {{ state_attr('sensor.stiralnaia_mashina_s_gorizontalnoi_zagruzkoi', 'pre_wash') }} 🌊 Доп. полоскание: {{ states('sensor.stiralnaia_mashina_s_gorizontalnoi_zagruzkoi_rinse_mode') }} ⏳ Осталось времени: {{ state_attr('sensor.stiralnaia_mashina_s_gorizontalnoi_zagruzkoi','remain_time') }} ⏱️ Время окончания: {% if state_attr('sensor.stiralnaia_mashina_s_gorizontalnoi_zagruzkoi','end_time') %}{{ as_timestamp(state_attr('sensor.stiralnaia_mashina_s_gorizontalnoi_zagruzkoi','end_time')) | timestamp_custom('%H:%M:%S') }}{% else %}Нет данных{% endif %} {% else %} ⏹️ В данный момент стиральная машина выключена {% endif %} 🔄 Обновлено: {{ now().strftime('%H:%M:%S') }} inline_keyboard: - '🔌 Питание {% if is_state("switch.stiralnaia_mashina_s_gorizontalnoi_zagruzkoi_power", "unavailable") %}🔴{% else %}🟢{% endif %}:/toggle_bt_washing' - '🔙 Назад:/bt_control, 🔄 Обновить:/bt_wh_control' # ========================================== # --- МЕНЮ: КУХНЯ --- # ========================================== - conditions: "{{ trigger.event.data.command == '/kn_control' }}" sequence: - service: telegram_bot.answer_callback_query data: callback_query_id: "{{ trigger.event.data.id }}" message: "🔄 Загружаю меню кухни..." - service: telegram_bot.edit_message data: message_id: "{{ trigger.event.data.message.message_id }}" chat_id: "{{ trigger.event.data.chat_id }}" message: | 🍽️ Управление: Кухня 🌡️ Температура: {{ states('sensor.a4c138eb5c2a_temperature') }} °C | 💧 Влажность: {{ states('sensor.a4c138eb5c2a_humidity') }} % 🚶 Присутствие: {% if is_state('binary_sensor.datchik_prisutstviia_kukhnia_presence', 'on') %}Движение{% else %}Нет движения{% endif %} {%- if is_state('switch.posudomoechnaia_mashina_power', 'on') %} 🌊 Мойка посуды: {{ states('sensor.401090521617010964_bsh_common_option_programprogress') }}% {%- endif %} 🔄 Обновлено: {{ now().strftime('%H:%M:%S') }} inline_keyboard: - '💡 Свет {% if is_state("binary_sensor.lighton_kitchen", "off") %}🔴{% else %}🟢{% endif %}:/toggle_kn_ceiling_light' - '☀️ Дневной свет:/toggle_kn_light_day, 🌙 Ночной свет:/toggle_kn_light_night' - '🌊 Посудомойка {% if is_state("switch.posudomoechnaia_mashina_power", "off") %}🔴{% else %}🟢{% endif %}:/dw_control' - '🍵 Термопот {% if is_state("switch.0x54ef4410000783c6", "off") %}🔴{% else %}🟢{% endif %}:/toggle_kn_tp' - '🔙 Назад:/kv_control, 🔄 Обновить:/kn_control' # --- КНОПКИ УПРАВЛЕНИЯ КУХНЕЙ --- - conditions: > {{ trigger.event.data.command in [ '/toggle_kn_ceiling_light', '/toggle_kn_light_day', '/toggle_kn_light_night', '/toggle_kn_tp' ] }} sequence: - choose: - conditions: "{{ trigger.event.data.command == '/toggle_kn_ceiling_light' }}" sequence: - service: light.toggle target: { entity_id: light.yeelink_ceilc_ff3a_light } - conditions: "{{ trigger.event.data.command == '/toggle_kn_light_day' }}" sequence: - service: scene.turn_on target: { entity_id: scene.svet_v_kukhne_100 } - conditions: "{{ trigger.event.data.command == '/toggle_kn_light_night' }}" sequence: - service: scene.turn_on target: { entity_id: scene.kukhnia_noch } - conditions: "{{ trigger.event.data.command == '/toggle_kn_tp' }}" sequence: - service: switch.toggle target: { entity_id: switch.0x54ef4410000783c6 } - delay: milliseconds: 500 - service: telegram_bot.answer_callback_query data: callback_query_id: "{{ trigger.event.data.id }}" message: "✅ Команда выполнена" - service: telegram_bot.edit_message data: message_id: "{{ trigger.event.data.message.message_id }}" chat_id: "{{ trigger.event.data.chat_id }}" message: | 🍽️ Управление: Кухня 🌡️ Температура: {{ states('sensor.a4c138eb5c2a_temperature') }} °C | 💧 Влажность: {{ states('sensor.a4c138eb5c2a_humidity') }} % 🚶 Присутствие: {% if is_state('binary_sensor.datchik_prisutstviia_kukhnia_presence', 'on') %}Движение{% else %}Нет движения{% endif %} {%- if is_state('switch.posudomoechnaia_mashina_power', 'on') %} 🌊 Мойка посуды: {{ states('sensor.401090521617010964_bsh_common_option_programprogress') }}% {%- endif %} 🔄 Обновлено: {{ now().strftime('%H:%M:%S') }} inline_keyboard: - '💡 Свет {% if is_state("binary_sensor.lighton_kitchen", "off") %}🔴{% else %}🟢{% endif %}:/toggle_kn_ceiling_light' - '☀️ Дневной свет:/toggle_kn_light_day, 🌙 Ночной свет:/toggle_kn_light_night' - '🌊 Посудомойка {% if is_state("switch.posudomoechnaia_mashina_power", "off") %}🔴{% else %}🟢{% endif %}:/dw_control' - '🍵 Термопот {% if is_state("switch.0x54ef4410000783c6", "off") %}🔴{% else %}🟢{% endif %}:/toggle_kn_tp' - '🔙 Назад:/kv_control, 🔄 Обновить:/kn_control' # ========================================== # --- МЕНЮ: ПРИХОЖАЯ --- # ========================================== - conditions: "{{ trigger.event.data.command == '/lb_control' }}" sequence: - service: telegram_bot.answer_callback_query data: callback_query_id: "{{ trigger.event.data.id }}" message: "🔄 Загружаю меню прихожей..." - service: telegram_bot.edit_message data: message_id: "{{ trigger.event.data.message.message_id }}" chat_id: "{{ trigger.event.data.chat_id }}" message: | 🚪 Управление: Прихожая 🚪 Входная дверь: {% if is_state ('binary_sensor.e4aaec3747b2_contact', 'off') %}Закрыта{% else %}Открыта{% endif %} 🚶 Присутствие: {% if is_state('binary_sensor.0x00158d000707efdf_motion', 'on') %}Движение{% else %}Нет движения{% endif %} 🔄 Обновлено: {{ now().strftime('%H:%M:%S') }} inline_keyboard: - '💡 Свет день {% if is_state("switch.0x54ef4410003aa472_right", "off") %}🔴{% else %}🟢{% endif %}:/toggle_lb_d_ceiling_light' - '💡 Свет ночь {% if is_state("switch.0x54ef4410003aa472_left", "off") %}🔴{% else %}🟢{% endif %}:/toggle_lb_n_ceiling_light' - '🔙 Назад:/kv_control, 🔄 Обновить:/lb_control' # --- КНОПКИ УПРАВЛЕНИЯ ПРИХОЖЕЙ --- - conditions: > {{ trigger.event.data.command in [ '/toggle_lb_d_ceiling_light', '/toggle_lb_n_ceiling_light', '/toggle_lb_off_door' ] }} sequence: - choose: - conditions: "{{ trigger.event.data.command == '/toggle_lb_d_ceiling_light' }}" sequence: - service: switch.toggle target: { entity_id: switch.0x54ef4410003aa472_right } - conditions: "{{ trigger.event.data.command == '/toggle_lb_n_ceiling_light' }}" sequence: - service: switch.toggle target: { entity_id: switch.0x54ef4410003aa472_left } - conditions: "{{ trigger.event.data.command == '/toggle_lb_off_door' }}" sequence: - service: automation.turn_off target: { entity_id: automation.ntf_door_open_5min } data: { stop_actions: true } - service: automation.turn_on target: { entity_id: automation.ntf_door_open_5min } - delay: milliseconds: 500 - service: telegram_bot.answer_callback_query data: callback_query_id: "{{ trigger.event.data.id }}" message: "✅ Команда выполнена" - choose: - conditions: "{{ trigger.event.data.command != '/toggle_lb_off_door' }}" sequence: - service: telegram_bot.edit_message data: message_id: "{{ trigger.event.data.message.message_id }}" chat_id: "{{ trigger.event.data.chat_id }}" message: | 🚪 Управление: Прихожая 🚪 Входная дверь: {% if is_state ('binary_sensor.e4aaec3747b2_contact', 'off') %}Закрыта{% else %}Открыта{% endif %} 🚶 Присутствие: {% if is_state('binary_sensor.0x00158d000707efdf_motion', 'on') %}Движение{% else %}Нет движения{% endif %} 🔄 Обновлено: {{ now().strftime('%H:%M:%S') }} inline_keyboard: - '💡 Свет день {% if is_state("switch.0x54ef4410003aa472_right", "off") %}🔴{% else %}🟢{% endif %}:/toggle_lb_d_ceiling_light' - '💡 Свет ночь {% if is_state("switch.0x54ef4410003aa472_left", "off") %}🔴{% else %}🟢{% endif %}:/toggle_lb_n_ceiling_light' - '🔙 Назад:/kv_control, 🔄 Обновить:/lb_control' # ========================================== # --- МЕНЮ: GPS И ГЕОЛОКАЦИЯ (ГЛАВНОЕ) --- # ========================================== - conditions: "{{ trigger.event.data.command == '/gps_control' }}" sequence: - service: telegram_bot.answer_callback_query data: callback_query_id: "{{ trigger.event.data.id }}" message: "🔄 Обновляю локации..." - service: telegram_bot.edit_message data: message_id: "{{ trigger.event.data.message.message_id }}" chat_id: "{{ trigger.event.data.chat_id }}" message: | {%- macro get_loc(entity) -%} {%- set s = states(entity) -%} {%- if s == 'home' %}Дома{% elif s == 'not_home' %}Не дома{% elif s == 'Родители Лены' %}Родители Лены{% elif s == 'Работа Денис' %}Работа Денис{% elif s in ['unknown', 'unavailable'] %}Нет данных{% else %}{{ s | capitalize }}{% endif -%} {%- endmacro -%} 🌐 Кто? Где? 👩 Лена: {{ get_loc('device_tracker.google_maps_118311730364158481019') }} 🔋 Телефон: {{ states('sensor.iphone_13_pro_max_battery') | default('—', true) }}% ({% set ch = state_attr('sensor.iphone_13_pro_max_battery', 'battery_status') %}{% if ch == 'NotCharging' %}не заряжается{% elif ch == 'Charging' %}идет заряд{% else %}нет данных{% endif %}) 📍 Адрес: {{ state_attr('device_tracker.google_maps_118311730364158481019', 'address') | default('Нет данных', true) }} 👨 Денис: {{ get_loc('device_tracker.google_maps_108918666344169166438') }} 🔋 Телефон: {{ state_attr('device_tracker.google_maps_108918666344169166438', 'battery_level') | default('—', true) }}% 📍 Адрес: {{ state_attr('device_tracker.google_maps_108918666344169166438', 'address') | default('Нет данных', true) }} 🛴 Самокат: {{ get_loc('device_tracker.samokat_dddennnisss') }} 🔄 Обновлено: {{ now().strftime('%H:%M:%S') }} inline_keyboard: - '🗺️ Где Денис:/gps_send_loc_d, 🗺️ Где Лена:/gps_send_loc_e, 🗺️ Где Мама:/gps_send_loc_m' - '🛴 Где самокат:/gps_send_loc_s' - '✉️ Уведомления: Денис:/gps_control_d, ✉️ Уведомления: Лена:/gps_control_e' - '🔙 Назад:/menu_back, 🔄 Обновить:/gps_control' # ========================================== # --- ОТПРАВКА ГЕОЛОКАЦИИ (ОДИН БЛОК ДЛЯ ВСЕХ) --- # ========================================== - conditions: > {{ trigger.event.data.command in [ '/gps_send_loc_d', '/gps_send_loc_e', '/gps_send_loc_m', '/gps_send_loc_s' ] }} sequence: # 1. Задаем словарь с нужными трекерами - variables: tracker: > {% if trigger.event.data.command == '/gps_send_loc_d' %}device_tracker.google_maps_108918666344169166438 {% elif trigger.event.data.command == '/gps_send_loc_e' %}device_tracker.google_maps_118311730364158481019 {% elif trigger.event.data.command == '/gps_send_loc_m' %}device_tracker.google_maps_101930139594365808950 {% else %}device_tracker.samokat_dddennnisss{% endif %} person_name: > {% if trigger.event.data.command == '/gps_send_loc_d' %}Дениса {% elif trigger.event.data.command == '/gps_send_loc_e' %}Лены {% elif trigger.event.data.command == '/gps_send_loc_m' %}Мамы {% else %}самоката{% endif %} - service: telegram_bot.answer_callback_query data: callback_query_id: "{{ trigger.event.data.id }}" message: "📍 Отправляю локацию {{ person_name }}..." # 2. Проверяем, есть ли координаты - choose: - conditions: "{{ state_attr(tracker, 'latitude') is not none and state_attr(tracker, 'longitude') is not none }}" sequence: - service: telegram_bot.delete_message data: message_id: "{{ trigger.event.data.message.message_id }}" chat_id: "{{ trigger.event.data.chat_id }}" # Отправляем карту - service: telegram_bot.send_location data: chat_id: "{{ trigger.event.data.chat_id }}" latitude: "{{ state_attr(tracker, 'latitude') }}" longitude: "{{ state_attr(tracker, 'longitude') }}" # Прикрепляем меню - service: telegram_bot.send_message data: chat_id: "{{ trigger.event.data.chat_id }}" message: | 📍 Местоположение {{ person_name }}: {% if trigger.event.data.command != '/gps_send_loc_s' %}{{ state_attr(tracker, 'address') | default('Адрес не определен') }}{% endif %} inline_keyboard: - '🗺️ Где Денис:/gps_send_loc_d, 🗺️ Где Лена:/gps_send_loc_e, 🗺️ Где Мама:/gps_send_loc_m' - '🛴 Где самокат:/gps_send_loc_s' - '✉️ Уведомления: Денис:/gps_control_d, ✉️ Уведомления: Лена:/gps_control_e' - '🔙 Назад:/menu_back, 🔄 Обновить:/gps_control' default: # Координат нет - service: telegram_bot.send_message data: chat_id: "{{ trigger.event.data.chat_id }}" message: "⚠️ Не удалось получить координаты {{ person_name }}. Устройство не в сети." # ========================================== # --- МЕНЮ: УВЕДОМЛЕНИЯ ДЕНИС --- # ========================================== - conditions: "{{ trigger.event.data.command == '/gps_control_d' }}" sequence: - service: telegram_bot.answer_callback_query data: callback_query_id: "{{ trigger.event.data.id }}" message: "🔄 Загружаю меню уведомлений..." - service: telegram_bot.edit_message data: message_id: "{{ trigger.event.data.message.message_id }}" chat_id: "{{ trigger.event.data.chat_id }}" message: | ✉️ Настройка уведомлений: Денис Выберите, о каких перемещениях получать сообщения: inline_keyboard: - "{% if is_state('automation.gps_denis_on_home', 'off')%}🔴{% else %}🟢{% endif %} Дома:/toggle_gps_d_hm_on, {% if is_state('automation.gps_denis_off_home', 'off')%}🔴{% else %}🟢{% endif %} Не дома:/toggle_gps_d_hm_off" - "{% if is_state('automation.gps_denis_on_mama', 'off')%}🔴{% else %}🟢{% endif %} У мамы:/toggle_gps_d_mm_on, {% if is_state('automation.gps_denis_off_mama', 'off')%}🔴{% else %}🟢{% endif %} Не у мамы:/toggle_gps_d_mm_off" - "{% if is_state('automation.gps_denis_on_raduga', 'off')%}🔴{% else %}🟢{% endif %} На радуге:/toggle_gps_d_rd_on, {% if is_state('automation.gps_denis_off_raduga', 'off')%}🔴{% else %}🟢{% endif %} Не на радуге:/toggle_gps_d_rd_off" - "{% if is_state('automation.gps_denis_on_job', 'off')%}🔴{% else %}🟢{% endif %} На работе:/toggle_gps_d_jb_on, {% if is_state('automation.gps_denis_off_job', 'off')%}🔴{% else %}🟢{% endif %} Не на работе:/toggle_gps_d_jb_off" - "{% if is_state('automation.gps_denis_on_ya', 'off')%}🔴{% else %}🟢{% endif %} У яшки:/toggle_gps_d_ya_on" - "{% if is_state('automation.gps_denis_on_center', 'off')%}🔴{% else %}🟢{% endif %} В центре:/toggle_gps_d_c_on, {% if is_state('automation.gps_denis_off_center', 'off')%}🔴{% else %}🟢{% endif %} Не в центре:/toggle_gps_d_c_off" - "{% if is_state('automation.gps_denis_on_len', 'off')%}🔴{% else %}🟢{% endif %} В Ленинском:/toggle_gps_d_len_on, {% if is_state('automation.gps_denis_off_len', 'off')%}🔴{% else %}🟢{% endif %} Не в ленинском:/toggle_gps_d_len_off" - "{% if is_state('automation.gps_denis_on_kem', 'off')%}🔴{% else %}🟢{% endif %} В Кемерово:/toggle_gps_d_kem_on, {% if is_state('automation.gps_denis_off_kem', 'off')%}🔴{% else %}🟢{% endif %} Не в Кемерово:/toggle_gps_d_kem_off" - "🔙 Назад:/gps_control, 🔄 Обновить:/gps_control_d" # ========================================== # --- МЕНЮ: УВЕДОМЛЕНИЯ ЛЕНА --- # ========================================== - conditions: "{{ trigger.event.data.command == '/gps_control_e' }}" sequence: - service: telegram_bot.answer_callback_query data: callback_query_id: "{{ trigger.event.data.id }}" message: "🔄 Загружаю меню уведомлений..." - service: telegram_bot.edit_message data: message_id: "{{ trigger.event.data.message.message_id }}" chat_id: "{{ trigger.event.data.chat_id }}" message: | ✉️ Настройка уведомлений: Лена Выберите, о каких перемещениях получать сообщения: inline_keyboard: - "{% if is_state('automation.gps_lena_on_home', 'off')%}🔴{% else %}🟢{% endif %} Дома:/toggle_gps_e_hm_on, {% if is_state('automation.gps_lena_off_home', 'off')%}🔴{% else %}🟢{% endif %} Не дома:/toggle_gps_e_hm_off" - "{% if is_state('automation.gps_lena_on_mama', 'off')%}🔴{% else %}🟢{% endif %} У мамы:/toggle_gps_e_mm_on, {% if is_state('automation.gps_lena_off_mama', 'off')%}🔴{% else %}🟢{% endif %} Не у мамы:/toggle_gps_e_mm_off" - "{% if is_state('automation.gps_lena_on_raduga', 'off')%}🔴{% else %}🟢{% endif %} На радуге:/toggle_gps_e_rd_on, {% if is_state('automation.gps_lena_off_raduga', 'off')%}🔴{% else %}🟢{% endif %} Не на радуге:/toggle_gps_e_rd_off" - "{% if is_state('automation.gps_lena_on_job', 'off')%}🔴{% else %}🟢{% endif %} На работе:/toggle_gps_e_jb_on, {% if is_state('automation.gps_lena_off_job', 'off')%}🔴{% else %}🟢{% endif %} Не на работе:/toggle_gps_e_jb_off" - "{% if is_state('automation.gps_lena_on_ya', 'off')%}🔴{% else %}🟢{% endif %} У яшки:/toggle_gps_e_ya_on" - "{% if is_state('automation.gps_lena_on_familyr', 'off')%}🔴{% else %}🟢{% endif %} У родителей:/toggle_gps_e_fm_on, {% if is_state('automation.gps_lena_off_familyr', 'off')%}🔴{% else %}🟢{% endif %} Не у родителей:/toggle_gps_e_fm_off" - "{% if is_state('automation.gps_lena_on_center', 'off')%}🔴{% else %}🟢{% endif %} В центре:/toggle_gps_e_c_on, {% if is_state('automation.gps_lena_off_center', 'off')%}🔴{% else %}🟢{% endif %} Не в центре:/toggle_gps_e_c_off" - "{% if is_state('automation.gps_elena_on_len', 'off')%}🔴{% else %}🟢{% endif %} В Ленинском:/toggle_gps_e_len_on, {% if is_state('automation.gps_elena_off_len', 'off')%}🔴{% else %}🟢{% endif %} Не в ленинском:/toggle_gps_e_len_off" - "{% if is_state('automation.gps_elena_on_kem', 'off')%}🔴{% else %}🟢{% endif %} В Кемерово:/toggle_gps_e_kem_on, {% if is_state('automation.gps_elena_off_kem', 'off')%}🔴{% else %}🟢{% endif %} Не в Кемерово:/toggle_gps_e_kem_off" - "🔙 Назад:/gps_control, 🔄 Обновить:/gps_control_e" # ========================================== # --- УМНЫЙ БЛОК ПЕРЕКЛЮЧЕНИЯ ВСЕХ УВЕДОМЛЕНИЙ --- # ========================================== - conditions: "{{ trigger.event.data.command.startswith('/toggle_gps_') }}" sequence: - variables: # Словарь-маппинг: Команда -> Название автоматизации auto_map: '/toggle_gps_d_hm_on': 'automation.gps_denis_on_home' '/toggle_gps_d_hm_off': 'automation.gps_denis_off_home' '/toggle_gps_d_mm_on': 'automation.gps_denis_on_mama' '/toggle_gps_d_mm_off': 'automation.gps_denis_off_mama' '/toggle_gps_d_rd_on': 'automation.gps_denis_on_raduga' '/toggle_gps_d_rd_off': 'automation.gps_denis_off_raduga' '/toggle_gps_d_jb_on': 'automation.gps_denis_on_job' '/toggle_gps_d_jb_off': 'automation.gps_denis_off_job' '/toggle_gps_d_ya_on': 'automation.gps_denis_on_ya' '/toggle_gps_d_c_on': 'automation.gps_denis_on_center' '/toggle_gps_d_c_off': 'automation.gps_denis_off_center' '/toggle_gps_d_len_on': 'automation.gps_denis_on_len' '/toggle_gps_d_len_off': 'automation.gps_denis_off_len' '/toggle_gps_d_kem_on': 'automation.gps_denis_on_kem' '/toggle_gps_d_kem_off': 'automation.gps_denis_off_kem' '/toggle_gps_e_hm_on': 'automation.gps_lena_on_home' '/toggle_gps_e_hm_off': 'automation.gps_lena_off_home' '/toggle_gps_e_mm_on': 'automation.gps_lena_on_mama' '/toggle_gps_e_mm_off': 'automation.gps_lena_off_mama' '/toggle_gps_e_rd_on': 'automation.gps_lena_on_raduga' '/toggle_gps_e_rd_off': 'automation.gps_lena_off_raduga' '/toggle_gps_e_jb_on': 'automation.gps_lena_on_job' '/toggle_gps_e_jb_off': 'automation.gps_lena_off_job' '/toggle_gps_e_ya_on': 'automation.gps_lena_on_ya' '/toggle_gps_e_fm_on': 'automation.gps_lena_on_familyr' '/toggle_gps_e_fm_off': 'automation.gps_lena_off_familyr' '/toggle_gps_e_c_on': 'automation.gps_lena_on_center' '/toggle_gps_e_c_off': 'automation.gps_lena_off_center' '/toggle_gps_e_len_on': 'automation.gps_elena_on_len' '/toggle_gps_e_len_off': 'automation.gps_elena_off_len' '/toggle_gps_e_kem_on': 'automation.gps_elena_on_kem' '/toggle_gps_e_kem_off': 'automation.gps_elena_off_kem' target_auto: "{{ auto_map.get(trigger.event.data.command) }}" # Дергаем нужную автоматизацию - service: automation.toggle target: entity_id: "{{ target_auto }}" - delay: milliseconds: 300 - service: telegram_bot.answer_callback_query data: callback_query_id: "{{ trigger.event.data.id }}" message: "✅ Настройка изменена" # Обновляем менюшку в зависимости от того, чьи настройки меняли - choose: # Ветка Дениса - conditions: "{{ '_d_' in trigger.event.data.command }}" sequence: - service: telegram_bot.edit_message data: message_id: "{{ trigger.event.data.message.message_id }}" chat_id: "{{ trigger.event.data.chat_id }}" message: | ✉️ Настройка уведомлений: Денис Выберите, о каких перемещениях получать сообщения: inline_keyboard: - "{% if is_state('automation.gps_denis_on_home', 'off')%}🔴{% else %}🟢{% endif %} Дома:/toggle_gps_d_hm_on, {% if is_state('automation.gps_denis_off_home', 'off')%}🔴{% else %}🟢{% endif %} Не дома:/toggle_gps_d_hm_off" - "{% if is_state('automation.gps_denis_on_mama', 'off')%}🔴{% else %}🟢{% endif %} У мамы:/toggle_gps_d_mm_on, {% if is_state('automation.gps_denis_off_mama', 'off')%}🔴{% else %}🟢{% endif %} Не у мамы:/toggle_gps_d_mm_off" - "{% if is_state('automation.gps_denis_on_raduga', 'off')%}🔴{% else %}🟢{% endif %} На радуге:/toggle_gps_d_rd_on, {% if is_state('automation.gps_denis_off_raduga', 'off')%}🔴{% else %}🟢{% endif %} Не на радуге:/toggle_gps_d_rd_off" - "{% if is_state('automation.gps_denis_on_job', 'off')%}🔴{% else %}🟢{% endif %} На работе:/toggle_gps_d_jb_on, {% if is_state('automation.gps_denis_off_job', 'off')%}🔴{% else %}🟢{% endif %} Не на работе:/toggle_gps_d_jb_off" - "{% if is_state('automation.gps_denis_on_ya', 'off')%}🔴{% else %}🟢{% endif %} У яшки:/toggle_gps_d_ya_on" - "{% if is_state('automation.gps_denis_on_center', 'off')%}🔴{% else %}🟢{% endif %} В центре:/toggle_gps_d_c_on, {% if is_state('automation.gps_denis_off_center', 'off')%}🔴{% else %}🟢{% endif %} Не в центре:/toggle_gps_d_c_off" - "{% if is_state('automation.gps_denis_on_len', 'off')%}🔴{% else %}🟢{% endif %} В Ленинском:/toggle_gps_d_len_on, {% if is_state('automation.gps_denis_off_len', 'off')%}🔴{% else %}🟢{% endif %} Не в ленинском:/toggle_gps_d_len_off" - "{% if is_state('automation.gps_denis_on_kem', 'off')%}🔴{% else %}🟢{% endif %} В Кемерово:/toggle_gps_d_kem_on, {% if is_state('automation.gps_denis_off_kem', 'off')%}🔴{% else %}🟢{% endif %} Не в Кемерово:/toggle_gps_d_kem_off" - "🔙 Назад:/gps_control, 🔄 Обновить:/gps_control_d" # Ветка Лены - conditions: "{{ '_e_' in trigger.event.data.command }}" sequence: - service: telegram_bot.edit_message data: message_id: "{{ trigger.event.data.message.message_id }}" chat_id: "{{ trigger.event.data.chat_id }}" message: | ✉️ Настройка уведомлений: Лена Выберите, о каких перемещениях получать сообщения: inline_keyboard: - "{% if is_state('automation.gps_lena_on_home', 'off')%}🔴{% else %}🟢{% endif %} Дома:/toggle_gps_e_hm_on, {% if is_state('automation.gps_lena_off_home', 'off')%}🔴{% else %}🟢{% endif %} Не дома:/toggle_gps_e_hm_off" - "{% if is_state('automation.gps_lena_on_mama', 'off')%}🔴{% else %}🟢{% endif %} У мамы:/toggle_gps_e_mm_on, {% if is_state('automation.gps_lena_off_mama', 'off')%}🔴{% else %}🟢{% endif %} Не у мамы:/toggle_gps_e_mm_off" - "{% if is_state('automation.gps_lena_on_raduga', 'off')%}🔴{% else %}🟢{% endif %} На радуге:/toggle_gps_e_rd_on, {% if is_state('automation.gps_lena_off_raduga', 'off')%}🔴{% else %}🟢{% endif %} Не на радуге:/toggle_gps_e_rd_off" - "{% if is_state('automation.gps_lena_on_job', 'off')%}🔴{% else %}🟢{% endif %} На работе:/toggle_gps_e_jb_on, {% if is_state('automation.gps_lena_off_job', 'off')%}🔴{% else %}🟢{% endif %} Не на работе:/toggle_gps_e_jb_off" - "{% if is_state('automation.gps_lena_on_ya', 'off')%}🔴{% else %}🟢{% endif %} У яшки:/toggle_gps_e_ya_on" - "{% if is_state('automation.gps_lena_on_familyr', 'off')%}🔴{% else %}🟢{% endif %} У родителей:/toggle_gps_e_fm_on, {% if is_state('automation.gps_lena_off_familyr', 'off')%}🔴{% else %}🟢{% endif %} Не у родителей:/toggle_gps_e_fm_off" - "{% if is_state('automation.gps_lena_on_center', 'off')%}🔴{% else %}🟢{% endif %} В центре:/toggle_gps_e_c_on, {% if is_state('automation.gps_lena_off_center', 'off')%}🔴{% else %}🟢{% endif %} Не в центре:/toggle_gps_e_c_off" - "{% if is_state('automation.gps_elena_on_len', 'off')%}🔴{% else %}🟢{% endif %} В Ленинском:/toggle_gps_e_len_on, {% if is_state('automation.gps_elena_off_len', 'off')%}🔴{% else %}🟢{% endif %} Не в ленинском:/toggle_gps_e_len_off" - "{% if is_state('automation.gps_elena_on_kem', 'off')%}🔴{% else %}🟢{% endif %} В Кемерово:/toggle_gps_e_kem_on, {% if is_state('automation.gps_elena_off_kem', 'off')%}🔴{% else %}🟢{% endif %} Не в Кемерово:/toggle_gps_e_kem_off" - "🔙 Назад:/gps_control, 🔄 Обновить:/gps_control_e" # ========================================== # --- МЕНЮ: ТОРРЕНТЫ --- # ========================================== - conditions: "{{ trigger.event.data.command == '/tr_control' }}" sequence: - service: telegram_bot.answer_callback_query data: callback_query_id: "{{ trigger.event.data.id }}" message: "🔄 Обновляю список торрентов..." - service: telegram_bot.edit_message data: message_id: "{{ trigger.event.data.message.message_id }}" chat_id: "{{ trigger.event.data.chat_id }}" parse_mode: html message: | 📝 Управление: Торренты {% set payload = state_attr('sensor.transmission_total_torrents_2', 'torrent_info') %} {%- if payload -%} {%- set status_icons = { 'downloading': '⬇️', 'seeding': '🚀', 'paused': '⏸', 'stopped': '⏹', 'checking': '🔍', 'error': '⚠️', 'waiting': '⏳', 'queued': '🕓' } -%} {%- for name, data in payload.items() %} {{ status_icons.get(data.status, '❓') }} {{ name | truncate(35, true, '...') }} └ 📈 {{ data.percent_done }}% | ℹ️ {{ data.status }} {% endfor -%} {%- else %} ⚠️ Нет активных загрузок или нет данных от Transmission. {%- endif %} 🔄 Обновлено: {{ now().strftime('%H:%M:%S') }} inline_keyboard: - '🔙 Назад:/menu_back, 🔄 Обновить:/tr_control' # ========================================== # --- МЕНЮ: УПРАВЛЕНИЕ АВТОМАТИЗАЦИЕЙ --- # ========================================== - conditions: "{{ trigger.event.data.command == '/au_control' }}" sequence: - service: telegram_bot.answer_callback_query data: callback_query_id: "{{ trigger.event.data.id }}" message: "🔄 Загружаю меню автоматизаций..." - service: telegram_bot.edit_message data: message_id: "{{ trigger.event.data.message.message_id }}" chat_id: "{{ trigger.event.data.chat_id }}" parse_mode: html message: | ⚙️ Управление автоматизацией: inline_keyboard: - '🔦 Автоматизация света:/au_l_control' - '🔙 Назад:/menu_back, 🔄 Обновить:/au_control' # ========================================== # --- ПОДМЕНЮ: АВТОМАТИЗАЦИЯ СВЕТА --- # ========================================== - conditions: "{{ trigger.event.data.command == '/au_l_control' }}" sequence: - service: telegram_bot.answer_callback_query data: callback_query_id: "{{ trigger.event.data.id }}" message: "🔄 Загружаю автоматизации света..." - service: telegram_bot.edit_message data: message_id: "{{ trigger.event.data.message.message_id }}" chat_id: "{{ trigger.event.data.chat_id }}" parse_mode: html message: | 🔦 Управление автоматизацией света: inline_keyboard: - '💡 Свет кухня {% if is_state("automation.lght_kitchen_on_lght_50", "off") %}🔴{% else %}🟢{% endif %}:/toggle_au_light_kn' - '💡 Свет ванная {% if is_state("automation.lght_bathroom_on_standart_light", "off") %}🔴{% else %}🟢{% endif %}:/toggle_au_light_bt' - '💡 Свет прихожая {% if is_state("automation.lght_lobby_light_on_day_motion", "off") %}🔴{% else %}🟢{% endif %}:/toggle_au_light_lb' - '🔙 Назад:/au_control, 🔄 Обновить:/au_l_control' # ========================================== # --- КНОПКИ: ПЕРЕКЛЮЧЕНИЕ СВЕТА --- # ========================================== - conditions: > {{ trigger.event.data.command in [ '/toggle_au_light_kn', '/toggle_au_light_bt', '/toggle_au_light_lb' ] }} sequence: - choose: - conditions: "{{ trigger.event.data.command == '/toggle_au_light_kn' }}" sequence: - service: automation.toggle target: entity_id: automation.lght_kitchen_on_lght_50 - conditions: "{{ trigger.event.data.command == '/toggle_au_light_bt' }}" sequence: - service: automation.toggle target: entity_id: - automation.lght_bathroom_on_standart_light - automation.lght_bathroom_on_night_light - conditions: "{{ trigger.event.data.command == '/toggle_au_light_lb' }}" sequence: - service: automation.toggle target: entity_id: - automation.lght_lobby_light_on_day_motion - automation.lght_lobby_light_on_night_motion - delay: milliseconds: 500 - service: telegram_bot.answer_callback_query data: callback_query_id: "{{ trigger.event.data.id }}" message: "✅ Статус автоматизации изменён" - service: telegram_bot.edit_message data: message_id: "{{ trigger.event.data.message.message_id }}" chat_id: "{{ trigger.event.data.chat_id }}" parse_mode: html message: | 🔦 Управление автоматизацией света: inline_keyboard: - '💡 Свет кухня {% if is_state("automation.lght_kitchen_on_lght_50", "off") %}🔴{% else %}🟢{% endif %}:/toggle_au_light_kn' - '💡 Свет ванная {% if is_state("automation.lght_bathroom_on_standart_light", "off") %}🔴{% else %}🟢{% endif %}:/toggle_au_light_bt' - '💡 Свет прихожая {% if is_state("automation.lght_lobby_light_on_day_motion", "off") %}🔴{% else %}🟢{% endif %}:/toggle_au_light_lb' - '🔙 Назад:/au_control, 🔄 Обновить:/au_l_control' # ========================================== # --- МЕНЮ: УПРАВЛЕНИЕ САМОКАТОМ --- # ========================================== - conditions: "{{ trigger.event.data.command == '/sc_control' }}" sequence: - service: telegram_bot.answer_callback_query data: callback_query_id: "{{ trigger.event.data.id }}" message: "🔄 Обновляю данные самоката..." - service: telegram_bot.edit_message data: message_id: "{{ trigger.event.data.message.message_id }}" chat_id: "{{ trigger.event.data.chat_id }}" parse_mode: html message: | 🛴 Управление самокатом: 📈 Скорость: {{ states('sensor.samokat_dddennnisss_speed') }} км/ч 🏃‍♂️ Движение: {% if is_state('binary_sensor.samokat_dddennnisss_motion', 'on') %}Да{% else %}Нет{% endif %} {% if is_state('input_boolean.scooter_protection_active', 'on') %}🔐 Защита включена{% else %}🔓 Защита отключена{% endif %} 🛰️ GPS свежий: {% if is_state('binary_sensor.scooter_gps_data_fresh', 'on') %}Да ✅{% else %}Нет ❌{% endif %} ⏳ Возраст (самокат): {{ (state_attr('binary_sensor.scooter_gps_data_fresh', 'scooter_age_seconds') or 0) | int }} сек ⏳ Возраст (Денис): {{ (state_attr('binary_sensor.scooter_gps_data_fresh', 'dddennnisss_age_seconds') or 0) | int }} сек 📍 Расстояние: {{ distance( state_attr('device_tracker.google_maps_108918666344169166438', 'latitude'), state_attr('device_tracker.google_maps_108918666344169166438', 'longitude'), state_attr('device_tracker.samokat_dddennnisss', 'latitude'), state_attr('device_tracker.samokat_dddennnisss', 'longitude') ) | round(2) }} км 🔄 Обновлено: {{ now().strftime('%H:%M:%S') }} inline_keyboard: - "{% if is_state('input_boolean.scooter_protection_active', 'on') %}🔓 Снять защиту:/sc_r_unlocked{% else %}🔐 Включить защиту:/sc_r_locked{% endif %}" - '🗺️ Где самокат:/gps_send_loc_s' - '🔙 Назад:/menu_back, 🔄 Обновить:/sc_control' # ========================================== # --- КНОПКИ: БЛОКИРОВКА САМОКАТА --- # ========================================== - conditions: "{{ trigger.event.data.command in ['/sc_r_locked', '/sc_r_unlocked'] }}" sequence: - service: >- {% if trigger.event.data.command == '/sc_r_locked' %}input_boolean.turn_on{% else %}input_boolean.turn_off{% endif %} target: entity_id: input_boolean.scooter_protection_active - delay: milliseconds: 500 - service: telegram_bot.answer_callback_query data: callback_query_id: "{{ trigger.event.data.id }}" message: "✅ Статус защиты изменён" # Возвращаемся в меню самоката для обновления статуса - service: telegram_bot.edit_message data: message_id: "{{ trigger.event.data.message.message_id }}" chat_id: "{{ trigger.event.data.chat_id }}" parse_mode: html message: | 🛴 Управление самокатом: 📈 Скорость: {{ states('sensor.samokat_dddennnisss_speed') }} км/ч 🏃‍♂️ Движение: {% if is_state('binary_sensor.samokat_dddennnisss_motion', 'on') %}Да{% else %}Нет{% endif %} {% if is_state('input_boolean.scooter_protection_active', 'on') %}🔐 Защита включена{% else %}🔓 Защита отключена{% endif %} 🛰️ GPS свежий: {% if is_state('binary_sensor.scooter_gps_data_fresh', 'on') %}Да ✅{% else %}Нет ❌{% endif %} ⏳ Возраст (самокат): {{ (state_attr('binary_sensor.scooter_gps_data_fresh', 'scooter_age_seconds') or 0) | int }} сек ⏳ Возраст (Денис): {{ (state_attr('binary_sensor.scooter_gps_data_fresh', 'dddennnisss_age_seconds') or 0) | int }} сек 📍 Расстояние: {{ distance( state_attr('device_tracker.google_maps_108918666344169166438', 'latitude'), state_attr('device_tracker.google_maps_108918666344169166438', 'longitude'), state_attr('device_tracker.samokat_dddennnisss', 'latitude'), state_attr('device_tracker.samokat_dddennnisss', 'longitude') ) | round(2) }} км 🔄 Обновлено: {{ now().strftime('%H:%M:%S') }} inline_keyboard: - "{% if is_state('input_boolean.scooter_protection_active', 'on') %}🔓 Снять защиту:/sc_r_unlocked{% else %}🔐 Включить защиту:/sc_r_locked{% endif %}" - '🗺️ Где самокат:/gps_send_loc_s' - '🔙 Назад:/menu_back, 🔄 Обновить:/sc_control' # ========================================== # --- МЕНЮ: УПРАВЛЕНИЕ STEAM DECK --- # ========================================== - conditions: "{{ trigger.event.data.command == '/sd_control' }}" sequence: - service: telegram_bot.answer_callback_query data: callback_query_id: "{{ trigger.event.data.id }}" message: "🔄 Подключаюсь к Steam Deck..." - service: telegram_bot.edit_message data: message_id: "{{ trigger.event.data.message.message_id }}" chat_id: "{{ trigger.event.data.chat_id }}" parse_mode: html message: | 🎮 Управление: Steam Deck {% if is_state('binary_sensor.steamdeck', 'on') %} 🟢 Статус: В сети 🧠 CPU: {{ states('sensor.steamdeck_cpu_usage') }}% 💾 RAM: {{ states('sensor.steamdeck_ram_used') }} ГБ из {{ states('sensor.steamdeck_ram_total') }} ГБ ({{ states('sensor.steamdeck_ram_usage') }}%) 📁 Диск: 📦 Внутр.: {{ states('sensor.steamdeck_disk_internal_free') }} своб. ({{ states('sensor.steamdeck_disk_internal_usage') }}%) 💽 SD-карта: {{ states('sensor.steamdeck_disk_sd_free') }} своб. ({{ states('sensor.steamdeck_disk_sd_usage') }}%) 🌡 Температура: 🔋 Батарея: {{ states('sensor.steamdeck_temp_battery') }} °C 🧩 Composite: {{ states('sensor.steamdeck_temp_composite') }} °C ♨️ Edge: {{ states('sensor.steamdeck_temp_edge') }} °C ⏱ Аптайм: {{ states('sensor.steamdeck_uptime_human') }} {% else %} 🔴 Статус: Недоступен (Выключен или спит) {% endif %} 🔄 Обновлено: {{ now().strftime('%H:%M:%S') }} inline_keyboard: - "{% if is_state('binary_sensor.steamdeck', 'off') %}💡 Включить:/toggle_sd_wol{% else %}💤 Спящий режим:/toggle_sd_sleep{% endif %}" - "🔄 Перезагрузить:/toggle_sd_reboot" - "🎮 Gamemode:/toggle_sd_gamemode, 💻 Desktop:/toggle_sd_desktop" - "🔙 Назад:/menu_back, 🔄 Обновить:/sd_control" # ========================================== # --- КНОПКИ: КОМАНДЫ STEAM DECK --- # ========================================== - conditions: > {{ trigger.event.data.command in [ '/toggle_sd_wol', '/toggle_sd_reboot', '/toggle_sd_gamemode', '/toggle_sd_desktop', '/toggle_sd_sleep' ] }} sequence: # 1. Выбираем, какое всплывающее уведомление показать - variables: action_msg: > {% if trigger.event.data.command == '/toggle_sd_wol' %}📡 Steam Deck разбужен! {% elif trigger.event.data.command == '/toggle_sd_reboot' %}🔄 Перезагружается... {% elif trigger.event.data.command == '/toggle_sd_gamemode' %}🎮 Gamemode запущен! {% elif trigger.event.data.command == '/toggle_sd_desktop' %}🔌 Desktop запущен! {% elif trigger.event.data.command == '/toggle_sd_sleep' %}💤 Включен спящий режим {% endif %} # 2. Выполняем нужную shell-команду - choose: - conditions: "{{ trigger.event.data.command == '/toggle_sd_wol' }}" sequence: - service: shell_command.wrt_wol_sd - conditions: "{{ trigger.event.data.command == '/toggle_sd_reboot' }}" sequence: - service: shell_command.steamdeck_reboot - conditions: "{{ trigger.event.data.command == '/toggle_sd_gamemode' }}" sequence: - service: shell_command.steamdeck_gamemode - conditions: "{{ trigger.event.data.command == '/toggle_sd_desktop' }}" sequence: - service: shell_command.steamdeck_desktop - conditions: "{{ trigger.event.data.command == '/toggle_sd_sleep' }}" sequence: - service: shell_command.steamdeck_sleep - delay: milliseconds: 500 # 3. Показываем всплывающее окно - service: telegram_bot.answer_callback_query data: callback_query_id: "{{ trigger.event.data.id }}" message: "{{ action_msg }}" # 4. Плавно обновляем меню (перерисовываем текст) - service: telegram_bot.edit_message data: message_id: "{{ trigger.event.data.message.message_id }}" chat_id: "{{ trigger.event.data.chat_id }}" parse_mode: html message: | 🎮 Управление: Steam Deck {% if is_state('binary_sensor.steamdeck', 'on') %} 🟢 Статус: В сети 🧠 CPU: {{ states('sensor.steamdeck_cpu_usage') }}% 💾 RAM: {{ states('sensor.steamdeck_ram_used') }} ГБ из {{ states('sensor.steamdeck_ram_total') }} ГБ ({{ states('sensor.steamdeck_ram_usage') }}%) 📁 Диск: 📦 Внутр.: {{ states('sensor.steamdeck_disk_internal_free') }} своб. ({{ states('sensor.steamdeck_disk_internal_usage') }}%) 💽 SD-карта: {{ states('sensor.steamdeck_disk_sd_free') }} своб. ({{ states('sensor.steamdeck_disk_sd_usage') }}%) 🌡 Температура: 🔋 Батарея: {{ states('sensor.steamdeck_temp_battery') }} °C 🧩 Composite: {{ states('sensor.steamdeck_temp_composite') }} °C ♨️ Edge: {{ states('sensor.steamdeck_temp_edge') }} °C ⏱ Аптайм: {{ states('sensor.steamdeck_uptime_human') }} {% else %} 🔴 Статус: Недоступен (Выключен или спит) {% endif %} 🔄 Обновлено: {{ now().strftime('%H:%M:%S') }} inline_keyboard: - "{% if is_state('binary_sensor.steamdeck', 'off') %}💡 Включить:/toggle_sd_wol{% else %}💤 Спящий режим:/toggle_sd_sleep{% endif %}" - "🔄 Перезагрузить:/toggle_sd_reboot" - "🎮 Gamemode:/toggle_sd_gamemode, 💻 Desktop:/toggle_sd_desktop" - "🔙 Назад:/menu_back, 🔄 Обновить:/sd_control" # ========================================== # --- КНОПКИ: МЕНЮ ДОМОФОНА --- # ========================================== - conditions: > {{ trigger.event.data.command in [ '/intercom_menu', '/open_door_now', '/toggle_intercom_auto', '/cmd_loc_acc' ] }} sequence: # 1. Задаем сообщение ЗАРАНЕЕ, чтобы оно не потерялось - variables: action_msg: > {% if trigger.event.data.command == '/open_door_now' %}🚪 Дверь открыта! {% elif trigger.event.data.command == '/toggle_intercom_auto' %}🔄 Режим автооткрытия изменен {% elif trigger.event.data.command == '/cmd_loc_acc' %} {% if is_state('binary_sensor.oneplus12_high_accuracy_mode', 'on') %}📍 Локация: ВЫКЛЮЧАЮ ❌ {% else %}📍 Локация: ВКЛЮЧАЮ ✅ {% endif %} {% else %}🔔 Открыто меню домофона {% endif %} # 2. Выполняем действия - choose: - conditions: "{{ trigger.event.data.command == '/open_door_now' }}" sequence: - service: shell_command.open_goodline_door - conditions: "{{ trigger.event.data.command == '/toggle_intercom_auto' }}" sequence: - service: input_boolean.toggle target: entity_id: input_boolean.intercom_auto_open # --- ИДЕАЛЬНАЯ КНОПКА GPS --- - conditions: "{{ trigger.event.data.command == '/cmd_loc_acc' }}" sequence: - service: notify.mobile_app_oneplus12 data: message: "command_high_accuracy_mode" data: command: "{{ 'turn_off' if is_state('binary_sensor.oneplus12_high_accuracy_mode', 'on') else 'turn_on' }}" ttl: 0 priority: high # 3. Показываем всплывашку в Телеграме - service: telegram_bot.answer_callback_query data: callback_query_id: "{{ trigger.event.data.id }}" message: "{{ action_msg }}" # 4. Ждем ответа от телефона - delay: seconds: 2 # 5. Перерисовываем меню с таймерами и зонами - service: telegram_bot.edit_message data: message_id: "{{ trigger.event.data.message.message_id }}" chat_id: "{{ trigger.event.data.chat_id }}" parse_mode: html message: | {%- set maps_upd = states.sensor.rasstoianie_do_podezda.last_updated -%} {%- set maps_sec = (now() - maps_upd).total_seconds() | int if maps_upd else '?' -%} {%- set maps_state = states('device_tracker.google_maps_108918666344169166438') -%} {%- set maps_z = '✅ Да' if maps_state | lower == 'intercom' else '❌ Нет' -%} {%- set phone_upd = states.sensor.distantsiia_telefon.last_updated -%} {%- set phone_sec = (now() - phone_upd).total_seconds() | int if phone_upd else '?' -%} {%- set phone_state = states('device_tracker.cph2573_2') -%} {%- set phone_z = '✅ Да' if phone_state | lower == 'intercom' else '❌ Нет' -%} 🔔 Управление: Домофон 🌍 Maps: {{ states('sensor.rasstoianie_do_podezda') }}м | {{ maps_sec }}с | Зона: {{ maps_z }} 📱 Phone: {{ states('sensor.distantsiia_telefon') }}м | {{ phone_sec }}с | Зона: {{ phone_z }} 🤖 Автооткрытие: {% if is_state('input_boolean.intercom_auto_open', 'on') %}✅ ВКЛЮЧЕНО{% else %}❌ ВЫКЛЮЧЕНО{% endif %} 🎯 Точный GPS: {% if is_state('binary_sensor.oneplus12_high_accuracy_mode', 'on') %}✅ ВКЛЮЧЕН{% else %}❌ ВЫКЛЮЧЕН{% endif %} 🔄 Обновлено: {{ now().strftime('%H:%M:%S') }} inline_keyboard: - "🚪 Открыть дверь:/open_door_now" - "🤖 Авто: {% if is_state('input_boolean.intercom_auto_open', 'on') %}✅ ВКЛ{% else %}❌ ВЫКЛ{% endif %}:/toggle_intercom_auto" - "🎯 Точный GPS: {% if is_state('binary_sensor.oneplus12_high_accuracy_mode', 'on') %}✅ ВКЛ{% else %}❌ ВЫКЛ{% endif %}:/cmd_loc_acc" - "🔙 Назад:/menu_back, 🔄 Обновить:/intercom_menu"