Files
home-assistant/includes/packages/telegramv2.yaml
T
dddennnisss 47eee0291f revert 9c5f315f73
revert Clean main branch
2026-07-14 17:02:06 +07:00

2022 lines
149 KiB
YAML
Raw Blame History

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