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