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.isa_dw2hl_47b2_magnet_sensor', '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.isa_dw2hl_47b2_magnet_sensor', '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.isa_dw2hl_47b2_magnet_sensor', '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.isa_dw2hl_47b2_magnet_sensor', '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.isa_dw2hl_47b2_magnet_sensor', '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"