From 9c5f315f73507d2bd1eccdee699d0b9922c1227c Mon Sep 17 00:00:00 2001 From: dddennnisss Date: Tue, 14 Jul 2026 09:46:49 +0000 Subject: [PATCH] Clean main branch --- ...n_sharing.cookies.mrartifactcall_gmail_com | 27 - automations.yaml | 147 -- configuration.yaml | 103 - includes/packages/GPS.yaml | 846 ------- includes/packages/bus.yaml | 608 ----- includes/packages/controls_light.yaml | 1069 --------- includes/packages/dishwasher.yaml | 268 --- includes/packages/fun.yaml | 202 -- includes/packages/intercom.yaml* | 156 -- includes/packages/notifications_telegram.yaml | 659 ------ includes/packages/router.yaml | 100 - includes/packages/scooter.yaml | 304 --- includes/packages/sensors.yaml | 28 - includes/packages/steamdeck.yaml | 168 -- includes/packages/telegramv2.yaml | 2022 ----------------- includes/packages/timer_off_light.yaml | 192 -- includes/packages/transmissiom.yaml | 160 -- includes/packages/vacuum.yaml | 437 ---- includes/packages/washer.yaml | 190 -- includes/packages/weather.yaml | 0 scripts.yaml | 86 - scripts/camera_log.txt | 1 - scripts/get_camera.py* | 97 - scripts/goodline_token.txt | 1 - scripts/update_goodline_token.py* | 44 - 25 files changed, 7915 deletions(-) delete mode 100644 .google_maps_location_sharing.cookies.mrartifactcall_gmail_com delete mode 100644 automations.yaml delete mode 100644 configuration.yaml delete mode 100644 includes/packages/GPS.yaml delete mode 100644 includes/packages/bus.yaml delete mode 100644 includes/packages/controls_light.yaml delete mode 100644 includes/packages/dishwasher.yaml delete mode 100644 includes/packages/fun.yaml delete mode 100644 includes/packages/intercom.yaml* delete mode 100644 includes/packages/notifications_telegram.yaml delete mode 100644 includes/packages/router.yaml delete mode 100644 includes/packages/scooter.yaml delete mode 100644 includes/packages/sensors.yaml delete mode 100644 includes/packages/steamdeck.yaml delete mode 100644 includes/packages/telegramv2.yaml delete mode 100644 includes/packages/timer_off_light.yaml delete mode 100644 includes/packages/transmissiom.yaml delete mode 100644 includes/packages/vacuum.yaml delete mode 100644 includes/packages/washer.yaml delete mode 100644 includes/packages/weather.yaml delete mode 100644 scripts.yaml delete mode 100644 scripts/camera_log.txt delete mode 100644 scripts/get_camera.py* delete mode 100644 scripts/goodline_token.txt delete mode 100644 scripts/update_goodline_token.py* diff --git a/.google_maps_location_sharing.cookies.mrartifactcall_gmail_com b/.google_maps_location_sharing.cookies.mrartifactcall_gmail_com deleted file mode 100644 index 2131643..0000000 --- a/.google_maps_location_sharing.cookies.mrartifactcall_gmail_com +++ /dev/null @@ -1,27 +0,0 @@ -# Netscape HTTP Cookie File - -.google.com TRUE / TRUE 1722941293 AEC Ae3NU9Pj2LCVF4jsugPZh1pEuk_K5Zpzd6F7JgV7YUSKonhrwTimIreL3w -accounts.google.com FALSE / TRUE 1709981298 OTZ 7418088_28_28_123540_24_436020 -.google.com TRUE / FALSE 1770461320 SID g.a000gAgsfoSF4DIkkoDFKP-JFAz_GAmvmfkkFsYiSJOBhF7xwlXBsN1kvAgFhFAitqEdQFU42QACgYKATsSAQASFQHGX2Mixu_jowwEkWKS7NwedYZgBhoVAUF8yKobfjp0wcKMW1TMbGkSX5wz0076 -.google.com TRUE / TRUE 1770461320 __Secure-1PSID g.a000gAgsfoSF4DIkkoDFKP-JFAz_GAmvmfkkFsYiSJOBhF7xwlXBcd7gleX6Ccy8NRY-3-whbAACgYKAUESAQASFQHGX2Mi495sLArFt1oW9eBe36L1uBoVAUF8yKprSYPxLUPe3HI3AAbWHVCM0076 -.google.com TRUE / TRUE 1770461320 __Secure-3PSID g.a000gAgsfoSF4DIkkoDFKP-JFAz_GAmvmfkkFsYiSJOBhF7xwlXBGfSO8a8VbKKNnFSkHFJGmgACgYKAVcSAQASFQHGX2MiYIcYkqojvVZj1eCDJlZs5BoVAUF8yKr_LoVaFZymaO1JG24g-dpF0076 -.google.com TRUE / FALSE 1770461320 HSID ASLWkTb8P7xDDNS9Y -.google.com TRUE / TRUE 1770461320 SSID AzZGpgpHNtGjrlmp1 -.google.com TRUE / FALSE 1770461320 APISID TxFYSFUfoH6WOk1n/AyNzLXVQ4XVg3Vesh -.google.com TRUE / TRUE 1770461320 SAPISID JxIFAxfr7H_5V3E8/AAidiOKXfKmy0NEUI -.google.com TRUE / TRUE 1770461320 __Secure-1PAPISID JxIFAxfr7H_5V3E8/AAidiOKXfKmy0NEUI -.google.com TRUE / TRUE 1770461320 __Secure-3PAPISID JxIFAxfr7H_5V3E8/AAidiOKXfKmy0NEUI -accounts.google.com FALSE / TRUE 1770461320 __Host-GAPS 1:VVqfNO1bgRJhXoqb9cjn97ChPhdB0u7oCwUJpYZM5VRZbeaDEvZLMtyK-wCp8o7DR5l_phbXT_cDHt_89z9fjIbtlA174A:Ftd2WPeqmrPYXMAb -accounts.google.com FALSE / TRUE 1770461320 LSID s.RU|s.youtube:g.a000gAgsfgvnZDsSzdGZUu8oWSCugkortmh1tnR8BQLEPHHn73iPmFnm-HcCbepiXtj2lc5eagACgYKAYUSAQASFQHGX2Mi9wpl9WkCbePxBoqtZAm_ORoVAUF8yKoCSd-32165cXgdioEgNgOP0076 -accounts.google.com FALSE / TRUE 1770461320 __Host-1PLSID s.RU|s.youtube:g.a000gAgsfgvnZDsSzdGZUu8oWSCugkortmh1tnR8BQLEPHHn73iPbos4BoyXh-mVOgVfcht77AACgYKAbUSAQASFQHGX2MizOWgGGXf3J5XrSbuNZjx5RoVAUF8yKpqkaShfwCeS47z6dQ_oKNO0076 -accounts.google.com FALSE / TRUE 1770461320 __Host-3PLSID s.RU|s.youtube:g.a000gAgsfgvnZDsSzdGZUu8oWSCugkortmh1tnR8BQLEPHHn73iP5R3ZIsa_PGZ_KMRjI3cXVQACgYKAZgSAQASFQHGX2MiuXeUvY682zOoftvCMvgOZBoVAUF8yKp4bwjFX6Haqm3Ywo3HNP1a0076 -accounts.google.com FALSE / TRUE 1770461320 ACCOUNT_CHOOSER AFx_qI7mu7pP86WkAhm_OlVLVgK_4hg-HUYVOZMLc8ipgFQE6B0DArl-7UF6A_FH88-Se-PlPlE7_3GfCV_GW3rDZ4vPszpuyRq6421Uf6mI6PV1BHcdlWiMX1Ga480hfl1LvQK_KPLefnSY6TgilgBTlk60kl9qgcqS_hb1iUxCEZ8L1QbN-WA -.google.com TRUE / FALSE 1722941321 SEARCH_SAMESITE CgQIsZoB -.google.com TRUE / TRUE 1738925326 __Secure-1PSIDTS sidts-CjEBPVxjSoGRMt9NsdtBeMfpibFfwHTU0lExdq3doNenskrCA2q9JcF9_febu803CGMwEAA -.google.com TRUE / TRUE 1738925326 __Secure-3PSIDTS sidts-CjEBPVxjSoGRMt9NsdtBeMfpibFfwHTU0lExdq3doNenskrCA2q9JcF9_febu803CGMwEAA -ogs.google.com FALSE / TRUE 1709981329 OTZ 7418089_28_28_123540_24_436020 -.google.com TRUE / TRUE 1723200496 NID 511=jtc5teJXhBvLFFtka-Bt4yr0yPEeN88yKRH0nXwaxONrnECYR5g7O-HTGEEsLGyfUMPOQbsEBL5UiftPpWo1O8hu0EBj7UxzxKNxNCZFt3yT2xcyvOJvUjcpz16UecAHK3KJz00CPZs8TPOMNdwWHqLRbNEGW79kRKdeDPlEb7HRU1vw9MbsmYLhEsZ2tKrtm8jl9PT7DFGDkjPEKcfQadNgWH87sqMzYR_n2ABCsUK-edLtDu3GeXMD5IfwuMPnA9taGtrH3fcuKGwUMhIVAkScjVqHeeVx4qKW6XvUc_kiAQ -.google.com TRUE / FALSE 1738925362 SIDCC ABTWhQG9J_CFsmYD3mJL5-UbRUaIaCFhnr7w4817qJutGgSBjke3s2CSp8es7vbk_HW3m7mi -.google.com TRUE / TRUE 1738925362 __Secure-1PSIDCC ABTWhQE9gbZ9LxSTGtLZq01GqknfIynf53fGI2rkaogSFB1eYlWEW7zJa1-9e32s7oDz2Uwr -.google.com TRUE / TRUE 1738925362 __Secure-3PSIDCC ABTWhQGeTMCXSjSwZZ-e_mv8CMfMaXwYiJkjTVzHaia6vml3T5ShG6jhPZeILQqT-CXhsTxf -.google.com TRUE / TRUE 1709981363 1P_JAR 2024-02-08-10 diff --git a/automations.yaml b/automations.yaml deleted file mode 100644 index 945eabe..0000000 --- a/automations.yaml +++ /dev/null @@ -1,147 +0,0 @@ -- id: '1700660686552' - alias: Откл термопот, если меньше 900kwh - description: '' - trigger: - - platform: numeric_state - entity_id: sensor.termopot_power - below: 900 - for: - hours: 0 - minutes: 20 - seconds: 0 - condition: [] - action: - - service: switch.turn_off - target: - entity_id: switch.termopot - mode: single -- id: '1705247080932' - alias: Необходимо убрать бак с водой - description: '' - trigger: - - platform: state - entity_id: - - vacuum.dreame_mc1808_044c_robot_cleaner_2 - attribute: clean.water_box - to: '1' - condition: - - condition: or - conditions: - - condition: state - entity_id: vacuum.dreame_mc1808_044c_robot_cleaner_2 - attribute: vacuum.status_desc - state: docked - - condition: state - entity_id: vacuum.dreame_mc1808_044c_robot_cleaner_2 - attribute: vacuum.status_desc - state: Charging - action: - - service: notify.telegram_id_1 - metadata: {} - data: - message: Необходимо убрать бак с водой - title: Бак с водой. - mode: restart -- id: '1735571592564' - alias: ntf|tg|bosh|end_salt - description: '' - triggers: - - trigger: state - entity_id: - - timer.timer_cool_washer - from: idle - to: active - conditions: - - condition: and - conditions: - - condition: state - entity_id: binary_sensor.day_time - state: 'on' - actions: - - choose: - - conditions: - - condition: and - conditions: - - condition: state - entity_id: device_tracker.google_maps_108918666344169166438 - state: not_home - - condition: state - entity_id: device_tracker.google_maps_118311730364158481019 - state: home - sequence: - - repeat: - sequence: - - delay: - hours: 0 - minutes: 0 - seconds: 10 - milliseconds: 0 - - action: telegram_bot.send_message - data: - message: '{{"\U00002705"}}Сушка завершена, нужно достать бельё{{"\U00002705"}} - - Осталось время: {{ state_attr (''timer.timer_cool_washer'',''duration'') - }} ' - target: 330380285 - inline_keyboard: " {{'↩'}} Главное меню:/menu_back, {{'\U0001F5D1'}} - Прочитано:/menu_hide" - while: - - condition: state - entity_id: timer.timer_cool_washer - state: active - alias: Лена дома, Денис не дома - - conditions: - - condition: state - entity_id: device_tracker.google_maps_108918666344169166438 - state: home - sequence: - - repeat: - sequence: - - delay: - hours: 0 - minutes: 0 - seconds: 10 - milliseconds: 0 - - action: telegram_bot.send_message - data: - message: '{{"\U00002705"}}Сушка завершена, нужно достать бельё{{"\U00002705"}} - - Осталось время: {{ state_attr (''timer.timer_cool_washer'',''duration'') - }} ' - target: 102879274 - inline_keyboard: " {{'↩'}} Главное меню:/menu_back, {{'\U0001F5D1'}} - Прочитано:/menu_hide" - while: - - condition: state - entity_id: timer.timer_cool_washer - state: active - alias: Денис дома - - conditions: - - condition: and - conditions: - - condition: state - entity_id: device_tracker.google_maps_108918666344169166438 - state: not_home - - condition: state - entity_id: device_tracker.google_maps_118311730364158481019 - state: not_home - sequence: - - repeat: - sequence: - - delay: - hours: 0 - minutes: 0 - seconds: 10 - milliseconds: 0 - - action: telegram_bot.send_message - data: - message: '{{"\U00002705"}}Сушка завершена, нужно достать бельё{{"\U00002705"}}' - target: 102879274 - inline_keyboard: " {{'↩'}} Главное меню:/menu_back, {{'\U0001F5D1'}} - Прочитано:/menu_hide" - while: - - condition: state - entity_id: timer.timer_cool_washer - state: active - alias: Лена и Денис не дома - mode: single diff --git a/configuration.yaml b/configuration.yaml deleted file mode 100644 index b3984c1..0000000 --- a/configuration.yaml +++ /dev/null @@ -1,103 +0,0 @@ -homeassistant: - - customize: - zone.home: - radius: 50 - packages: !include_dir_merge_named includes/packages - - time_zone: Asia/Krasnoyarsk - -# Loads default set of integrations. Do not remove. -default_config: - -shell_command: - tr_files: "ls /media/share/downloads > /config/tr_list_files.txt" - -http: - use_x_forwarded_for: true - trusted_proxies: - - 192.168.1.0/24 - ip_ban_enabled: true - login_attempts_threshold: 5 - -# Load frontend themes from the themes folder -frontend: - themes: !include_dir_merge_named themes - -automation: !include automations.yaml -script: !include scripts.yaml -scene: !include scenes.yaml -template: !include template.yaml - -sensor: - - platform: time_date - display_options: - - 'time' - - 'date' - - 'date_time' - - 'date_time_utc' - - 'date_time_iso' - - 'time_date' - - 'time_utc' - -narodmon: - devices: - - name: "Narodmon" - sensors: - - temperature - - wind_speed - - precipitation - - pm - -#telegram_bot: -# - platform: polling -# api_key: !secret api_key_bot -# allowed_chat_ids: -# - !secret telegram_id_group_home -# - !secret telegram_id_1 -# - !secret telegram_id_d2 -# - !secret telegram_id_el - - -#notify: - -# - name: telegram_id_1 -# platform: telegram -# chat_id: !secret telegram_id_1 -# - name: telegram_id_d2 -# platform: telegram -# chat_id: !secret telegram_id_d2 -# - name: telegram_id_gr -# platform: telegram -# chat_id: !secret telegram_id_el - - -#camera: -# - platform: xiaomi_cloud_map_extractor -# host: !secret xiaomi_vacuum_host -# token: !secret xiaomi_vacuum_token -# username: !secret xiaomi_cloud_username -# password: !secret xiaomi_cloud_password -# draw: ['all'] -# attributes: -# - calibration_points -# - rooms -# scan_interval: 120 - -vacuum: - - platform: xiaomi_vacuum - host: !secret xiaomi_vacuum_host - token: !secret xiaomi_vacuum_token - name: STYTJ01ZHM - -device_tracker: - - platform: google_maps - username: "mrartifactcall@gmail.com" - max_gps_accuracy: 200 - - - - platform: ubus - host: !secret openwrt_ip - username: !secret openwrt_user - password: !secret openwrt_pass - diff --git a/includes/packages/GPS.yaml b/includes/packages/GPS.yaml deleted file mode 100644 index ae1801f..0000000 --- a/includes/packages/GPS.yaml +++ /dev/null @@ -1,846 +0,0 @@ -gps: - rest_command: - notify_n8n_lena_left_home: - url: "https://n8n.dddennnisss.ru:8443/webhook-test/lena_left_home" - method: POST - content_type: "application/json" - payload: > - { - "event": "lena_left_home", - "name": "{{ state_attr('device_tracker.google_maps_118311730364158481019', 'nickname') | replace('\"', '\\\"') }}", - "address": "{{ state_attr('device_tracker.google_maps_118311730364158481019', 'address') | replace('\"', '\\\"') }}", - "last_updated": "{{ states.device_tracker.google_maps_118311730364158481019.last_updated }}" - } - - input_boolean: - gps_recently_nearby_d_e: - name: gps_recently_nearby_d_e - initial: false - icon: mdi:map-marker-distance - - automation: - ################################################################################ - # Уведомления о местоположении - ################################################################################ - - # =============== - # HOME (ДОМ) - # =============== - - id: GPS|lena_on_home - alias: GPS|lena_on_home - trigger: - - platform: zone - entity_id: device_tracker.google_maps_118311730364158481019 - zone: zone.home - event: enter - action: - - service: telegram_bot.send_message - data: - chat_id: -1002006010424 - message: | - 🏠 Лена дома. - inline_keyboard: - - '🔙 Главное меню:/menu_back, 🗑️ Прочитано:/menu_hide' - - - id: GPS|lena_off_home - alias: GPS|lena_off_home - trigger: - - platform: zone - entity_id: device_tracker.google_maps_118311730364158481019 - zone: zone.home - event: leave - action: - - service: telegram_bot.send_message - data: - chat_id: -1002006010424 - message: | - 💨 Лена вышла из дома. - inline_keyboard: - - '🔙 Главное меню:/menu_back, 🗑️ Прочитано:/menu_hide' - - service: rest_command.notify_n8n_lena_left_home - - - id: GPS|denis_on_home - alias: GPS|denis_on_home - trigger: - - platform: zone - entity_id: device_tracker.google_maps_108918666344169166438 - zone: zone.home - event: enter - action: - - service: telegram_bot.send_message - data: - chat_id: -1003233671944 - message: | - 🏠 Денис дома. - inline_keyboard: - - '🔙 Главное меню:/menu_back, 🗑️ Прочитано:/menu_hide' - - - id: GPS|denis_off_home - alias: GPS|denis_off_home - trigger: - - platform: zone - entity_id: device_tracker.google_maps_108918666344169166438 - zone: zone.home - event: leave - action: - - service: telegram_bot.send_message - data: - chat_id: -1003233671944 - message: | - 💨 Денис вышел из дома. - inline_keyboard: - - '🔙 Главное меню:/menu_back, 🗑️ Прочитано:/menu_hide' - - # =============== - # RADUGA (РАДУГА) - # =============== - - id: GPS|lena_on_raduga - alias: GPS|lena_on_raduga - trigger: - - platform: zone - entity_id: device_tracker.google_maps_118311730364158481019 - zone: zone.raduga - event: enter - action: - - service: telegram_bot.send_location - data: - chat_id: -1002006010424 - latitude: "{{ state_attr('device_tracker.google_maps_118311730364158481019', 'latitude') }}" - longitude: "{{ state_attr('device_tracker.google_maps_118311730364158481019', 'longitude') }}" - - service: telegram_bot.send_message - data: - chat_id: -1002006010424 - message: | - 🌈 Лена на радуге. - inline_keyboard: - - '🗺️ Где Лена:/gps_send_loc_e' - - '🔙 Главное меню:/menu_back, 🗑️ Прочитано:/menu_hide' - - - id: GPS|lena_off_raduga - alias: GPS|lena_off_raduga - trigger: - - platform: zone - entity_id: device_tracker.google_maps_118311730364158481019 - zone: zone.raduga - event: leave - action: - - service: telegram_bot.send_location - data: - chat_id: -1002006010424 - latitude: "{{ state_attr('device_tracker.google_maps_118311730364158481019', 'latitude') }}" - longitude: "{{ state_attr('device_tracker.google_maps_118311730364158481019', 'longitude') }}" - - service: telegram_bot.send_message - data: - chat_id: -1002006010424 - message: | - 💨 Лена уехала с радуги. - inline_keyboard: - - '🗺️ Где Лена:/gps_send_loc_e' - - '🔙 Главное меню:/menu_back, 🗑️ Прочитано:/menu_hide' - - - id: GPS|denis_on_raduga - alias: GPS|denis_on_raduga - trigger: - - platform: zone - entity_id: device_tracker.google_maps_108918666344169166438 - zone: zone.raduga - event: enter - action: - - service: telegram_bot.send_location - data: - chat_id: -1003233671944 - latitude: "{{ state_attr('device_tracker.google_maps_108918666344169166438', 'latitude') }}" - longitude: "{{ state_attr('device_tracker.google_maps_108918666344169166438', 'longitude') }}" - - service: telegram_bot.send_message - data: - chat_id: -1003233671944 - message: | - 🌈 Денис на радуге. - inline_keyboard: - - '🗺️ Где Денис:/gps_send_loc_d' - - '🔙 Главное меню:/menu_back, 🗑️ Прочитано:/menu_hide' - - - id: GPS|denis_off_raduga - alias: GPS|denis_off_raduga - trigger: - - platform: zone - entity_id: device_tracker.google_maps_108918666344169166438 - zone: zone.raduga - event: leave - action: - - service: telegram_bot.send_location - data: - chat_id: -1003233671944 - latitude: "{{ state_attr('device_tracker.google_maps_108918666344169166438', 'latitude') }}" - longitude: "{{ state_attr('device_tracker.google_maps_108918666344169166438', 'longitude') }}" - - service: telegram_bot.send_message - data: - chat_id: -1003233671944 - message: | - 💨 Денис уехал с радуги. - inline_keyboard: - - '🗺️ Где Денис:/gps_send_loc_d' - - '🔙 Главное меню:/menu_back, 🗑️ Прочитано:/menu_hide' - - # =============== - # CENTER (ЦЕНТР) - # =============== - - id: GPS|lena_on_center - alias: GPS|lena_on_center - trigger: - - platform: zone - entity_id: device_tracker.google_maps_118311730364158481019 - zone: zone.tsentr - event: enter - action: - - service: telegram_bot.send_location - data: - chat_id: -1002006010424 - latitude: "{{ state_attr('device_tracker.google_maps_118311730364158481019', 'latitude') }}" - longitude: "{{ state_attr('device_tracker.google_maps_118311730364158481019', 'longitude') }}" - - service: telegram_bot.send_message - data: - chat_id: -1002006010424 - message: | - 🏙️ Лена в центре. - inline_keyboard: - - '🗺️ Где Лена:/gps_send_loc_e' - - '🔙 Главное меню:/menu_back, 🗑️ Прочитано:/menu_hide' - - - id: GPS|lena_off_center - alias: GPS|lena_off_center - trigger: - - platform: zone - entity_id: device_tracker.google_maps_118311730364158481019 - zone: zone.tsentr - event: leave - action: - - service: telegram_bot.send_location - data: - chat_id: -1002006010424 - latitude: "{{ state_attr('device_tracker.google_maps_118311730364158481019', 'latitude') }}" - longitude: "{{ state_attr('device_tracker.google_maps_118311730364158481019', 'longitude') }}" - - service: telegram_bot.send_message - data: - chat_id: -1002006010424 - message: | - 💨 Лена уехала из центра. - inline_keyboard: - - '🗺️ Где Лена:/gps_send_loc_e' - - '🔙 Главное меню:/menu_back, 🗑️ Прочитано:/menu_hide' - - - id: GPS|denis_on_center - alias: GPS|denis_on_center - trigger: - - platform: zone - entity_id: device_tracker.google_maps_108918666344169166438 - zone: zone.tsentr - event: enter - action: - - service: telegram_bot.send_location - data: - chat_id: -1003233671944 - latitude: "{{ state_attr('device_tracker.google_maps_108918666344169166438', 'latitude') }}" - longitude: "{{ state_attr('device_tracker.google_maps_108918666344169166438', 'longitude') }}" - - service: telegram_bot.send_message - data: - chat_id: -1003233671944 - message: | - 🏙️ Денис в центре. - inline_keyboard: - - '🗺️ Где Денис:/gps_send_loc_d' - - '🔙 Главное меню:/menu_back, 🗑️ Прочитано:/menu_hide' - - - id: GPS|denis_off_center - alias: GPS|denis_off_center - trigger: - - platform: zone - entity_id: device_tracker.google_maps_108918666344169166438 - zone: zone.tsentr - event: leave - action: - - service: telegram_bot.send_location - data: - chat_id: -1003233671944 - latitude: "{{ state_attr('device_tracker.google_maps_108918666344169166438', 'latitude') }}" - longitude: "{{ state_attr('device_tracker.google_maps_108918666344169166438', 'longitude') }}" - - service: telegram_bot.send_message - data: - chat_id: -1003233671944 - message: | - 💨 Денис уехал из центра. - inline_keyboard: - - '🗺️ Где Денис:/gps_send_loc_d' - - '🔙 Главное меню:/menu_back, 🗑️ Прочитано:/menu_hide' - - # =============== - # FAMILY (РОДИТЕЛИ) - # =============== - - id: GPS|lena_on_familyr - alias: GPS|lena_on_familyr - trigger: - - platform: zone - entity_id: device_tracker.google_maps_118311730364158481019 - zone: zone.roditeli_leny - event: enter - action: - - service: telegram_bot.send_message - data: - chat_id: -1002006010424 - message: | - 👨‍👩‍👧 Лена у родителей. - inline_keyboard: - - '🔙 Главное меню:/menu_back, 🗑️ Прочитано:/menu_hide' - - - id: GPS|lena_off_familyr - alias: GPS|lena_off_familyr - trigger: - - platform: zone - entity_id: device_tracker.google_maps_118311730364158481019 - zone: zone.roditeli_leny - event: leave - action: - - service: telegram_bot.send_message - data: - chat_id: -1002006010424 - message: | - 💨 Лена уехала от родителей. - inline_keyboard: - - '🔙 Главное меню:/menu_back, 🗑️ Прочитано:/menu_hide' - - - id: GPS|denis_on_familyr - alias: GPS|denis_on_familyr - trigger: - - platform: zone - entity_id: device_tracker.google_maps_108918666344169166438 - zone: zone.roditeli_leny - event: enter - action: - - service: telegram_bot.send_message - data: - chat_id: -1003233671944 - message: | - 👨‍👩‍👧 Денис у родителей Лены. - inline_keyboard: - - '🔙 Главное меню:/menu_back, 🗑️ Прочитано:/menu_hide' - - - id: GPS|denis_off_familyr - alias: GPS|denis_off_familyr - trigger: - - platform: zone - entity_id: device_tracker.google_maps_108918666344169166438 - zone: zone.roditeli_leny - event: leave - action: - - service: telegram_bot.send_message - data: - chat_id: -1003233671944 - message: | - 💨 Денис уехал от родителей Лены. - inline_keyboard: - - '🔙 Главное меню:/menu_back, 🗑️ Прочитано:/menu_hide' - - # =============== - # JOB ELENA (РАБОТА ЛЕНЫ) - # =============== - - id: GPS|lena_on_job - alias: GPS|lena_on_job - trigger: - - platform: zone - entity_id: device_tracker.google_maps_118311730364158481019 - zone: zone.rabota_leny - event: enter - action: - - service: telegram_bot.send_message - data: - chat_id: -1002006010424 - message: | - 💼 Лена на работе. - inline_keyboard: - - '🔙 Главное меню:/menu_back, 🗑️ Прочитано:/menu_hide' - - - id: GPS|lena_off_job - alias: GPS|lena_off_job - trigger: - - platform: zone - entity_id: device_tracker.google_maps_118311730364158481019 - zone: zone.rabota_leny - event: leave - action: - - service: telegram_bot.send_message - data: - chat_id: -1002006010424 - message: | - 💨 Лена уехала с работы. - inline_keyboard: - - '🔙 Главное меню:/menu_back, 🗑️ Прочитано:/menu_hide' - - # =============== - # YASHKA (ЯШКА) - # =============== - - id: GPS|lena_on_ya - alias: GPS|lena_on_ya - trigger: - - platform: zone - entity_id: device_tracker.google_maps_118311730364158481019 - zone: zone.iashka - event: enter - action: - - service: telegram_bot.send_message - data: - chat_id: -1002006010424 - message: | - 🐾 Лена около Яшки. - inline_keyboard: - - '🔙 Главное меню:/menu_back, 🗑️ Прочитано:/menu_hide' - - - id: GPS|Denis_on_ya - alias: GPS|Denis_on_ya - trigger: - - platform: zone - entity_id: device_tracker.google_maps_108918666344169166438 - zone: zone.iashka - event: enter - action: - - service: telegram_bot.send_message - data: - chat_id: -1003233671944 - message: | - 🐾 Денис около Яшки. - inline_keyboard: - - '🔙 Главное меню:/menu_back, 🗑️ Прочитано:/menu_hide' - - # =============== - # TERESHKOVOI_16 (КВАРТИРА ТЕРЕШКОВОЙ) - # =============== - - id: GPS|lena_on_tereshkovoi_16 - alias: GPS|lena_on_tereshkovoi_16 - trigger: - - platform: zone - entity_id: device_tracker.google_maps_118311730364158481019 - zone: zone.tereshkovoi_16 - event: enter - action: - - service: telegram_bot.send_message - data: - chat_id: -1002006010424 - message: | - 🏢 Лена на квартире. - inline_keyboard: - - '🔙 Главное меню:/menu_back, 🗑️ Прочитано:/menu_hide' - - - id: GPS|lena_off_tereshkovoi_16 - alias: GPS|lena_off_tereshkovoi_16 - trigger: - - platform: zone - entity_id: device_tracker.google_maps_118311730364158481019 - zone: zone.tereshkovoi_16 - event: leave - action: - - service: telegram_bot.send_message - data: - chat_id: -1002006010424 - message: | - 💨 Лена уехала с квартиры. - inline_keyboard: - - '🔙 Главное меню:/menu_back, 🗑️ Прочитано:/menu_hide' - - - id: GPS|denis_on_tereshkovoi_16 - alias: GPS|denis_on_tereshkovoi_16 - trigger: - - platform: zone - entity_id: device_tracker.google_maps_108918666344169166438 - zone: zone.tereshkovoi_16 - event: enter - action: - - service: telegram_bot.send_message - data: - chat_id: -1003233671944 - message: | - 🏢 Денис на квартире. - inline_keyboard: - - '🔙 Главное меню:/menu_back, 🗑️ Прочитано:/menu_hide' - - - id: GPS|denis_off_tereshkovoi_16 - alias: GPS|denis_off_tereshkovoi_16 - trigger: - - platform: zone - entity_id: device_tracker.google_maps_108918666344169166438 - zone: zone.tereshkovoi_16 - event: leave - action: - - service: telegram_bot.send_message - data: - chat_id: -1003233671944 - message: | - 💨 Денис уехал с квартиры. - inline_keyboard: - - '🔙 Главное меню:/menu_back, 🗑️ Прочитано:/menu_hide' - - # =============== - # NOVOSTROIKA (НОВОСТРОЙКА) - # =============== - - id: GPS|lena_on_novostroika - alias: GPS|lena_on_novostroika - trigger: - - platform: zone - entity_id: device_tracker.google_maps_118311730364158481019 - zone: zone.novostroika - event: enter - action: - - service: telegram_bot.send_message - data: - chat_id: -1002006010424 - message: | - 🏗️ Лена на Новостройке. - inline_keyboard: - - '🔙 Главное меню:/menu_back, 🗑️ Прочитано:/menu_hide' - - - id: GPS|lena_off_novostroika - alias: GPS|lena_off_novostroika - trigger: - - platform: zone - entity_id: device_tracker.google_maps_118311730364158481019 - zone: zone.novostroika - event: leave - action: - - service: telegram_bot.send_message - data: - chat_id: -1002006010424 - message: | - 💨 Лена уехала с Новостройки. - inline_keyboard: - - '🔙 Главное меню:/menu_back, 🗑️ Прочитано:/menu_hide' - - # =============== - # MAMA (МАМА) - # =============== - - id: GPS|lena_on_mama - alias: GPS|lena_on_mama - trigger: - - platform: zone - entity_id: device_tracker.google_maps_118311730364158481019 - zone: zone.mama - event: enter - action: - - service: telegram_bot.send_message - data: - chat_id: -1002006010424 - message: | - 👩‍👧 Лена у мамы. - inline_keyboard: - - '🔙 Главное меню:/menu_back, 🗑️ Прочитано:/menu_hide' - - - id: GPS|lena_off_mama - alias: GPS|lena_off_mama - trigger: - - platform: zone - entity_id: device_tracker.google_maps_118311730364158481019 - zone: zone.mama - event: leave - action: - - service: telegram_bot.send_message - data: - chat_id: -1002006010424 - message: | - 💨 Лена уехала от мамы. - inline_keyboard: - - '🔙 Главное меню:/menu_back, 🗑️ Прочитано:/menu_hide' - - - id: GPS|denis_on_mama - alias: GPS|denis_on_mama - trigger: - - platform: zone - entity_id: device_tracker.google_maps_108918666344169166438 - zone: zone.mama - event: enter - action: - - service: telegram_bot.send_message - data: - chat_id: -1003233671944 - message: | - 👨‍👧 Денис у мамы. - inline_keyboard: - - '🔙 Главное меню:/menu_back, 🗑️ Прочитано:/menu_hide' - - - id: GPS|denis_off_mama - alias: GPS|denis_off_mama - trigger: - - platform: zone - entity_id: device_tracker.google_maps_108918666344169166438 - zone: zone.mama - event: leave - action: - - service: telegram_bot.send_message - data: - chat_id: -1003233671944 - message: | - 💨 Денис уехал от мамы. - inline_keyboard: - - '🔙 Главное меню:/menu_back, 🗑️ Прочитано:/menu_hide' - - # =============== - # JOB DENIS (РАБОТА ДЕНИС) - # =============== - - id: GPS|denis_on_job - alias: GPS|denis_on_job - trigger: - - platform: zone - entity_id: device_tracker.google_maps_108918666344169166438 - zone: zone.rabota - event: enter - action: - - service: telegram_bot.send_message - data: - chat_id: -1003233671944 - message: | - 💼 Денис на работе. - inline_keyboard: - - '🔙 Главное меню:/menu_back, 🗑️ Прочитано:/menu_hide' - - - id: GPS|denis_off_job - alias: GPS|denis_off_job - trigger: - - platform: zone - entity_id: device_tracker.google_maps_108918666344169166438 - zone: zone.rabota - event: leave - action: - - service: telegram_bot.send_message - data: - chat_id: -1003233671944 - message: | - 💨 Денис уехал с работы. - inline_keyboard: - - '🔙 Главное меню:/menu_back, 🗑️ Прочитано:/menu_hide' - - # =============== - # LENINSKIJ (ЛЕНИНСКИЙ) - # =============== - - id: GPS|denis_on_len - alias: GPS|denis_on_len - trigger: - - platform: zone - entity_id: device_tracker.google_maps_108918666344169166438 - zone: zone.leninskii - event: enter - action: - - service: telegram_bot.send_message - data: - chat_id: -1003233671944 - message: | - 🏘️ Денис в Ленинском. - inline_keyboard: - - '🔙 Главное меню:/menu_back, 🗑️ Прочитано:/menu_hide' - - - id: GPS|denis_off_len - alias: GPS|denis_off_len - trigger: - - platform: zone - entity_id: device_tracker.google_maps_108918666344169166438 - zone: zone.leninskii - event: leave - action: - - service: telegram_bot.send_message - data: - chat_id: -1003233671944 - message: | - 💨 Денис уехал из Ленинского. - inline_keyboard: - - '🔙 Главное меню:/menu_back, 🗑️ Прочитано:/menu_hide' - - - id: GPS|elena_on_len - alias: GPS|elena_on_len - trigger: - - platform: zone - entity_id: device_tracker.google_maps_118311730364158481019 - zone: zone.leninskii - event: enter - action: - - service: telegram_bot.send_message - data: - chat_id: -1002006010424 - message: | - 🏘️ Лена в Ленинском. - inline_keyboard: - - '🔙 Главное меню:/menu_back, 🗑️ Прочитано:/menu_hide' - - - id: GPS|elena_off_len - alias: GPS|elena_off_len - trigger: - - platform: zone - entity_id: device_tracker.google_maps_118311730364158481019 - zone: zone.leninskii - event: leave - action: - - service: telegram_bot.send_message - data: - chat_id: -1002006010424 - message: | - 💨 Лена уехала из Ленинского. - inline_keyboard: - - '🔙 Главное меню:/menu_back, 🗑️ Прочитано:/menu_hide' - - # =============== - # KEMEROVO (КЕМЕРОВО) - # =============== - - id: GPS|denis_on_kem - alias: GPS|denis_on_kem - trigger: - - platform: zone - entity_id: device_tracker.google_maps_108918666344169166438 - zone: zone.kemerovo - event: enter - action: - - service: telegram_bot.send_message - data: - chat_id: -1003233671944 - message: | - 🌆 Денис в Кемерово. - inline_keyboard: - - '🔙 Главное меню:/menu_back, 🗑️ Прочитано:/menu_hide' - - - id: GPS|denis_off_kem - alias: GPS|denis_off_kem - trigger: - - platform: zone - entity_id: device_tracker.google_maps_108918666344169166438 - zone: zone.kemerovo - event: leave - action: - - service: telegram_bot.send_message - data: - chat_id: -1003233671944 - message: | - 💨 Денис уехал из Кемерово. - inline_keyboard: - - '🔙 Главное меню:/menu_back, 🗑️ Прочитано:/menu_hide' - - - id: GPS|elena_on_kem - alias: GPS|elena_on_kem - trigger: - - platform: zone - entity_id: device_tracker.google_maps_118311730364158481019 - zone: zone.kemerovo - event: enter - action: - - service: telegram_bot.send_message - data: - chat_id: -1002006010424 - message: | - 🌆 Лена в Кемерово. - inline_keyboard: - - '🔙 Главное меню:/menu_back, 🗑️ Прочитано:/menu_hide' - - - id: GPS|elena_off_kem - alias: GPS|elena_off_kem - trigger: - - platform: zone - entity_id: device_tracker.google_maps_118311730364158481019 - zone: zone.kemerovo - event: leave - action: - - service: telegram_bot.send_message - data: - chat_id: -1002006010424 - message: | - 💨 Лена уехала из Кемерово. - inline_keyboard: - - '🔙 Главное меню:/menu_back, 🗑️ Прочитано:/menu_hide' - - # =============== - # УВЕДОМЛЕНИЕ: РЯДОМ (< 1км) - # =============== - - id: ntf|tg|GPS|distance<1km_d_e - alias: ntf|tg|GPS|distance<1km_d_e - mode: single - trigger: - - platform: template - value_template: >- - {% set lat1 = state_attr('device_tracker.google_maps_108918666344169166438', 'latitude') %} - {% set lon1 = state_attr('device_tracker.google_maps_108918666344169166438', 'longitude') %} - {% set lat2 = state_attr('device_tracker.google_maps_118311730364158481019', 'latitude') %} - {% set lon2 = state_attr('device_tracker.google_maps_118311730364158481019', 'longitude') %} - {% if lat1 and lon1 and lat2 and lon2 %} - {{ distance(lat1, lon1, lat2, lon2) < 1 }} - {% else %} - false - {% endif %} - for: - seconds: 10 - condition: - - condition: state - entity_id: input_boolean.gps_recently_nearby_d_e - state: "off" - - condition: template - value_template: > - {{ not is_state('device_tracker.google_maps_108918666344169166438', 'home') and - not is_state('device_tracker.google_maps_118311730364158481019', 'home') }} - action: - - service: input_boolean.turn_on - target: - entity_id: input_boolean.gps_recently_nearby_d_e - - # 1. Уведомление Денису (о Елене) - - service: telegram_bot.send_location - data: - chat_id: -1002006010424 - latitude: "{{ state_attr('device_tracker.google_maps_118311730364158481019', 'latitude') }}" - longitude: "{{ state_attr('device_tracker.google_maps_118311730364158481019', 'longitude') }}" - - service: telegram_bot.send_message - data: - chat_id: -1002006010424 - message: | - 🤝 Вы рядом с Еленой! - 📏 Расстояние: {{ distance(state_attr('device_tracker.google_maps_108918666344169166438', 'latitude'), state_attr('device_tracker.google_maps_108918666344169166438', 'longitude'), state_attr('device_tracker.google_maps_118311730364158481019', 'latitude'), state_attr('device_tracker.google_maps_118311730364158481019', 'longitude')) | round(2) }} км - 📍 Адрес Елены: {{ state_attr('device_tracker.google_maps_118311730364158481019', 'address') }} - inline_keyboard: - - '🗺️ Где Денис:/gps_send_loc_d, 🗺️ Где Лена:/gps_send_loc_e' - - '🔙 Главное меню:/menu_back, ⚙️ Настройки GPS:/gps_control' - - # 2. Уведомление Елене (о Денисе) - - service: telegram_bot.send_location - data: - chat_id: -1003233671944 - latitude: "{{ state_attr('device_tracker.google_maps_108918666344169166438', 'latitude') }}" - longitude: "{{ state_attr('device_tracker.google_maps_108918666344169166438', 'longitude') }}" - - service: telegram_bot.send_message - data: - chat_id: -1003233671944 - message: | - 🤝 Вы рядом с Денисом! - 📏 Расстояние: {{ distance(state_attr('device_tracker.google_maps_108918666344169166438', 'latitude'), state_attr('device_tracker.google_maps_108918666344169166438', 'longitude'), state_attr('device_tracker.google_maps_118311730364158481019', 'latitude'), state_attr('device_tracker.google_maps_118311730364158481019', 'longitude')) | round(2) }} км - 📍 Адрес Дениса: {{ state_attr('device_tracker.google_maps_108918666344169166438', 'address') }} - inline_keyboard: - - '🗺️ Где Денис:/gps_send_loc_d, 🗺️ Где Лена:/gps_send_loc_e' - - '🔙 Главное меню:/menu_back, ⚙️ Настройки GPS:/gps_control' - - # Сброс вспомогательного булеана для автоматизации уведомлений в телеграм - - id: reset_gps_recently_nearby_d_e - alias: reset_gps_recently_nearby_d_e - description: "Сброс тумблера после расхождения > 1 км" - mode: single - trigger: - - platform: template - value_template: > - {% set lat1 = state_attr('device_tracker.google_maps_108918666344169166438', 'latitude') %} - {% set lon1 = state_attr('device_tracker.google_maps_108918666344169166438', 'longitude') %} - {% set lat2 = state_attr('device_tracker.google_maps_118311730364158481019', 'latitude') %} - {% set lon2 = state_attr('device_tracker.google_maps_118311730364158481019', 'longitude') %} - {% if lat1 and lon1 and lat2 and lon2 %} - {{ distance(lat1, lon1, lat2, lon2) > 1 }} - {% else %} - false - {% endif %} - for: - hours: 0 - minutes: 5 - seconds: 0 - condition: - - condition: state - entity_id: input_boolean.gps_recently_nearby_d_e - state: "on" - action: - - service: input_boolean.turn_off - target: - entity_id: input_boolean.gps_recently_nearby_d_e \ No newline at end of file diff --git a/includes/packages/bus.yaml b/includes/packages/bus.yaml deleted file mode 100644 index ef732b6..0000000 --- a/includes/packages/bus.yaml +++ /dev/null @@ -1,608 +0,0 @@ -bus: - -# Время после которого будет разрешено работать автоматизации tg|ntf|tram10_rad-gor_<20m - - input_datetime: - tram10_r_g_enable_time: - name: INPT|tram10_r_g_enable_time - has_date: false - has_time: true - initial: "07:15:00" - - - -# Сенсоры, которые получают даннные о автобусе из API - -#################34##################################### - - sensor: - - platform: rest - name: bustime_34_kuz_pr - resource: "https://ru.busti.me/api/notify_stop/?stop_id=460789&bus_id=11299" - method: GET - scan_interval: 30 - value_template: "{{ value_json.time }}" - json_attributes: - - name - - time - - x - - y - - updated - - - platform: rest - name: bustime_34_circ - resource: "https://ru.busti.me/api/notify_stop/?stop_id=8880&bus_id=11299" - method: GET - scan_interval: 30 - value_template: "{{ value_json.time }}" - json_attributes: - - name - - time - - x - - y - - updated - - - platform: rest - name: bustime_34_univ - resource: "https://ru.busti.me/api/notify_stop/?stop_id=87239&bus_id=11299" - method: GET - scan_interval: 15 - value_template: "{{ value_json.time }}" - json_attributes: - - name - - time - - x - - y - - updated - -#################127##################################### - - - platform: rest - name: bustime_127_circ - resource: "https://ru.busti.me/api/notify_stop/?stop_id=9277&bus_id=751" - method: GET - scan_interval: 30 - value_template: "{{ value_json.time }}" - json_attributes: - - name - - time - - x - - y - - updated - -#################100##################################### - - - platform: rest - name: bustime_100_circ - resource: "https://ru.busti.me/api/notify_stop/?stop_id=8899&bus_id=649" - method: GET - scan_interval: 30 - value_template: "{{ value_json.time }}" - json_attributes: - - name - - time - - x - - y - - updated - -#################40##################################### - - - platform: rest - name: bustime_40_circ - resource: "https://ru.busti.me/api/notify_stop/?stop_id=8880&bus_id=696" - method: GET - scan_interval: 30 - value_template: "{{ value_json.time }}" - json_attributes: - - name - - time - - x - - y - - updated - -#################12##################################### - - - platform: rest - name: bustime_12_circ - resource: "https://ru.busti.me/api/notify_stop/?stop_id=9277&bus_id=652" - method: GET - scan_interval: 30 - value_template: "{{ value_json.time }}" - json_attributes: - - name - - time - - x - - y - - updated - -######################################################## - -# Остановка: Серебряный бор - мжк -#################10##################################### - - - platform: rest - name: bustime_10_sereb_sbb - resource: "https://ru.busti.me/api/notify_stop/?stop_id=9395&bus_id=647" - method: GET - scan_interval: 15 - value_template: "{{ value_json.time }}" - json_attributes: - - name - - time - - x - - y - - updated - - - platform: rest - name: bustime_10_sereb_sb - resource: "https://ru.busti.me/api/notify_stop/?stop_id=9397&bus_id=647" - method: GET - scan_interval: 15 - value_template: "{{ value_json.time }}" - json_attributes: - - name - - time - - x - - y - - updated - - - platform: rest - name: bustime_10_sereb_a - resource: "https://ru.busti.me/api/notify_stop/?stop_id=9407&bus_id=647" - method: GET - scan_interval: 15 - value_template: "{{ value_json.time }}" - json_attributes: - - name - - time - - x - - y - - updated - - -# Остановка: Кузбассэнерго (трамвай)- Радуга -#################10##################################### - - - platform: rest - name: bustime_10_kemdor - resource: "https://ru.busti.me/api/notify_stop/?stop_id=8956&bus_id=647" - method: GET - scan_interval: 30 - value_template: "{{ value_json.time }}" - json_attributes: - - name - - time - - x - - y - - updated - - - platform: rest - name: bustime_10_kuzbass - resource: "https://ru.busti.me/api/notify_stop/?stop_id=125776&bus_id=647" - method: GET - scan_interval: 30 - value_template: "{{ value_json.time }}" - json_attributes: - - name - - time - - x - - y - - updated - -################шаблоны######################################## - -################10######################################## - -#сенсор показывющий время до остановки сельская б и до серебряный бор в сторону города 🚌 10 | Сельская Б: 12:49 (8 мин) | Ближ: 12:46 - template: - - sensor: - - name: "tram10.raduga-gorod" - state: > - {% set s = 'sensor.bustime_10_sereb_a' %} - {% set e = 'sensor.bustime_10_sereb_sb' %} - - {% set sereb_time = states(s) %} - {% set end_time = states(e) %} - - {% set has_end = end_time not in ['unknown','unavailable',''] %} - {% set has_sereb = sereb_time not in ['unknown','unavailable',''] %} - - {% if has_end %} - {% set now_ts = now() %} - {% set end_ts = today_at(end_time) %} - {% set delta = (end_ts - now_ts).total_seconds() / 60 %} - {% if delta < -720 %} - {% set end_ts = end_ts + timedelta(days=1) %} - {% endif %} - {% set diff = ((end_ts - now_ts).total_seconds() / 60) | round(0) %} - {% endif %} - - 🚌 10 | Сельская Б: {{ end_time if has_end else 'нет данных' }}{% if has_end %} ({{ diff }} мин){% endif %} | Ближ: {{ sereb_time if has_sereb else 'нет данных' }} - -#сенсор показывющий время до остановки кузбассэнерго в сторону радуги 🚌 10 | нет данных - - sensor: - - name: "tram10.gorod-raduga" - state: > - {% set s = 'sensor.bustime_10_kuzbass' %} - - {% set route = state_attr(s,'name') or '10' %} - {% set stop_time = states(s) %} - {% set has_time = stop_time not in ['unknown','unavailable',''] %} - - {% if has_time %} - {% set now_ts = now() %} - {% set stop_ts = today_at(stop_time) %} - {% set delta = (stop_ts - now_ts).total_seconds() / 60 %} - - {# если ушло сильно в минус — значит это уже завтра #} - {% if delta < -720 %} - {% set stop_ts = stop_ts + timedelta(days=1) %} - {% endif %} - - {% set diff = ((stop_ts - now_ts).total_seconds() / 60) | round(0) %} - {% endif %} - - 🚌 {{ route }} | {{ stop_time if has_time else 'нет данных' }}{% if has_time %} ({{ diff }} мин){% endif %} - -#сенсор проверки, что осталось от 3 до 1 минуты до остановки сельская больница трамвая 10, используется в tg|ntf|tram10_rad-gor_<20m - - - sensor: - - name: "tram10.raduga<3m" - state: > - {% set t = states('sensor.bustime_10_sereb_sb') %} - {% if t in ['unknown','unavailable',''] %} - false - {% else %} - {% set now_ts = now() %} - {% set arr = today_at(t) %} - {% if arr < now_ts %} - {% set arr = arr + timedelta(days=1) %} - {% endif %} - {% set diff = ((arr - now_ts).total_seconds() / 60) %} - {{ 1 <= diff <= 4 }} - {% endif %} - -#сенсоры сравнения координат автобуса и остановки sensor.bus34_stop_ub, используется в tg|ntf|bus34_ub_check - #34 - - sensor: - - name: "bus34_stop_ub_gps_true" - state: > - {% set lat1 = state_attr('sensor.bus34_stop_univ','latitude') %} - {% set lon1 = state_attr('sensor.bus34_stop_univ','longitude') %} - - {% set lat2 = state_attr('sensor.bustime_34_univ','y') %} - {% set lon2 = state_attr('sensor.bustime_34_univ','x') %} - - {% if lat2 and lon2 %} - {{ distance(lat1, lon1, lat2, lon2) <= 0.02 }} - {% else %} - false - {% endif %} - - #10 - - sensor: - - name: "tram10_stop_kemdor_gps_true" - state: > - {% set lat1 = state_attr('sensor.tram10_stop_kemdor','latitude') %} - {% set lon1 = state_attr('sensor.tram10_stop_kemdor','longitude') %} - - {% set lat2 = state_attr('sensor.bustime_10_kemdor','y') %} - {% set lon2 = state_attr('sensor.bustime_10_kemdor','x') %} - - {% if lat2 and lon2 %} - {{ distance(lat1, lon1, lat2, lon2) <= 0.2 }} - {% else %} - false - {% endif %} - - -#Сенсор с координатами - #34 - - sensor: - - name: "bus34_stop_univ" - state: "ok" - attributes: - latitude: 55.344968 - longitude: 86.127703 - - - #10 - #34 - - sensor: - - name: "tram10_stop_kemdor" - state: "ok" - attributes: - latitude: 55.348193 - longitude: 86.061649 - - - - automation: -#####################################10######################################### -##############################10Радуга-Город#################################### - -###########################запуск автоматизации################################# - - - alias: tg|ntf|tram10_rad-gor_ask_run - description: "" - mode: single - triggers: - - trigger: time - at: "22:00:00" - weekday: - - mon - - tue - - wed - - thu - - sun - action: - - action: input_datetime.set_datetime - metadata: {} - target: - entity_id: input_datetime.tram10_r_g_enable_time - data: - time: "07:15:00" - - action: automation.turn_on - metadata: {} - target: - entity_id: automation.tg_ntf_tram10_rad_gor_20m - - service: telegram_bot.send_message - data: - chat_id: - - "-1002006010424" - message: "🚌 Запустить автоматизацию уведомления трамвая 10?" - inline_keyboard: - - "▶ Запустить:/tram10_r_g_run, ❌ Не запускать:/tram10_r_g_skip" - - '{{''\U0001F552''}}Время:/toggle_bs_r_g_time, {{''\U0001F553''}}Сброс:/toggle_bs_r_g_cancel' - - - ## Управление временем запуска уведомления прихода трамвая 10 радуга-город - - id: tg|mn|tram10_start_time_raduga_gorod - alias: tg|mn|tram10_start_time_raduga_gorod - initial_state: true - trigger: - - platform: event - event_type: telegram_callback - event_data: {} - action: - - choose: - - conditions: - - condition: template - value_template: "{{ trigger.event.data.command == '/toggle_bs_r_g_time' }}" - sequence: - - service: telegram_bot.delete_message - data_template: - message_id: "{{ trigger.event.data.message.message_id }}" - chat_id: "{{ trigger.event.data.chat_id }}" - - service: telegram_bot.send_message - data: - chat_id: "{{ trigger.event.data.chat_id }}" - message: &msg_bs_t10_r_g | - {{'\U0001F30A'}}Выбор времени начала уведомлений: {{ states('input_datetime.tram10_r_g_enable_time') }} - - inline_keyboard: &keyb_bs_t10_r_g - - '{{''\U0001F556''}}7:00:/toggle_bs_r_g_time7, {{''\U0001F557''}}8:00:/toggle_bs_r_g_time8' - - "▶ Запустить:/tram10_r_g_run, ❌ Не запускать:/tram10_r_g_skip" - - - conditions: - - condition: template - value_template: "{{ trigger.event.data.command == '/toggle_bs_r_g_time7' }}" - sequence: - - service: input_datetime.set_datetime - data: - time: "07:00:00" - target: - entity_id: input_datetime.tram10_r_g_enable_time - - delay: - milliseconds: 500 - - service: telegram_bot.answer_callback_query - data: - callback_query_id: "{{ trigger.event.data.id }}" - message: | - {{"\U0001F4AC"}} Время установлено на 7:00 - - service: telegram_bot.delete_message - data_template: - message_id: "{{ trigger.event.data.message.message_id }}" - chat_id: "{{ trigger.event.data.chat_id }}" - - service: telegram_bot.send_message - data: - chat_id: "{{ trigger.event.data.chat_id }}" - message: *msg_bs_t10_r_g - inline_keyboard: *keyb_bs_t10_r_g - - - conditions: - - condition: template - value_template: "{{ trigger.event.data.command == '/toggle_bs_r_g_time8' }}" - sequence: - - service: input_datetime.set_datetime - data: - time: "08:00:00" - target: - entity_id: input_datetime.tram10_r_g_enable_time - - delay: - milliseconds: 500 - - service: telegram_bot.answer_callback_query - data: - callback_query_id: "{{ trigger.event.data.id }}" - message: | - {{"\U0001F4AC"}} Время установлено на 8:00 - - service: telegram_bot.delete_message - data_template: - message_id: "{{ trigger.event.data.message.message_id }}" - chat_id: "{{ trigger.event.data.chat_id }}" - - service: telegram_bot.send_message - data: - chat_id: "{{ trigger.event.data.chat_id }}" - message: *msg_bs_t10_r_g - inline_keyboard: *keyb_bs_t10_r_g - - - - alias: tg|tram10_rad_gor_run - mode: single - trigger: - - platform: event - event_type: telegram_callback - event_data: - data: "/tram10_r_g_run" - - action: - - service: automation.turn_on - target: - entity_id: automation.tg_ntf_tram10_rad_gor_20m - - - service: telegram_bot.send_message - data: - chat_id: - - "-1002006010424" - message: "✅ Автоматизация трамвая 10 включена" - - - - alias: tg|tram10_rad_gor_skip - mode: single - trigger: - - platform: event - event_type: telegram_callback - event_data: - command: "/tram10_r_g_skip" - action: - - action: automation.turn_off - metadata: {} - target: - entity_id: automation.tg_ntf_tram10_rad_gor_20m - data: - stop_actions: true - - service: telegram_bot.send_message - data: - chat_id: - - "-1002006010424" - message: "❌Оповещения трамвая 10 Радуга-Город отключены" - inline_keyboard: - - "▶ Запустить:/tram10_r_g_run" - - - - - alias: tg|ntf|tram10_rad-gor_<20m - description: "" - mode: single - triggers: - - trigger: state - entity_id: - - sensor.tram10_raduga_3m - from: - - "False" - to: - - "True" - for: - hours: 0 - minutes: 0 - seconds: 0 - conditions: - - condition: template - value_template: > - {{ now().strftime('%H:%M') >= - states('input_datetime.tram10_r_g_enable_time')[0:5] }} - actions: - - action: telegram_bot.send_message - metadata: {} - data: - chat_id: - - "-1002006010424" - message: >- - 🚌 10 будет ~ {{ states('sensor.bustime_10_sereb_a') }}, следующий ~ {% - set t = states('sensor.bustime_10_sereb_sb') %}{% if t in - ['unknown','unavailable',''] %}нет данных{% else %}{% set base = - today_at(t) %}{% set plus = base + timedelta(minutes=10) %}{{ - plus.strftime('%H:%M') }}{% endif %} - - action: automation.turn_off - metadata: {} - target: - entity_id: automation.tg_ntf_tram10_rad_gor_20m - data: - stop_actions: false - - delay: - hours: 0 - minutes: 3 - seconds: 0 - milliseconds: 0 - - action: automation.turn_on - metadata: {} - target: - entity_id: automation.tg_ntf_tram10_rad_gor_20m - data: {} - - - - alias: tg|ntf|tram10_rad-gor_<20m_off - description: "" - mode: single - triggers: - - trigger: zone - entity_id: device_tracker.google_maps_108918666344169166438 - zone: zone.transport_raduga - event: leave - conditions: - - condition: state - entity_id: automation.tg_ntf_tram10_rad_gor_20m - state: - - "on" - actions: - - action: automation.turn_off - metadata: {} - target: - entity_id: automation.tg_ntf_tram10_rad_gor_20m - data: - stop_actions: true - - action: telegram_bot.send_message - metadata: {} - data: - chat_id: - - "-1002006010424" - message: >- - Вы покинули зону уведомлений транспорта на радуге - автоматизация - отключена - -##############################10Город-Радуга#################################### - - - alias: tg|ntf|tram10_kemdor_check - description: "" - mode: single - triggers: - - trigger: state - entity_id: - - sensor.bus34_stop_ub_gps_true - from: null - to: - - "True" - conditions: [] - actions: - - action: telegram_bot.send_message - metadata: {} - data: - chat_id: - - "-1002006010424" - message: 🚌 34 проехал юбилейный - -#####################################34######################################### -#################################город-радуга################################### - - - alias: tg|ntf|bus34_ub_check - description: "" - mode: single - triggers: - - trigger: state - entity_id: - - sensor.tram10_stop_kemdor_gps_true - from: null - to: - - "True" - conditions: [] - actions: - - action: telegram_bot.send_message - metadata: {} - data: - chat_id: - - "-1002006010424" - message: 🚌 10 проехал кемдор - - - - diff --git a/includes/packages/controls_light.yaml b/includes/packages/controls_light.yaml deleted file mode 100644 index 689c13a..0000000 --- a/includes/packages/controls_light.yaml +++ /dev/null @@ -1,1069 +0,0 @@ -controls_light: -################################################################################### -#диммер около кровати - ble_monitor: - devices: - - mac: 'F8:24:41:C5:DD:28' - name: 'dimmer_yeelight_room' - encryption_key: 'cfe177acf7c4b6b8ad9bdc7f' - reset_timer: 1 - - -################################################################################### - -#настройка времени суток || https://www.youtube.com/watch?v=oLxN0GHk_rk - - #инпуты для ввода времени в интерфейсе - input_datetime: - #Основные - night_start: - name: INPT|night_start - has_date: false - has_time: true - night_stop: - name: INPT|night_stop - has_date: false - has_time: true - - day_start: - name: INPT|day_start - has_date: false - has_time: true - day_stop: - name: INPT|day_stop - has_date: false - has_time: true - - #дополнительные - night_lobby_start: - name: INPT|night_lobby_start - has_date: false - has_time: true - night_lobby_stop: - name: INPT|night_lobby_stop - has_date: false - has_time: true - - day_lobby_start: - name: INPT|day_lobby_start - has_date: false - has_time: true - day_lobby_stop: - name: INPT|day_lobby_stop - has_date: false - has_time: true - - #инпуты для ввода времени таймеров - bathroom_day_timer: - name: INPT|bathroom_day_timer - has_date: false - has_time: true - bathroom_night_timer: - name: INPT|bathroom_night_timer - has_date: false - has_time: true - - lobby_day_timer: - name: INPT|lobby_day_timer - has_date: false - has_time: true - lobby_night_timer: - name: INPT|lobby_night_timer - has_date: false - has_time: true - - room_day_timer: - name: INPT|room_day_timer - has_date: false - has_time: true - room_night_timer: - name: INPT|room_night_timer - has_date: false - has_time: true - - kitchen_day_timer: - name: INPT|kitchen_day_timer - has_date: false - has_time: true - kitchen_night_timer: - name: INPT|kitchen_night_timer - has_date: false - has_time: true - - #шаблонные сенсоры время суток - template: - - binary_sensor: - #основные - - name: night_time - unique_id: night_time - state: > - {% if states('input_datetime.night_start') < states('input_datetime.night_stop') %} - {{ states('input_datetime.night_start') <= now().strftime('%H:%M:%S') <= states('input_datetime.night_stop') }} - {% elif states('input_datetime.night_start') > states('input_datetime.night_stop') %} - {{states('input_datetime.night_start') <= now().strftime('%H:%M:%S') <= '23:59:59' - or '00:00:00' <= now().strftime('%H:%M:%S') <= states('input_datetime.night_stop')}} - {% endif %} - device_class: running - - - name: day_time - unique_id: day_time - state: > - {% if states('input_datetime.day_start') < states('input_datetime.day_stop') %} - {{ states('input_datetime.day_start') <= now().strftime('%H:%M:%S') <= states('input_datetime.day_stop') }} - {% elif states('input_datetime.day_start') > states('input_datetime.day_stop') %} - {{states('input_datetime.day_start') <= now().strftime('%H:%M:%S') <= '23:59:59' - or '00:00:00' <= now().strftime('%H:%M:%S') <= states('input_datetime.day_stop')}} - {% endif %} - device_class: running - - #дополнительные - - name: night_lobby_time - unique_id: night_lobby_time - state: > - {% if states('input_datetime.night_lobby_start') < states('input_datetime.night_lobby_stop') %} - {{ states('input_datetime.night_lobby_start') <= now().strftime('%H:%M:%S') <= states('input_datetime.night_lobby_stop') }} - {% elif states('input_datetime.night_lobby_start') > states('input_datetime.night_lobby_stop') %} - {{states('input_datetime.night_lobby_start') <= now().strftime('%H:%M:%S') <= '23:59:59' - or '00:00:00' <= now().strftime('%H:%M:%S') <= states('input_datetime.night_lobby_stop')}} - {% endif %} - device_class: running - - - name: day_lobby_time - unique_id: day_lobby_time - state: > - {% if states('input_datetime.day_lobby_start') < states('input_datetime.day_lobby_stop') %} - {{ states('input_datetime.day_lobby_start') <= now().strftime('%H:%M:%S') <= states('input_datetime.day_lobby_stop') }} - {% elif states('input_datetime.day_lobby_start') > states('input_datetime.day_lobby_stop') %} - {{states('input_datetime.day_lobby_start') <= now().strftime('%H:%M:%S') <= '23:59:59' - or '00:00:00' <= now().strftime('%H:%M:%S') <= states('input_datetime.day_lobby_stop')}} - {% endif %} - device_class: running -################################################################################### - - # Сенсоры включенного света в комнатах - # Сенсоры включенного света кухня - - default_entity_id: binary_sensor.lighton_kitchen - name: Сенсор вкл свет кухня - state: '{{ is_state(''light.yeelink_ceilc_ff3a_light'', ''on'') or is_state(''light.yeelink_ceilc_ff3a_ambient_light'', - ''on'')}}' - - # Сенсоры включенного света комната - - default_entity_id: binary_sensor.lighton_room - name: Сенсор вкл свет комната - state: '{{ is_state(''light.yeelink_ceiling19_d85c_light'', ''on'') or is_state(''light.yeelink_ceiling19_d85c_ambient_light'', - ''on'')}}' - - # Сенсоры включенного света ванна - - default_entity_id: binary_sensor.lighton_bathroom - name: Сенсор вкл света ванная - state: '{{ is_state(''light.yeelink_ceilc_cc51_light'', ''on'') or is_state(''light.yeelink_ceilc_cc51_ambient_light'', - ''on'')}}' - -################################################################################### - -#комната - automation: - - alias: LGHT|Димер выкл весь свет - description: "" - trigger: - - platform: template - value_template: >- - {{(is_state('sensor.ble_dimmer_dimmer_yeelight_room', 'long press 6 steps'))}} - - platform: template - value_template: >- - {{(is_state('sensor.ble_dimmer_dimmer_yeelight_room', 'long press 8 steps'))}} - - platform: template - value_template: >- - {{(is_state('sensor.ble_dimmer_dimmer_yeelight_room', 'long press 10 steps'))}} - - platform: template - value_template: >- - {{(is_state('sensor.ble_dimmer_dimmer_yeelight_room', 'long press 11 steps'))}} - - platform: template - value_template: >- - {{(is_state('sensor.ble_dimmer_dimmer_yeelight_room', 'long press 12 steps'))}} - - platform: template - value_template: >- - {{(is_state('sensor.ble_dimmer_dimmer_yeelight_room', 'long press 13 steps'))}} - - platform: template - value_template: >- - {{(is_state('sensor.ble_dimmer_dimmer_yeelight_room', 'long press 14 steps'))}} - - platform: template - value_template: >- - {{(is_state('sensor.ble_dimmer_dimmer_yeelight_room', 'long press 15 steps'))}} - - platform: template - value_template: >- - {{(is_state('sensor.ble_dimmer_dimmer_yeelight_room', 'long press 16 steps'))}} - condition: [] - action: - - service: scene.turn_on - target: - entity_id: - - scene.vannaia_vykl_svet - - scene.komnata_vykl_svet - - scene.kukhnia_vykl_svet - data: {} - - service: switch.turn_off - target: - entity_id: - - switch.glavnyi_vykliuchatel_prikhozhaia_left - - switch.glavnyi_vykliuchatel_prikhozhaia_right - - switch.rele_zerkalo_i_ventiliatsiia_l1 - data: {} - mode: single - - - alias: LGHT|btn_all_light_off - description: "" - mode: single - trigger: - - platform: state - entity_id: input_button.btn_vykliuchit_ves_svet - action: - - service: scene.turn_on - target: - entity_id: - - scene.vannaia_vykl_svet - - scene.komnata_vykl_svet - - scene.kukhnia_vykl_svet - data: {} - - service: switch.turn_off - target: - entity_id: - - switch.glavnyi_vykliuchatel_prikhozhaia_left - - switch.glavnyi_vykliuchatel_prikhozhaia_right - - switch.rele_zerkalo_i_ventiliatsiia_l1 - data: {} - - - alias: LGHT|mbchrg_off_gps_off - description: "" - mode: single - trigger: - - platform: state - entity_id: - - sensor.where_people - to: "False" - from: null - condition: [] - action: - - service: switch.turn_off - target: - entity_id: switch.0xa4c138a1b1cd2be1 - data: {} - - - alias: LGHT|mbchrg_on_gps_on - description: "" - mode: single - trigger: - - platform: state - entity_id: - - sensor.where_people - from: null - to: "True" - condition: [] - action: - - service: switch.turn_on - target: - entity_id: switch.0xa4c138a1b1cd2be1 - data: {} - - #стандартный свет комната - - alias: LGHT|room_std_on - description: "" - trigger: - - platform: device - domain: mqtt - device_id: 69804df32abfe4154281b2fc176ce519 - type: action - subtype: double_left - discovery_id: 0x54ef44100017e9a7 action_double_left - condition: [] - action: - - service: scene.turn_on - target: - entity_id: scene.komnata_osveshchenie_standart - - - alias: LGHT|room_100 - mode: single - trigger: - - platform: device - domain: mqtt - device_id: 69804df32abfe4154281b2fc176ce519 - type: action - subtype: double_both - condition: [] - action: - - service: scene.turn_on - metadata: {} - target: - entity_id: scene.lght_room_100 - - #красный свет вкл - - alias: LGHT|room_red_on - description: "" - trigger: - - platform: device - domain: mqtt - device_id: 69804df32abfe4154281b2fc176ce519 - type: action - subtype: single_both - discovery_id: 0x54ef44100017e9a7 action_single_both - condition: [] - action: - - service: scene.turn_on - target: - entity_id: scene.novaia_stsena - metadata: {} - mode: single - - #синий свет вкл - - alias: LGHT|room_tv_on - description: "" - trigger: - - platform: device - domain: mqtt - device_id: 69804df32abfe4154281b2fc176ce519 - type: action - subtype: double_right - discovery_id: 0x54ef44100017e9a7 action_double_right - condition: [] - action: - - service: scene.turn_on - target: - entity_id: scene.komnata_ambilight_sinii - metadata: {} - - - alias: LGHT|on\off_room_light - description: "" - trigger: - - platform: device - domain: mqtt - device_id: 69804df32abfe4154281b2fc176ce519 - type: action - subtype: single_left - discovery_id: 0x54ef44100017e9a7 action_single_left - condition: [] - action: - - choose: - - conditions: - - condition: state - entity_id: light.yeelight_ceiling19_0x159cb1c7 - state: "off" - sequence: - - service: scene.turn_on - metadata: {} - target: - entity_id: scene.komnata_osveshchenie_standart - - conditions: - - condition: device - type: is_on - device_id: 4e045c09a0acc894d6fcf78850b92a5d - entity_id: 6062bbf1e0f2a8208bc4c2e288d19698 - domain: light - sequence: - - service: scene.turn_on - metadata: {} - target: - entity_id: scene.komnata_vykl_svet - - - alias: LGHT|on_room_night - description: "" - trigger: - - platform: device - domain: mqtt - device_id: 69804df32abfe4154281b2fc176ce519 - type: action - subtype: single_right - discovery_id: 0x54ef44100017e9a7 action_single_right - condition: [] - action: - - service: scene.turn_on - metadata: {} - target: - entity_id: scene.lght_room_night_on - - # Таймер автоотключения комната - - alias: tmr|light_on_presencenone_room_on - initial_state: true - trigger: - # Условия для запуска таймера освещения - - platform: state - entity_id: binary_sensor.sensor_vkl_svet_bez_dvizheniia_komnata - to: 'on' - action: - - choose: - - conditions: - - condition: state - entity_id: binary_sensor.night_time - state: "on" - sequence: - - service: timer.start - entity_id: timer.timer_lighton_presencenone_room - data_template: - duration: "{{ states('input_datetime.room_night_timer') }}" - - choose: - - conditions: - - condition: state - entity_id: binary_sensor.day_time - state: "on" - sequence: - - service: timer.start - entity_id: timer.timer_lighton_presencenone_room - data_template: - duration: "{{ states('input_datetime.room_day_timer') }}" - - # отключения света по таймеру комната - - alias: LGHT|room_off_timer_light - trigger: - - platform: state - entity_id: - - timer.timer_lighton_presencenone_room - from: null - for: - hours: 0 - minutes: 0 - seconds: 0 - to: idle - condition: - - condition: template - value_template: |- - {{ (is_state('binary_sensor.54ef44e45e59_motion', 'off') - and is_state('binary_sensor.54ef44e327ba_motion', 'off') - and is_state('binary_sensor.54ef44e32e91_motion', 'off'))}} - action: - - service: scene.turn_on - target: - entity_id: scene.komnata_vykl_svet -################################################################################### -#ванная - - - alias: LGHT|Bathroom_on_standart_light - description: "" - mode: single - trigger: - - platform: state - entity_id: - - binary_sensor.datchik_prisutstviia_vannaia_presence - from: "off" - to: "on" - condition: - - condition: state - entity_id: light.yeelink_ceilc_cc51_light - state: "off" - - condition: state - entity_id: light.yeelink_ceilc_cc51_ambient_light - state: "off" - action: - - service: switch.turn_on - metadata: {} - data: {} - target: - entity_id: switch.rele_zerkalo_i_ventiliatsiia_l1 - - choose: - - conditions: - - condition: state - entity_id: binary_sensor.day_time - state: "on" - sequence: - - service: scene.turn_on - target: - entity_id: scene.vannaia_standartnyi_svet - metadata: {} - enabled: true - - service: switch.turn_on - metadata: {} - data: {} - target: - entity_id: switch.rele_zerkalo_i_ventiliatsiia_l1 - enabled: false - - conditions: - - condition: or - conditions: - - condition: state - entity_id: light.yeelight_ceiling19_0x159cb1c7 - state: "on" - - condition: state - entity_id: light.yeelight - state: "on" - - condition: state - entity_id: binary_sensor.night_time - state: "on" - sequence: - - service: scene.turn_on - target: - entity_id: scene.vannaia_standartnyi_svet - metadata: {} - - service: switch.turn_on - metadata: {} - data: {} - target: - entity_id: switch.rele_zerkalo_i_ventiliatsiia_l1 - enabled: false - - - alias: LGHT|Bathroom_on_night_light - description: "" - trigger: - - platform: state - entity_id: - - binary_sensor.datchik_prisutstviia_vannaia_presence - from: "off" - to: "on" - condition: - - condition: state - entity_id: light.yeelink_ceilc_cc51_light - state: "off" - - condition: state - entity_id: light.yeelink_ceilc_cc51_ambient_light - state: "off" - action: - - choose: - - conditions: - - condition: state - entity_id: binary_sensor.night_time - state: "on" - - condition: state - entity_id: light.yeelight_ceiling19_0x159cb1c7 - state: "off" - - condition: state - entity_id: light.yeelight - state: "off" - sequence: - - service: scene.turn_on - target: - entity_id: scene.vannaia_nochnik_1 - metadata: {} - - service: switch.turn_on - metadata: {} - data: {} - target: - entity_id: switch.rele_zerkalo_i_ventiliatsiia_l1 - mode: single - - - alias: LGHT|Bathroom_btn_on_light - description: "" - mode: single - triggers: - - domain: mqtt - device_id: bfa6bf0e6ae94405b731622e2a09cf6d - type: action - subtype: single_right - discovery_id: 0x54ef4410003abdb9 action_single_right - trigger: device - conditions: - - condition: state - entity_id: light.yeelink_ceilc_cc51_light - state: "off" - - condition: state - entity_id: light.yeelink_ceilc_cc51_ambient_light - state: "off" - actions: - - target: - entity_id: scene.vannaia_standartnyi_svet - metadata: {} - action: scene.turn_on - data: {} - - metadata: {} - data: {} - target: - entity_id: switch.rele_zerkalo_i_ventiliatsiia_l1 - action: switch.turn_on - - - alias: LGHT|Bathroom_btn_off_light - description: "" - mode: single - triggers: - - domain: mqtt - device_id: bfa6bf0e6ae94405b731622e2a09cf6d - type: action - subtype: single_right - discovery_id: 0x54ef4410003abdb9 action_single_right - trigger: device - conditions: - - condition: or - conditions: - - condition: state - entity_id: light.yeelink_ceilc_cc51_light - state: "on" - - condition: state - entity_id: light.yeelink_ceilc_cc51_ambient_light - state: "off" - actions: - - target: - entity_id: scene.vannaia_vykl_svet - metadata: {} - action: scene.turn_on - data: {} - - metadata: {} - data: {} - target: - entity_id: switch.rele_zerkalo_i_ventiliatsiia_l1 - action: switch.turn_off - - - - alias: LGHT|Bathroom_dblclck_standart_light - description: "" - trigger: - - platform: device - domain: mqtt - device_id: bfa6bf0e6ae94405b731622e2a09cf6d - type: action - subtype: double_right - discovery_id: 0x54ef4410003abdb9 action_double_right - condition: [] - action: - - service: switch.turn_on - metadata: {} - data: {} - target: - entity_id: switch.rele_zerkalo_i_ventiliatsiia_l1 - - service: scene.turn_on - target: - entity_id: scene.vannaia_standartnyi_svet - metadata: {} - mode: single - - # Старт таймера автоотключения ванная - - alias: tmr|light_on_presencenone_bathroom_on - description: "" - trigger: - - platform: state - entity_id: binary_sensor.sensor_vkl_svet_bez_dvizheniia_vannaia - to: "on" - condition: [] - action: - - choose: - - conditions: - - condition: state - entity_id: binary_sensor.night_time - state: "on" - sequence: - - service: timer.start - entity_id: timer.timer_lighton_presencenone_bathroom - data_template: - duration: "{{ states('input_datetime.bathroom_night_timer') }}" - - choose: - - conditions: - - condition: state - entity_id: binary_sensor.day_time - state: "on" - sequence: - - service: timer.start - entity_id: timer.timer_lighton_presencenone_bathroom - data_template: - duration: "{{ states('input_datetime.bathroom_day_timer') }}" - - # отключения света по таймеру ванна - - alias: LGHT|Bathroom_off_timer_light - trigger: - - platform: state - entity_id: - - timer.timer_lighton_presencenone_bathroom - from: null - for: - hours: 0 - minutes: 0 - seconds: 0 - to: idle - condition: - - condition: state - entity_id: binary_sensor.datchik_prisutstviia_vannaia_presence - state: "off" - action: - - service: switch.turn_off - entity_id: switch.rele_zerkalo_i_ventiliatsiia_l1 - - service: scene.turn_on - target: - entity_id: scene.vannaia_vykl_svet - -################################################################################### - -# Прихожая - - - alias: LGHT|light_on_room_lobby_open_door - description: "" - mode: single - trigger: - - platform: state - entity_id: - - binary_sensor.e4aaec3747b2_contact - from: "off" - to: "on" - condition: - - condition: state - entity_id: binary_sensor.datchik_dvizheniia_prikhozhaia_occupancy - state: "off" - action: - - choose: - - conditions: - - condition: state - entity_id: binary_sensor.day_lobby_time - state: "on" - sequence: - - service: switch.turn_on - target: - entity_id: switch.glavnyi_vykliuchatel_prikhozhaia_right - data: {} - - if: - - condition: state - entity_id: binary_sensor.54ef44e45e59_light - state: "off" - - condition: state - entity_id: sensor.all_motion - state: "False" - for: - hours: 1 - minutes: 0 - seconds: 0 - then: - - service: scene.turn_on - metadata: {} - target: - entity_id: scene.komnata_osveshchenie_standart - - conditions: - - condition: state - entity_id: binary_sensor.night_lobby_time - state: "on" - sequence: - - service: switch.turn_on - data: {} - target: - entity_id: switch.glavnyi_vykliuchatel_prikhozhaia_left - - - alias: LGHT|btn_lobby_light_on/off_night - description: "" - trigger: - - platform: device - domain: mqtt - device_id: 975fb5853727f1fa4279bac09fd7fb6b - type: action - subtype: double_left - discovery_id: 0x00158d0006c6bca8 action_double_left - condition: [] - action: - - service: switch.toggle - metadata: {} - data: {} - target: - entity_id: switch.glavnyi_vykliuchatel_prikhozhaia_left - mode: single - - - alias: LGHT|btn_lobby_light_on/off_day - description: "" - trigger: - - platform: device - domain: mqtt - device_id: 975fb5853727f1fa4279bac09fd7fb6b - type: action - subtype: single_left - discovery_id: 0x00158d0006c6bca8 action_single_left - condition: [] - action: - - service: switch.toggle - metadata: {} - data: {} - target: - entity_id: switch.glavnyi_vykliuchatel_prikhozhaia_right - mode: single - - - alias: LGHT|lobby_light_on_day_motion - description: "" - trigger: - - platform: state - entity_id: - - binary_sensor.datchik_dvizheniia_prikhozhaia_occupancy - to: "on" - condition: - - condition: state - entity_id: binary_sensor.day_lobby_time - state: "on" - action: - - service: switch.turn_on - metadata: {} - data: {} - target: - entity_id: switch.glavnyi_vykliuchatel_prikhozhaia_right - mode: single - - - alias: LGHT|lobby_light_on_night_motion - description: "" - trigger: - - platform: state - entity_id: - - binary_sensor.datchik_dvizheniia_prikhozhaia_occupancy - to: "on" - condition: - - condition: state - entity_id: binary_sensor.night_lobby_time - state: "on" - action: - - service: switch.turn_on - metadata: {} - data: {} - target: - entity_id: switch.glavnyi_vykliuchatel_prikhozhaia_left - mode: single - - - alias: LGHT|lobby_clck_all_light_off - mode: single - trigger: - - platform: device - domain: mqtt - device_id: 975fb5853727f1fa4279bac09fd7fb6b - type: action - subtype: single_right - condition: [] - action: - - service: scene.turn_on - target: - entity_id: - - scene.komnata_vykl_svet - data: {} - - service: switch.turn_off - target: - entity_id: - - switch.glavnyi_vykliuchatel_prikhozhaia_left - - switch.glavnyi_vykliuchatel_prikhozhaia_right - data: {} - - # отключения света по таймеру коридор - - alias: LGHT|lobby_off_timer_light - description: "" - mode: single - trigger: - - platform: state - entity_id: - - timer.timer_lighton_presencenone_lobby - from: null - for: - hours: 0 - minutes: 0 - seconds: 0 - to: idle - condition: - - condition: state - entity_id: binary_sensor.datchik_dvizheniia_prikhozhaia_occupancy - state: "off" - action: - - service: switch.turn_off - metadata: {} - data: {} - target: - entity_id: - - switch.glavnyi_vykliuchatel_prikhozhaia_left - - switch.glavnyi_vykliuchatel_prikhozhaia_right - - - alias: LGHT|btn_left_wifi_on_light_room - description: "" - mode: single - triggers: - - domain: mqtt - device_id: 975fb5853727f1fa4279bac09fd7fb6b - type: action - subtype: hold_left - discovery_id: 0x00158d0006c6bca8 action_hold_left - trigger: device - conditions: [] - actions: - - target: - entity_id: scene.komnata_osveshchenie_standart - metadata: {} - action: scene.turn_on - - - - # Таймер автоотключения коридор - - alias: tmr|light_on_presencenone_lobby_on - initial_state: true - trigger: - # Условия для запуска таймера освещения - - platform: state - entity_id: binary_sensor.sensor_vkl_svet_bez_dvizheniia_koridor - to: 'on' - action: - - choose: - - conditions: - - condition: state - entity_id: binary_sensor.night_lobby_time - state: "on" - sequence: - - service: timer.start - entity_id: timer.timer_lighton_presencenone_lobby - data_template: - duration: "{{ states('input_datetime.lobby_night_timer') }}" - - choose: - - conditions: - - condition: state - entity_id: binary_sensor.day_lobby_time - state: "on" - sequence: - - service: timer.start - entity_id: timer.timer_lighton_presencenone_lobby - data_template: - duration: "{{ states('input_datetime.lobby_day_timer') }}" -#======================================================================================== - -#Кухня - - - alias: LGHT|on_btnclc_kitchen - description: "" - trigger: - - platform: device - domain: mqtt - device_id: 3477021b47adcf79dc87c91f73cc9183 - type: action - subtype: single - discovery_id: 0x54ef4410000f268c action_single - condition: [] - action: - - choose: - - conditions: - - condition: state - entity_id: light.yeelink_ceilc_ff3a_light - state: "off" - - condition: state - entity_id: light.yeelink_ceilc_ff3a_ambient_light - state: "off" - sequence: - - service: scene.turn_on - target: - entity_id: scene.svet_v_kukhne_100 - metadata: {} - - conditions: - - condition: or - conditions: - - condition: state - entity_id: light.yeelink_ceilc_ff3a_light - state: "on" - - condition: state - entity_id: light.yeelink_ceilc_ff3a_ambient_light - state: "on" - sequence: - - service: scene.turn_on - metadata: {} - target: - entity_id: scene.kukhnia_vykl_svet - - - alias: LGHT|kitchen_on_lght<50 - description: "" - mode: single - trigger: - - platform: state - entity_id: - - binary_sensor.datchik_prisutstviia_kukhnia_presence - from: "off" - to: "on" - condition: - - condition: numeric_state - entity_id: sensor.datchik_osveshcheniia_illuminance - below: 60 - - condition: state - entity_id: light.yeelink_ceilc_ff3a_light - state: "off" - - condition: state - entity_id: light.yeelink_ceilc_ff3a_ambient_light - state: "off" - action: - - choose: - - conditions: - - condition: state - entity_id: binary_sensor.day_time - state: "on" - - condition: state - entity_id: light.yeelink_ceilc_ff3a_light - state: "off" - - condition: state - entity_id: light.yeelink_ceilc_ff3a_ambient_light - state: "off" - sequence: - - service: scene.turn_on - target: - entity_id: scene.svet_v_kukhne_100 - metadata: {} - enabled: true - - conditions: - - condition: state - entity_id: binary_sensor.night_time - state: "on" - - condition: state - entity_id: light.yeelink_ceilc_ff3a_light - state: "off" - - condition: state - entity_id: light.yeelink_ceilc_ff3a_ambient_light - state: "off" - - condition: or - conditions: - - condition: state - entity_id: light.yeelight_ceiling19_0x159cb1c7 - state: "on" - - condition: state - entity_id: light.yeelight_ceilc_0x19f138fc - state: "on" - sequence: - - service: scene.turn_on - target: - entity_id: scene.svet_v_kukhne_100 - metadata: {} - - conditions: - - condition: state - entity_id: binary_sensor.night_time - state: "on" - - condition: state - entity_id: light.yeelight_ceiling19_0x159cb1c7 - state: "off" - - condition: state - entity_id: light.yeelight_ceilc_0x19f138fc - state: "off" - sequence: - - service: scene.turn_on - metadata: {} - target: - entity_id: scene.kukhnia_noch - - # Таймер автоотключения кухня - - alias: tmr|light_on_presencenone_kitchen_on - initial_state: true - trigger: - # Условия для запуска таймера освещения - - platform: state - entity_id: binary_sensor.sensor_vkl_svet_bez_dvizheniia_kukhnia - to: 'on' - action: - - choose: - - conditions: - - condition: state - entity_id: binary_sensor.night_time - state: "on" - sequence: - - service: timer.start - entity_id: timer.timer_lighton_presencenone_kitchen - data_template: - duration: "{{ states('input_datetime.kitchen_night_timer') }}" - - choose: - - conditions: - - condition: state - entity_id: binary_sensor.day_time - state: "on" - sequence: - - service: timer.start - entity_id: timer.timer_lighton_presencenone_kitchen - data_template: - duration: "{{ states('input_datetime.kitchen_day_timer') }}" - - # отключения света по таймеру кухня - - alias: LGHT|kitchen_off_timer_light - trigger: - - platform: state - entity_id: - - timer.timer_lighton_presencenone_kitchen - from: null - for: - hours: 0 - minutes: 0 - seconds: 0 - to: idle - condition: - - condition: state - entity_id: binary_sensor.datchik_prisutstviia_kukhnia_presence - state: "off" - action: - - service: scene.turn_on - target: - entity_id: scene.kukhnia_vykl_svet \ No newline at end of file diff --git a/includes/packages/dishwasher.yaml b/includes/packages/dishwasher.yaml deleted file mode 100644 index 0638133..0000000 --- a/includes/packages/dishwasher.yaml +++ /dev/null @@ -1,268 +0,0 @@ -dishwasher: - - # инпут для ввода времени отложенного старта - input_datetime: - dishwasher_startinrelative: - name: INPT|dishwasher_startinrelative - has_date: false - has_time: true - - input_boolean: - dishwasher_needs_unloading: - name: Нужно разобрать посуду - icon: mdi:dishwasher - - script: - dw_start_select_program: - alias: dw_start_select_program_relative - sequence: - - action: homeconnect_ws.start_program - data: - device_id: 0166c54489231f7edaf804c02ab6a652 - start_in: - hours: "{{ state_attr('input_datetime.dishwasher_startinrelative', 'hour') }}" - minutes: "{{ state_attr('input_datetime.dishwasher_startinrelative', 'minute') }}" - seconds: "{{ state_attr('input_datetime.dishwasher_startinrelative', 'second') }}" - - dw_stop_program: - alias: dw_stop_program - sequence: - - action: button.press - target: - entity_id: button.bosch_dishwasher_abort - - service: input_datetime.set_datetime - data: - time: "00:00:00" - target: - entity_id: input_datetime.dishwasher_startinrelative - - dw_install_auto_45_65_extradry_extrarinse: - alias: dw_install_auto_45_65_extradry_extrarinse - sequence: - - service: select.select_option - data: - entity_id: select.bosch_dishwasher_selected_program - option: dishcare_dishwasher_program_auto2 - - dw_install_quick_65_extradry_extrarinse: - alias: dw_install_quick_65_extradry_extrarinse - sequence: - - service: select.select_option - data: - entity_id: select.bosch_dishwasher_selected_program - option: dishcare_dishwasher_program_quick65 - - dw_install_int_70_extradry_extrarinse: - alias: dw_install_int_70_extradry_extrarinse - sequence: - - service: select.select_option - data: - entity_id: select.bosch_dishwasher_selected_program - option: dishcare_dishwasher_program_intensiv70 - - dw_install_eco_50_extradry_extrarinse: - alias: dw_install_eco_50_extradry_extrarinse - sequence: - - service: select.select_option - data: - entity_id: select.bosch_dishwasher_selected_program - option: dishcare_dishwasher_program_eco50 - - dw_install_care: - alias: dw_install_care - sequence: - - service: select.select_option - data: - entity_id: select.bosch_dishwasher_selected_program - option: dishcare_dishwasher_program_machinecare - - automation: - - # ========================================== - # --- СБРОС ТАЙМЕРА ПРИ СТАРТЕ --- - # ========================================== - - id: dw_refresh_inp_dttm_dw - alias: "dw|refresh_inp_dttm_dw" - description: "Сброс времени отложенного старта" - mode: single - trigger: - - platform: state - entity_id: sensor.bosch_dishwasher_operation_state - from: null - to: "Run" - - platform: state - entity_id: sensor.bosch_dishwasher_operation_state - from: null - to: "DelayedStart" - action: - - service: input_datetime.set_datetime - data: - time: "00:00:00" - target: - entity_id: input_datetime.dishwasher_startinrelative - - # ========================================== - # --- УВЕДОМЛЕНИЕ О ЗАВЕРШЕНИИ И РАЗБОРЕ --- - # ========================================== - - id: ntf_tg_dw_end_wash - alias: "ntf|tg|dw|end_wash" - description: "Уведомление о завершении мойки с проверкой открытия дверцы" - mode: single - trigger: - - platform: state - entity_id: sensor.bosch_dishwasher_operation_state - from: "Run" - to: "Finished" - action: - - service: input_boolean.turn_on - target: - entity_id: input_boolean.dishwasher_needs_unloading - - - repeat: - sequence: - # Отправляем уведомление в обе группы! - - service: telegram_bot.send_message - data: - chat_id: - - -1002006010424 - - -1003233671944 - message: "✅ Мойка посуды завершена! Необходимо разобрать её." - parse_mode: html - inline_keyboard: - - '🌊 Посудомойка:/dw_control' - - '🔙 Главное меню:/menu_back, 🗑️ Прочитано:/menu_hide' - - # Ждем открытия дверцы до 3 часов - - wait_for_trigger: - - platform: state - entity_id: binary_sensor.bosch_dishwasher_door - to: "on" - timeout: "03:00:00" - continue_on_timeout: true - - # Если дверцу открыли - - choose: - - conditions: - - condition: state - entity_id: binary_sensor.bosch_dishwasher_door - state: "on" - sequence: - - delay: "00:01:00" - # Проверяем, что она всё ещё открыта (посуду разбирают) - - condition: state - entity_id: binary_sensor.bosch_dishwasher_door - state: "on" - - service: telegram_bot.send_message - data: - chat_id: - - -1002006010424 - - -1003233671944 - message: "🎉 Посудомойка успешно разобрана!" - parse_mode: html - - service: input_boolean.turn_off - target: - entity_id: input_boolean.dishwasher_needs_unloading - until: - - condition: state - entity_id: binary_sensor.bosch_dishwasher_door - state: "on" - for: - minutes: 1 - - # ========================================== - # --- КОМАНДА: УСТАНОВКА ТАЙМЕРА (/time) --- - # ========================================== - - id: dw_install_time_startinrelative - alias: "dw|install_time_startinrelative" - mode: single - trigger: - - platform: event - event_type: telegram_command - event_data: - command: "/time" - - platform: event - event_type: telegram_command - event_data: - command: "/time@ha_dddennnisss_bot" - action: - - choose: - # Вариант 1: формат HH:MM (например /time 14:30) - - conditions: > - {{ trigger.event.data.args is defined and - trigger.event.data.args | length > 0 and - ':' in trigger.event.data.args[0] }} - sequence: - - variables: - time_parts: "{{ trigger.event.data.args[0].split(':') }}" - - service: input_datetime.set_datetime - data: - time: "{{ '%02d:%02d:00' | format(time_parts[0] | int, time_parts[1] | int) }}" - target: - entity_id: input_datetime.dishwasher_startinrelative - - service: telegram_bot.send_message - data: - chat_id: "{{ trigger.event.data.chat_id }}" - message: "✅ Отложенный запуск через {{ '%02d:%02d' | format(time_parts[0] | int, time_parts[1] | int) }}" - parse_mode: html - inline_keyboard: - - '▶️ Старт программы:/toggle_dw_start, ❌ Сброс пуска:/toggle_dw_delay_clear' - - '🔙 Меню:/menu_back, 🌊 Посудомойка:/dw_control' - - # Вариант 2: только минуты (например /time 45) - - conditions: > - {{ trigger.event.data.args is defined and - trigger.event.data.args | length > 0 and - trigger.event.data.args[0] | int(default=0) > 0 and - ':' not in trigger.event.data.args[0] }} - sequence: - - variables: - minutes_only: "{{ trigger.event.data.args[0] | int }}" - target_hour: "{{ (minutes_only // 60) % 24 }}" - target_minute: "{{ minutes_only % 60 }}" - - service: input_datetime.set_datetime - data: - time: "{{ '%02d:%02d:00' | format(target_hour, target_minute) }}" - target: - entity_id: input_datetime.dishwasher_startinrelative - - service: telegram_bot.send_message - data: - chat_id: "{{ trigger.event.data.chat_id }}" - message: "✅ Отложенный запуск через {{ '%02d:%02d' | format(target_hour, target_minute) }}" - parse_mode: html - inline_keyboard: - - '▶️ Старт программы:/toggle_dw_start, ❌ Сброс пуска:/toggle_dw_delay_clear' - - '🔙 Меню:/menu_back, 🌊 Посудомойка:/dw_control' - - # Ошибка: неверный формат - default: - - service: telegram_bot.send_message - data: - chat_id: "{{ trigger.event.data.chat_id }}" - message: "⚠️ Укажите время в правильном формате:\n/time 14:30 (часы:минуты)\nили\n/time 45 (только минуты)" - parse_mode: html - - # ========================================== - # --- УВЕДОМЛЕНИЕ: МАЛО СОЛИ --- - # ========================================== - - id: ntf_tg_dw_salt_off - alias: "ntf|tg|dw_salt_off" - description: "Каждые 6 часов уведомлять, если соль закончилась" - trigger: - - platform: time_pattern - hours: "/6" - condition: - - condition: state - entity_id: sensor.bosch_dishwasher_salt - state: "nearly_empty" - action: - - service: telegram_bot.send_message - data: - chat_id: - - -1002006010424 - - -1003233671944 - parse_mode: html - message: | - 🧂❌ Внимание! Соль в посудомоечной машине почти закончилась. - Пожалуйста, пополните резервуар как можно скорее. - inline_keyboard: - - '🔙 Главное меню:/menu_back, 🗑️ Прочитано:/menu_hide' \ No newline at end of file diff --git a/includes/packages/fun.yaml b/includes/packages/fun.yaml deleted file mode 100644 index e0ac57f..0000000 --- a/includes/packages/fun.yaml +++ /dev/null @@ -1,202 +0,0 @@ -fun: - -####################Таймеры############################### - timer: - vent_work: - name: Вытяжка в ванной – время работы - duration: "00:20:00" - - vent_cooldown: - name: Вытяжка в ванной – время отдыха - duration: "01:00:00" - -####################Автоматизации############################### - - automation: - - - alias: Вытяжка в ванной – умное включение - mode: single - trigger: - - platform: numeric_state - entity_id: sensor.datchik_temperatury_i_vlazhnosti_vanna_humidity - above: 50 - - - platform: state - entity_id: binary_sensor.datchik_prisutstviia_vannaia_presence - to: "on" - for: "00:10:00" - - condition: - - condition: state - entity_id: timer.vent_cooldown - state: "idle" - - - condition: or - conditions: - # Лето и влажность > 50 - - condition: and - conditions: - - condition: template - value_template: "{{ now().month in [6,7,8] }}" - - condition: numeric_state - entity_id: sensor.datchik_temperatury_i_vlazhnosti_vanna_humidity - above: 50 - - # Не лето и влажность > 60 - - condition: and - conditions: - - condition: template - value_template: "{{ now().month not in [6,7,8] }}" - - condition: numeric_state - entity_id: sensor.datchik_temperatury_i_vlazhnosti_vanna_humidity - above: 60 - - # Или присутствие - - condition: state - entity_id: binary_sensor.datchik_prisutstviia_vannaia_presence - state: "on" - - action: - - service: switch.turn_on - target: - entity_id: switch.rele_zerkalo_i_ventiliatsiia_l2 - - - alias: Вытяжка в ванной – старт таймера при включении - mode: restart - trigger: - - platform: state - entity_id: switch.rele_zerkalo_i_ventiliatsiia_l2 - to: "on" - - action: - - service: timer.start - target: - entity_id: timer.vent_work - - - alias: Вытяжка в ванной – выключение и cooldown - mode: restart - trigger: - - platform: event - event_type: timer.finished - event_data: - entity_id: timer.vent_work - - action: - - service: switch.turn_off - target: - entity_id: switch.rele_zerkalo_i_ventiliatsiia_l2 - - - service: timer.start - target: - entity_id: timer.vent_cooldown - - - - alias: Вытяжка в ванной – периодическая проверка влажности - mode: single - trigger: - # После перезапуска Home Assistant - - platform: homeassistant - event: start - - # Периодическая проверка каждые 5 минут - - platform: time_pattern - minutes: "/5" - - condition: - # Вентиляция сейчас выключена - - condition: state - entity_id: switch.rele_zerkalo_i_ventiliatsiia_l2 - state: "off" - - # Таймер отдыха закончился - - condition: state - entity_id: timer.vent_cooldown - state: "idle" - - # Влажность выше порога по сезонам - - condition: or - conditions: - - # Лето → >50% - - condition: and - conditions: - - condition: template - value_template: "{{ now().month in [6,7,8] }}" - - condition: numeric_state - entity_id: sensor.datchik_temperatury_i_vlazhnosti_vanna_humidity - above: 50 - - # Не лето → >60% - - condition: and - conditions: - - condition: template - value_template: "{{ now().month not in [6,7,8] }}" - - condition: numeric_state - entity_id: sensor.datchik_temperatury_i_vlazhnosti_vanna_humidity - above: 60 - - action: - - service: switch.turn_on - target: - entity_id: switch.rele_zerkalo_i_ventiliatsiia_l2 - - - - alias: Вытяжка в ванной – резкий рост влажности - mode: restart - - trigger: - - platform: state - entity_id: sensor.datchik_temperatury_i_vlazhnosti_vanna_humidity - - condition: - - condition: template - value_template: > - {% if trigger.from_state is none or trigger.to_state is none %} - false - {% else %} - {% set from_s = trigger.from_state.state %} - {% set to_s = trigger.to_state.state %} - {% if from_s in ['unknown','unavailable','none',''] - or to_s in ['unknown','unavailable','none',''] %} - false - {% else %} - {{ (to_s | float - from_s | float) >= 15 }} - {% endif %} - {% endif %} - - action: - - choose: - - # Вытяжка уже работает → +10 минут - - conditions: - - condition: state - entity_id: switch.rele_zerkalo_i_ventiliatsiia_l2 - state: "on" - sequence: - - variables: - remaining: "{{ state_attr('timer.vent_work','remaining') }}" - - - service: timer.start - target: - entity_id: timer.vent_work - data: - duration: > - {% if remaining is none %} - 00:10:00 - {% else %} - {{ (as_timedelta(remaining) + timedelta(minutes=10)) }} - {% endif %} - - # Вытяжка выключена → включить на 20 минут (игнор cooldown) - default: - - service: switch.turn_on - target: - entity_id: switch.rele_zerkalo_i_ventiliatsiia_l2 - - - service: timer.start - target: - entity_id: timer.vent_work - data: - duration: "00:20:00" - - diff --git a/includes/packages/intercom.yaml* b/includes/packages/intercom.yaml* deleted file mode 100644 index ae77f62..0000000 --- a/includes/packages/intercom.yaml* +++ /dev/null @@ -1,156 +0,0 @@ -intercom: - shell_command: - update_goodline_token: "python3 /config/scripts/update_goodline_token.py {{ code }}" - open_goodline_door: 'curl -s -X GET "https://api-video.goodline.info/ords/mobile/onlinedozor/gates/Kemerovo_Serebryanyy_bor_4a_Podezd_1/open-door" -H "token: $(cat /config/scripts/goodline_token.txt)" -H "origin: https://video.online-dozor.ru" -H "referer: https://video.online-dozor.ru/" -H "user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" -H "accept: application/json, text/plain, */*"' - - command_line: - - sensor: - name: "Goodline Camera URL" - unique_id: goodline_cam_url - command: "python3 /config/scripts/get_camera.py" - scan_interval: 300 - - template: - - sensor: - - name: "Расстояние до подъезда" - unique_id: distance_to_intercom - unit_of_measurement: "м" - state: > - {{ distance('device_tracker.google_maps_108918666344169166438', 'zone.intercom') | multiply(1000) | round(0) }} - icon: mdi:map-marker-distance - - - name: "Дистанция (Телефон)" - unique_id: distance_to_intercom_phone - unit_of_measurement: "м" - state: > - {{ distance('device_tracker.cph2573_2', 'zone.intercom') | multiply(1000) | round(0) }} - icon: mdi:cellphone-marker - - input_boolean: - intercom_auto_open: - name: "Автооткрытие двери" - icon: mdi:door-open - - automation: - # ========================================== - # 1. ПЕРЕХВАТ СМС (Работает ВСЕГДА) - # ========================================== - - id: catch_onlinedozor_sms_webhook - alias: "sms|catch_onlinedozor_code" - mode: single - trigger: - - platform: webhook - webhook_id: "goodline_sms_hook" - allowed_methods: [POST] - local_only: true - action: - - variables: - sms_code: "{{ trigger.json.text | regex_findall_index('[0-9]{4}') }}" - - service: telegram_bot.send_message - data: - chat_id: -1002006010424 - message: "🔑 Код: {{ sms_code }}" - - service: shell_command.update_goodline_token - data: - code: "{{ sms_code }}" - - # ========================================== - # 2. ВКЛЮЧЕНИЕ ТОЧНОГО GPS (Только если Авто ВКЛ) - # ========================================== - - id: turn_on_high_accuracy_at_zone - alias: "gps|turn_on_at_home_high_zone" - trigger: - - platform: zone - entity_id: device_tracker.cph2573_2 - zone: zone.gps_home_high - event: enter - - platform: state - entity_id: input_boolean.intercom_auto_open - to: "on" - condition: - - condition: state - entity_id: input_boolean.intercom_auto_open - state: "on" - - condition: zone - entity_id: device_tracker.cph2573_2 - zone: zone.gps_home_high - - condition: template - value_template: "{{ not is_state('binary_sensor.oneplus12_high_accuracy_mode', 'on') }}" - action: - - service: notify.mobile_app_oneplus12 - data: - message: "command_high_accuracy_mode" - data: - command: "turn_on" - ttl: 0 - priority: high - - # ========================================== - # 3. АВТООТКРЫТИЕ ДВЕРИ (Тройное с кнопками) - # ========================================== - - id: auto_open_at_intercom_zone - alias: "intercom|open_at_zone" - trigger: - - platform: zone - entity_id: device_tracker.cph2573_2 - zone: zone.intercom - event: enter - condition: - - condition: state - entity_id: input_boolean.intercom_auto_open - state: "on" - - condition: template - value_template: "{{ this.attributes.last_triggered == none or (now() - this.attributes.last_triggered).total_seconds() > 300 }}" - action: - # Цикл открытия двери: 3 раза с интервалом 7 секунд - - repeat: - count: 7 - sequence: - - service: shell_command.open_goodline_door - # Ждем 7 секунд перед следующим открытием (кроме последнего раза) - - condition: template - value_template: "{{ repeat.index < 3 }}" - - delay: - seconds: 5 - - # Уведомление с кнопками управления - - service: telegram_bot.send_message - data: - target: -1002006010424 - parse_mode: html - message: "🏠 Зона INTERCOM достигнута!\nДверь открыта 3 раза с интервалом 7 сек." - inline_keyboard: - - "🔔 Домофон:/intercom_menu" - - "🏠 Главное меню:/menu_back" - - # Выключение точного GPS для экономии заряда - - service: notify.mobile_app_oneplus12 - data: - message: "command_high_accuracy_mode" - data: - command: "turn_off" - ttl: 0 - priority: high - - # ========================================== - # 4. ВЫКЛЮЧЕНИЕ GPS ПРИ ВЫХОДЕ (Работает ВСЕГДА для экономии заряда) - # ========================================== - - id: turn_off_high_accuracy_on_leave - alias: "gps|turn_off_on_leave" - trigger: - - platform: zone - entity_id: device_tracker.cph2573_2 - zone: zone.gps_home_high - event: leave - condition: - - condition: state - entity_id: binary_sensor.oneplus12_high_accuracy_mode - state: "on" - action: - - service: notify.mobile_app_oneplus12 - data: - message: "command_high_accuracy_mode" - data: - command: "turn_off" - ttl: 0 - priority: high \ No newline at end of file diff --git a/includes/packages/notifications_telegram.yaml b/includes/packages/notifications_telegram.yaml deleted file mode 100644 index db23eaa..0000000 --- a/includes/packages/notifications_telegram.yaml +++ /dev/null @@ -1,659 +0,0 @@ -notifications_telegram: - -#таймеры для уведомлений - #стиралка - timer: - timer_cool_washer: - name: "Таймер времени охлаждения белья в стиралке" - duration: '04:00:00' - - - automation: - -#автоматизация таймеров для уведомлений - #стиралка - - alias: tmr|wshr|cool_duration_on - description: Запуск таймера продолжительности охлаждения белья - triggers: - - trigger: state - entity_id: - - sensor.stiralnaia_mashina_s_gorizontalnoi_zagruzkoi_run_state - from: Завершено - to: Охлаждение - conditions: [] - actions: - - action: timer.start - metadata: {} - data: {} - target: - entity_id: timer.timer_cool_washer - mode: single - - - alias: tmr|wshr|cool_duration_off - description: Остановить таймер продолжительности охлаждения белья - triggers: - - trigger: state - entity_id: - - sensor.stiralnaia_mashina_s_gorizontalnoi_zagruzkoi_run_state - from: Охлаждение - to: null - conditions: [] - actions: - - action: timer.finish - metadata: {} - data: {} - target: - entity_id: timer.timer_cool_washer - mode: single - - -################################################################################ -#home_assistant - - - id: ntf|ha_start_message - alias: ntf|ha_start_message - initial_state: true - trigger: - - platform: homeassistant - event: start - action: - - delay: - hours: 0 - minutes: 1 - seconds: 15 - milliseconds: 0 - - action: telegram_bot.send_message - data: - # ЗАМЕНЕНО: target -> chat_id - chat_id: -1002006010424 - message: | - {{"\U0001F567"}} Зафиксирован запуск HA в {{ states('sensor.time') }} {{"\U0001F567"}} - - {{'\U0001F30D'}}Состояние proxmox: - - {{'\U0001F321'}}CPU | {{'\U000023EB'}}CPU | {{'\U0001F4DD'}} RAM - {{ states ('sensor.proxmox_cpu_temperature') }} {{"\U00002103"}} | {{ states ('sensor.node_pr_cpu_used') | round(2)}} % | {{ states ('sensor.node_pr_memory_used') | round(2) }} GB - {{'\U0001F4BD'}}Disk |{{'\U000023F1'}}UpTime - {{ states ('sensor.node_pr_disk_used_percentage') | round(2) }} % | {% set s = (as_timestamp (now()) -as_timestamp(states('sensor.node_pr_last_boot')))|int(0) %}{{ '{:d}д {:02d}:{:02d}'.format (s // 86400, s % 86400 // 3600, s % 3600 // 60, s % 60) }} - {{"\U0001F4BF"}}Smb | {{"\U0001F4FA"}}Win | {{"\U0001F4FA"}}lmp-trcr | {{"\U0001F4FA"}}ngnix - {{ states ('binary_sensor.lxc_docker_101_status') }}|{{ states ('binary_sensor.qemu_wni10forjob_105_status') }}|{{ states ('binary_sensor.qemu_lampa_traccar_102_status') }}|{{ states ('binary_sensor.lxc_nginxproxymanager_108_status') }} - inline_keyboard: - - '{{''\U000021A9''}} Главное меню:/menu_back , {{''\U000021AA''}} Proxmox:/prxmx_control' - - '{{''\U0001F5D1''}} Прочитано:/menu_hide' - - - - id: ntf|send_auto_weather - alias: ntf|send_auto_weather - initial_state: true - trigger: - - platform: time - at: "07:20:00" - - platform: time - at: "17:15:00" - enabled: true - condition: - - condition: time - weekday: - - mon - - tue - - wed - - thu - - fri - action: - - service: telegram_bot.send_message - data: - target: [6265196444, 102879274] - message: | - {{"\U0001F308"}} Погода: - - {{"\U0001FA9F"}}За окном: {%- set current = states('sensor.openweathermap_weather_code')|int %} {%- set conditions={'Туман \U0001F32B': [701, 741], 'Гроза \U0001F329': [210, 211, 212, 221], 'Дождь/Гроза \U000026C8': [200, 201, 202, 230, 231, 232], 'Облачно \U000026C5': [801, 802, 803, 804], 'Дождь \U00002614': [504, 314, 502, 503, 522, 300, 301, 302, 310, 311, 312, 313, 500, 501, 520, 521, 906], 'Снег \U00002744': [600, 601, 602, 611, 612, 620, 621, 622], 'Снег с дождём \U00002614\U00002744': [511, 615, 616], 'Ясно \U00002600': [800], 'Ветер \U0001F4A8': [905, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961], 'Внимание \U000026A0': [711, 721, 731, 751, 761, 762, 771, 900, 901, 962, 903, 904] } %} {%- for condition, value in conditions.items() %} {%- if current in value %} {{- " "+condition}} {%- endif %} {%- endfor %} - {{"\U0001F321"}}Температура: {{- " "+state_attr('weather.openweathermap','temperature')|string }} {{"\U00002103"}} - {{"\U0001F4A8"}}Ветер: {{ state_attr('weather.openweathermap', 'wind_speed') | float }} км/ч {%- if state_attr('weather.openweathermap', 'wind_speed') | float < 1 %} - Штиль {%- elif state_attr('weather.openweathermap', 'wind_speed') | float < 5 %} - Тихий {%- elif state_attr('weather.openweathermap', 'wind_speed') | float < 11 %} - Легкий {%- elif state_attr('weather.openweathermap', 'wind_speed') | float< 19 %} - Слабый {%- elif state_attr('weather.openweathermap', 'wind_speed') | float < 28 %} - Умеренный {%- elif state_attr('weather.openweathermap','wind_speed') | float < 38 %} - Свежий {%- elif state_attr('weather.openweathermap', 'wind_speed') | float < 49 %} - Сильный {%- elif state_attr('weather.openweathermap', 'wind_speed') | float < 61 %} - Крепкий {%- elif state_attr('weather.openweathermap', 'wind_speed') |float < 74 %} - Очень крепкий {%- elif state_attr('weather.openweathermap', 'wind_speed') | float < 88 %} - Шторм {%- elif state_attr('weather.openweathermap', 'wind_speed') | float < 102 %} - Сильный шторм {%- elif state_attr('weather.openweathermap', 'wind_speed') |float < 117 %} - Жестокий шторм {%- elif state_attr('weather.openweathermap', 'wind_speed') | float > 117 %} - Ураган {%- endif %} - ⚠ PM10: {{states ('sensor.narodmon_particulate_matter')}} мкг/м - - ⌚ Почасовой прогноз: - - {{state_attr('sensor.forecast_hour','datetime0')|as_timestamp()|timestamp_custom('%d.%m|%H:%M')}} - {% set c = state_attr('sensor.forecast_hour','condition0') %} - {%- if c == 'clear-night' %}🌟 - {%- elif c == 'cloudy' %}☁️ - {%- elif c == 'exceptional' %}⚠️ - {%- elif c == 'fog' %}🌫 - {%- elif c == 'hail' %}☄ - {%- elif c == 'lightning' %}⚡️ - {%- elif c == 'lightning-rainy' %}⛈ - {%- elif c == 'partlycloudy' %}⛅️ - {%- elif c == 'pouring' %}⛈ - {%- elif c == 'rainy' %}☔ - {%- elif c == 'snowy' %}❄️ - {%- elif c == 'snowy-rainy' %}❄️/☔ С - {%- elif c == 'sunny' %}☀️ - {%- elif c == 'windy' %}💨 - {%- else%} Не определено {%endif%} {{state_attr('sensor.forecast_hour','temperature0')}}°C, {{state_attr('sensor.forecast_hour','wind_speed0')}} км/ч, ☔ {{state_attr('sensor.forecast_hour','precipitation_probability0')}} % - {{state_attr('sensor.forecast_hour','datetime1')|as_timestamp()|timestamp_custom('%d.%m|%H:%M')}} - {% set c = state_attr('sensor.forecast_hour','condition1') %} - {%- if c == 'clear-night' %}🌟 - {%- elif c == 'cloudy' %}☁️ - {%- elif c == 'exceptional' %}⚠️ - {%- elif c == 'fog' %}🌫 - {%- elif c == 'hail' %}☄ - {%- elif c == 'lightning' %}⚡️ - {%- elif c == 'lightning-rainy' %}⛈ М - {%- elif c == 'partlycloudy' %}⛅️ - {%- elif c == 'pouring' %}⛈ - {%- elif c == 'rainy' %}☔ - {%- elif c == 'snowy' %}❄️ - {%- elif c == 'snowy-rainy' %}❄️/☔ Сн - {%- elif c == 'sunny' %}☀️ - {%- elif c == 'windy' %}💨 - {%- else%} Не определено {%endif%} {{state_attr('sensor.forecast_hour','temperature1')}}°C, {{state_attr('sensor.forecast_hour','wind_speed1')}} км/ч, ☔ {{state_attr('sensor.forecast_hour','precipitation_probability1')}} % - {{state_attr('sensor.forecast_hour','datetime2')|as_timestamp()|timestamp_custom('%d.%m|%H:%M')}} - {% set c = state_attr('sensor.forecast_hour','condition2') %} - {%- if c == 'clear-night' %}🌟 - {%- elif c == 'cloudy' %}☁️ - {%- elif c == 'exceptional' %}⚠️ - {%- elif c == 'fog' %}🌫 - {%- elif c == 'hail' %}☄ - {%- elif c == 'lightning' %}⚡️ - {%- elif c == 'lightning-rainy' %}⛈ М - {%- elif c == 'partlycloudy' %}⛅️ - {%- elif c == 'pouring' %}⛈ - {%- elif c == 'rainy' %}☔ - {%- elif c == 'snowy' %}❄️ - {%- elif c == 'snowy-rainy' %}❄️/☔ Сн - {%- elif c == 'sunny' %}☀️ - {%- elif c == 'windy' %}💨 - {%- else%} Не определено {%endif%} {{state_attr('sensor.forecast_hour','temperature2')}}°C, {{state_attr('sensor.forecast_hour','wind_speed2')}} км/ч, ☔ {{state_attr('sensor.forecast_hour','precipitation_probability2')}} % - {{state_attr('sensor.forecast_hour','datetime3')|as_timestamp()|timestamp_custom('%d.%m|%H:%M')}} - {% set c = state_attr('sensor.forecast_hour','condition3') %} - {%- if c == 'clear-night' %}🌟 - {%- elif c == 'cloudy' %}☁️ - {%- elif c == 'exceptional' %}⚠️ - {%- elif c == 'fog' %}🌫 - {%- elif c == 'hail' %}☄ - {%- elif c == 'lightning' %}⚡️ - {%- elif c == 'lightning-rainy' %}⛈ - {%- elif c == 'partlycloudy' %}⛅️ - {%- elif c == 'pouring' %}⛈ - {%- elif c == 'rainy' %}☔ - {%- elif c == 'snowy' %}❄️ - {%- elif c == 'snowy-rainy' %}❄️/☔ - {%- elif c == 'sunny' %}☀️ - {%- elif c == 'windy' %}💨 - {%- else%} Не определено {%endif%} {{state_attr('sensor.forecast_hour','temperature3')}}°C, {{state_attr('sensor.forecast_hour','wind_speed3')}} км/ч, ☔ {{state_attr('sensor.forecast_hour','precipitation_probability3')}} % - {{state_attr('sensor.forecast_hour','datetime4')|as_timestamp()|timestamp_custom('%d.%m|%H:%M')}} - {% set c = state_attr('sensor.forecast_hour','condition4') %} - {%- if c == 'clear-night' %}🌟 - {%- elif c == 'cloudy' %}☁️ - {%- elif c == 'exceptional' %}⚠️ - {%- elif c == 'fog' %}🌫 - {%- elif c == 'hail' %}☄ - {%- elif c == 'lightning' %}⚡️ - {%- elif c == 'lightning-rainy' %}⛈ и - {%- elif c == 'partlycloudy' %}⛅️ - {%- elif c == 'pouring' %}⛈ - {%- elif c == 'rainy' %}☔ - {%- elif c == 'snowy' %}❄️ - {%- elif c == 'snowy-rainy' %}❄️/☔ - {%- elif c == 'sunny' %}☀️ - {%- elif c == 'windy' %}💨 - {%- else%} Не определено {%endif%} {{state_attr('sensor.forecast_hour','temperature4')}}°C, {{state_attr('sensor.forecast_hour','wind_speed4')}} км/ч, ☔ {{state_attr('sensor.forecast_hour','precipitation_probability4')}} % - {{state_attr('sensor.forecast_hour','datetime5')|as_timestamp()|timestamp_custom('%d.%m|%H:%M')}} - {% set c = state_attr('sensor.forecast_hour','condition5') %} - {%- if c == 'clear-night' %}🌟 - {%- elif c == 'cloudy' %}☁️ - {%- elif c == 'exceptional' %}⚠️ - {%- elif c == 'fog' %}🌫 - {%- elif c == 'hail' %}☄ - {%- elif c == 'lightning' %}⚡️ - {%- elif c == 'lightning-rainy' %}⛈ - {%- elif c == 'partlycloudy' %}⛅️ - {%- elif c == 'pouring' %}⛈ - {%- elif c == 'rainy' %}☔ - {%- elif c == 'snowy' %}❄️ - {%- elif c == 'snowy-rainy' %}❄️/☔ Сн - {%- elif c == 'sunny' %}☀️ - {%- elif c == 'windy' %}💨 - {%- else%} Не определено {%endif%} {{state_attr('sensor.forecast_hour','temperature5')}}°C, {{state_attr('sensor.forecast_hour','wind_speed5')}} км/ч, ☔ {{state_attr('sensor.forecast_hour','precipitation_probability5')}} % - {{state_attr('sensor.forecast_hour','datetime6')|as_timestamp()|timestamp_custom('%d.%m|%H:%M')}} - {% set c = state_attr('sensor.forecast_hour','condition6') %} - {%- if c == 'clear-night' %}🌟 - {%- elif c == 'cloudy' %}☁️ - {%- elif c == 'exceptional' %}⚠️ - {%- elif c == 'fog' %}🌫 - {%- elif c == 'hail' %}☄ - {%- elif c == 'lightning' %}⚡️ - {%- elif c == 'lightning-rainy' %}⛈ - {%- elif c == 'partlycloudy' %}⛅️ - {%- elif c == 'pouring' %}⛈ - {%- elif c == 'rainy' %}☔ - {%- elif c == 'snowy' %}❄️ - {%- elif c == 'snowy-rainy' %}❄️/☔ - {%- elif c == 'sunny' %}☀️ - {%- elif c == 'windy' %}💨 - {%- else%} Не определено {%endif%} {{state_attr('sensor.forecast_hour','temperature4')}}°C, {{state_attr('sensor.forecast_hour','wind_speed6')}} км/ч, ☔ {{state_attr('sensor.forecast_hour','precipitation_probability6')}} % - {{state_attr('sensor.forecast_hour','datetime7')|as_timestamp()|timestamp_custom('%d.%m|%H:%M')}} - {% set c = state_attr('sensor.forecast_hour','condition7') %} - {%- if c == 'clear-night' %}🌟 - {%- elif c == 'cloudy' %}☁️ - {%- elif c == 'exceptional' %}⚠️ - {%- elif c == 'fog' %}🌫 - {%- elif c == 'hail' %}☄ - {%- elif c == 'lightning' %}⚡️ - {%- elif c == 'lightning-rainy' %}⛈ - {%- elif c == 'partlycloudy' %}⛅️ - {%- elif c == 'pouring' %}⛈ - {%- elif c == 'rainy' %}☔ - {%- elif c == 'snowy' %}❄️ - {%- elif c == 'snowy-rainy' %}❄️/☔ С - {%- elif c == 'sunny' %}☀️ - {%- elif c == 'windy' %}💨 - {%- else%} Не определено {%endif%} {{state_attr('sensor.forecast_hour','temperature7')}}°C, {{state_attr('sensor.forecast_hour','wind_speed7')}} км/ч, ☔ {{state_attr('sensor.forecast_hour','precipitation_probability7')}} % - {{state_attr('sensor.forecast_hour','datetime8')|as_timestamp()|timestamp_custom('%d.%m|%H:%M')}} - {% set c = state_attr('sensor.forecast_hour','condition8') %} - {%- if c == 'clear-night' %}🌟 - {%- elif c == 'cloudy' %}☁️ - {%- elif c == 'exceptional' %}⚠️ - {%- elif c == 'fog' %}🌫 - {%- elif c == 'hail' %}☄ - {%- elif c == 'lightning' %}⚡️ - {%- elif c == 'lightning-rainy' %}⛈ - {%- elif c == 'partlycloudy' %}⛅️ - {%- elif c == 'pouring' %}⛈ - {%- elif c == 'rainy' %}☔ - {%- elif c == 'snowy' %}❄️ - {%- elif c == 'snowy-rainy' %}❄️/☔ - {%- elif c == 'sunny' %}☀️ - {%- elif c == 'windy' %}💨 - {%- else%} Не определено {%endif%} {{state_attr('sensor.forecast_hour','temperature8')}}°C, {{state_attr('sensor.forecast_hour','wind_speed8')}} км/ч, ☔ {{state_attr('sensor.forecast_hour','precipitation_probability8')}} % - {{state_attr('sensor.forecast_hour','datetime9')|as_timestamp()|timestamp_custom('%d.%m|%H:%M')}} - {% set c = state_attr('sensor.forecast_hour','condition9') %} - {%- if c == 'clear-night' %}🌟 - {%- elif c == 'cloudy' %}☁️ - {%- elif c == 'exceptional' %}⚠️ - {%- elif c == 'fog' %}🌫 - {%- elif c == 'hail' %}☄ - {%- elif c == 'lightning' %}⚡️ - {%- elif c == 'lightning-rainy' %}⛈ - {%- elif c == 'partlycloudy' %}⛅️ - {%- elif c == 'pouring' %}⛈ - {%- elif c == 'rainy' %}☔ - {%- elif c == 'snowy' %}❄️ - {%- elif c == 'snowy-rainy' %}❄️/☔ - {%- elif c == 'sunny' %}☀️ - {%- elif c == 'windy' %}💨 - {%- else%} Не определено {%endif%} {{state_attr('sensor.forecast_hour','temperature9')}}°C, {{state_attr('sensor.forecast_hour','wind_speed9')}} км/ч, ☔ {{state_attr('sensor.forecast_hour','precipitation_probability9')}} % - {{state_attr('sensor.forecast_hour','datetime10')|as_timestamp()|timestamp_custom('%d.%m|%H:%M')}} - {% set c = state_attr('sensor.forecast_hour','condition10') %} - {%- if c == 'clear-night' %}🌟 - {%- elif c == 'cloudy' %}☁️ - {%- elif c == 'exceptional' %}⚠️ - {%- elif c == 'fog' %}🌫 - {%- elif c == 'hail' %}☄ - {%- elif c == 'lightning' %}⚡️ - {%- elif c == 'lightning-rainy' %}⛈ - {%- elif c == 'partlycloudy' %}⛅️ - {%- elif c == 'pouring' %}⛈ - {%- elif c == 'rainy' %}☔ - {%- elif c == 'snowy' %}❄️ - {%- elif c == 'snowy-rainy' %}❄️/☔ - {%- elif c == 'sunny' %}☀️ - {%- elif c == 'windy' %}💨 - {%- else%} Не определено {%endif%} {{state_attr('sensor.forecast_hour','temperature10')}}°C, {{state_attr('sensor.forecast_hour','wind_speed10')}} км/ч, ☔ {{state_attr('sensor.forecast_hour','precipitation_probability10')}} % - {{state_attr('sensor.forecast_hour','datetime11')|as_timestamp()|timestamp_custom('%d.%m|%H:%M')}} - {% set c = state_attr('sensor.forecast_hour','condition11') %} - {%- if c == 'clear-night' %}🌟 - {%- elif c == 'cloudy' %}☁️ - {%- elif c == 'exceptional' %}⚠️ - {%- elif c == 'fog' %}🌫 - {%- elif c == 'hail' %}☄ - {%- elif c == 'lightning' %}⚡️ - {%- elif c == 'lightning-rainy' %}⛈ - {%- elif c == 'partlycloudy' %}⛅️ - {%- elif c == 'pouring' %}⛈ - {%- elif c == 'rainy' %}☔ - {%- elif c == 'snowy' %}❄️ - {%- elif c == 'snowy-rainy' %}❄️/☔ - {%- elif c == 'sunny' %}☀️ - {%- elif c == 'windy' %}💨 - {%- else%} Не определено {%endif%} {{state_attr('sensor.forecast_hour','temperature11')}}°C, {{state_attr('sensor.forecast_hour','wind_speed11')}} км/ч, ☔ {{state_attr('sensor.forecast_hour','precipitation_probability11')}} % - inline_keyboard: - - '{{"\U0001F553"}} Почасовой прогноз:/wthr_h_control, {{''\U0001F5D3''}} Ежедневный прогноз:/wthr_d_control' - - '{{''\U000021A9''}} Главное меню:/menu_back , {{''\U000021AA''}} Обновить:/wthr_control' - - '{{''\U0001F5D1''}} Прочитано:/menu_hide' - -################################################################################ -#торренты - - - - - -################################################################################ -#стиральная машина - - - - -################################################################################ -#Термопот - -################################################################################ -#Прихожая - - alias: ntf|door_open - description: "" - trigger: - - platform: state - entity_id: - - binary_sensor.e4aaec3747b2_contact - from: "off" - to: "on" - condition: - - condition: state - entity_id: binary_sensor.0x00158d000707efdf_motion - state: "off" - action: - - service: telegram_bot.send_message - metadata: {} - data: - message: "{{\"\\U0001F567\"}} Входная дверь открыта {{ states('sensor.time') }} " - inline_keyboard: - - '{{''\U000021A9''}} Главное меню:/menu_back , {{''\U0001F5D1''}} Прочитано:/menu_hide' - - - alias: ntf|door_lock - description: "" - trigger: - - platform: state - entity_id: - - binary_sensor.e4aaec3747b2_contact - from: "on" - to: "off" - condition: [] - action: - - service: telegram_bot.send_message - metadata: {} - data: - message: "{{\"\\U0001F567\"}} Входная дверь закрыта {{ states('sensor.time') }} " - - inline_keyboard: - - '{{''\U000021A9''}} Главное меню:/menu_back , {{''\U0001F5D1''}} Прочитано:/menu_hide' - - - - alias: ntf|door_open_5min - description: "" - mode: single - triggers: - - entity_id: - - binary_sensor.e4aaec3747b2_contact - from: null - to: "on" - for: - hours: 0 - minutes: 3 - seconds: 0 - trigger: state - conditions: [] - actions: - - repeat: - sequence: - - metadata: {} - data: - message: >- - {{"\U00002757"}} Входная дверь открыта больше 5 - минут{{"\U00002757"}} {{ states('sensor.time') }} - inline_keyboard: - - '{{''\U000021A9''}} Отмена уведомления:/toggle_lb_off_door' - - '{{''\U000021A9''}} Главное меню:/menu_back , {{''\U0001F5D1''}} Прочитано:/menu_hide' - action: telegram_bot.send_message - - delay: - hours: 0 - minutes: 0 - seconds: 30 - milliseconds: 0 - while: - - condition: or - conditions: - - condition: state - entity_id: binary_sensor.e4aaec3747b2_contact - state: "on" - - - - -################################################################################ -#Ванная - - - - - -################################################################################ -#ping - - #nem.dddennnisss.ru - - alias: ntf|connect_down_nem.dddennnisss.ru - description: "" - mode: single - trigger: - - platform: state - entity_id: - - binary_sensor.nem_dddennnisss_ru - from: "on" - to: "off" - for: - hours: 0 - minutes: 3 - seconds: 0 - condition: - - condition: state - entity_id: binary_sensor.day_time - state: "on" - action: - - service: telegram_bot.send_message - data: - target: - - 102879274 - inline_keyboard: - - >- - {{'\U000021A9'}} Главное меню:/menu_back , {{'\U0001F5D1'}} - Прочитано:/menu_hide - message: Пропал коннект до nem.dddennnisss.ru - - #nem.dddennnisss.ru - - alias: ntf|connect_up_nem.dddennnisss.ru - description: "" - mode: single - trigger: - - platform: state - entity_id: - - binary_sensor.nem_dddennnisss_ru - from: "off" - to: "on" - for: - hours: 0 - minutes: 3 - seconds: 0 - condition: - - condition: state - entity_id: binary_sensor.day_time - state: "on" - action: - - service: telegram_bot.send_message - data: - target: - - 102879274 - inline_keyboard: - - >- - {{'\U000021A9'}} Главное меню:/menu_back , {{'\U0001F5D1'}} - Прочитано:/menu_hide - message: Поднялся коннект до nem.dddennnisss.ru - - #176.222.54.79 - - alias: ntf|connect_down_176.222.54.79 - description: "" - mode: single - trigger: - - platform: state - entity_id: - - binary_sensor.176_222_54_79 - from: "on" - to: "off" - for: - hours: 0 - minutes: 1 - seconds: 30 - condition: - - condition: state - entity_id: binary_sensor.day_time - state: "on" - action: - - service: telegram_bot.send_message - data: - target: - - 102879274 - inline_keyboard: - - >- - {{'\U000021A9'}} Главное меню:/menu_back , {{'\U0001F5D1'}} - Прочитано:/menu_hide - message: Пропал коннект до 176.222.54.79 - - - alias: ntf|connect_up_176.222.54.79 - description: "" - mode: single - trigger: - - platform: state - entity_id: - - binary_sensor.176_222_54_79 - from: "off" - to: "on" - for: - hours: 0 - minutes: 3 - seconds: 0 - condition: - - condition: state - entity_id: binary_sensor.day_time - state: "on" - action: - - service: telegram_bot.send_message - data: - target: - - 102879274 - inline_keyboard: - - >- - {{'\U000021A9'}} Главное меню:/menu_back , {{'\U0001F5D1'}} - Прочитано:/menu_hide - message: Поднялся коннект до 176.222.54.79 - -################################################################################ -#Датчики протечки - #Обнаружена протечка - #noname датчик - - alias: ntf|water_leak_noname_on - description: "" - mode: single - triggers: - - trigger: state - entity_id: - - binary_sensor.0xa4c1386278c84377_water_leak - from: "off" - to: "on" - conditions: [] - actions: - - action: telegram_bot.send_message - data: - target: - - 102879274 - inline_keyboard: - - >- - {{'\U000021A9'}} Главное меню:/menu_back , {{'\U0001F5D1'}} - Прочитано:/menu_hide - message: Обнаружена протечка! Датчик noname - - - alias: ntf|water_leak_noname_off - description: "" - mode: single - triggers: - - trigger: state - entity_id: - - binary_sensor.0xa4c1386278c84377_water_leak - from: "on" - to: "off" - for: - hours: 0 - minutes: 1 - seconds: 0 - conditions: [] - actions: - - action: telegram_bot.send_message - data: - target: - - 102879274 - inline_keyboard: - - >- - {{'\U000021A9'}} Главное меню:/menu_back , {{'\U0001F5D1'}} - Прочитано:/menu_hide - message: Протечка устранена! Датчик noname - - action: notify.mobile_app_m2007j3sg - metadata: {} - data: - title: Датчик noname - message: "Протечка устранена!" - - #aqara - - alias: ntf|water_leak_aqara_on - description: "" - mode: single - triggers: - - trigger: state - entity_id: - - binary_sensor.0x00158d000af3c1dd_water_leak - from: "off" - to: "on" - conditions: [] - actions: - - action: telegram_bot.send_message - data: - target: - - 102879274 - inline_keyboard: - - >- - {{'\U000021A9'}} Главное меню:/menu_back , {{'\U0001F5D1'}} - Прочитано:/menu_hide - message: Обнаружена протечка! Датчик aqara - - action: notify.mobile_app_m2007j3sg - metadata: {} - data: - title: Датчик aqara - message: "Обнаружена протечка!" - - - alias: ntf|water_leak_aqara_off - description: "" - mode: single - triggers: - - trigger: state - entity_id: - - binary_sensor.0x00158d000af3c1dd_water_leak - from: "on" - to: "off" - for: - hours: 0 - minutes: 1 - seconds: 0 - conditions: [] - actions: - - action: telegram_bot.send_message - data: - target: - - 102879274 - inline_keyboard: - - >- - {{'\U000021A9'}} Главное меню:/menu_back , {{'\U0001F5D1'}} - Прочитано:/menu_hide - message: Протечка устранена! Датчик aqara - - action: notify.mobile_app_m2007j3sg - metadata: {} - data: - title: Датчик aqara - message: "Протечка устранена!" - diff --git a/includes/packages/router.yaml b/includes/packages/router.yaml deleted file mode 100644 index 48b25df..0000000 --- a/includes/packages/router.yaml +++ /dev/null @@ -1,100 +0,0 @@ -router: - - shell_command: - get_connect_accept_ips: ssh -i /config/.ssh/id_rsa_openwrt -o UserKnownHostsFile=/config/.ssh/known_hosts root@192.168.1.1 /root/get_connect_accept_ips.sh - add_ip_to_connect_accept: > - ssh -i /config/.ssh/id_rsa_openwrt - -o UserKnownHostsFile=/config/.ssh/known_hosts - root@192.168.1.1 /root/add_ip_connect_accept.sh {{ ip }} - wrt_ca_on: > - ssh -i /config/.ssh/id_rsa_openwrt - -o UserKnownHostsFile=/config/.ssh/known_hosts - root@192.168.1.1 /root/on_off_connect_accept.sh on - - wrt_ca_off: > - ssh -i /config/.ssh/id_rsa_openwrt - -o UserKnownHostsFile=/config/.ssh/known_hosts - root@192.168.1.1 /root/on_off_connect_accept.sh off - - wrt_wol_sd: > - ssh -i /config/.ssh/id_rsa_openwrt - -o UserKnownHostsFile=/config/.ssh/known_hosts - root@192.168.1.1 ' - etherwake -i br-lan D8:D0:90:2B:29:93 ; - etherwake -i br-lan 00:E0:4C:75:2C:C2 ; - etherwake -i br-lan 00:E0:4C:FE:20:50 - ' - - automation: - - - alias: ntf|tg|wrt_ip - description: Получает IP-адреса из ipset connect_accept на OpenWRT и отправляет их в Telegram - trigger: - - platform: event - event_type: telegram_command - event_data: - command: '/wrt_ip' - - platform: event - event_type: telegram_command - event_data: - command: '/wrt_ip@ha_dddennnisss_bot' - action: - - service: shell_command.get_connect_accept_ips - response_variable: wrt_ips - - service: telegram_bot.send_message - data: - chat_id: "{{ trigger.event.data.chat_id }}" - message: > - connect-accept: - - {{ wrt_ips.stdout | default('Нет данных') }} - mode: single - - - alias: tg|wrt_ip_add - trigger: - platform: event - event_type: telegram_command - event_data: - command: /wrt_ip_add - action: - - variables: - chat_id: "{{ trigger.event.data.chat_id }}" - ip_arg: "{{ trigger.event.data.args | join(' ') }}" - - service: shell_command.add_ip_to_connect_accept - data: - ip: "{{ ip_arg }}" - - service: telegram_bot.send_message - data: - chat_id: "{{ trigger.event.data.chat_id }}" - message: "IP {{ ip_arg }} добавлен в connect-accept" - parse_mode: none - - - alias: tg|wrt_off_connect_accept - trigger: - platform: event - event_type: telegram_command - event_data: - command: /wrt_ca_off - action: - - variables: - chat_id: "{{ trigger.event.data.chat_id }}" - - service: shell_command.wrt_ca_off - - service: telegram_bot.send_message - data: - chat_id: "{{ trigger.event.data.chat_id }}" - message: "connect-accept отключён" - - - alias: tg|wrt_on_connect_accept - trigger: - platform: event - event_type: telegram_command - event_data: - command: /wrt_ca_on - action: - - variables: - chat_id: "{{ trigger.event.data.chat_id }}" - - service: shell_command.wrt_ca_on - - service: telegram_bot.send_message - data: - chat_id: "{{ trigger.event.data.chat_id }}" - message: "connect-accept включён" diff --git a/includes/packages/scooter.yaml b/includes/packages/scooter.yaml deleted file mode 100644 index 5452dbc..0000000 --- a/includes/packages/scooter.yaml +++ /dev/null @@ -1,304 +0,0 @@ -scooter: - - sensor: - - platform: rest - name: "Traccar Daily Distance" - resource: "https://gps.dddennnisss.ru/api/reports/summary" - headers: - Authorization: "Bearer RzBFAiEA7kYylJY3l1TFjpbLP9E38CbvtV5eIteHN-f2Urj96NgCIBF800289eJIbaiOgQ4C4Jhlc7yYM1sGR2SO2Kk1M-q5eyJ1IjoxLCJlIjoiMjAyOS0xMi0zMFQxNzowMDowMC4wMDArMDA6MDAifQ" - Content-Type: "application/json" - params: - deviceId: 1 - type: distance - from: "{{ now().replace(hour=0, minute=0, second=0, microsecond=0).isoformat() }}" - to: "{{ now().isoformat() }}" - json_attributes_path: "$[0]" - json_attributes: - - distance - - averageSpeed - - maxSpeed - - startTime - - endTime - value_template: "{{ value_json[0].distance | float / 1000 | round(2) }}" - unit_of_measurement: "км" - scan_interval: 60 - - template: - - - sensor: - - name: "Самокат Пробег Сегодня" - unique_id: "scooter_daily_distance_formatted" - state: > - {{ states('sensor.traccar_daily_distance') | float | round(2) }} - unit_of_measurement: "км" - icon: mdi:map-marker-distance - - - name: "Самокат Максимальная Скорость" - unique_id: "scooter_max_speed_kmh" - state: > - {% set max_speed_knots = state_attr('sensor.traccar_daily_distance', 'maxSpeed') | float %} - {{ (max_speed_knots * 1.852) | round(2) }} - unit_of_measurement: "км/ч" - icon: mdi:speedometer - attributes: - speed_in_knots: "{{ state_attr('sensor.traccar_daily_distance', 'maxSpeed') | round(2) }}" - calculation: "{{ state_attr('sensor.traccar_daily_distance', 'maxSpeed') | float }} узлов × 1.852 = {{ (state_attr('sensor.traccar_daily_distance', 'maxSpeed') | float * 1.852) | round(2) }} км/ч" - - - name: "Самокат Начало Поездки" - unique_id: "scooter_start_time_local" - state: > - {% set start_time = state_attr('sensor.traccar_daily_distance', 'startTime') %} - {% if start_time %} - {{ as_timestamp(start_time) | timestamp_custom('%H:%M') }} - {% else %} - Неизвестно - {% endif %} - icon: mdi:clock-start - attributes: - utc_time: "{{ state_attr('sensor.traccar_daily_distance', 'startTime') }}" - local_time: > - {% set start_time = state_attr('sensor.traccar_daily_distance', 'startTime') %} - {% if start_time %} - {{ as_timestamp(start_time) | timestamp_custom('%H:%M (%d.%m.%Y)') }} - {% endif %} - - - name: "Самокат Конец Поездки" - unique_id: "scooter_end_time_local" - state: > - {% set end_time = state_attr('sensor.traccar_daily_distance', 'endTime') %} - {% if end_time %} - {{ as_timestamp(end_time) | timestamp_custom('%H:%M') }} - {% else %} - Активно - {% endif %} - icon: mdi:clock-end - attributes: - utc_time: "{{ state_attr('sensor.traccar_daily_distance', 'endTime') }}" - local_time: > - {% set end_time = state_attr('sensor.traccar_daily_distance', 'endTime') %} - {% if end_time %} - {{ as_timestamp(end_time) | timestamp_custom('%H:%M (%d.%m.%Y)') }} - {% endif %} - - - name: "Самокат Время в Дороге" - unique_id: "scooter_trip_duration" - state: > - {% set start_time = state_attr('sensor.traccar_daily_distance', 'startTime') %} - {% set end_time = state_attr('sensor.traccar_daily_distance', 'endTime') %} - {% if start_time and end_time %} - {% set duration = (as_timestamp(end_time) - as_timestamp(start_time)) / 3600 %} - {{ duration | round(1) }} - {% else %} - 0 - {% endif %} - unit_of_measurement: "ч" - icon: mdi:timer - - - binary_sensor: - - name: "scooter_gps_data_fresh" - unique_id: scooter_gps_data_fresh - state: >- - {% set scooter_updated = now() - states.device_tracker.samokat_dddennnisss.last_updated %} - {% set you_updated = now() - states.device_tracker.google_maps_108918666344169166438.last_updated %} - {{ scooter_updated.total_seconds() < 180 and you_updated.total_seconds() < 180 }} - device_class: connectivity - attributes: - scooter_last_updated: >- - {{ (states.device_tracker.samokat_dddennnisss.last_updated + timedelta(hours=7)).strftime('%Y-%m-%d %H:%M:%S') }} - dddennnisss_last_updated: >- - {{ (states.device_tracker.google_maps_108918666344169166438.last_updated + timedelta(hours=7)).strftime('%Y-%m-%d %H:%M:%S') }} - scooter_age_seconds: >- - {{ (now() - states.device_tracker.samokat_dddennnisss.last_updated).total_seconds() | round(0) }} - dddennnisss_age_seconds: >- - {{ (now() - states.device_tracker.google_maps_108918666344169166438.last_updated).total_seconds() | round(0) }} - - - - - - input_boolean: - scooter_protection_active: - name: scooter_protection_active - initial: off - - - automation: - - alias: ntf|tg|scooter_protection_activate - id: scooter_protection_activate - mode: single - trigger: - - platform: template - value_template: >- - {% set lat1 = state_attr('device_tracker.google_maps_108918666344169166438', 'latitude') %} - {% set lon1 = state_attr('device_tracker.google_maps_108918666344169166438', 'longitude') %} - {% set lat2 = state_attr('device_tracker.samokat_dddennnisss', 'latitude') %} - {% set lon2 = state_attr('device_tracker.samokat_dddennnisss', 'longitude') %} - {% if lat1 and lon1 and lat2 and lon2 %} - {{ distance(lat1, lon1, lat2, lon2) > 0.05 }} - {% else %} - false - {% endif %} - for: - minutes: 4 - condition: - - condition: state - entity_id: input_boolean.scooter_protection_active - state: 'off' -# - condition: not -# conditions: -# - condition: state -# entity_id: device_tracker.samokat_dddennnisss -# state: 'home' - - condition: state - entity_id: binary_sensor.samokat_dddennnisss_motion - state: 'off' - for: - minutes: 2 - - condition: template - value_template: >- - {% set scooter_updated = now() - states.device_tracker.samokat_dddennnisss.last_updated %} - {% set you_updated = now() - states.device_tracker.google_maps_108918666344169166438.last_updated %} - {{ scooter_updated.total_seconds() < 180 and you_updated.total_seconds() < 180 }} - action: - - service: input_boolean.turn_on - target: - entity_id: input_boolean.scooter_protection_active - - service: telegram_bot.send_message - data: - chat_id: -1002006010424 - message: >- - ⚠️ Самокат поставлен в режим защиты! - - 📈 Скорость: {{ states('sensor.samokat_dddennnisss_speed') }} км/ч - 🏃‍♂️ Движение: {% if is_state('binary_sensor.samokat_dddennnisss_motion', 'on') %}Да{% else %}Нет{% endif %} - {% if is_state('input_boolean.scooter_protection_active', 'on') %}🔐 Включена блокировка{% else %}🔒 Отключена блокировка{% endif %} - - 🛰️ GPS данные свежие: {% if is_state('binary_sensor.scooter_gps_data_fresh', 'on') %}Да ✅{% else %}Нет ❌{% endif %} - ⏳ Геоданные самоката: {{ (state_attr('binary_sensor.scooter_gps_data_fresh', 'scooter_age_seconds') or 0) | int }} сек - ⏳ Геоданные ddd: {{ (state_attr('binary_sensor.scooter_gps_data_fresh', 'dddennnisss_age_seconds') or 0) | int }} сек - 📍 Расстояние до самоката: {{ - distance( - state_attr('device_tracker.google_maps_108918666344169166438', 'latitude'), - state_attr('device_tracker.google_maps_108918666344169166438', 'longitude'), - state_attr('device_tracker.samokat_dddennnisss', 'latitude'), - state_attr('device_tracker.samokat_dddennnisss', 'longitude') - ) | round(2) - }} км. - - - inline_keyboard: - - '🔓 Снять защиту:/sc_r_unlocked' - - '🛴 Самокат:/sc_control, ↩️ Меню:/menu_back' - - - - - id: tg|mn|scooter_protection_deactivate - alias: tg|scooter_protection_deactivate - initial_state: true - trigger: - - platform: event - event_type: telegram_callback - event_data: {} - action: - - choose: - - conditions: - - condition: template - value_template: '{{ trigger.event.data.command == "/sc_r_unlocked" }}' - sequence: - - service: input_boolean.turn_off - target: - entity_id: input_boolean.scooter_protection_active - - service: telegram_bot.answer_callback_query - data: - callback_query_id: "{{ trigger.event.data.id }}" - message: "Защита самоката снята." - show_alert: false - - service: telegram_bot.delete_message - data_template: - message_id: '{{ trigger.event.data.message.message_id }}' - chat_id: '{{ trigger.event.data.chat_id }}' - - service: telegram_bot.send_message - data: - chat_id: '{{ trigger.event.data.chat_id }}' - message: "✅ Защита самоката успешно снята." - inline_keyboard: - - '🔓 Включить защиту:/sc_r_locked' - - '{{''\U0001F6F4''}} Самокат:/sc_control, {{''\U000021A9''}} Меню:/menu_back' - - - - id: tg|mn|scooter_protection_activate - alias: tg|scooter_protection_activate - initial_state: true - trigger: - - platform: event - event_type: telegram_callback - event_data: {} - action: - - choose: - - conditions: - - condition: template - value_template: '{{ trigger.event.data.command == "/sc_r_locked" }}' - sequence: - - service: input_boolean.turn_on - target: - entity_id: input_boolean.scooter_protection_active - - service: telegram_bot.answer_callback_query - data: - callback_query_id: "{{ trigger.event.data.id }}" - message: "Защита самоката включена." - show_alert: false - - service: telegram_bot.delete_message - data_template: - message_id: '{{ trigger.event.data.message.message_id }}' - chat_id: '{{ trigger.event.data.chat_id }}' - - service: telegram_bot.send_message - data: - chat_id: '{{ trigger.event.data.chat_id }}' - message: "✅ Защита самоката успешно включена." - inline_keyboard: - - '🔓 Снять защиту:/sc_r_unlocked' - - '{{''\U0001F6F4''}} Самокат:/sc_control, {{''\U000021A9''}} Меню:/menu_back' - - - alias: ntf|tg|scooter_protection_alert - id: ntf_tg_scooter_protection_alert - mode: single - trigger: - - platform: template - value_template: > - {{ - is_state('binary_sensor.samokat_dddennnisss_motion', 'on') and - (states('sensor.samokat_dddennnisss_speed') | float > 5.0) and - is_state('input_boolean.scooter_protection_active', 'on') - }} - for: - seconds: 40 - condition: -# - condition: template -# value_template: > -# {{ (as_timestamp(now()) - as_timestamp(states.binary_sensor.samokat_dddennnisss_motion.last_changed)) > 15 }} -# - condition: template -# value_template: > -# {{ (as_timestamp(now()) - as_timestamp(states.sensor.samokat_dddennnisss_speed.last_changed)) > 15 }} - action: - - repeat: - while: - - condition: state - entity_id: input_boolean.scooter_protection_active - state: 'on' - sequence: - - service: telegram_bot.send_message - data: - chat_id: -1002006010424 - message: > - 🚨 Внимание! Самокат движется со скоростью {{ states('sensor.samokat_dddennnisss_speed') }} км/ч. - Защита активна. - inline_keyboard: - - '🔓 Снять защиту:/sc_r_unlocked' - - '{{''\U0001F6F4''}} Самокат:/sc_control, {{''\U000021A9''}} Меню:/menu_back' - - delay: '00:00:30' - - - - - - diff --git a/includes/packages/sensors.yaml b/includes/packages/sensors.yaml deleted file mode 100644 index 1786a47..0000000 --- a/includes/packages/sensors.yaml +++ /dev/null @@ -1,28 +0,0 @@ -add_sensors: - - template: - -######################## -#room - - - sensor: - - default_entity_id: sensor.all_motion - name: Движение в квартире - state: '{{ (is_state(''sensor.0xa4c13834741ffdf4_presence_state'', ''presence'') - or is_state(''sensor.0xa4c1387cda74958b_presence_state'', ''presence'') or is_state(''binary_sensor.0x00158d000707efdf_motion'', - ''on'') or is_state(''sensor.room_motion'', ''True''))}}' - - - - default_entity_id: sensor.room_motion - name: Движение в комнате - state: '{{ (is_state(''binary_sensor.54ef44e32e91_motion'', ''on'') or is_state(''binary_sensor.54ef44e327ba_motion'', - ''on'') or is_state(''binary_sensor.54ef44e45e59_motion'', ''on''))}}' - - - - default_entity_id: sensor.where_people - name: Пристуствие людей в квартире - state: '{{ is_state(''device_tracker.google_maps_108918666344169166438'', ''home'') - or is_state(''device_tracker.google_maps_118311730364158481019'', ''home'')}}' - - - \ No newline at end of file diff --git a/includes/packages/steamdeck.yaml b/includes/packages/steamdeck.yaml deleted file mode 100644 index f4e2702..0000000 --- a/includes/packages/steamdeck.yaml +++ /dev/null @@ -1,168 +0,0 @@ -steamdeck: - shell_command: - steamdeck_reboot: 'ssh -i /config/ssh/id_ed25519 -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null root@192.168.1.185 "reboot"' - steamdeck_sleep: 'ssh -i /config/ssh/id_ed25519 -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null root@192.168.1.185 "systemctl suspend"' - steamdeck_gamemode: 'ssh -i /config/ssh/id_ed25519 -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null deck@192.168.1.185 "steamos-session-select gamescope"' - steamdeck_desktop: 'ssh -i /config/ssh/id_ed25519 -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null deck@192.168.1.185 "steamos-session-select plasma-x11-persistent"' - steamdeck_mode: > - ssh -o StrictHostKeyChecking=no -i /config/ssh/id_ed25519 root@192.168.1.185 ' - if pgrep -x gamescope >/dev/null; then - echo gaming - else - echo desktop - fi - ' - - - - sensor: - - platform: rest - name: SteamDeck System Info - resource: http://192.168.1.185:5050/status - method: GET - value_template: "{{ value_json.cpu.usage_percent }}" - json_attributes: - - cpu - - memory - - disk - - temperature_c - - uptime_seconds - - os - - os_version - - hostname - scan_interval: 60 - template: - - sensor: - # CPU - - default_entity_id: sensor.steamdeck_cpu_logical - name: SteamDeck CPU Logical Cores - state: '{{ state_attr(''sensor.steamdeck_system_info'', ''cpu'')[''cores_logical'']}}' - - default_entity_id: sensor.steamdeck_cpu_physical - name: SteamDeck CPU Physical Cores - state: '{{ state_attr(''sensor.steamdeck_system_info'', ''cpu'')[''cores_physical'']}}' - - unit_of_measurement: '%' - default_entity_id: sensor.steamdeck_cpu_usage - name: SteamDeck CPU Usage - state: '{{ state_attr(''sensor.steamdeck_system_info'', ''cpu'')[''usage_percent'']| round(1) }}' - - # RAM - - unit_of_measurement: GB - default_entity_id: sensor.steamdeck_ram_total - name: SteamDeck RAM Total - state: '{{ (state_attr(''sensor.steamdeck_system_info'', ''memory'')[''total'']/ 1024**3) | round(1) }}' - - unit_of_measurement: GB - default_entity_id: sensor.steamdeck_ram_used - name: SteamDeck RAM Used - state: '{{ (state_attr(''sensor.steamdeck_system_info'', ''memory'')[''used'']/ 1024**3) | round(1) }}' - - unit_of_measurement: GB - default_entity_id: sensor.steamdeck_ram_free - name: SteamDeck RAM Free - state: '{{ (state_attr(''sensor.steamdeck_system_info'', ''memory'')[''free'']/ 1024**3) | round(1) }}' - - unit_of_measurement: '%' - default_entity_id: sensor.steamdeck_ram_usage - name: SteamDeck RAM Usage - state: '{{ state_attr(''sensor.steamdeck_system_info'', ''memory'')[''usage_percent'']| round(1) }}' - - # Внутренний диск - - unit_of_measurement: GB - default_entity_id: sensor.steamdeck_disk_internal_total - name: SteamDeck Disk Internal Total - state: '{{ (state_attr(''sensor.steamdeck_system_info'', ''disk'')[''internal''][''total'']/ 1024**3) | round(1) }}' - - unit_of_measurement: GB - default_entity_id: sensor.steamdeck_disk_internal_used - name: SteamDeck Disk Internal Used - state: '{{ (state_attr(''sensor.steamdeck_system_info'', ''disk'')[''internal''][''used'']/ 1024**3) | round(1) }}' - - unit_of_measurement: GB - default_entity_id: sensor.steamdeck_disk_internal_free - name: SteamDeck Disk Internal Free - state: '{{ (state_attr(''sensor.steamdeck_system_info'', ''disk'')[''internal''][''free'']/ 1024**3) | round(1) }}' - - unit_of_measurement: '%' - default_entity_id: sensor.steamdeck_disk_internal_usage - name: SteamDeck Disk Internal Usage - state: '{{ state_attr(''sensor.steamdeck_system_info'', ''disk'')[''internal''][''percent''] - | round(1) }}' - - # SD-карта - - unit_of_measurement: GB - default_entity_id: sensor.steamdeck_disk_sd_total - name: SteamDeck Disk SD Total - state: '{{ (state_attr(''sensor.steamdeck_system_info'', ''disk'')[''sdcard''][''total'']/ 1024**3) | round(1) }}' - - unit_of_measurement: GB - default_entity_id: sensor.steamdeck_disk_sd_used - name: SteamDeck Disk SD Used - state: '{{ (state_attr(''sensor.steamdeck_system_info'', ''disk'')[''sdcard''][''used'']/ 1024**3) | round(1) }}' - - unit_of_measurement: GB - default_entity_id: sensor.steamdeck_disk_sd_free - name: SteamDeck Disk SD Free - state: '{{ (state_attr(''sensor.steamdeck_system_info'', ''disk'')[''sdcard''][''free'']/ 1024**3) | round(1) }}' - - unit_of_measurement: '%' - default_entity_id: sensor.steamdeck_disk_sd_usage - name: SteamDeck Disk SD Usage - state: '{{ state_attr(''sensor.steamdeck_system_info'', ''disk'')[''sdcard''][''percent'']| round(1) }}' - - # Температуры - - unit_of_measurement: °C - default_entity_id: sensor.steamdeck_temp_edge - name: SteamDeck Temperature Edge - state: '{{ state_attr(''sensor.steamdeck_system_info'', ''temperature_c'')[''edge'']}}' - - unit_of_measurement: °C - default_entity_id: sensor.steamdeck_temp_composite - name: SteamDeck Temperature Composite - state: '{{ state_attr(''sensor.steamdeck_system_info'', ''temperature_c'')[''Composite'']}}' - - unit_of_measurement: °C - default_entity_id: sensor.steamdeck_temp_battery - name: SteamDeck Temperature Battery - state: '{{ state_attr(''sensor.steamdeck_system_info'', ''temperature_c'')[''BatteryTemp''] }}' - - unit_of_measurement: °C - default_entity_id: sensor.steamdeck_temp_wifi - name: SteamDeck Temperature WiFi - state: '{{ state_attr(''sensor.steamdeck_system_info'', ''temperature_c'')[''ath11k_hwmon'']}}' - - # Аптайм - - unit_of_measurement: s - default_entity_id: sensor.steamdeck_uptime_seconds - name: SteamDeck Uptime Seconds - state: '{{ state_attr(''sensor.steamdeck_system_info'', ''uptime_seconds'') |int }}' - - default_entity_id: sensor.steamdeck_uptime_human - name: SteamDeck Uptime - state: "{% set s = state_attr('sensor.steamdeck_system_info', 'uptime_seconds')| int %} {% set h = s // 3600 %} {% set m = (s % 3600) // 60 %} {% set d = h// 24 %} {% if d > 0 %}\n {{ d }}д {{ h % 24 }}ч {{ m }}м\n{% else %}\n {{h }}ч {{ m }}м\n{% endif %}" - - input_text: - telegram_message_id: - name: Telegram message ID - max: 10 - - automation: - - alias: tg|wrt_wol_steamdeck - trigger: - platform: event - event_type: telegram_command - event_data: - command: /wrt_wol_sd - action: - - variables: - chat_id: "{{ trigger.event.data.chat_id }}" - - service: shell_command.wrt_wol_sd - - service: telegram_bot.send_message - data: - chat_id: "{{ trigger.event.data.chat_id }}" - message: "steamdeck разбужен" - parse_mode: "" - - - alias: tg|mn|status_sd_update - mode: single - trigger: - - platform: time_pattern - minutes: "/1" # запуск каждые 1 минуту - action: - - service: telegram_bot.edit_message - data: - chat_id: -1002006010424 - message_id: 5767 - message: > - 🎮: {% if is_state('binary_sensor.steamdeck', 'on') %}🟢 {% else %}🔴 {% endif %} - 🖧: {{ states('sensor.qemu_haos10_5_100_cpu_used') | round(1) }}% |🌡️ {{ states('sensor.proxmox_cpu_temperature') }}°C - - - - diff --git a/includes/packages/telegramv2.yaml b/includes/packages/telegramv2.yaml deleted file mode 100644 index e770865..0000000 --- a/includes/packages/telegramv2.yaml +++ /dev/null @@ -1,2022 +0,0 @@ -telegramv2: - automation: - ## --------------------------------------------------------- - ## СТАРТОВАЯ АВТОМАТИЗАЦИЯ ГЛАВНОГО МЕНЮ (/go) - ## --------------------------------------------------------- - - id: telegram_menu_start - alias: "Вызов меню управления телеграм" - initial_state: true - trigger: - - platform: event - event_type: telegram_command - event_data: - command: "/go" - # --- ДОБАВЛЕННЫЙ ТРИГГЕР ДЛЯ ГРУППЫ --- - - platform: event - event_type: telegram_command - event_data: - command: "/go@ha_dddennnisss_bot" - action: - - service: weather.get_forecasts - continue_on_error: true - data: - type: hourly - target: - entity_id: weather.yandex_pogoda - response_variable: hourly_data - - service: telegram_bot.send_message - data: - chat_id: "{{ trigger.event.data.chat_id }}" - parse_mode: html - message: | - {%- set s = (as_timestamp(now()) - as_timestamp(states('sensor.system_monitor_last_boot'))) | int -%} - {%- set current_cond = states('weather.yandex_pogoda') -%} - {%- set weather_available = current_cond not in ['unavailable', 'unknown'] and hourly_data is defined and 'weather.yandex_pogoda' in hourly_data -%} - {%- if weather_available -%} - {%- set condition_map = {'clear': '☀️', 'partlycloudy': '🌤', 'cloudy': '☁️', 'overcast': '🌫', 'rainy': '🌧', 'pouring': '🌧', 'lightrain': '🌦', 'snowy': '🌨', 'snowyrainy': '🌨🌧', 'exceptional': '❗', 'hail': '🌨', 'lightning': '⛈', 'lightning-rainy': '⛈', 'fog': '🌫', 'windy': '💨', 'windy-variant': '💨', 'partly-cloudy-day': '🌤', 'partly-cloudy-night': '🌤', 'clear-night': '🌙', 'none': '❓'} -%} - {%- set t = state_attr('weather.yandex_pogoda', 'temperature') | default('?', true) -%} - {%- set w = state_attr('weather.yandex_pogoda', 'wind_speed') | float(0) -%} - {%- set wind_desc = 'Штиль' if w < 1 else 'Тихий' if w < 5 else 'Лёгкий' if w < 11 else 'Слабый' if w < 19 else 'Умеренный' if w < 28 else 'Свежий' if w < 38 else 'Сильный' if w < 49 else 'Крепкий' if w < 61 else 'Очень крепкий' if w < 74 else 'Шторм' if w < 88 else 'Сильный шторм' if w < 102 else 'Жестокий шторм' if w < 117 else 'Ураган' -%} - {%- set weather_text = '🌍 Погода: 🌡️ ' ~ t ~ '° - ' ~ condition_map.get(current_cond, '❓') ~ '\n💨 ' ~ w ~ ' км/ч — ' ~ wind_desc -%} - {%- if hourly_data['weather.yandex_pogoda'].forecast is defined -%} - {%- set ns = namespace(f_list=[]) -%} - {%- for hour in hourly_data['weather.yandex_pogoda'].forecast[:3] -%} - {%- set ns.f_list = ns.f_list + [hour.datetime.strftime("%H:%M") ~ ' ' ~ (hour.temperature | round(0)) ~ '° ' ~ condition_map.get(hour.condition, '☁️')] -%} - {%- endfor -%} - {%- set weather_text = weather_text ~ '\n🕒 ' ~ ns.f_list | join(' | ') -%} - {%- endif -%} - {%- else -%} - {%- set weather_text = '🌍 Погода: ⚠️ Данные погоды временно недоступны' -%} - {%- endif -%} - 🔧 HA: ⚙️ {{ states('sensor.qemu_haos10_5_100_cpu_used') | round(1) }}% | 💾 {{ states('sensor.qemu_haos10_5_100_memory_used_percentage') | round(1) }}% | 🌡️ {{ states('sensor.proxmox_cpu_temperature') }}°C | ⏱️ {{ s // 86400 }}d {{ '%02d:%02d' % ((s % 86400) // 3600, (s % 3600) // 60) }} - - 🚪 Дверь: {% if is_state('binary_sensor.e4aaec3747b2_contact', 'off') %}закрыта{% else %}открыта{% endif %} - 🏡 Дома: {% set denis_home = is_state('device_tracker.google_maps_108918666344169166438', 'home') %}{% set lena_home = is_state('device_tracker.google_maps_118311730364158481019', 'home') %}{% if denis_home and lena_home %}Денис и Лена{% elif denis_home %}Денис{% elif lena_home %}Лена{% else %}Все ушли{% endif %} - 🚶 Присутствие: {% if not is_state('sensor.room_motion', 'False') %}Зал✔ {% endif %}{% if is_state('binary_sensor.datchik_prisutstviia_kukhnia_presence', 'on') %}Кухня✔ {% endif %}{% if is_state('binary_sensor.datchik_prisutstviia_vannaia_presence', 'on') %}Ванна✔ {% endif %}{% if is_state('binary_sensor.0x00158d000707efdf_motion', 'on') %}Коридор✔{% endif %} - 🌡️ {{ states('sensor.a4c1387695b9_temperature') }}°C | 💧 {{ states('sensor.a4c1387695b9_humidity') }}% - - 🍽️: {% set dw_status = states('sensor.bosch_dishwasher_operation_state') %}{% set dw_salt = states('sensor.bosch_dishwasher_salt') %}{% if dw_salt == 'full' %}{% if dw_status == 'Ready' %}{% if states('input_datetime.dishwasher_startinrelative') == '00:00:00' %}{% if is_state('input_boolean.dishwasher_needs_unloading', 'on') %}Нужно разобрать посуду{% else %}Ожидание{% endif %}{% else %}Отложенный запуск: {{ states('input_datetime.dishwasher_startinrelative') }}{% endif %}{% elif dw_status == 'Run' %}✅ Выполнено: {{ states('sensor.bosch_dishwasher_program_progress') }}%{% else %}ℹ️ {{ dw_status }}{% endif %}{% else %}⚠️ Проверь соль!{% endif %} - 👔: {% if is_state('binary_sensor.stiralnaia_mashina_s_gorizontalnoi_zagruzkoi_error_state', 'on') %}❗ Ошибка стиралки ❗{% else %}{% set wm_state = states('sensor.stiralnaia_mashina_s_gorizontalnoi_zagruzkoi_run_state') %}{% if wm_state in ['Стирка', 'Ополаскивание', 'Отжим', 'Сушка'] %}Осталось: {{ state_attr('sensor.stiralnaia_mashina_s_gorizontalnoi_zagruzkoi','remain_time') }}{% elif wm_state == 'Охлаждение' %}❗ Достань бельё❗{% endif %}{% endif %} - 🌀: {% set vac = states('sensor.dreame_mc1808_044c_status') %}{% if vac == 'сухая уборка' %}Уборка: {{ state_attr('vacuum.stytj01zhm','cleaning_time') or 0 }} мин{% elif vac == 'ошибка' %}❗ Ошибка пылесоса ❗{% else %}{{ vac | capitalize }} 🔋{{ states('sensor.dreame_mc1808_044c_battery_level') }}%{% endif %}{% if is_state('sensor.vacuum_water_box', '1') %} ❗ Убери бак с водой ❗{% endif %} - {{ weather_text }} - inline_keyboard: - - '🌍 Proxmox:/prxmx_control, 🌈 Погода:/wthr_control' - - '🌀 Пылесос:/vcm_control, 🌊 Посудомойка:/dw_control' - - '🏢 Квартира:/kv_control, 🎮 SteamDeck {% if is_state("binary_sensor.steamdeck", "off") %}🔴{% else %}🟢{% endif %}:/sd_control' - - '💡 Выкл весь свет:/toggle_off_lght' - - '📍 gps:/gps_control, 🛴 Самокат:/sc_control' - - '⬇️ Торренты:/tr_control, ⚙️ Автоматизация:/au_control' - - '🔔 Домофон:/intercom_menu' - - '🔄 Обновить:/menu_back, 🗑 Прочитано:/menu_hide' - - # Автоматизация отключения света по таймеру \\ /homeassistant/includes/packages/controls_light.yaml - - ## --------------------------------------------------------- - ## КОНТРОЛЛЕР ГЛАВНОГО МЕНЮ (Обработка кнопок) - ## --------------------------------------------------------- - - id: telegram_menu_control - alias: "Главное меню управления телеграм" - initial_state: true - trigger: - - platform: event - event_type: telegram_callback - action: - - choose: - # --- КНОПКА: ЗАКРЫТЬ МЕНЮ --- - - conditions: "{{ trigger.event.data.command == '/menu_hide' }}" - sequence: - - service: telegram_bot.delete_message - data: - message_id: "{{ trigger.event.data.message.message_id }}" - chat_id: "{{ trigger.event.data.chat_id }}" - - # --- КНОПКА: ВЫКЛЮЧИТЬ СВЕТ --- - - conditions: "{{ trigger.event.data.command == '/toggle_off_lght' }}" - sequence: - - service: input_button.press - target: - entity_id: input_button.btn_vykliuchit_ves_svet - - service: telegram_bot.answer_callback_query - data: - callback_query_id: "{{ trigger.event.data.id }}" - message: "💡 Свет выключен!" - - # --- КНОПКА: ОБНОВИТЬ ГЛАВНОЕ МЕНЮ --- - - conditions: "{{ trigger.event.data.command == '/menu_back' }}" - sequence: - - service: weather.get_forecasts - continue_on_error: true - data: - type: hourly - target: - entity_id: weather.yandex_pogoda - response_variable: hourly_data - - service: telegram_bot.edit_message - data: - message_id: "{{ trigger.event.data.message.message_id }}" - chat_id: "{{ trigger.event.data.chat_id }}" - parse_mode: html - message: | - {%- set s = (as_timestamp(now()) - as_timestamp(states('sensor.system_monitor_last_boot'))) | int -%} - {%- set current_cond = states('weather.yandex_pogoda') -%} - {%- set weather_available = current_cond not in ['unavailable', 'unknown'] and hourly_data is defined and 'weather.yandex_pogoda' in hourly_data -%} - {%- if weather_available -%} - {%- set condition_map = {'clear': '☀️', 'partlycloudy': '🌤', 'cloudy': '☁️', 'overcast': '🌫', 'rainy': '🌧', 'pouring': '🌧', 'lightrain': '🌦', 'snowy': '🌨', 'snowyrainy': '🌨🌧', 'exceptional': '❗', 'hail': '🌨', 'lightning': '⛈', 'lightning-rainy': '⛈', 'fog': '🌫', 'windy': '💨', 'windy-variant': '💨', 'partly-cloudy-day': '🌤', 'partly-cloudy-night': '🌤', 'clear-night': '🌙', 'none': '❓'} -%} - {%- set t = state_attr('weather.yandex_pogoda', 'temperature') | default('?', true) -%} - {%- set w = state_attr('weather.yandex_pogoda', 'wind_speed') | float(0) -%} - {%- set wind_desc = 'Штиль' if w < 1 else 'Тихий' if w < 5 else 'Лёгкий' if w < 11 else 'Слабый' if w < 19 else 'Умеренный' if w < 28 else 'Свежий' if w < 38 else 'Сильный' if w < 49 else 'Крепкий' if w < 61 else 'Очень крепкий' if w < 74 else 'Шторм' if w < 88 else 'Сильный шторм' if w < 102 else 'Жестокий шторм' if w < 117 else 'Ураган' -%} - {%- set weather_text = '🌍 Погода: 🌡️ ' ~ t ~ '° - ' ~ condition_map.get(current_cond, '❓') ~ '\n💨 ' ~ w ~ ' км/ч — ' ~ wind_desc -%} - {%- if hourly_data['weather.yandex_pogoda'].forecast is defined -%} - {%- set ns = namespace(f_list=[]) -%} - {%- for hour in hourly_data['weather.yandex_pogoda'].forecast[:3] -%} - {%- set ns.f_list = ns.f_list + [hour.datetime.strftime("%H:%M") ~ ' ' ~ (hour.temperature | round(0)) ~ '° ' ~ condition_map.get(hour.condition, '☁️')] -%} - {%- endfor -%} - {%- set weather_text = weather_text ~ '\n🕒 ' ~ ns.f_list | join(' | ') -%} - {%- endif -%} - {%- else -%} - {%- set weather_text = '🌍 Погода: ⚠️ Данные погоды временно недоступны' -%} - {%- endif -%} - 🔧 HA: ⚙️ {{ states('sensor.qemu_haos10_5_100_cpu_used') | round(1) }}% | 💾 {{ states('sensor.qemu_haos10_5_100_memory_used_percentage') | round(1) }}% | 🌡️ {{ states('sensor.proxmox_cpu_temperature') }}°C | ⏱️ {{ s // 86400 }}d {{ '%02d:%02d' % ((s % 86400) // 3600, (s % 3600) // 60) }} - - 🚪 Дверь: {% if is_state('binary_sensor.e4aaec3747b2_contact', 'off') %}закрыта{% else %}открыта{% endif %} - 🏡 Дома: {% set denis_home = is_state('device_tracker.google_maps_108918666344169166438', 'home') %}{% set lena_home = is_state('device_tracker.google_maps_118311730364158481019', 'home') %}{% if denis_home and lena_home %}Денис и Лена{% elif denis_home %}Денис{% elif lena_home %}Лена{% else %}Все ушли{% endif %} - 🚶 Присутствие: {% if not is_state('sensor.room_motion', 'False') %}Зал✔ {% endif %}{% if is_state('binary_sensor.datchik_prisutstviia_kukhnia_presence', 'on') %}Кухня✔ {% endif %}{% if is_state('binary_sensor.datchik_prisutstviia_vannaia_presence', 'on') %}Ванна✔ {% endif %}{% if is_state('binary_sensor.0x00158d000707efdf_motion', 'on') %}Коридор✔{% endif %} - 🌡️ {{ states('sensor.a4c1387695b9_temperature') }}°C | 💧 {{ states('sensor.a4c1387695b9_humidity') }}% - - 🍽️: {% set dw_status = states('sensor.bosch_dishwasher_operation_state') %}{% set dw_salt = states('sensor.bosch_dishwasher_salt') %}{% if dw_salt == 'full' %}{% if dw_status == 'Ready' %}{% if states('input_datetime.dishwasher_startinrelative') == '00:00:00' %}{% if is_state('input_boolean.dishwasher_needs_unloading', 'on') %}Нужно разобрать посуду{% else %}Ожидание{% endif %}{% else %}Отложенный запуск: {{ states('input_datetime.dishwasher_startinrelative') }}{% endif %}{% elif dw_status == 'Run' %}✅ Выполнено: {{ states('sensor.bosch_dishwasher_program_progress') }}%{% else %}ℹ️ {{ dw_status }}{% endif %}{% else %}⚠️ Проверь соль!{% endif %} - 👔: {% if is_state('binary_sensor.stiralnaia_mashina_s_gorizontalnoi_zagruzkoi_error_state', 'on') %}❗ Ошибка стиралки ❗{% else %}{% set wm_state = states('sensor.stiralnaia_mashina_s_gorizontalnoi_zagruzkoi_run_state') %}{% if wm_state in ['Стирка', 'Ополаскивание', 'Отжим', 'Сушка'] %}Осталось: {{ state_attr('sensor.stiralnaia_mashina_s_gorizontalnoi_zagruzkoi','remain_time') }}{% elif wm_state == 'Охлаждение' %}❗ Достань бельё❗{% endif %}{% endif %} - 🌀: {% set vac = states('sensor.dreame_mc1808_044c_status') %}{% if vac == 'сухая уборка' %}Уборка: {{ state_attr('vacuum.stytj01zhm','cleaning_time') or 0 }} мин{% elif vac == 'ошибка' %}❗ Ошибка пылесоса ❗{% else %}{{ vac | capitalize }} 🔋{{ states('sensor.dreame_mc1808_044c_battery_level') }}%{% endif %}{% if is_state('sensor.vacuum_water_box', '1') %} ❗ Убери бак с водой ❗{% endif %} - {{ weather_text }} - inline_keyboard: - - '🌍 Proxmox:/prxmx_control, 🌈 Погода:/wthr_control' - - '🌀 Пылесос:/vcm_control, 🌊 Посудомойка:/dw_control' - - '🏢 Квартира:/kv_control, 🎮 SteamDeck {% if is_state("binary_sensor.steamdeck", "off") %}🔴{% else %}🟢{% endif %}:/sd_control' - - '💡 Выкл весь свет:/toggle_off_lght' - - '📍 gps:/gps_control, 🛴 Самокат:/sc_control' - - '⬇️ Торренты:/tr_control, ⚙️ Автоматизация:/au_control' - - '🔔 Домофон:/intercom_menu' - - '🔄 Обновить:/menu_back, 🗑 Прочитано:/menu_hide' - - # --- МЕНЮ: PROXMOX --- - - conditions: "{{ trigger.event.data.command == '/prxmx_control' }}" - sequence: - - service: telegram_bot.answer_callback_query - data: - callback_query_id: "{{ trigger.event.data.id }}" - message: "🔄 Обновляю статус Proxmox..." - - service: telegram_bot.edit_message - data: - message_id: "{{ trigger.event.data.message.message_id }}" - chat_id: "{{ trigger.event.data.chat_id }}" - message: >- - 🌍 Состояние Proxmox: - - 📈 CPU: {{ states('sensor.node_pr_cpu_used') | round(2) }} % - 🌡️ {{ states('sensor.proxmox_cpu_temperature') }} ℃ - 📝 RAM: {{ states('sensor.node_pr_memory_used_percentage') | round(2) }} % - 💾 Disk: {{ states('sensor.node_pr_disk_used_percentage') | round(2) }} % - 🔄 Обновления: {% if is_state('binary_sensor.node_pr_updates_packages', 'on') %} есть {% else %} нет {% endif %} - - 🔄 Обновлено: {{ now().strftime('%H:%M:%S') }} - inline_keyboard: - - '💽 HA - {% if is_state("binary_sensor.qemu_haos10_5_100_status", "off") %}🔴{% else %}🟢{% endif %}:/prxmx_ha_control' - - '💽 Samba - {% if is_state("binary_sensor.lxc_docker_101_status", "off") %}🔴{% else %}🟢{% endif %}:/prxmx_smb_control, 📺 Plex - {% if is_state("binary_sensor.lxc_plex_104_status", "off") %}🔴{% else %}🟢{% endif %}:/prxmx_plx_control' - - '🪟 Winjob - {% if is_state("binary_sensor.qemu_wni10forjob_105_status", "off") %}🔴{% else %}🟢{% endif %}:/prxmx_winjob_control' - - '🔄 Перезагрузить сервер:/toggle_prxm_rstr' - - '🔙 Назад:/menu_back, 🔄 Обновить:/prxmx_control' - - # --- МЕНЮ: WINJOB --- - - conditions: "{{ trigger.event.data.command == '/prxmx_winjob_control' }}" - sequence: - - service: telegram_bot.answer_callback_query - data: - callback_query_id: "{{ trigger.event.data.id }}" - message: "🔄 Обновляю статус Winjob..." - - service: telegram_bot.edit_message - data: - message_id: "{{ trigger.event.data.message.message_id }}" - chat_id: "{{ trigger.event.data.chat_id }}" - message: >- - 🪟 Состояние Winjob: - - 📈 CPU: {{ states('sensor.qemu_wni10forjob_105_cpu_used') | round(2) }} % - 📝 RAM: {{ states('sensor.qemu_wni10forjob_105_memory_used_percentage') | round(2) }} % - 💾 Disk: {{ states('sensor.qemu_wni10forjob_105_disk_used_percentage') | round(2) }} % - - 🔄 Обновлено: {{ now().strftime('%H:%M:%S') }} - inline_keyboard: - - '▶️ Старт:/toggle_prxm_winjob_strt, 🔄 Рестарт:/toggle_prxm_winjob_rstrt' - - '🛑 Выключить:/toggle_prxm_winjob_off' - - '🔙 Назад:/prxmx_control, 🔄 Обновить:/prxmx_winjob_control' - - # --- КНОПКИ УПРАВЛЕНИЯ WINJOB (С плавным обновлением) --- - - conditions: "{{ trigger.event.data.command == '/toggle_prxm_winjob_strt' }}" - sequence: - - service: button.press - target: - entity_id: button.qemu_wni10forjob_105_start - - service: telegram_bot.answer_callback_query - data: - callback_query_id: "{{ trigger.event.data.id }}" - message: "▶️ Winjob запускается..." - - service: telegram_bot.edit_message - data: - message_id: "{{ trigger.event.data.message.message_id }}" - chat_id: "{{ trigger.event.data.chat_id }}" - message: >- - 🪟 Состояние Winjob: - - 📈 CPU: {{ states('sensor.qemu_wni10forjob_105_cpu_used') | round(2) }} % - 📝 RAM: {{ states('sensor.qemu_wni10forjob_105_memory_used_percentage') | round(2) }} % - 💾 Disk: {{ states('sensor.qemu_wni10forjob_105_disk_used_percentage') | round(2) }} % - - ⏳ Команда отправлена: Запуск - 🔄 Обновлено: {{ now().strftime('%H:%M:%S') }} - inline_keyboard: - - '▶️ Старт:/toggle_prxm_winjob_strt, 🔄 Рестарт:/toggle_prxm_winjob_rstrt' - - '🛑 Выключить:/toggle_prxm_winjob_off' - - '🔙 Назад:/prxmx_control, 🔄 Обновить:/prxmx_winjob_control' - - - conditions: "{{ trigger.event.data.command == '/toggle_prxm_winjob_rstrt' }}" - sequence: - - service: button.press - target: - entity_id: button.qemu_wni10forjob_105_reboot - - service: telegram_bot.answer_callback_query - data: - callback_query_id: "{{ trigger.event.data.id }}" - message: "🔄 Winjob ушел в рестарт..." - - service: telegram_bot.edit_message - data: - message_id: "{{ trigger.event.data.message.message_id }}" - chat_id: "{{ trigger.event.data.chat_id }}" - message: >- - 🪟 Состояние Winjob: - - 📈 CPU: {{ states('sensor.qemu_wni10forjob_105_cpu_used') | round(2) }} % - 📝 RAM: {{ states('sensor.qemu_wni10forjob_105_memory_used_percentage') | round(2) }} % - 💾 Disk: {{ states('sensor.qemu_wni10forjob_105_disk_used_percentage') | round(2) }} % - - ⏳ Команда отправлена: Рестарт - 🔄 Обновлено: {{ now().strftime('%H:%M:%S') }} - inline_keyboard: - - '▶️ Старт:/toggle_prxm_winjob_strt, 🔄 Рестарт:/toggle_prxm_winjob_rstrt' - - '🛑 Выключить:/toggle_prxm_winjob_off' - - '🔙 Назад:/prxmx_control, 🔄 Обновить:/prxmx_winjob_control' - - - conditions: "{{ trigger.event.data.command == '/toggle_prxm_winjob_off' }}" - sequence: - - service: button.press - target: - entity_id: button.qemu_wni10forjob_105_shutdown - - service: telegram_bot.answer_callback_query - data: - callback_query_id: "{{ trigger.event.data.id }}" - message: "🛑 Winjob выключается..." - - service: telegram_bot.edit_message - data: - message_id: "{{ trigger.event.data.message.message_id }}" - chat_id: "{{ trigger.event.data.chat_id }}" - message: >- - 🪟 Состояние Winjob: - - 📈 CPU: {{ states('sensor.qemu_wni10forjob_105_cpu_used') | round(2) }} % - 📝 RAM: {{ states('sensor.qemu_wni10forjob_105_memory_used_percentage') | round(2) }} % - 💾 Disk: {{ states('sensor.qemu_wni10forjob_105_disk_used_percentage') | round(2) }} % - - ⏳ Команда отправлена: Выключение - 🔄 Обновлено: {{ now().strftime('%H:%M:%S') }} - inline_keyboard: - - '▶️ Старт:/toggle_prxm_winjob_strt, 🔄 Рестарт:/toggle_prxm_winjob_rstrt' - - '🛑 Выключить:/toggle_prxm_winjob_off' - - '🔙 Назад:/prxmx_control, 🔄 Обновить:/prxmx_winjob_control' - - # --- МЕНЮ: ПОГОДА (ГЛАВНОЕ) --- - - conditions: "{{ trigger.event.data.command == '/wthr_control' }}" - sequence: - - service: telegram_bot.answer_callback_query - data: - callback_query_id: "{{ trigger.event.data.id }}" - message: "🌤 Обновляю погоду..." - - service: telegram_bot.edit_message - data: - message_id: "{{ trigger.event.data.message.message_id }}" - chat_id: "{{ trigger.event.data.chat_id }}" - message: >- - 🌈 Текущая погода: - - 🌡️ Температура: {{ state_attr('weather.yandex_pogoda', 'temperature') }} °C - 💨 Ветер: {{ state_attr('weather.yandex_pogoda', 'wind_speed') }} км/ч - - 🔄 Обновлено: {{ now().strftime('%H:%M:%S') }} - inline_keyboard: - - '🕒 Почасовой прогноз:/wthr_h_control' - - '📆 Прогноз на неделю:/wthr_d_control' - - '🔙 Назад:/menu_back, 🔄 Обновить:/wthr_control' - - # --- МЕНЮ: ПОГОДА (ПОЧАСОВОЙ ПРОГНОЗ) --- - - conditions: "{{ trigger.event.data.command == '/wthr_h_control' }}" - sequence: - - service: telegram_bot.answer_callback_query - data: - callback_query_id: "{{ trigger.event.data.id }}" - message: "🕒 Загружаю прогноз..." - - service: weather.get_forecasts - data: - type: hourly - target: - entity_id: weather.yandex_pogoda - response_variable: hourly_data - - service: telegram_bot.edit_message - data: - message_id: "{{ trigger.event.data.message.message_id }}" - chat_id: "{{ trigger.event.data.chat_id }}" - message: | - 🕒 Прогноз на 12 часов: - {% set forecast = hourly_data['weather.yandex_pogoda'].forecast[:12] -%} - {%- if forecast -%} - {% for hour in forecast %} - 🕒 {{ hour.datetime.strftime("%H:%M") }}: {{ hour.temperature }}°C, Ветер: {{ hour.wind_speed }} км/ч - {%- endfor %} - {%- else %} - ⚠️ Прогноз недоступен - {%- endif %} - - 🔄 Обновлено: {{ now().strftime('%H:%M:%S') }} - inline_keyboard: - - '📆 Ежедневный прогноз:/wthr_d_control' - - '🔙 Назад:/wthr_control, 🔄 Обновить:/wthr_h_control' - - '🏠 Главное меню:/menu_back' - - # --- МЕНЮ: ПОГОДА (ЕЖЕДНЕВНЫЙ ПРОГНОЗ) --- - - conditions: "{{ trigger.event.data.command == '/wthr_d_control' }}" - sequence: - - service: telegram_bot.answer_callback_query - data: - callback_query_id: "{{ trigger.event.data.id }}" - message: "📆 Загружаю прогноз..." - - service: telegram_bot.edit_message - data: - message_id: "{{ trigger.event.data.message.message_id }}" - chat_id: "{{ trigger.event.data.chat_id }}" - message: | - {%- set condition_icons = { - 'clear': '☀️', 'partlycloudy': '🌤', 'cloudy': '☁️', - 'overcast': '🌫', 'rainy': '🌧', 'pouring': '🌧', - 'lightrain': '🌦', 'snowy': '🌨', 'snowyrainy': '🌨🌧', - 'exceptional': '❗', 'hail': '🌨', 'lightning': '⛈', - 'lightning-rainy': '⛈', 'fog': '🌫', 'windy': '💨', - 'windy-variant': '💨', 'partly-cloudy-day': '🌤', - 'partly-cloudy-night': '🌤', 'clear-night': '🌙', 'none': '❓' - } -%} - {%- set weekdays = ['Пн', 'Вт', 'Ср', 'Чт', 'Пт', 'Сб', 'Вс'] -%} - {%- macro wind_description(speed_kmh) -%} - {%- if speed_kmh < 1 %}Штиль - {%- elif speed_kmh < 5 %}Тихий - {%- elif speed_kmh < 11 %}Лёгкий - {%- elif speed_kmh < 19 %}Слабый - {%- elif speed_kmh < 28 %}Умеренный - {%- elif speed_kmh < 38 %}Свежий - {%- elif speed_kmh < 49 %}Сильный - {%- elif speed_kmh < 61 %}Крепкий - {%- elif speed_kmh < 74 %}Очень крепкий - {%- elif speed_kmh < 88 %}Шторм - {%- elif speed_kmh < 102 %}Сильный шторм - {%- elif speed_kmh < 117 %}Жестокий шторм - {%- else %}Ураган - {%- endif %} - {%- endmacro -%} - 📆 Прогноз на 6 дней: - {% for i in range(1, 7) %} - {%- set cond = states('sensor.home_assistant_condition_forecast_' ~ i ~ 'd')|lower -%} - {%- set temp = states('sensor.home_assistant_temperature_forecast_' ~ i ~ 'd') -%} - {%- set wind_ms = states('sensor.home_assistant_wind_speed_forecast_' ~ i ~ 'd')|float(0) -%} - {%- set wind_kmh = (wind_ms * 3.6)|round(1) -%} - {%- set wind_text = wind_description(wind_kmh) -%} - {%- set date_obj = now() + timedelta(days=i) -%} - {%- set weekday = weekdays[date_obj.weekday()] -%} - {%- set date = date_obj.strftime('%d.%m') %} - 🔹 {{ weekday }}, {{ date }}: {{ temp }}°C {{ condition_icons.get(cond, '❓') }}, Ветер — {{ wind_text }} - {%- endfor %} - - 🔄 Обновлено: {{ now().strftime('%H:%M:%S') }} - inline_keyboard: - - '🕒 Почасовой прогноз:/wthr_h_control' - - '🔙 Назад:/wthr_control, 🔄 Обновить:/wthr_d_control' - - '🏠 Главное меню:/menu_back' - - # ========================================== - # --- МЕНЮ: ПЫЛЕСОС (ГЛАВНОЕ) --- - # ========================================== - - conditions: "{{ trigger.event.data.command == '/vcm_control' }}" - sequence: - - service: telegram_bot.answer_callback_query - data: - callback_query_id: "{{ trigger.event.data.id }}" - message: "🔄 Загружаю меню пылесоса..." - - service: telegram_bot.edit_message - data: - message_id: "{{ trigger.event.data.message.message_id }}" - chat_id: "{{ trigger.event.data.chat_id }}" - message: | - 🌀 Пылесос: {{ state_attr('vacuum.dreame_mc1808_044c_robot_cleaner_2', 'vacuum.status_desc') | default('Нет данных') }} - 🌪️ Сила всасывания: {{ state_attr('vacuum.dreame_mc1808_044c_robot_cleaner_2', 'fan_speed') | default('Нет данных') }} - 🌊 Сила полива: {% set water = state_attr('vacuum.stytj01zhm', 'water_level') %}{% if water == 'High' %}Полная{% elif water == 'Med' %}Средняя{% elif water == 'Low' %}Низкая{% else %}Нет данных{% endif %} - 💧 Бак с водой: {% if state_attr('vacuum.dreame_mc1808_044c_robot_cleaner_2','clean.water_box') | int(0) == 1 %}❗Установлен❗{% else %}Снят{% endif %} - 🔋 Заряд: {{ state_attr('vacuum.dreame_mc1808_044c_robot_cleaner_2','battery_level') | default(0) }}% - - {% set status = states("group.all_rooms_for_vac_clean") %} - {%- if status == "off" %} - ▶️ Запустите уборку всей квартиры, - 🔴 либо выберите комнаты: - {%- elif status == "on" %} - ▶️ Запустите уборку выбранных комнат, - 🟢 либо отмените комнаты для уборки всей квартиры: - {%- else %} - Нет данных - {%- endif %} - - 🔄 Обновлено: {{ now().strftime('%H:%M:%S') }} - inline_keyboard: - - '▶️ {% set status = states("group.all_rooms_for_vac_clean") %}{% if status == "off" %}Уборка всей квартиры{% elif status == "on" %}Уборка выбранных комнат{% else %}Нет данных{% endif %} :/toggle_vcm_start' - - "{% if is_state('input_boolean.room_vacuum', 'off') %}🔴{% else %}🟢{% endif %} Убрать комнату:/toggle_vcm_rm, {% if is_state('input_boolean.lobby_vacuum', 'off') %}🔴{% else %}🟢{% endif %} Убрать прихожую:/toggle_vcm_lb" - - "{% if is_state('input_boolean.hallway_vacuum', 'off') %}🔴{% else %}🟢{% endif %} Убрать коридор:/toggle_vcm_hl, {% if is_state('input_boolean.bathroom_vacuum', 'off') %}🔴{% else %}🟢{% endif %} Убрать ванную:/toggle_vcm_br" - - "{% if is_state('input_boolean.kitchen_vacuum', 'off') %}🔴{% else %}🟢{% endif %} Убрать кухню:/toggle_vcm_kc" - - '🏠 Вернуться на базу:/toggle_vcm_stop' - - '🌪️ Сила всасывания:/toggle_vcm_wnd, 🌊 Сила полива:/toggle_vcm_wtr' - - '🔙 Назад:/menu_back, 🔄 Обновить:/vcm_control' - - # --- КНОПКА: ЗАПУСК УБОРКИ --- - - conditions: "{{ trigger.event.data.command == '/toggle_vcm_start' }}" - sequence: - - service: telegram_bot.answer_callback_query - data: - callback_query_id: "{{ trigger.event.data.id }}" - message: "🧹 Запускаю уборку..." - # Логика запуска - - choose: - - conditions: "{{ is_state('group.all_rooms_for_vac_clean', 'off') }}" - sequence: - - service: vacuum.start - target: - device_id: 885672257bd73c7492a4ba8b72b83699 - - conditions: "{{ is_state('group.all_rooms_for_vac_clean', 'on') }}" - sequence: - - service: xiaomi_miot.call_action - data: - entity_id: vacuum.dreame_mc1808_044c_robot_cleaner_2 - siid: 18 - aiid: 1 - params: - - piid: 1 - value: 18 - - >- - {{ {'piid':21, 'value': states('sensor.select_rooms_for_clean')} }} - force_params: true - # Логика настройки силы всасывания - - choose: - - conditions: "{{ is_state('sensor.select_vacuum_fan_speed', 'Турбо') }}" - sequence: - - service: script.set_fanspeed_vacum_turbo - - conditions: "{{ is_state('sensor.select_vacuum_fan_speed', 'Средний') }}" - sequence: - - service: script.set_fanspeed_vacum_strong - - conditions: "{{ is_state('sensor.select_vacuum_fan_speed', 'Стандартный') }}" - sequence: - - service: script.set_fanspeed_vacum_standart - - conditions: "{{ is_state('sensor.select_vacuum_fan_speed', 'Тихий') }}" - sequence: - - service: script.set_fanspeed_vacum_silent - # Логика настройки полива - - choose: - - conditions: "{{ is_state('sensor.select_water_vacum', 'Low') }}" - sequence: - - service: script.set_water_vacum_low - - conditions: "{{ is_state('sensor.select_water_vacum', 'Med') }}" - sequence: - - service: script.set_water_vacum_middle - - conditions: "{{ is_state('sensor.select_water_vacum', 'High') }}" - sequence: - - service: script.set_water_vacum_hight - - # --- КНОПКА: ВЕРНУТЬ НА БАЗУ --- - - conditions: "{{ trigger.event.data.command == '/toggle_vcm_stop' }}" - sequence: - - service: vacuum.return_to_base - target: - device_id: 885672257bd73c7492a4ba8b72b83699 - - service: telegram_bot.answer_callback_query - data: - callback_query_id: "{{ trigger.event.data.id }}" - message: "🏠 Пылесос возвращается на базу..." - - # ========================================== - # --- КНОПКИ ВЫБОРА КОМНАТ --- - # ========================================== - - conditions: > - {{ trigger.event.data.command in [ - '/toggle_vcm_rm', '/toggle_vcm_lb', '/toggle_vcm_hl', - '/toggle_vcm_br', '/toggle_vcm_kc' - ] }} - sequence: - - choose: - - conditions: "{{ trigger.event.data.command == '/toggle_vcm_rm' }}" - sequence: - - service: input_boolean.toggle - target: { entity_id: input_boolean.room_vacuum } - - conditions: "{{ trigger.event.data.command == '/toggle_vcm_lb' }}" - sequence: - - service: input_boolean.toggle - target: { entity_id: input_boolean.lobby_vacuum } - - conditions: "{{ trigger.event.data.command == '/toggle_vcm_hl' }}" - sequence: - - service: input_boolean.toggle - target: { entity_id: input_boolean.hallway_vacuum } - - conditions: "{{ trigger.event.data.command == '/toggle_vcm_br' }}" - sequence: - - service: input_boolean.toggle - target: { entity_id: input_boolean.bathroom_vacuum } - - conditions: "{{ trigger.event.data.command == '/toggle_vcm_kc' }}" - sequence: - - service: input_boolean.toggle - target: { entity_id: input_boolean.kitchen_vacuum } - - - delay: - milliseconds: 200 - - service: telegram_bot.answer_callback_query - data: - callback_query_id: "{{ trigger.event.data.id }}" - message: "✅ Выбор комнат обновлен" - # Плавно перерисовываем меню пылесоса с новыми зелеными/красными кружками - - service: telegram_bot.edit_message - data: - message_id: "{{ trigger.event.data.message.message_id }}" - chat_id: "{{ trigger.event.data.chat_id }}" - message: | - 🌀 Пылесос: {{ state_attr('vacuum.dreame_mc1808_044c_robot_cleaner_2', 'vacuum.status_desc') | default('Нет данных') }} - 🌪️ Сила всасывания: {{ state_attr('vacuum.dreame_mc1808_044c_robot_cleaner_2', 'fan_speed') | default('Нет данных') }} - 🌊 Сила полива: {% set water = state_attr('vacuum.stytj01zhm', 'water_level') %}{% if water == 'High' %}Полная{% elif water == 'Med' %}Средняя{% elif water == 'Low' %}Низкая{% else %}Нет данных{% endif %} - 💧 Бак с водой: {% if state_attr('vacuum.dreame_mc1808_044c_robot_cleaner_2','clean.water_box') | int(0) == 1 %}❗Установлен❗{% else %}Снят{% endif %} - 🔋 Заряд: {{ state_attr('vacuum.dreame_mc1808_044c_robot_cleaner_2','battery_level') | default(0) }}% - - {% set status = states("group.all_rooms_for_vac_clean") %} - {%- if status == "off" %} - ▶️ Запустите уборку всей квартиры, - 🔴 либо выберите комнаты: - {%- elif status == "on" %} - ▶️ Запустите уборку выбранных комнат, - 🟢 либо отмените комнаты для уборки всей квартиры: - {%- else %} - Нет данных - {%- endif %} - - 🔄 Обновлено: {{ now().strftime('%H:%M:%S') }} - inline_keyboard: - - '▶️ {% set status = states("group.all_rooms_for_vac_clean") %}{% if status == "off" %}Уборка всей квартиры{% elif status == "on" %}Уборка выбранных комнат{% else %}Нет данных{% endif %} :/toggle_vcm_start' - - "{% if is_state('input_boolean.room_vacuum', 'off') %}🔴{% else %}🟢{% endif %} Убрать комнату:/toggle_vcm_rm, {% if is_state('input_boolean.lobby_vacuum', 'off') %}🔴{% else %}🟢{% endif %} Убрать прихожую:/toggle_vcm_lb" - - "{% if is_state('input_boolean.hallway_vacuum', 'off') %}🔴{% else %}🟢{% endif %} Убрать коридор:/toggle_vcm_hl, {% if is_state('input_boolean.bathroom_vacuum', 'off') %}🔴{% else %}🟢{% endif %} Убрать ванную:/toggle_vcm_br" - - "{% if is_state('input_boolean.kitchen_vacuum', 'off') %}🔴{% else %}🟢{% endif %} Убрать кухню:/toggle_vcm_kc" - - '🏠 Вернуться на базу:/toggle_vcm_stop' - - '🌪️ Сила всасывания:/toggle_vcm_wnd, 🌊 Сила полива:/toggle_vcm_wtr' - - '🔙 Назад:/menu_back, 🔄 Обновить:/vcm_control' - - # ========================================== - # --- ПОДМЕНЮ: СИЛА ВСАСЫВАНИЯ --- - # ========================================== - - conditions: "{{ trigger.event.data.command == '/toggle_vcm_wnd' }}" - sequence: - - service: telegram_bot.answer_callback_query - data: - callback_query_id: "{{ trigger.event.data.id }}" - message: "🌪️ Меню мощности всасывания..." - - service: telegram_bot.edit_message - data: - message_id: "{{ trigger.event.data.message.message_id }}" - chat_id: "{{ trigger.event.data.chat_id }}" - message: >- - 🌪️ Текущая сила всасывания: {{ state_attr('vacuum.dreame_mc1808_044c_robot_cleaner_2', 'fan_speed') | default('Нет данных') }} - - 🔄 Обновлено: {{ now().strftime('%H:%M:%S') }} - inline_keyboard: - - "1️⃣ Тихий:/toggle_vcm_wnd_sl, 2️⃣ Стандартный:/toggle_vcm_wnd_st" - - "3️⃣ Средний:/toggle_vcm_wnd_md, 4️⃣ Турбо:/toggle_vcm_wnd_tr" - - '🔙 Назад:/vcm_control, 🔄 Обновить:/toggle_vcm_wnd' - - # Кнопки выбора силы всасывания - - conditions: > - {{ trigger.event.data.command in [ - '/toggle_vcm_wnd_sl', '/toggle_vcm_wnd_st', - '/toggle_vcm_wnd_md', '/toggle_vcm_wnd_tr' - ] }} - sequence: - - service: xiaomi_miot.set_miot_property - data: - entity_id: vacuum.dreame_mc1808_044c_robot_cleaner_2 - siid: 18 - piid: 6 - value: >- - {% if trigger.event.data.command == '/toggle_vcm_wnd_sl' %}0 - {% elif trigger.event.data.command == '/toggle_vcm_wnd_st' %}1 - {% elif trigger.event.data.command == '/toggle_vcm_wnd_md' %}2 - {% else %}3{% endif %} - - delay: - milliseconds: 1000 - - service: telegram_bot.answer_callback_query - data: - callback_query_id: "{{ trigger.event.data.id }}" - message: "✅ Мощность изменена" - # Обновляем подменю - - service: telegram_bot.edit_message - data: - message_id: "{{ trigger.event.data.message.message_id }}" - chat_id: "{{ trigger.event.data.chat_id }}" - message: >- - 🌪️ Текущая сила всасывания: {{ state_attr('vacuum.dreame_mc1808_044c_robot_cleaner_2', 'fan_speed') | default('Обновляется...') }} - - 🔄 Обновлено: {{ now().strftime('%H:%M:%S') }} - inline_keyboard: - - "1️⃣ Тихий:/toggle_vcm_wnd_sl, 2️⃣ Стандартный:/toggle_vcm_wnd_st" - - "3️⃣ Средний:/toggle_vcm_wnd_md, 4️⃣ Турбо:/toggle_vcm_wnd_tr" - - '🔙 Назад:/vcm_control, 🔄 Обновить:/toggle_vcm_wnd' - - # ========================================== - # --- ПОДМЕНЮ: СИЛА ПОЛИВА --- - # ========================================== - - conditions: "{{ trigger.event.data.command == '/toggle_vcm_wtr' }}" - sequence: - - service: telegram_bot.answer_callback_query - data: - callback_query_id: "{{ trigger.event.data.id }}" - message: "🌊 Меню силы полива..." - - service: telegram_bot.edit_message - data: - message_id: "{{ trigger.event.data.message.message_id }}" - chat_id: "{{ trigger.event.data.chat_id }}" - message: >- - 🌊 Текущая сила полива: {% set water = state_attr('vacuum.stytj01zhm', 'water_level') %} {% if water == 'High' %}Полный {% elif water == 'Med' %}Средний {% elif water == 'Low' %}Низкий {% else %} Нет данных {% endif %} - - 🔄 Обновлено: {{ now().strftime('%H:%M:%S') }} - inline_keyboard: - - "1️⃣ Низкий:/toggle_vcm_wtr_l" - - "2️⃣ Средний:/toggle_vcm_wtr_m" - - "3️⃣ Полный:/toggle_vcm_wtr_h" - - '🔙 Назад:/vcm_control, 🔄 Обновить:/toggle_vcm_wtr' - - # Кнопки выбора силы полива - - conditions: > - {{ trigger.event.data.command in [ - '/toggle_vcm_wtr_l', '/toggle_vcm_wtr_m', '/toggle_vcm_wtr_h' - ] }} - sequence: - - service: xiaomi_miot.set_miot_property - data: - entity_id: vacuum.dreame_mc1808_044c_robot_cleaner_2 - siid: 18 - piid: 20 - value: >- - {% if trigger.event.data.command == '/toggle_vcm_wtr_l' %}1 - {% elif trigger.event.data.command == '/toggle_vcm_wtr_m' %}2 - {% else %}3{% endif %} - - delay: - milliseconds: 2000 - - service: telegram_bot.answer_callback_query - data: - callback_query_id: "{{ trigger.event.data.id }}" - message: "✅ Режим полива изменен" - # Обновляем подменю - - service: telegram_bot.edit_message - data: - message_id: "{{ trigger.event.data.message.message_id }}" - chat_id: "{{ trigger.event.data.chat_id }}" - message: >- - 🌊 Текущая сила полива: {% set water = state_attr('vacuum.stytj01zhm', 'water_level') %} {% if water == 'High' %}Полный {% elif water == 'Med' %}Средний {% elif water == 'Low' %}Низкий {% else %} Обновляется... {% endif %} - - 🔄 Обновлено: {{ now().strftime('%H:%M:%S') }} - inline_keyboard: - - "1️⃣ Низкий:/toggle_vcm_wtr_l" - - "2️⃣ Средний:/toggle_vcm_wtr_m" - - "3️⃣ Полный:/toggle_vcm_wtr_h" - - '🔙 Назад:/vcm_control, 🔄 Обновить:/toggle_vcm_wtr' - - # ========================================== - # --- МЕНЮ: ПОСУДОМОЙКА (ГЛАВНОЕ) --- - # ========================================== - - conditions: "{{ trigger.event.data.command == '/dw_control' }}" - sequence: - - service: telegram_bot.answer_callback_query - data: - callback_query_id: "{{ trigger.event.data.id }}" - message: "🔄 Загружаю статус посудомойки..." - - service: telegram_bot.edit_message - data: - message_id: "{{ trigger.event.data.message.message_id }}" - chat_id: "{{ trigger.event.data.chat_id }}" - message: | - 🌊 Посудомойка: - - 🔖 Состояние: {% set status = states('sensor.bosch_dishwasher_operation_state') %}{% if status == 'Ready' %}Ожидание{% elif status == 'Run' %}Мойка{% elif status == 'Aborting' %}Отмена программы{% elif status == 'DelayedStart' %}Отложенный запуск{% else %}Нет данных{% endif %} - 📋 Программа: {% set prog = states('select.bosch_dishwasher_selected_program') %}{% if prog in ['unavailable', 'unknown'] %}{% set prog = states('sensor.bosch_dishwasher_active_program') %}{% endif %}{% if prog == 'dishcare_dishwasher_program_auto2' %}Авто 45–65℃{% elif prog == 'dishcare_dishwasher_program_quick65' %}Экспресс 65℃{% elif prog == 'dishcare_dishwasher_program_eco50' %}Эко 50℃{% elif prog == 'dishcare_dishwasher_program_intensiv70' %}Интенсивная 70℃{% elif prog == 'dishcare_dishwasher_program_prerinse' %}Предв. ополаскивание{% elif prog == 'dishcare_dishwasher_program_nightwash' %}Ночная{% elif prog == 'dishcare_dishwasher_program_machinecare' %}Мойка машины{% else %}Нет данных{% endif %} - 🌡️ Доп.сушка: {% set s = states('switch.bosch_dishwasher_extra_dry') %}{% if s == 'on' %}Включена{% elif s == 'off' %}Выключена{% else %}Нет данных{% endif %} - 🧂 Соль: {% set salt = states('sensor.bosch_dishwasher_salt') %}{% if salt == 'nearly_empty' %}⚠️ Почти закончилась{% elif salt == 'full' %}✅ В порядке{% elif salt == 'empty' %}❌ Закончилась{% else %}❓ Неизвестно{% endif %} - 🚪 Дверца: {% set door = states('binary_sensor.bosch_dishwasher_door') %}{% if door == 'on' %}Открыта{% elif door == 'off' %}Закрыта{% else %}Нет данных{% endif %} - - 🕒 Окончание: {% set input_dt = state_attr('input_datetime.dishwasher_startinrelative', 'timestamp') | int(0) %}{% set start_in = states('sensor.bosch_dishwasher_start_in') | float(0) %}{% set remaining = states('sensor.bosch_dishwasher_remaining_program_time') | float(0) %}{% set total_delay = input_dt + (start_in * 3600) + (remaining * 3600) %}{{ (now().timestamp() + total_delay) | timestamp_custom('%H:%M:%S') }} - {% set delay = states('input_datetime.dishwasher_startinrelative') %}{% set progress = states('sensor.bosch_dishwasher_program_progress') %}{% set start_in_raw = states('sensor.bosch_dishwasher_start_in') | float(0) %}{% set start_in_h = (start_in_raw // 1) | int %}{% set start_in_m = ((start_in_raw % 1) * 60) | round(0) %}{% if status == 'Ready' %}⏳ Отложенный запуск: {% if delay == '00:00:00' %}Не установлено{% else %}{{ delay }}{% endif %}{% elif status == 'DelayedStart' %}🚀 Запуск через: {{ start_in_h }} ч {{ start_in_m }} мин{% elif status == 'Run' %}✅ Прогресс: {{ progress }}%{% endif %} - {%- if states('switch.bosch_dishwasher_silence_on_demand') == 'on' %} - 🔇 Тихий режим: Включен{% endif %} - - 🔄 Обновлено: {{ now().strftime('%H:%M:%S') }} - inline_keyboard: - - "▶️ Старт выбранной программы:/toggle_dw_start" - - "1️⃣ Экспресс 65:/toggle_dw_on_quick65, 2️⃣ Авто 45-65:/toggle_dw_on_auto4565" - - "3️⃣ Чистка посудомойки:/toggle_dw_on_care" - - "{% set quiet = states('switch.401090521617010964_dishcare_dishwasher_option_silenceondemand') %}{{ '🟢' if quiet == 'on' else '🔴' }} Тихий режим:/toggle_dw_on_silence" - - "⏳ Отлож.пуск:/dw_control_dl, ❌ Сброс отлож.пуска:/toggle_dw_delay_clear" - - "⏹️ Отменить мойку:/toggle_dw_stop" - - "🔙 Назад:/menu_back, 🔄 Обновить:/dw_control" - - # --- КНОПКИ УПРАВЛЕНИЯ ПОСУДОМОЙКОЙ --- - - conditions: "{{ trigger.event.data.command == '/toggle_dw_start' }}" - sequence: - - service: script.dw_start_select_program - - service: telegram_bot.answer_callback_query - data: - callback_query_id: "{{ trigger.event.data.id }}" - message: "▶️ Запущена мойка" - - - conditions: "{{ trigger.event.data.command == '/toggle_dw_on_off' }}" - sequence: - - service: switch.toggle - target: { entity_id: switch.401090521617010964_bsh_common_setting_powerstate } - - service: telegram_bot.answer_callback_query - data: - callback_query_id: "{{ trigger.event.data.id }}" - message: "🔌 Питание переключено" - - - conditions: "{{ trigger.event.data.command == '/toggle_dw_on_quick65' }}" - sequence: - - service: script.dw_install_quick_65_extradry_extrarinse - - service: telegram_bot.answer_callback_query - data: - callback_query_id: "{{ trigger.event.data.id }}" - message: "✅ Выбрана программа Экспресс 65" - - - conditions: "{{ trigger.event.data.command == '/toggle_dw_on_auto4565' }}" - sequence: - - service: script.dw_install_auto_45_65_extradry_extrarinse - - service: telegram_bot.answer_callback_query - data: - callback_query_id: "{{ trigger.event.data.id }}" - message: "✅ Выбрана программа Авто 45-65" - - - conditions: "{{ trigger.event.data.command == '/toggle_dw_on_care' }}" - sequence: - - service: script.dw_install_care - - service: telegram_bot.answer_callback_query - data: - callback_query_id: "{{ trigger.event.data.id }}" - message: "✅ Выбрана Чистка посудомойки" - - - conditions: "{{ trigger.event.data.command == '/toggle_dw_on_silence' }}" - sequence: - - service: switch.toggle - target: { entity_id: switch.bosch_dishwasher_silence_on_demand } - - service: telegram_bot.answer_callback_query - data: - callback_query_id: "{{ trigger.event.data.id }}" - message: "🤫 Тихий режим переключен" - - - conditions: "{{ trigger.event.data.command == '/toggle_dw_stop' }}" - sequence: - - service: input_datetime.set_datetime - target: { entity_id: input_datetime.dishwasher_startinrelative } - data: { time: "00:00:00" } - - service: script.dw_stop_program - - service: telegram_bot.answer_callback_query - data: - callback_query_id: "{{ trigger.event.data.id }}" - message: "⏹️ Мойка отменена" - - # ========================================== - # --- МЕНЮ: ОТЛОЖЕННЫЙ СТАРТ --- - # ========================================== - - conditions: "{{ trigger.event.data.command == '/dw_control_dl' }}" - sequence: - - service: telegram_bot.answer_callback_query - data: - callback_query_id: "{{ trigger.event.data.id }}" - message: "⏳ Меню отложенного старта..." - - service: telegram_bot.edit_message - data: - message_id: "{{ trigger.event.data.message.message_id }}" - chat_id: "{{ trigger.event.data.chat_id }}" - message: | - 🌊 Настройки отложенного запуска: - - {% set status = states('sensor.bosch_dishwasher_operation_state') %}{% set delay = states('input_datetime.dishwasher_startinrelative') %}{% set start_in_raw = states('sensor.bosch_dishwasher_start_in') | float(0) %}{% set start_in_h = (start_in_raw // 1) | int %}{% set start_in_m = ((start_in_raw % 1) * 60) | round(0) %}{% if status == 'Ready' %}Текущая задержка: {% if delay == '00:00:00' %}Не установлено{% else %}{{ delay }}{% endif %}{% elif status == 'DelayedStart' %}Машина уже ждет запуска. Старт через: {{ start_in_h }} ч {{ start_in_m }} мин{% else %}Машина сейчас в работе или недоступна.{% endif %} - - 🔄 Обновлено: {{ now().strftime('%H:%M:%S') }} - inline_keyboard: - - '🕐 1:00:/toggle_dw_delay_1, 🕑 2:00:/toggle_dw_delay_2' - - '🕒 3:00:/toggle_dw_delay_3, 🕓 4:00:/toggle_dw_delay_4' - - '🕔 5:00:/toggle_dw_delay_5, 🕕 6:00:/toggle_dw_delay_6' - - '🕖 7:00:/toggle_dw_delay_7, 🕗 8:00:/toggle_dw_delay_8' - - '🕘 9:00:/toggle_dw_delay_9, 🕙 10:00:/toggle_dw_delay_10' - - '❌ Сброс времени:/toggle_dw_delay_clear' - - '🔙 Назад:/dw_control, 🔄 Обновить:/dw_control_dl' - - # --- КНОПКА: СБРОС ТАЙМЕРА --- - - conditions: "{{ trigger.event.data.command == '/toggle_dw_delay_clear' }}" - sequence: - - service: input_datetime.set_datetime - target: { entity_id: input_datetime.dishwasher_startinrelative } - data: { time: "00:00:00" } - - delay: - milliseconds: 500 - - service: telegram_bot.answer_callback_query - data: - callback_query_id: "{{ trigger.event.data.id }}" - message: "❌ Время сброшено" - # Обновляем меню отложенного старта сразу после сброса - - service: telegram_bot.edit_message - data: - message_id: "{{ trigger.event.data.message.message_id }}" - chat_id: "{{ trigger.event.data.chat_id }}" - message: | - 🌊 Настройки отложенного запуска: - - {% set status = states('sensor.bosch_dishwasher_operation_state') %}{% set delay = states('input_datetime.dishwasher_startinrelative') %}{% set start_in_raw = states('sensor.bosch_dishwasher_start_in') | float(0) %}{% set start_in_h = (start_in_raw // 1) | int %}{% set start_in_m = ((start_in_raw % 1) * 60) | round(0) %}{% if status == 'Ready' %}Текущая задержка: {% if delay == '00:00:00' %}Не установлено{% else %}{{ delay }}{% endif %}{% elif status == 'DelayedStart' %}Машина уже ждет запуска. Старт через: {{ start_in_h }} ч {{ start_in_m }} мин{% else %}Машина сейчас в работе или недоступна.{% endif %} - - 🔄 Обновлено: {{ now().strftime('%H:%M:%S') }} - inline_keyboard: - - '🕐 1:00:/toggle_dw_delay_1, 🕑 2:00:/toggle_dw_delay_2' - - '🕒 3:00:/toggle_dw_delay_3, 🕓 4:00:/toggle_dw_delay_4' - - '🕔 5:00:/toggle_dw_delay_5, 🕕 6:00:/toggle_dw_delay_6' - - '🕖 7:00:/toggle_dw_delay_7, 🕗 8:00:/toggle_dw_delay_8' - - '🕘 9:00:/toggle_dw_delay_9, 🕙 10:00:/toggle_dw_delay_10' - - '❌ Сброс времени:/toggle_dw_delay_clear' - - '🔙 Назад:/dw_control, 🔄 Обновить:/dw_control_dl' - - # --- КНОПКИ: УСТАНОВКА ВРЕМЕНИ --- - - conditions: > - {{ trigger.event.data.command.startswith('/toggle_dw_delay_') and - trigger.event.data.command != '/toggle_dw_delay_clear' }} - sequence: - - service: input_datetime.set_datetime - target: - entity_id: input_datetime.dishwasher_startinrelative - data: - # Берем цифру из команды и превращаем в часы - time: "{{ '%02d:00:00' | format(trigger.event.data.command.split('_')[-1] | int) }}" - - delay: - milliseconds: 500 - - service: telegram_bot.answer_callback_query - data: - callback_query_id: "{{ trigger.event.data.id }}" - message: "✅ Время установлено на {{ trigger.event.data.command.split('_')[-1] }}:00" - # Обновляем меню отложенного старта сразу после выбора времени - - service: telegram_bot.edit_message - data: - message_id: "{{ trigger.event.data.message.message_id }}" - chat_id: "{{ trigger.event.data.chat_id }}" - message: | - 🌊 Настройки отложенного запуска: - - {% set status = states('sensor.bosch_dishwasher_operation_state') %}{% set delay = states('input_datetime.dishwasher_startinrelative') %}{% set start_in_raw = states('sensor.bosch_dishwasher_start_in') | float(0) %}{% set start_in_h = (start_in_raw // 1) | int %}{% set start_in_m = ((start_in_raw % 1) * 60) | round(0) %}{% if status == 'Ready' %}Текущая задержка: {% if delay == '00:00:00' %}Не установлено{% else %}{{ delay }}{% endif %}{% elif status == 'DelayedStart' %}Машина уже ждет запуска. Старт через: {{ start_in_h }} ч {{ start_in_m }} мин{% else %}Машина сейчас в работе или недоступна.{% endif %} - - 🔄 Обновлено: {{ now().strftime('%H:%M:%S') }} - inline_keyboard: - - '🕐 1:00:/toggle_dw_delay_1, 🕑 2:00:/toggle_dw_delay_2' - - '🕒 3:00:/toggle_dw_delay_3, 🕓 4:00:/toggle_dw_delay_4' - - '🕔 5:00:/toggle_dw_delay_5, 🕕 6:00:/toggle_dw_delay_6' - - '🕖 7:00:/toggle_dw_delay_7, 🕗 8:00:/toggle_dw_delay_8' - - '🕘 9:00:/toggle_dw_delay_9, 🕙 10:00:/toggle_dw_delay_10' - - '❌ Сброс времени:/toggle_dw_delay_clear' - - '🔙 Назад:/dw_control, 🔄 Обновить:/dw_control_dl' - - # ========================================== - # --- МЕНЮ: КВАРТИРА --- - # ========================================== - - conditions: "{{ trigger.event.data.command == '/kv_control' }}" - sequence: - - service: telegram_bot.answer_callback_query - data: - callback_query_id: "{{ trigger.event.data.id }}" - message: "🔄 Загружаю меню квартиры..." - - service: telegram_bot.edit_message - data: - message_id: "{{ trigger.event.data.message.message_id }}" - chat_id: "{{ trigger.event.data.chat_id }}" - message: | - 🏢 Управление: Квартира - - 🛋️ Комната - 🌡️ {{ states('sensor.a4c1387695b9_temperature') | replace('unavailable', '—') | replace('unknown', '—') }}°C • 💡 {% if is_state('binary_sensor.lighton_room', 'on') %}Вкл{% else %}Выкл{% endif %} • 🚶 {% if is_state('sensor.room_motion', 'True') %}Движение{% else %}Тихо{% endif %} - - 🛁 Ванная - 🌡️ {{ states('sensor.0x00158d0007984db7_temperature') | replace('unavailable', '—') | replace('unknown', '—') }}°C • 💡 {% if is_state('binary_sensor.lighton_bathroom', 'on') or is_state('switch.0x00158d00054e8e41_l1', 'on') %}Вкл{% else %}Выкл{% endif %} • 🌊 {% if is_state('sensor.stiralnaia_mashina_s_gorizontalnoi_zagruzkoi', 'on') %}{{ states('sensor.stiralnaia_mashina_s_gorizontalnoi_zagruzkoi_run_state') | capitalize }}{% else %}Выкл{% endif %} - - 🍽️ Кухня - 🌡️ {{ states('sensor.a4c138eb5c2a_temperature') | replace('unavailable', '—') | replace('unknown', '—') }}°C • 💡 {% if is_state('binary_sensor.lighton_kitchen', 'on') %}Вкл{% else %}Выкл{% endif %} • 🍽️ {% if is_state('switch.posudomoechnaia_mashina_power', 'on') %}Вкл{% else %}Выкл{% endif %} - - 🚪 Прихожая - 🚪 {% if is_state('binary_sensor.e4aaec3747b2_contact', 'off') %}Закрыта{% else %}Открыта{% endif %} • 💡 {% if is_state('switch.0x54ef4410003aa472_right', 'on') or is_state('switch.0x54ef4410003aa472_left', 'on') %}Вкл{% else %}Выкл{% endif %} • 🚶 {% if is_state('binary_sensor.0x00158d000707efdf_motion', 'on') %}Движение{% else %}Тихо{% endif %} - - 🔄 Обновлено: {{ now().strftime('%H:%M:%S') }} - inline_keyboard: - - '🏠 Комната:/rm_control, 🛁 Ванная:/bt_control' - - '🍽️ Кухня:/kn_control, 🚪 Прихожая:/lb_control' - - '🔙 Назад:/menu_back, 🔄 Обновить:/kv_control' - - # ========================================== - # --- МЕНЮ: КОМНАТА --- - # ========================================== - - conditions: "{{ trigger.event.data.command == '/rm_control' }}" - sequence: - - service: telegram_bot.answer_callback_query - data: - callback_query_id: "{{ trigger.event.data.id }}" - message: "🔄 Загружаю меню комнаты..." - - service: telegram_bot.edit_message - data: - message_id: "{{ trigger.event.data.message.message_id }}" - chat_id: "{{ trigger.event.data.chat_id }}" - message: | - 🏠 Управление: Комната - - 🌡️ Температура: {{ states('sensor.a4c1387695b9_temperature') }} °C | 💧 Влажность: {{ states('sensor.a4c1387695b9_humidity') }} % - 🚶 Присутствие: {% if is_state('sensor.room_motion', 'True') %}Движение{% else %}Нет движения{% endif %} - - 🔄 Обновлено: {{ now().strftime('%H:%M:%S') }} - inline_keyboard: - - '💡 Свет {% if is_state("binary_sensor.lighton_room", "off") %}🔴{% else %}🟢{% endif %}:/toggle_rm_ceiling_light' - - '☀️ Дневной свет:/toggle_rm_light_day, 🌙 Ночной свет:/toggle_rm_light_night' - - '📺 Свет для ТВ:/toggle_rm_light_tv, 💞 Романтика:/toggle_rm_light_lv' - - '🔌 Розетка тел. {% if is_state("switch.0xa4c138a1b1cd2be1", "off") %}🔴{% else %}🟢{% endif %}:/toggle_rm_tl' - - '🔙 Назад:/kv_control, 🔄 Обновить:/rm_control' - - # --- КНОПКИ УПРАВЛЕНИЯ КОМНАТОЙ --- - - conditions: > - {{ trigger.event.data.command in [ - '/toggle_rm_ceiling_light', '/toggle_rm_light_day', - '/toggle_rm_light_night', '/toggle_rm_light_tv', - '/toggle_rm_light_lv', '/toggle_rm_tl' - ] }} - sequence: - - choose: - - conditions: "{{ trigger.event.data.command == '/toggle_rm_ceiling_light' }}" - sequence: - - if: - - condition: state - entity_id: binary_sensor.lighton_room - state: "off" - then: - - service: scene.turn_on - target: { entity_id: scene.komnata_osveshchenie_standart } - else: - - service: scene.turn_on - target: { entity_id: scene.komnata_vykl_svet } - - conditions: "{{ trigger.event.data.command == '/toggle_rm_light_day' }}" - sequence: - - service: scene.turn_on - target: { entity_id: scene.komnata_osveshchenie_standart } - - conditions: "{{ trigger.event.data.command == '/toggle_rm_light_night' }}" - sequence: - - service: scene.turn_on - target: { entity_id: scene.lght_room_night_on } - - conditions: "{{ trigger.event.data.command == '/toggle_rm_light_tv' }}" - sequence: - - service: scene.turn_on - target: { entity_id: scene.komnata_ambilight_sinii } - - conditions: "{{ trigger.event.data.command == '/toggle_rm_light_lv' }}" - sequence: - - service: scene.turn_on - target: { entity_id: scene.novaia_stsena } - - conditions: "{{ trigger.event.data.command == '/toggle_rm_tl' }}" - sequence: - - service: switch.toggle - target: { entity_id: switch.0xa4c138a1b1cd2be1 } - - delay: - milliseconds: 500 - - service: telegram_bot.answer_callback_query - data: - callback_query_id: "{{ trigger.event.data.id }}" - message: "✅ Команда выполнена" - - service: telegram_bot.edit_message - data: - message_id: "{{ trigger.event.data.message.message_id }}" - chat_id: "{{ trigger.event.data.chat_id }}" - message: | - 🏠 Управление: Комната - - 🌡️ Температура: {{ states('sensor.a4c1387695b9_temperature') }} °C | 💧 Влажность: {{ states('sensor.a4c1387695b9_humidity') }} % - 🚶 Присутствие: {% if is_state('sensor.room_motion', 'True') %}Движение{% else %}Нет движения{% endif %} - - 🔄 Обновлено: {{ now().strftime('%H:%M:%S') }} - inline_keyboard: - - '💡 Свет {% if is_state("binary_sensor.lighton_room", "off") %}🔴{% else %}🟢{% endif %}:/toggle_rm_ceiling_light' - - '☀️ Дневной свет:/toggle_rm_light_day, 🌙 Ночной свет:/toggle_rm_light_night' - - '📺 Свет для ТВ:/toggle_rm_light_tv, 💞 Романтика:/toggle_rm_light_lv' - - '🔌 Розетка тел. {% if is_state("switch.0xa4c138a1b1cd2be1", "off") %}🔴{% else %}🟢{% endif %}:/toggle_rm_tl' - - '🔙 Назад:/kv_control, 🔄 Обновить:/rm_control' - - # ========================================== - # --- МЕНЮ: ВАННАЯ --- - # ========================================== - - conditions: "{{ trigger.event.data.command == '/bt_control' }}" - sequence: - - service: telegram_bot.answer_callback_query - data: - callback_query_id: "{{ trigger.event.data.id }}" - message: "🔄 Загружаю меню ванной..." - - service: telegram_bot.edit_message - data: - message_id: "{{ trigger.event.data.message.message_id }}" - chat_id: "{{ trigger.event.data.chat_id }}" - message: | - 🛁 Управление: Ванная - - 🌡️ Температура: {{ states('sensor.0x00158d0007984db7_temperature') }} °C | 💧 Влажность: {{ states('sensor.0x00158d0007984db7_humidity') }} % - 🚶 Присутствие: {% if is_state('binary_sensor.datchik_prisutstviia_vannaia_presence', 'on') %}Движение{% else %}Нет движения{% endif %} - - 🌊 Стиральная машина: - {%- if is_state('sensor.stiralnaia_mashina_s_gorizontalnoi_zagruzkoi', 'on') %} - ▶️ Статус: {{ states('sensor.stiralnaia_mashina_s_gorizontalnoi_zagruzkoi_run_state') }} - ⏳ Осталось: {{ state_attr('sensor.stiralnaia_mashina_s_gorizontalnoi_zagruzkoi','remain_time') }} - {%- else %} - ⏹️ Выключена - {%- endif %} - - 🔄 Обновлено: {{ now().strftime('%H:%M:%S') }} - inline_keyboard: - - '💡 Свет {% if is_state("binary_sensor.lighton_bathroom", "off") %}🔴{% else %}🟢{% endif %}:/toggle_bt_ceiling_light, 🔲 Зеркало {% if is_state("switch.0x00158d00054e8e41_l1", "off") %}🔴{% else %}🟢{% endif %}:/toggle_bt_mirror' - - '☀️ Дневной свет:/toggle_bt_light_day, 🌙 Ночной свет:/toggle_bt_light_night' - - '🌊 Стиральная машина:/bt_wh_control' - - '🔙 Назад:/kv_control, 🔄 Обновить:/bt_control' - - # --- КНОПКИ УПРАВЛЕНИЯ ВАННОЙ --- - - conditions: > - {{ trigger.event.data.command in [ - '/toggle_bt_ceiling_light', '/toggle_bt_mirror', - '/toggle_bt_light_day', '/toggle_bt_light_night' - ] }} - sequence: - - choose: - - conditions: "{{ trigger.event.data.command == '/toggle_bt_ceiling_light' }}" - sequence: - - if: - - condition: state - entity_id: binary_sensor.lighton_bathroom - state: "off" - then: - - service: scene.turn_on - target: { entity_id: scene.vannaia_standartnyi_svet } - else: - - service: scene.turn_on - target: { entity_id: scene.vannaia_vykl_svet } - - conditions: "{{ trigger.event.data.command == '/toggle_bt_mirror' }}" - sequence: - - service: switch.toggle - target: { entity_id: switch.0x00158d00054e8e41_l1 } - - conditions: "{{ trigger.event.data.command == '/toggle_bt_light_day' }}" - sequence: - - service: scene.turn_on - target: { entity_id: scene.vannaia_standartnyi_svet } - - conditions: "{{ trigger.event.data.command == '/toggle_bt_light_night' }}" - sequence: - - service: scene.turn_on - target: { entity_id: scene.vannaia_nochnik_1 } - - delay: - milliseconds: 500 - - service: telegram_bot.answer_callback_query - data: - callback_query_id: "{{ trigger.event.data.id }}" - message: "✅ Команда выполнена" - - service: telegram_bot.edit_message - data: - message_id: "{{ trigger.event.data.message.message_id }}" - chat_id: "{{ trigger.event.data.chat_id }}" - message: | - 🛁 Управление: Ванная - - 🌡️ Температура: {{ states('sensor.0x00158d0007984db7_temperature') }} °C | 💧 Влажность: {{ states('sensor.0x00158d0007984db7_humidity') }} % - 🚶 Присутствие: {% if is_state('binary_sensor.datchik_prisutstviia_vannaia_presence', 'on') %}Движение{% else %}Нет движения{% endif %} - - 🌊 Стиральная машина: - {%- if is_state('sensor.stiralnaia_mashina_s_gorizontalnoi_zagruzkoi', 'on') %} - ▶️ Статус: {{ states('sensor.stiralnaia_mashina_s_gorizontalnoi_zagruzkoi_run_state') }} - ⏳ Осталось: {{ state_attr('sensor.stiralnaia_mashina_s_gorizontalnoi_zagruzkoi','remain_time') }} - {%- else %} - ⏹️ Выключена - {%- endif %} - - 🔄 Обновлено: {{ now().strftime('%H:%M:%S') }} - inline_keyboard: - - '💡 Свет {% if is_state("binary_sensor.lighton_bathroom", "off") %}🔴{% else %}🟢{% endif %}:/toggle_bt_ceiling_light, 🔲 Зеркало {% if is_state("switch.0x00158d00054e8e41_l1", "off") %}🔴{% else %}🟢{% endif %}:/toggle_bt_mirror' - - '☀️ Дневной свет:/toggle_bt_light_day, 🌙 Ночной свет:/toggle_bt_light_night' - - '🌊 Стиральная машина:/bt_wh_control' - - '🔙 Назад:/kv_control, 🔄 Обновить:/bt_control' - - # ========================================== - # --- ПОДМЕНЮ: СТИРАЛЬНАЯ МАШИНА --- - # ========================================== - - conditions: "{{ trigger.event.data.command == '/bt_wh_control' }}" - sequence: - - service: telegram_bot.answer_callback_query - data: - callback_query_id: "{{ trigger.event.data.id }}" - message: "🔄 Загружаю данные стиралки..." - - service: telegram_bot.edit_message - data: - message_id: "{{ trigger.event.data.message.message_id }}" - chat_id: "{{ trigger.event.data.chat_id }}" - message: | - 🌊 Стиральная машина: - - {% if is_state('sensor.stiralnaia_mashina_s_gorizontalnoi_zagruzkoi', 'on') %} - ▶️ Состояние: {{ states('sensor.stiralnaia_mashina_s_gorizontalnoi_zagruzkoi_run_state') }} - 📋 Программа: {{ states('sensor.stiralnaia_mashina_s_gorizontalnoi_zagruzkoi_current_course') }} - ♻️ Обороты: {{ states('sensor.stiralnaia_mashina_s_gorizontalnoi_zagruzkoi_spin_speed') }} - 🌡️ Температура: {{ states('sensor.stiralnaia_mashina_s_gorizontalnoi_zagruzkoi_water_temp') }} - 👕 Тип сушки: {{ states('sensor.stiralnaia_mashina_s_gorizontalnoi_zagruzkoi_dry_level') }} - 💧 Пред. стирка: {{ state_attr('sensor.stiralnaia_mashina_s_gorizontalnoi_zagruzkoi', 'pre_wash') }} - 🌊 Доп. полоскание: {{ states('sensor.stiralnaia_mashina_s_gorizontalnoi_zagruzkoi_rinse_mode') }} - ⏳ Осталось времени: {{ state_attr('sensor.stiralnaia_mashina_s_gorizontalnoi_zagruzkoi','remain_time') }} - ⏱️ Время окончания: {% if state_attr('sensor.stiralnaia_mashina_s_gorizontalnoi_zagruzkoi','end_time') %}{{ as_timestamp(state_attr('sensor.stiralnaia_mashina_s_gorizontalnoi_zagruzkoi','end_time')) | timestamp_custom('%H:%M:%S') }}{% else %}Нет данных{% endif %} - {% else %} - ⏹️ В данный момент стиральная машина выключена - {% endif %} - - 🔄 Обновлено: {{ now().strftime('%H:%M:%S') }} - inline_keyboard: - - '🔌 Питание {% if is_state("switch.stiralnaia_mashina_s_gorizontalnoi_zagruzkoi_power", "unavailable") %}🔴{% else %}🟢{% endif %}:/toggle_bt_washing' - - '🔙 Назад:/bt_control, 🔄 Обновить:/bt_wh_control' - - # --- КНОПКА: ВКЛ/ВЫКЛ СТИРАЛКУ --- - - conditions: "{{ trigger.event.data.command == '/toggle_bt_washing' }}" - sequence: - - service: switch.toggle - target: { entity_id: switch.stiralnaia_mashina_s_gorizontalnoi_zagruzkoi_power } - - delay: - milliseconds: 500 - - service: telegram_bot.answer_callback_query - data: - callback_query_id: "{{ trigger.event.data.id }}" - message: "🔌 Питание переключено" - - service: telegram_bot.edit_message - data: - message_id: "{{ trigger.event.data.message.message_id }}" - chat_id: "{{ trigger.event.data.chat_id }}" - message: | - 🌊 Стиральная машина: - - {% if is_state('sensor.stiralnaia_mashina_s_gorizontalnoi_zagruzkoi', 'on') %} - ▶️ Состояние: {{ states('sensor.stiralnaia_mashina_s_gorizontalnoi_zagruzkoi_run_state') }} - 📋 Программа: {{ states('sensor.stiralnaia_mashina_s_gorizontalnoi_zagruzkoi_current_course') }} - ♻️ Обороты: {{ states('sensor.stiralnaia_mashina_s_gorizontalnoi_zagruzkoi_spin_speed') }} - 🌡️ Температура: {{ states('sensor.stiralnaia_mashina_s_gorizontalnoi_zagruzkoi_water_temp') }} - 👕 Тип сушки: {{ states('sensor.stiralnaia_mashina_s_gorizontalnoi_zagruzkoi_dry_level') }} - 💧 Пред. стирка: {{ state_attr('sensor.stiralnaia_mashina_s_gorizontalnoi_zagruzkoi', 'pre_wash') }} - 🌊 Доп. полоскание: {{ states('sensor.stiralnaia_mashina_s_gorizontalnoi_zagruzkoi_rinse_mode') }} - ⏳ Осталось времени: {{ state_attr('sensor.stiralnaia_mashina_s_gorizontalnoi_zagruzkoi','remain_time') }} - ⏱️ Время окончания: {% if state_attr('sensor.stiralnaia_mashina_s_gorizontalnoi_zagruzkoi','end_time') %}{{ as_timestamp(state_attr('sensor.stiralnaia_mashina_s_gorizontalnoi_zagruzkoi','end_time')) | timestamp_custom('%H:%M:%S') }}{% else %}Нет данных{% endif %} - {% else %} - ⏹️ В данный момент стиральная машина выключена - {% endif %} - - 🔄 Обновлено: {{ now().strftime('%H:%M:%S') }} - inline_keyboard: - - '🔌 Питание {% if is_state("switch.stiralnaia_mashina_s_gorizontalnoi_zagruzkoi_power", "unavailable") %}🔴{% else %}🟢{% endif %}:/toggle_bt_washing' - - '🔙 Назад:/bt_control, 🔄 Обновить:/bt_wh_control' - - # ========================================== - # --- МЕНЮ: КУХНЯ --- - # ========================================== - - conditions: "{{ trigger.event.data.command == '/kn_control' }}" - sequence: - - service: telegram_bot.answer_callback_query - data: - callback_query_id: "{{ trigger.event.data.id }}" - message: "🔄 Загружаю меню кухни..." - - service: telegram_bot.edit_message - data: - message_id: "{{ trigger.event.data.message.message_id }}" - chat_id: "{{ trigger.event.data.chat_id }}" - message: | - 🍽️ Управление: Кухня - - 🌡️ Температура: {{ states('sensor.a4c138eb5c2a_temperature') }} °C | 💧 Влажность: {{ states('sensor.a4c138eb5c2a_humidity') }} % - 🚶 Присутствие: {% if is_state('binary_sensor.datchik_prisutstviia_kukhnia_presence', 'on') %}Движение{% else %}Нет движения{% endif %} - {%- if is_state('switch.posudomoechnaia_mashina_power', 'on') %} - 🌊 Мойка посуды: {{ states('sensor.401090521617010964_bsh_common_option_programprogress') }}% - {%- endif %} - - 🔄 Обновлено: {{ now().strftime('%H:%M:%S') }} - inline_keyboard: - - '💡 Свет {% if is_state("binary_sensor.lighton_kitchen", "off") %}🔴{% else %}🟢{% endif %}:/toggle_kn_ceiling_light' - - '☀️ Дневной свет:/toggle_kn_light_day, 🌙 Ночной свет:/toggle_kn_light_night' - - '🌊 Посудомойка {% if is_state("switch.posudomoechnaia_mashina_power", "off") %}🔴{% else %}🟢{% endif %}:/dw_control' - - '🍵 Термопот {% if is_state("switch.0x54ef4410000783c6", "off") %}🔴{% else %}🟢{% endif %}:/toggle_kn_tp' - - '🔙 Назад:/kv_control, 🔄 Обновить:/kn_control' - - # --- КНОПКИ УПРАВЛЕНИЯ КУХНЕЙ --- - - conditions: > - {{ trigger.event.data.command in [ - '/toggle_kn_ceiling_light', '/toggle_kn_light_day', - '/toggle_kn_light_night', '/toggle_kn_tp' - ] }} - sequence: - - choose: - - conditions: "{{ trigger.event.data.command == '/toggle_kn_ceiling_light' }}" - sequence: - - service: light.toggle - target: { entity_id: light.yeelink_ceilc_ff3a_light } - - conditions: "{{ trigger.event.data.command == '/toggle_kn_light_day' }}" - sequence: - - service: scene.turn_on - target: { entity_id: scene.svet_v_kukhne_100 } - - conditions: "{{ trigger.event.data.command == '/toggle_kn_light_night' }}" - sequence: - - service: scene.turn_on - target: { entity_id: scene.kukhnia_noch } - - conditions: "{{ trigger.event.data.command == '/toggle_kn_tp' }}" - sequence: - - service: switch.toggle - target: { entity_id: switch.0x54ef4410000783c6 } - - delay: - milliseconds: 500 - - service: telegram_bot.answer_callback_query - data: - callback_query_id: "{{ trigger.event.data.id }}" - message: "✅ Команда выполнена" - - service: telegram_bot.edit_message - data: - message_id: "{{ trigger.event.data.message.message_id }}" - chat_id: "{{ trigger.event.data.chat_id }}" - message: | - 🍽️ Управление: Кухня - - 🌡️ Температура: {{ states('sensor.a4c138eb5c2a_temperature') }} °C | 💧 Влажность: {{ states('sensor.a4c138eb5c2a_humidity') }} % - 🚶 Присутствие: {% if is_state('binary_sensor.datchik_prisutstviia_kukhnia_presence', 'on') %}Движение{% else %}Нет движения{% endif %} - {%- if is_state('switch.posudomoechnaia_mashina_power', 'on') %} - 🌊 Мойка посуды: {{ states('sensor.401090521617010964_bsh_common_option_programprogress') }}% - {%- endif %} - - 🔄 Обновлено: {{ now().strftime('%H:%M:%S') }} - inline_keyboard: - - '💡 Свет {% if is_state("binary_sensor.lighton_kitchen", "off") %}🔴{% else %}🟢{% endif %}:/toggle_kn_ceiling_light' - - '☀️ Дневной свет:/toggle_kn_light_day, 🌙 Ночной свет:/toggle_kn_light_night' - - '🌊 Посудомойка {% if is_state("switch.posudomoechnaia_mashina_power", "off") %}🔴{% else %}🟢{% endif %}:/dw_control' - - '🍵 Термопот {% if is_state("switch.0x54ef4410000783c6", "off") %}🔴{% else %}🟢{% endif %}:/toggle_kn_tp' - - '🔙 Назад:/kv_control, 🔄 Обновить:/kn_control' - - # ========================================== - # --- МЕНЮ: ПРИХОЖАЯ --- - # ========================================== - - conditions: "{{ trigger.event.data.command == '/lb_control' }}" - sequence: - - service: telegram_bot.answer_callback_query - data: - callback_query_id: "{{ trigger.event.data.id }}" - message: "🔄 Загружаю меню прихожей..." - - service: telegram_bot.edit_message - data: - message_id: "{{ trigger.event.data.message.message_id }}" - chat_id: "{{ trigger.event.data.chat_id }}" - message: | - 🚪 Управление: Прихожая - - 🚪 Входная дверь: {% if is_state ('binary_sensor.e4aaec3747b2_contact', 'off') %}Закрыта{% else %}Открыта{% endif %} - 🚶 Присутствие: {% if is_state('binary_sensor.0x00158d000707efdf_motion', 'on') %}Движение{% else %}Нет движения{% endif %} - - 🔄 Обновлено: {{ now().strftime('%H:%M:%S') }} - inline_keyboard: - - '💡 Свет день {% if is_state("switch.0x54ef4410003aa472_right", "off") %}🔴{% else %}🟢{% endif %}:/toggle_lb_d_ceiling_light' - - '💡 Свет ночь {% if is_state("switch.0x54ef4410003aa472_left", "off") %}🔴{% else %}🟢{% endif %}:/toggle_lb_n_ceiling_light' - - '🔙 Назад:/kv_control, 🔄 Обновить:/lb_control' - - # --- КНОПКИ УПРАВЛЕНИЯ ПРИХОЖЕЙ --- - - conditions: > - {{ trigger.event.data.command in [ - '/toggle_lb_d_ceiling_light', '/toggle_lb_n_ceiling_light', '/toggle_lb_off_door' - ] }} - sequence: - - choose: - - conditions: "{{ trigger.event.data.command == '/toggle_lb_d_ceiling_light' }}" - sequence: - - service: switch.toggle - target: { entity_id: switch.0x54ef4410003aa472_right } - - conditions: "{{ trigger.event.data.command == '/toggle_lb_n_ceiling_light' }}" - sequence: - - service: switch.toggle - target: { entity_id: switch.0x54ef4410003aa472_left } - - conditions: "{{ trigger.event.data.command == '/toggle_lb_off_door' }}" - sequence: - - service: automation.turn_off - target: { entity_id: automation.ntf_door_open_5min } - data: { stop_actions: true } - - service: automation.turn_on - target: { entity_id: automation.ntf_door_open_5min } - - delay: - milliseconds: 500 - - service: telegram_bot.answer_callback_query - data: - callback_query_id: "{{ trigger.event.data.id }}" - message: "✅ Команда выполнена" - - choose: - - conditions: "{{ trigger.event.data.command != '/toggle_lb_off_door' }}" - sequence: - - service: telegram_bot.edit_message - data: - message_id: "{{ trigger.event.data.message.message_id }}" - chat_id: "{{ trigger.event.data.chat_id }}" - message: | - 🚪 Управление: Прихожая - - 🚪 Входная дверь: {% if is_state ('binary_sensor.e4aaec3747b2_contact', 'off') %}Закрыта{% else %}Открыта{% endif %} - 🚶 Присутствие: {% if is_state('binary_sensor.0x00158d000707efdf_motion', 'on') %}Движение{% else %}Нет движения{% endif %} - - 🔄 Обновлено: {{ now().strftime('%H:%M:%S') }} - inline_keyboard: - - '💡 Свет день {% if is_state("switch.0x54ef4410003aa472_right", "off") %}🔴{% else %}🟢{% endif %}:/toggle_lb_d_ceiling_light' - - '💡 Свет ночь {% if is_state("switch.0x54ef4410003aa472_left", "off") %}🔴{% else %}🟢{% endif %}:/toggle_lb_n_ceiling_light' - - '🔙 Назад:/kv_control, 🔄 Обновить:/lb_control' - - # ========================================== - # --- МЕНЮ: GPS И ГЕОЛОКАЦИЯ (ГЛАВНОЕ) --- - # ========================================== - - conditions: "{{ trigger.event.data.command == '/gps_control' }}" - sequence: - - service: telegram_bot.answer_callback_query - data: - callback_query_id: "{{ trigger.event.data.id }}" - message: "🔄 Обновляю локации..." - - service: telegram_bot.edit_message - data: - message_id: "{{ trigger.event.data.message.message_id }}" - chat_id: "{{ trigger.event.data.chat_id }}" - message: | - {%- macro get_loc(entity) -%} - {%- set s = states(entity) -%} - {%- if s == 'home' %}Дома{% elif s == 'not_home' %}Не дома{% elif s == 'Родители Лены' %}Родители Лены{% elif s == 'Работа Денис' %}Работа Денис{% elif s in ['unknown', 'unavailable'] %}Нет данных{% else %}{{ s | capitalize }}{% endif -%} - {%- endmacro -%} - - 🌐 Кто? Где? - - 👩 Лена: {{ get_loc('device_tracker.google_maps_118311730364158481019') }} - 🔋 Телефон: {{ states('sensor.iphone_13_pro_max_battery') | default('—', true) }}% ({% set ch = state_attr('sensor.iphone_13_pro_max_battery', 'battery_status') %}{% if ch == 'NotCharging' %}не заряжается{% elif ch == 'Charging' %}идет заряд{% else %}нет данных{% endif %}) - 📍 Адрес: {{ state_attr('device_tracker.google_maps_118311730364158481019', 'address') | default('Нет данных', true) }} - - 👨 Денис: {{ get_loc('device_tracker.google_maps_108918666344169166438') }} - 🔋 Телефон: {{ state_attr('device_tracker.google_maps_108918666344169166438', 'battery_level') | default('—', true) }}% - 📍 Адрес: {{ state_attr('device_tracker.google_maps_108918666344169166438', 'address') | default('Нет данных', true) }} - - 🛴 Самокат: {{ get_loc('device_tracker.samokat_dddennnisss') }} - - 🔄 Обновлено: {{ now().strftime('%H:%M:%S') }} - inline_keyboard: - - '🗺️ Где Денис:/gps_send_loc_d, 🗺️ Где Лена:/gps_send_loc_e, 🗺️ Где Мама:/gps_send_loc_m' - - '🛴 Где самокат:/gps_send_loc_s' - - '✉️ Уведомления: Денис:/gps_control_d, ✉️ Уведомления: Лена:/gps_control_e' - - '🔙 Назад:/menu_back, 🔄 Обновить:/gps_control' - - # ========================================== - # --- ОТПРАВКА ГЕОЛОКАЦИИ (ОДИН БЛОК ДЛЯ ВСЕХ) --- - # ========================================== - - conditions: > - {{ trigger.event.data.command in [ - '/gps_send_loc_d', '/gps_send_loc_e', '/gps_send_loc_m', '/gps_send_loc_s' - ] }} - sequence: - # 1. Задаем словарь с нужными трекерами - - variables: - tracker: > - {% if trigger.event.data.command == '/gps_send_loc_d' %}device_tracker.google_maps_108918666344169166438 - {% elif trigger.event.data.command == '/gps_send_loc_e' %}device_tracker.google_maps_118311730364158481019 - {% elif trigger.event.data.command == '/gps_send_loc_m' %}device_tracker.google_maps_101930139594365808950 - {% else %}device_tracker.samokat_dddennnisss{% endif %} - person_name: > - {% if trigger.event.data.command == '/gps_send_loc_d' %}Дениса - {% elif trigger.event.data.command == '/gps_send_loc_e' %}Лены - {% elif trigger.event.data.command == '/gps_send_loc_m' %}Мамы - {% else %}самоката{% endif %} - - - service: telegram_bot.answer_callback_query - data: - callback_query_id: "{{ trigger.event.data.id }}" - message: "📍 Отправляю локацию {{ person_name }}..." - - # 2. Проверяем, есть ли координаты - - choose: - - conditions: "{{ state_attr(tracker, 'latitude') is not none and state_attr(tracker, 'longitude') is not none }}" - sequence: - - service: telegram_bot.delete_message - data: - message_id: "{{ trigger.event.data.message.message_id }}" - chat_id: "{{ trigger.event.data.chat_id }}" - # Отправляем карту - - service: telegram_bot.send_location - data: - chat_id: "{{ trigger.event.data.chat_id }}" - latitude: "{{ state_attr(tracker, 'latitude') }}" - longitude: "{{ state_attr(tracker, 'longitude') }}" - # Прикрепляем меню - - service: telegram_bot.send_message - data: - chat_id: "{{ trigger.event.data.chat_id }}" - message: | - 📍 Местоположение {{ person_name }}: - {% if trigger.event.data.command != '/gps_send_loc_s' %}{{ state_attr(tracker, 'address') | default('Адрес не определен') }}{% endif %} - inline_keyboard: - - '🗺️ Где Денис:/gps_send_loc_d, 🗺️ Где Лена:/gps_send_loc_e, 🗺️ Где Мама:/gps_send_loc_m' - - '🛴 Где самокат:/gps_send_loc_s' - - '✉️ Уведомления: Денис:/gps_control_d, ✉️ Уведомления: Лена:/gps_control_e' - - '🔙 Назад:/menu_back, 🔄 Обновить:/gps_control' - default: - # Координат нет - - service: telegram_bot.send_message - data: - chat_id: "{{ trigger.event.data.chat_id }}" - message: "⚠️ Не удалось получить координаты {{ person_name }}. Устройство не в сети." - - # ========================================== - # --- МЕНЮ: УВЕДОМЛЕНИЯ ДЕНИС --- - # ========================================== - - conditions: "{{ trigger.event.data.command == '/gps_control_d' }}" - sequence: - - service: telegram_bot.answer_callback_query - data: - callback_query_id: "{{ trigger.event.data.id }}" - message: "🔄 Загружаю меню уведомлений..." - - service: telegram_bot.edit_message - data: - message_id: "{{ trigger.event.data.message.message_id }}" - chat_id: "{{ trigger.event.data.chat_id }}" - message: | - ✉️ Настройка уведомлений: Денис - Выберите, о каких перемещениях получать сообщения: - inline_keyboard: - - "{% if is_state('automation.gps_denis_on_home', 'off')%}🔴{% else %}🟢{% endif %} Дома:/toggle_gps_d_hm_on, {% if is_state('automation.gps_denis_off_home', 'off')%}🔴{% else %}🟢{% endif %} Не дома:/toggle_gps_d_hm_off" - - "{% if is_state('automation.gps_denis_on_mama', 'off')%}🔴{% else %}🟢{% endif %} У мамы:/toggle_gps_d_mm_on, {% if is_state('automation.gps_denis_off_mama', 'off')%}🔴{% else %}🟢{% endif %} Не у мамы:/toggle_gps_d_mm_off" - - "{% if is_state('automation.gps_denis_on_raduga', 'off')%}🔴{% else %}🟢{% endif %} На радуге:/toggle_gps_d_rd_on, {% if is_state('automation.gps_denis_off_raduga', 'off')%}🔴{% else %}🟢{% endif %} Не на радуге:/toggle_gps_d_rd_off" - - "{% if is_state('automation.gps_denis_on_job', 'off')%}🔴{% else %}🟢{% endif %} На работе:/toggle_gps_d_jb_on, {% if is_state('automation.gps_denis_off_job', 'off')%}🔴{% else %}🟢{% endif %} Не на работе:/toggle_gps_d_jb_off" - - "{% if is_state('automation.gps_denis_on_ya', 'off')%}🔴{% else %}🟢{% endif %} У яшки:/toggle_gps_d_ya_on" - - "{% if is_state('automation.gps_denis_on_center', 'off')%}🔴{% else %}🟢{% endif %} В центре:/toggle_gps_d_c_on, {% if is_state('automation.gps_denis_off_center', 'off')%}🔴{% else %}🟢{% endif %} Не в центре:/toggle_gps_d_c_off" - - "{% if is_state('automation.gps_denis_on_len', 'off')%}🔴{% else %}🟢{% endif %} В Ленинском:/toggle_gps_d_len_on, {% if is_state('automation.gps_denis_off_len', 'off')%}🔴{% else %}🟢{% endif %} Не в ленинском:/toggle_gps_d_len_off" - - "{% if is_state('automation.gps_denis_on_kem', 'off')%}🔴{% else %}🟢{% endif %} В Кемерово:/toggle_gps_d_kem_on, {% if is_state('automation.gps_denis_off_kem', 'off')%}🔴{% else %}🟢{% endif %} Не в Кемерово:/toggle_gps_d_kem_off" - - "🔙 Назад:/gps_control, 🔄 Обновить:/gps_control_d" - - # ========================================== - # --- МЕНЮ: УВЕДОМЛЕНИЯ ЛЕНА --- - # ========================================== - - conditions: "{{ trigger.event.data.command == '/gps_control_e' }}" - sequence: - - service: telegram_bot.answer_callback_query - data: - callback_query_id: "{{ trigger.event.data.id }}" - message: "🔄 Загружаю меню уведомлений..." - - service: telegram_bot.edit_message - data: - message_id: "{{ trigger.event.data.message.message_id }}" - chat_id: "{{ trigger.event.data.chat_id }}" - message: | - ✉️ Настройка уведомлений: Лена - Выберите, о каких перемещениях получать сообщения: - inline_keyboard: - - "{% if is_state('automation.gps_lena_on_home', 'off')%}🔴{% else %}🟢{% endif %} Дома:/toggle_gps_e_hm_on, {% if is_state('automation.gps_lena_off_home', 'off')%}🔴{% else %}🟢{% endif %} Не дома:/toggle_gps_e_hm_off" - - "{% if is_state('automation.gps_lena_on_mama', 'off')%}🔴{% else %}🟢{% endif %} У мамы:/toggle_gps_e_mm_on, {% if is_state('automation.gps_lena_off_mama', 'off')%}🔴{% else %}🟢{% endif %} Не у мамы:/toggle_gps_e_mm_off" - - "{% if is_state('automation.gps_lena_on_raduga', 'off')%}🔴{% else %}🟢{% endif %} На радуге:/toggle_gps_e_rd_on, {% if is_state('automation.gps_lena_off_raduga', 'off')%}🔴{% else %}🟢{% endif %} Не на радуге:/toggle_gps_e_rd_off" - - "{% if is_state('automation.gps_lena_on_job', 'off')%}🔴{% else %}🟢{% endif %} На работе:/toggle_gps_e_jb_on, {% if is_state('automation.gps_lena_off_job', 'off')%}🔴{% else %}🟢{% endif %} Не на работе:/toggle_gps_e_jb_off" - - "{% if is_state('automation.gps_lena_on_ya', 'off')%}🔴{% else %}🟢{% endif %} У яшки:/toggle_gps_e_ya_on" - - "{% if is_state('automation.gps_lena_on_familyr', 'off')%}🔴{% else %}🟢{% endif %} У родителей:/toggle_gps_e_fm_on, {% if is_state('automation.gps_lena_off_familyr', 'off')%}🔴{% else %}🟢{% endif %} Не у родителей:/toggle_gps_e_fm_off" - - "{% if is_state('automation.gps_lena_on_center', 'off')%}🔴{% else %}🟢{% endif %} В центре:/toggle_gps_e_c_on, {% if is_state('automation.gps_lena_off_center', 'off')%}🔴{% else %}🟢{% endif %} Не в центре:/toggle_gps_e_c_off" - - "{% if is_state('automation.gps_elena_on_len', 'off')%}🔴{% else %}🟢{% endif %} В Ленинском:/toggle_gps_e_len_on, {% if is_state('automation.gps_elena_off_len', 'off')%}🔴{% else %}🟢{% endif %} Не в ленинском:/toggle_gps_e_len_off" - - "{% if is_state('automation.gps_elena_on_kem', 'off')%}🔴{% else %}🟢{% endif %} В Кемерово:/toggle_gps_e_kem_on, {% if is_state('automation.gps_elena_off_kem', 'off')%}🔴{% else %}🟢{% endif %} Не в Кемерово:/toggle_gps_e_kem_off" - - "🔙 Назад:/gps_control, 🔄 Обновить:/gps_control_e" - -# ========================================== - # --- УМНЫЙ БЛОК ПЕРЕКЛЮЧЕНИЯ ВСЕХ УВЕДОМЛЕНИЙ --- - # ========================================== - - conditions: "{{ trigger.event.data.command.startswith('/toggle_gps_') }}" - sequence: - - variables: - # Словарь-маппинг: Команда -> Название автоматизации - auto_map: - '/toggle_gps_d_hm_on': 'automation.gps_denis_on_home' - '/toggle_gps_d_hm_off': 'automation.gps_denis_off_home' - '/toggle_gps_d_mm_on': 'automation.gps_denis_on_mama' - '/toggle_gps_d_mm_off': 'automation.gps_denis_off_mama' - '/toggle_gps_d_rd_on': 'automation.gps_denis_on_raduga' - '/toggle_gps_d_rd_off': 'automation.gps_denis_off_raduga' - '/toggle_gps_d_jb_on': 'automation.gps_denis_on_job' - '/toggle_gps_d_jb_off': 'automation.gps_denis_off_job' - '/toggle_gps_d_ya_on': 'automation.gps_denis_on_ya' - '/toggle_gps_d_c_on': 'automation.gps_denis_on_center' - '/toggle_gps_d_c_off': 'automation.gps_denis_off_center' - '/toggle_gps_d_len_on': 'automation.gps_denis_on_len' - '/toggle_gps_d_len_off': 'automation.gps_denis_off_len' - '/toggle_gps_d_kem_on': 'automation.gps_denis_on_kem' - '/toggle_gps_d_kem_off': 'automation.gps_denis_off_kem' - '/toggle_gps_e_hm_on': 'automation.gps_lena_on_home' - '/toggle_gps_e_hm_off': 'automation.gps_lena_off_home' - '/toggle_gps_e_mm_on': 'automation.gps_lena_on_mama' - '/toggle_gps_e_mm_off': 'automation.gps_lena_off_mama' - '/toggle_gps_e_rd_on': 'automation.gps_lena_on_raduga' - '/toggle_gps_e_rd_off': 'automation.gps_lena_off_raduga' - '/toggle_gps_e_jb_on': 'automation.gps_lena_on_job' - '/toggle_gps_e_jb_off': 'automation.gps_lena_off_job' - '/toggle_gps_e_ya_on': 'automation.gps_lena_on_ya' - '/toggle_gps_e_fm_on': 'automation.gps_lena_on_familyr' - '/toggle_gps_e_fm_off': 'automation.gps_lena_off_familyr' - '/toggle_gps_e_c_on': 'automation.gps_lena_on_center' - '/toggle_gps_e_c_off': 'automation.gps_lena_off_center' - '/toggle_gps_e_len_on': 'automation.gps_elena_on_len' - '/toggle_gps_e_len_off': 'automation.gps_elena_off_len' - '/toggle_gps_e_kem_on': 'automation.gps_elena_on_kem' - '/toggle_gps_e_kem_off': 'automation.gps_elena_off_kem' - target_auto: "{{ auto_map.get(trigger.event.data.command) }}" - - # Дергаем нужную автоматизацию - - service: automation.toggle - target: - entity_id: "{{ target_auto }}" - - delay: - milliseconds: 300 - - - service: telegram_bot.answer_callback_query - data: - callback_query_id: "{{ trigger.event.data.id }}" - message: "✅ Настройка изменена" - - # Обновляем менюшку в зависимости от того, чьи настройки меняли - - choose: - # Ветка Дениса - - conditions: "{{ '_d_' in trigger.event.data.command }}" - sequence: - - service: telegram_bot.edit_message - data: - message_id: "{{ trigger.event.data.message.message_id }}" - chat_id: "{{ trigger.event.data.chat_id }}" - message: | - ✉️ Настройка уведомлений: Денис - Выберите, о каких перемещениях получать сообщения: - inline_keyboard: - - "{% if is_state('automation.gps_denis_on_home', 'off')%}🔴{% else %}🟢{% endif %} Дома:/toggle_gps_d_hm_on, {% if is_state('automation.gps_denis_off_home', 'off')%}🔴{% else %}🟢{% endif %} Не дома:/toggle_gps_d_hm_off" - - "{% if is_state('automation.gps_denis_on_mama', 'off')%}🔴{% else %}🟢{% endif %} У мамы:/toggle_gps_d_mm_on, {% if is_state('automation.gps_denis_off_mama', 'off')%}🔴{% else %}🟢{% endif %} Не у мамы:/toggle_gps_d_mm_off" - - "{% if is_state('automation.gps_denis_on_raduga', 'off')%}🔴{% else %}🟢{% endif %} На радуге:/toggle_gps_d_rd_on, {% if is_state('automation.gps_denis_off_raduga', 'off')%}🔴{% else %}🟢{% endif %} Не на радуге:/toggle_gps_d_rd_off" - - "{% if is_state('automation.gps_denis_on_job', 'off')%}🔴{% else %}🟢{% endif %} На работе:/toggle_gps_d_jb_on, {% if is_state('automation.gps_denis_off_job', 'off')%}🔴{% else %}🟢{% endif %} Не на работе:/toggle_gps_d_jb_off" - - "{% if is_state('automation.gps_denis_on_ya', 'off')%}🔴{% else %}🟢{% endif %} У яшки:/toggle_gps_d_ya_on" - - "{% if is_state('automation.gps_denis_on_center', 'off')%}🔴{% else %}🟢{% endif %} В центре:/toggle_gps_d_c_on, {% if is_state('automation.gps_denis_off_center', 'off')%}🔴{% else %}🟢{% endif %} Не в центре:/toggle_gps_d_c_off" - - "{% if is_state('automation.gps_denis_on_len', 'off')%}🔴{% else %}🟢{% endif %} В Ленинском:/toggle_gps_d_len_on, {% if is_state('automation.gps_denis_off_len', 'off')%}🔴{% else %}🟢{% endif %} Не в ленинском:/toggle_gps_d_len_off" - - "{% if is_state('automation.gps_denis_on_kem', 'off')%}🔴{% else %}🟢{% endif %} В Кемерово:/toggle_gps_d_kem_on, {% if is_state('automation.gps_denis_off_kem', 'off')%}🔴{% else %}🟢{% endif %} Не в Кемерово:/toggle_gps_d_kem_off" - - "🔙 Назад:/gps_control, 🔄 Обновить:/gps_control_d" - - # Ветка Лены - - conditions: "{{ '_e_' in trigger.event.data.command }}" - sequence: - - service: telegram_bot.edit_message - data: - message_id: "{{ trigger.event.data.message.message_id }}" - chat_id: "{{ trigger.event.data.chat_id }}" - message: | - ✉️ Настройка уведомлений: Лена - Выберите, о каких перемещениях получать сообщения: - inline_keyboard: - - "{% if is_state('automation.gps_lena_on_home', 'off')%}🔴{% else %}🟢{% endif %} Дома:/toggle_gps_e_hm_on, {% if is_state('automation.gps_lena_off_home', 'off')%}🔴{% else %}🟢{% endif %} Не дома:/toggle_gps_e_hm_off" - - "{% if is_state('automation.gps_lena_on_mama', 'off')%}🔴{% else %}🟢{% endif %} У мамы:/toggle_gps_e_mm_on, {% if is_state('automation.gps_lena_off_mama', 'off')%}🔴{% else %}🟢{% endif %} Не у мамы:/toggle_gps_e_mm_off" - - "{% if is_state('automation.gps_lena_on_raduga', 'off')%}🔴{% else %}🟢{% endif %} На радуге:/toggle_gps_e_rd_on, {% if is_state('automation.gps_lena_off_raduga', 'off')%}🔴{% else %}🟢{% endif %} Не на радуге:/toggle_gps_e_rd_off" - - "{% if is_state('automation.gps_lena_on_job', 'off')%}🔴{% else %}🟢{% endif %} На работе:/toggle_gps_e_jb_on, {% if is_state('automation.gps_lena_off_job', 'off')%}🔴{% else %}🟢{% endif %} Не на работе:/toggle_gps_e_jb_off" - - "{% if is_state('automation.gps_lena_on_ya', 'off')%}🔴{% else %}🟢{% endif %} У яшки:/toggle_gps_e_ya_on" - - "{% if is_state('automation.gps_lena_on_familyr', 'off')%}🔴{% else %}🟢{% endif %} У родителей:/toggle_gps_e_fm_on, {% if is_state('automation.gps_lena_off_familyr', 'off')%}🔴{% else %}🟢{% endif %} Не у родителей:/toggle_gps_e_fm_off" - - "{% if is_state('automation.gps_lena_on_center', 'off')%}🔴{% else %}🟢{% endif %} В центре:/toggle_gps_e_c_on, {% if is_state('automation.gps_lena_off_center', 'off')%}🔴{% else %}🟢{% endif %} Не в центре:/toggle_gps_e_c_off" - - "{% if is_state('automation.gps_elena_on_len', 'off')%}🔴{% else %}🟢{% endif %} В Ленинском:/toggle_gps_e_len_on, {% if is_state('automation.gps_elena_off_len', 'off')%}🔴{% else %}🟢{% endif %} Не в ленинском:/toggle_gps_e_len_off" - - "{% if is_state('automation.gps_elena_on_kem', 'off')%}🔴{% else %}🟢{% endif %} В Кемерово:/toggle_gps_e_kem_on, {% if is_state('automation.gps_elena_off_kem', 'off')%}🔴{% else %}🟢{% endif %} Не в Кемерово:/toggle_gps_e_kem_off" - - "🔙 Назад:/gps_control, 🔄 Обновить:/gps_control_e" - - # ========================================== - # --- МЕНЮ: ТОРРЕНТЫ --- - # ========================================== - - conditions: "{{ trigger.event.data.command == '/tr_control' }}" - sequence: - - service: telegram_bot.answer_callback_query - data: - callback_query_id: "{{ trigger.event.data.id }}" - message: "🔄 Обновляю список торрентов..." - - service: telegram_bot.edit_message - data: - message_id: "{{ trigger.event.data.message.message_id }}" - chat_id: "{{ trigger.event.data.chat_id }}" - parse_mode: html - message: | - 📝 Управление: Торренты - - {% set payload = state_attr('sensor.transmission_total_torrents_2', 'torrent_info') %} - {%- if payload -%} - {%- set status_icons = { - 'downloading': '⬇️', - 'seeding': '🚀', - 'paused': '⏸', - 'stopped': '⏹', - 'checking': '🔍', - 'error': '⚠️', - 'waiting': '⏳', - 'queued': '🕓' - } -%} - {%- for name, data in payload.items() %} - {{ status_icons.get(data.status, '❓') }} {{ name | truncate(35, true, '...') }} - └ 📈 {{ data.percent_done }}% | ℹ️ {{ data.status }} - {% endfor -%} - {%- else %} - ⚠️ Нет активных загрузок или нет данных от Transmission. - {%- endif %} - - 🔄 Обновлено: {{ now().strftime('%H:%M:%S') }} - inline_keyboard: - - '🔙 Назад:/menu_back, 🔄 Обновить:/tr_control' - - # ========================================== - # --- МЕНЮ: УПРАВЛЕНИЕ АВТОМАТИЗАЦИЕЙ --- - # ========================================== - - conditions: "{{ trigger.event.data.command == '/au_control' }}" - sequence: - - service: telegram_bot.answer_callback_query - data: - callback_query_id: "{{ trigger.event.data.id }}" - message: "🔄 Загружаю меню автоматизаций..." - - service: telegram_bot.edit_message - data: - message_id: "{{ trigger.event.data.message.message_id }}" - chat_id: "{{ trigger.event.data.chat_id }}" - parse_mode: html - message: | - ⚙️ Управление автоматизацией: - inline_keyboard: - - '🔦 Автоматизация света:/au_l_control' - - '🔙 Назад:/menu_back, 🔄 Обновить:/au_control' - - # ========================================== - # --- ПОДМЕНЮ: АВТОМАТИЗАЦИЯ СВЕТА --- - # ========================================== - - conditions: "{{ trigger.event.data.command == '/au_l_control' }}" - sequence: - - service: telegram_bot.answer_callback_query - data: - callback_query_id: "{{ trigger.event.data.id }}" - message: "🔄 Загружаю автоматизации света..." - - service: telegram_bot.edit_message - data: - message_id: "{{ trigger.event.data.message.message_id }}" - chat_id: "{{ trigger.event.data.chat_id }}" - parse_mode: html - message: | - 🔦 Управление автоматизацией света: - inline_keyboard: - - '💡 Свет кухня {% if is_state("automation.lght_kitchen_on_lght_50", "off") %}🔴{% else %}🟢{% endif %}:/toggle_au_light_kn' - - '💡 Свет ванная {% if is_state("automation.lght_bathroom_on_standart_light", "off") %}🔴{% else %}🟢{% endif %}:/toggle_au_light_bt' - - '💡 Свет прихожая {% if is_state("automation.lght_lobby_light_on_day_motion", "off") %}🔴{% else %}🟢{% endif %}:/toggle_au_light_lb' - - '🔙 Назад:/au_control, 🔄 Обновить:/au_l_control' - - # ========================================== - # --- КНОПКИ: ПЕРЕКЛЮЧЕНИЕ СВЕТА --- - # ========================================== - - conditions: > - {{ trigger.event.data.command in [ - '/toggle_au_light_kn', '/toggle_au_light_bt', '/toggle_au_light_lb' - ] }} - sequence: - - choose: - - conditions: "{{ trigger.event.data.command == '/toggle_au_light_kn' }}" - sequence: - - service: automation.toggle - target: - entity_id: automation.lght_kitchen_on_lght_50 - - conditions: "{{ trigger.event.data.command == '/toggle_au_light_bt' }}" - sequence: - - service: automation.toggle - target: - entity_id: - - automation.lght_bathroom_on_standart_light - - automation.lght_bathroom_on_night_light - - conditions: "{{ trigger.event.data.command == '/toggle_au_light_lb' }}" - sequence: - - service: automation.toggle - target: - entity_id: - - automation.lght_lobby_light_on_day_motion - - automation.lght_lobby_light_on_night_motion - - - delay: - milliseconds: 500 - - - service: telegram_bot.answer_callback_query - data: - callback_query_id: "{{ trigger.event.data.id }}" - message: "✅ Статус автоматизации изменён" - - - service: telegram_bot.edit_message - data: - message_id: "{{ trigger.event.data.message.message_id }}" - chat_id: "{{ trigger.event.data.chat_id }}" - parse_mode: html - message: | - 🔦 Управление автоматизацией света: - inline_keyboard: - - '💡 Свет кухня {% if is_state("automation.lght_kitchen_on_lght_50", "off") %}🔴{% else %}🟢{% endif %}:/toggle_au_light_kn' - - '💡 Свет ванная {% if is_state("automation.lght_bathroom_on_standart_light", "off") %}🔴{% else %}🟢{% endif %}:/toggle_au_light_bt' - - '💡 Свет прихожая {% if is_state("automation.lght_lobby_light_on_day_motion", "off") %}🔴{% else %}🟢{% endif %}:/toggle_au_light_lb' - - '🔙 Назад:/au_control, 🔄 Обновить:/au_l_control' - - # ========================================== - # --- МЕНЮ: УПРАВЛЕНИЕ САМОКАТОМ --- - # ========================================== - - conditions: "{{ trigger.event.data.command == '/sc_control' }}" - sequence: - - service: telegram_bot.answer_callback_query - data: - callback_query_id: "{{ trigger.event.data.id }}" - message: "🔄 Обновляю данные самоката..." - - service: telegram_bot.edit_message - data: - message_id: "{{ trigger.event.data.message.message_id }}" - chat_id: "{{ trigger.event.data.chat_id }}" - parse_mode: html - message: | - 🛴 Управление самокатом: - - 📈 Скорость: {{ states('sensor.samokat_dddennnisss_speed') }} км/ч - 🏃‍♂️ Движение: {% if is_state('binary_sensor.samokat_dddennnisss_motion', 'on') %}Да{% else %}Нет{% endif %} - {% if is_state('input_boolean.scooter_protection_active', 'on') %}🔐 Защита включена{% else %}🔓 Защита отключена{% endif %} - - 🛰️ GPS свежий: {% if is_state('binary_sensor.scooter_gps_data_fresh', 'on') %}Да ✅{% else %}Нет ❌{% endif %} - ⏳ Возраст (самокат): {{ (state_attr('binary_sensor.scooter_gps_data_fresh', 'scooter_age_seconds') or 0) | int }} сек - ⏳ Возраст (Денис): {{ (state_attr('binary_sensor.scooter_gps_data_fresh', 'dddennnisss_age_seconds') or 0) | int }} сек - 📍 Расстояние: {{ distance( - state_attr('device_tracker.google_maps_108918666344169166438', 'latitude'), - state_attr('device_tracker.google_maps_108918666344169166438', 'longitude'), - state_attr('device_tracker.samokat_dddennnisss', 'latitude'), - state_attr('device_tracker.samokat_dddennnisss', 'longitude') - ) | round(2) }} км - - 🔄 Обновлено: {{ now().strftime('%H:%M:%S') }} - inline_keyboard: - - "{% if is_state('input_boolean.scooter_protection_active', 'on') %}🔓 Снять защиту:/sc_r_unlocked{% else %}🔐 Включить защиту:/sc_r_locked{% endif %}" - - '🗺️ Где самокат:/gps_send_loc_s' - - '🔙 Назад:/menu_back, 🔄 Обновить:/sc_control' - - # ========================================== - # --- КНОПКИ: БЛОКИРОВКА САМОКАТА --- - # ========================================== - - conditions: "{{ trigger.event.data.command in ['/sc_r_locked', '/sc_r_unlocked'] }}" - sequence: - - service: >- - {% if trigger.event.data.command == '/sc_r_locked' %}input_boolean.turn_on{% else %}input_boolean.turn_off{% endif %} - target: - entity_id: input_boolean.scooter_protection_active - - - delay: - milliseconds: 500 - - - service: telegram_bot.answer_callback_query - data: - callback_query_id: "{{ trigger.event.data.id }}" - message: "✅ Статус защиты изменён" - - # Возвращаемся в меню самоката для обновления статуса - - service: telegram_bot.edit_message - data: - message_id: "{{ trigger.event.data.message.message_id }}" - chat_id: "{{ trigger.event.data.chat_id }}" - parse_mode: html - message: | - 🛴 Управление самокатом: - - 📈 Скорость: {{ states('sensor.samokat_dddennnisss_speed') }} км/ч - 🏃‍♂️ Движение: {% if is_state('binary_sensor.samokat_dddennnisss_motion', 'on') %}Да{% else %}Нет{% endif %} - {% if is_state('input_boolean.scooter_protection_active', 'on') %}🔐 Защита включена{% else %}🔓 Защита отключена{% endif %} - - 🛰️ GPS свежий: {% if is_state('binary_sensor.scooter_gps_data_fresh', 'on') %}Да ✅{% else %}Нет ❌{% endif %} - ⏳ Возраст (самокат): {{ (state_attr('binary_sensor.scooter_gps_data_fresh', 'scooter_age_seconds') or 0) | int }} сек - ⏳ Возраст (Денис): {{ (state_attr('binary_sensor.scooter_gps_data_fresh', 'dddennnisss_age_seconds') or 0) | int }} сек - 📍 Расстояние: {{ distance( - state_attr('device_tracker.google_maps_108918666344169166438', 'latitude'), - state_attr('device_tracker.google_maps_108918666344169166438', 'longitude'), - state_attr('device_tracker.samokat_dddennnisss', 'latitude'), - state_attr('device_tracker.samokat_dddennnisss', 'longitude') - ) | round(2) }} км - - 🔄 Обновлено: {{ now().strftime('%H:%M:%S') }} - inline_keyboard: - - "{% if is_state('input_boolean.scooter_protection_active', 'on') %}🔓 Снять защиту:/sc_r_unlocked{% else %}🔐 Включить защиту:/sc_r_locked{% endif %}" - - '🗺️ Где самокат:/gps_send_loc_s' - - '🔙 Назад:/menu_back, 🔄 Обновить:/sc_control' - - # ========================================== - # --- МЕНЮ: УПРАВЛЕНИЕ STEAM DECK --- - # ========================================== - - conditions: "{{ trigger.event.data.command == '/sd_control' }}" - sequence: - - service: telegram_bot.answer_callback_query - data: - callback_query_id: "{{ trigger.event.data.id }}" - message: "🔄 Подключаюсь к Steam Deck..." - - service: telegram_bot.edit_message - data: - message_id: "{{ trigger.event.data.message.message_id }}" - chat_id: "{{ trigger.event.data.chat_id }}" - parse_mode: html - message: | - 🎮 Управление: Steam Deck - - {% if is_state('binary_sensor.steamdeck', 'on') %} - 🟢 Статус: В сети - - 🧠 CPU: {{ states('sensor.steamdeck_cpu_usage') }}% - 💾 RAM: {{ states('sensor.steamdeck_ram_used') }} ГБ из {{ states('sensor.steamdeck_ram_total') }} ГБ ({{ states('sensor.steamdeck_ram_usage') }}%) - - 📁 Диск: - 📦 Внутр.: {{ states('sensor.steamdeck_disk_internal_free') }} своб. ({{ states('sensor.steamdeck_disk_internal_usage') }}%) - 💽 SD-карта: {{ states('sensor.steamdeck_disk_sd_free') }} своб. ({{ states('sensor.steamdeck_disk_sd_usage') }}%) - - 🌡 Температура: - 🔋 Батарея: {{ states('sensor.steamdeck_temp_battery') }} °C - 🧩 Composite: {{ states('sensor.steamdeck_temp_composite') }} °C - ♨️ Edge: {{ states('sensor.steamdeck_temp_edge') }} °C - - ⏱ Аптайм: {{ states('sensor.steamdeck_uptime_human') }} - {% else %} - 🔴 Статус: Недоступен (Выключен или спит) - {% endif %} - - 🔄 Обновлено: {{ now().strftime('%H:%M:%S') }} - inline_keyboard: - - "{% if is_state('binary_sensor.steamdeck', 'off') %}💡 Включить:/toggle_sd_wol{% else %}💤 Спящий режим:/toggle_sd_sleep{% endif %}" - - "🔄 Перезагрузить:/toggle_sd_reboot" - - "🎮 Gamemode:/toggle_sd_gamemode, 💻 Desktop:/toggle_sd_desktop" - - "🔙 Назад:/menu_back, 🔄 Обновить:/sd_control" - - # ========================================== - # --- КНОПКИ: КОМАНДЫ STEAM DECK --- - # ========================================== - - conditions: > - {{ trigger.event.data.command in [ - '/toggle_sd_wol', '/toggle_sd_reboot', '/toggle_sd_gamemode', - '/toggle_sd_desktop', '/toggle_sd_sleep' - ] }} - sequence: - # 1. Выбираем, какое всплывающее уведомление показать - - variables: - action_msg: > - {% if trigger.event.data.command == '/toggle_sd_wol' %}📡 Steam Deck разбужен! - {% elif trigger.event.data.command == '/toggle_sd_reboot' %}🔄 Перезагружается... - {% elif trigger.event.data.command == '/toggle_sd_gamemode' %}🎮 Gamemode запущен! - {% elif trigger.event.data.command == '/toggle_sd_desktop' %}🔌 Desktop запущен! - {% elif trigger.event.data.command == '/toggle_sd_sleep' %}💤 Включен спящий режим - {% endif %} - - # 2. Выполняем нужную shell-команду - - choose: - - conditions: "{{ trigger.event.data.command == '/toggle_sd_wol' }}" - sequence: - - service: shell_command.wrt_wol_sd - - conditions: "{{ trigger.event.data.command == '/toggle_sd_reboot' }}" - sequence: - - service: shell_command.steamdeck_reboot - - conditions: "{{ trigger.event.data.command == '/toggle_sd_gamemode' }}" - sequence: - - service: shell_command.steamdeck_gamemode - - conditions: "{{ trigger.event.data.command == '/toggle_sd_desktop' }}" - sequence: - - service: shell_command.steamdeck_desktop - - conditions: "{{ trigger.event.data.command == '/toggle_sd_sleep' }}" - sequence: - - service: shell_command.steamdeck_sleep - - - delay: - milliseconds: 500 - - # 3. Показываем всплывающее окно - - service: telegram_bot.answer_callback_query - data: - callback_query_id: "{{ trigger.event.data.id }}" - message: "{{ action_msg }}" - - # 4. Плавно обновляем меню (перерисовываем текст) - - service: telegram_bot.edit_message - data: - message_id: "{{ trigger.event.data.message.message_id }}" - chat_id: "{{ trigger.event.data.chat_id }}" - parse_mode: html - message: | - 🎮 Управление: Steam Deck - - {% if is_state('binary_sensor.steamdeck', 'on') %} - 🟢 Статус: В сети - - 🧠 CPU: {{ states('sensor.steamdeck_cpu_usage') }}% - 💾 RAM: {{ states('sensor.steamdeck_ram_used') }} ГБ из {{ states('sensor.steamdeck_ram_total') }} ГБ ({{ states('sensor.steamdeck_ram_usage') }}%) - - 📁 Диск: - 📦 Внутр.: {{ states('sensor.steamdeck_disk_internal_free') }} своб. ({{ states('sensor.steamdeck_disk_internal_usage') }}%) - 💽 SD-карта: {{ states('sensor.steamdeck_disk_sd_free') }} своб. ({{ states('sensor.steamdeck_disk_sd_usage') }}%) - - 🌡 Температура: - 🔋 Батарея: {{ states('sensor.steamdeck_temp_battery') }} °C - 🧩 Composite: {{ states('sensor.steamdeck_temp_composite') }} °C - ♨️ Edge: {{ states('sensor.steamdeck_temp_edge') }} °C - - ⏱ Аптайм: {{ states('sensor.steamdeck_uptime_human') }} - {% else %} - 🔴 Статус: Недоступен (Выключен или спит) - {% endif %} - - 🔄 Обновлено: {{ now().strftime('%H:%M:%S') }} - inline_keyboard: - - "{% if is_state('binary_sensor.steamdeck', 'off') %}💡 Включить:/toggle_sd_wol{% else %}💤 Спящий режим:/toggle_sd_sleep{% endif %}" - - "🔄 Перезагрузить:/toggle_sd_reboot" - - "🎮 Gamemode:/toggle_sd_gamemode, 💻 Desktop:/toggle_sd_desktop" - - "🔙 Назад:/menu_back, 🔄 Обновить:/sd_control" - - # ========================================== - # --- КНОПКИ: МЕНЮ ДОМОФОНА --- - # ========================================== - - conditions: > - {{ trigger.event.data.command in [ - '/intercom_menu', '/open_door_now', '/toggle_intercom_auto', '/cmd_loc_acc' - ] }} - sequence: - # 1. Задаем сообщение ЗАРАНЕЕ, чтобы оно не потерялось - - variables: - action_msg: > - {% if trigger.event.data.command == '/open_door_now' %}🚪 Дверь открыта! - {% elif trigger.event.data.command == '/toggle_intercom_auto' %}🔄 Режим автооткрытия изменен - {% elif trigger.event.data.command == '/cmd_loc_acc' %} - {% if is_state('binary_sensor.oneplus12_high_accuracy_mode', 'on') %}📍 Локация: ВЫКЛЮЧАЮ ❌ - {% else %}📍 Локация: ВКЛЮЧАЮ ✅ - {% endif %} - {% else %}🔔 Открыто меню домофона - {% endif %} - - # 2. Выполняем действия - - choose: - - conditions: "{{ trigger.event.data.command == '/open_door_now' }}" - sequence: - - service: shell_command.open_goodline_door - - - conditions: "{{ trigger.event.data.command == '/toggle_intercom_auto' }}" - sequence: - - service: input_boolean.toggle - target: - entity_id: input_boolean.intercom_auto_open - - # --- ИДЕАЛЬНАЯ КНОПКА GPS --- - - conditions: "{{ trigger.event.data.command == '/cmd_loc_acc' }}" - sequence: - - service: notify.mobile_app_oneplus12 - data: - message: "command_high_accuracy_mode" - data: - command: "{{ 'turn_off' if is_state('binary_sensor.oneplus12_high_accuracy_mode', 'on') else 'turn_on' }}" - ttl: 0 - priority: high - - # 3. Показываем всплывашку в Телеграме - - service: telegram_bot.answer_callback_query - data: - callback_query_id: "{{ trigger.event.data.id }}" - message: "{{ action_msg }}" - - # 4. Ждем ответа от телефона - - delay: - seconds: 2 - - # 5. Перерисовываем меню с таймерами и зонами - - service: telegram_bot.edit_message - data: - message_id: "{{ trigger.event.data.message.message_id }}" - chat_id: "{{ trigger.event.data.chat_id }}" - parse_mode: html - message: | - {%- set maps_upd = states.sensor.rasstoianie_do_podezda.last_updated -%} - {%- set maps_sec = (now() - maps_upd).total_seconds() | int if maps_upd else '?' -%} - {%- set maps_state = states('device_tracker.google_maps_108918666344169166438') -%} - {%- set maps_z = '✅ Да' if maps_state | lower == 'intercom' else '❌ Нет' -%} - - {%- set phone_upd = states.sensor.distantsiia_telefon.last_updated -%} - {%- set phone_sec = (now() - phone_upd).total_seconds() | int if phone_upd else '?' -%} - {%- set phone_state = states('device_tracker.cph2573_2') -%} - {%- set phone_z = '✅ Да' if phone_state | lower == 'intercom' else '❌ Нет' -%} - - 🔔 Управление: Домофон - - 🌍 Maps: {{ states('sensor.rasstoianie_do_podezda') }}м | {{ maps_sec }}с | Зона: {{ maps_z }} - 📱 Phone: {{ states('sensor.distantsiia_telefon') }}м | {{ phone_sec }}с | Зона: {{ phone_z }} - - 🤖 Автооткрытие: {% if is_state('input_boolean.intercom_auto_open', 'on') %}✅ ВКЛЮЧЕНО{% else %}❌ ВЫКЛЮЧЕНО{% endif %} - 🎯 Точный GPS: {% if is_state('binary_sensor.oneplus12_high_accuracy_mode', 'on') %}✅ ВКЛЮЧЕН{% else %}❌ ВЫКЛЮЧЕН{% endif %} - - 🔄 Обновлено: {{ now().strftime('%H:%M:%S') }} - inline_keyboard: - - "🚪 Открыть дверь:/open_door_now" - - "🤖 Авто: {% if is_state('input_boolean.intercom_auto_open', 'on') %}✅ ВКЛ{% else %}❌ ВЫКЛ{% endif %}:/toggle_intercom_auto" - - "🎯 Точный GPS: {% if is_state('binary_sensor.oneplus12_high_accuracy_mode', 'on') %}✅ ВКЛ{% else %}❌ ВЫКЛ{% endif %}:/cmd_loc_acc" - - "🔙 Назад:/menu_back, 🔄 Обновить:/intercom_menu" \ No newline at end of file diff --git a/includes/packages/timer_off_light.yaml b/includes/packages/timer_off_light.yaml deleted file mode 100644 index e77021c..0000000 --- a/includes/packages/timer_off_light.yaml +++ /dev/null @@ -1,192 +0,0 @@ -sensor_chek_lighton_presencenone: -################################################################################### - template: - - # Сенсоры автоотключения света - # Сенсор автоотключения света ванна - - binary_sensor: - - name: "Сенсор вкл свет без движения ванная" - unique_id: sensor_vkl_svet_bez_dvizheniia_vannaia - icon: >- - {% if is_state("binary_sensor.sensor_vkl_svet_bez_dvizheniia_vannaia", "on") %} - mdi:timer - {% else %} - mdi:timer-off - {% endif %} - state: >- - {{ (is_state('light.yeelink_ceilc_cc51_light', 'on') or - is_state('light.yeelink_ceilc_cc51_ambient_light', 'on') or - is_state('switch.rele_zerkalo_i_ventiliatsiia_l1', 'on')) and - states('binary_sensor.datchik_prisutstviia_vannaia_presence') in ['off', 'unavailable', 'unknown'] }} - - # Сенсор автоотключения света кухня - - name: "Сенсор вкл свет без движения кухня" - unique_id: sensor_vkl_svet_bez_dvizheniia_kukhnia - icon: >- - {% if is_state("binary_sensor.sensor_vkl_svet_bez_dvizheniia_kukhnia", "on") %} - mdi:timer - {% else %} - mdi:timer-off - {% endif %} - state: >- - {{ (is_state('light.yeelink_ceilc_ff3a_light', 'on') or - is_state('light.yeelink_ceilc_ff3a_ambient_light', 'on')) and - states('binary_sensor.datchik_prisutstviia_kukhnia_presence') in ['off', 'unavailable', 'unknown'] }} - - # Сенсор автоотключения света коридор - - name: "Сенсор вкл свет без движения коридор" - unique_id: sensor_vkl_svet_bez_dvizheniia_koridor - icon: "{{ 'mdi:timer' if this.state == 'on' else 'mdi:timer-off' }}" - state: >- - {{ (is_state('switch.glavnyi_vykliuchatel_prikhozhaia_left', 'on') or - is_state('switch.glavnyi_vykliuchatel_prikhozhaia_right', 'on')) and - states('binary_sensor.datchik_dvizheniia_prikhozhaia_occupancy') in ['off', 'unavailable', 'unknown'] }} - - # Сенсор автоотключения света комната - - name: "Сенсор вкл свет без движения комната" - unique_id: sensor_vkl_svet_bez_dvizheniia_komnata - icon: >- - {% if is_state("binary_sensor.sensor_vkl_svet_bez_dvizheniia_komnata", "on") %} - mdi:timer - {% else %} - mdi:timer-off - {% endif %} - state: >- - {{ is_state('light.yeelink_ceiling19_d85c_light', 'on') and - states('binary_sensor.54ef44e327ba_motion') in ['off', 'unavailable', 'unknown'] and - states('binary_sensor.54ef44e45e59_motion') in ['off', 'unavailable', 'unknown'] and - states('binary_sensor.54ef44e32e91_motion') in ['off', 'unavailable', 'unknown'] }} -################################################################################### - timer: - timer_lighton_presencenone_bathroom: - name: "Таймер вкл свет без движения ванная" - duration: '00:05:00' - timer_lighton_presencenone_kitchen: - name: "Таймер вкл свет без движения кухня" - duration: '00:05:00' - timer_lighton_presencenone_lobby: - name: "Таймер вкл свет без движения коридор" - duration: '00:10:00' - timer_lighton_presencenone_room: - name: "Таймер вкл свет без движения комната" - duration: '01:00:00' -################################################################################### - automation: - - # Таймер автоотключения \ /homeassistant/includes/packages/controls_light.yaml - -################################################################################### - # Сброс таймера при выключении - - # Сброс таймера при выключении ванная - - alias: timer_lighton_presencenone_bathroom_off - initial_state: true - trigger: - - platform: state - entity_id: binary_sensor.sensor_vkl_svet_bez_dvizheniia_vannaia - to: 'off' - action: - - service: timer.cancel - target: - entity_id: timer.timer_lighton_presencenone_bathroom - - # Сброс таймера при выключении кухня - - alias: timer_lighton_presencenone_kitchen_off - initial_state: true - trigger: - - platform: state - entity_id: binary_sensor.sensor_vkl_svet_bez_dvizheniia_kukhnia - to: 'off' - action: - - service: timer.cancel - target: - entity_id: timer.timer_lighton_presencenone_kitchen - - # Сброс таймера при выключении коридор - - alias: timer_lighton_presencenone_lobby_off - initial_state: true - trigger: - - platform: state - entity_id: binary_sensor.sensor_vkl_svet_bez_dvizheniia_koridor - to: 'off' - action: - - service: timer.cancel - target: - entity_id: timer.timer_lighton_presencenone_lobby - - # Сброс таймера при выключении комната - - alias: timer_lighton_presencenone_room_off - initial_state: true - trigger: - - platform: state - entity_id: binary_sensor.sensor_vkl_svet_bez_dvizheniia_komnata - to: 'off' - action: - - service: timer.cancel - target: - entity_id: timer.timer_lighton_presencenone_room - -################################################################################### - # Старт таймеров при старте системы - - # Старт таймеров при старте системы ванна - - alias: Старт таймера ванная при старте системы - trigger: - - platform: homeassistant - event: start - condition: - - condition: state - entity_id: binary_sensor.datchik_prisutstviia_vannaia_presence - state: "off" - action: - - service: timer.start - target: - entity_id: timer.timer_lighton_presencenone_bathroom - data: {} - - # Старт таймеров при старте системы кухня - - alias: Старт таймера кухня при старте системы - trigger: - - platform: homeassistant - event: start - condition: - - condition: state - entity_id: binary_sensor.datchik_prisutstviia_kukhnia_presence - state: "off" - action: - - service: timer.start - target: - entity_id: timer.timer_lighton_presencenone_kitchen - data: {} - - # Старт таймеров при старте системы коридор - - alias: Старт таймера коридор при старте системы - trigger: - - platform: homeassistant - event: start - condition: - - condition: state - entity_id: binary_sensor.datchik_dvizheniia_prikhozhaia_occupancy - state: "off" - action: - - service: timer.start - target: - entity_id: timer.timer_lighton_presencenone_lobby - - # Старт таймеров при старте системы комната - - alias: Старт таймера комната при старте системы - trigger: - - platform: homeassistant - event: start - condition: - - condition: state - entity_id: binary_sensor.54ef44e327ba_motion - state: "off" - action: - - service: timer.start - target: - entity_id: timer.timer_lighton_presencenone_room - -################################################################################### - - # Автоматизация отключения света по таймеру \ /homeassistant/includes/packages/controls_light.yaml diff --git a/includes/packages/transmissiom.yaml b/includes/packages/transmissiom.yaml deleted file mode 100644 index 140698f..0000000 --- a/includes/packages/transmissiom.yaml +++ /dev/null @@ -1,160 +0,0 @@ -transmission: - - # ========================================== - # --- СЕНСОРЫ ДЛЯ ПАРСИНГА ФАЙЛОВ --- - # ========================================== - command_line: - - sensor: - name: tr_file_list - # Добавлена поддержка UTF-8 и правильная обработка кириллицы - command: >- - python3 -c 'import json, os; f="/config/tr_list_files.txt"; data={"file_list": [l.strip() for l in open(f, encoding="utf-8") if l.strip()]} if os.path.exists(f) else {"file_list": []}; print(json.dumps(data, ensure_ascii=False))' - value_template: "{{ value_json.file_list | length if value_json is defined else 0 }}" - json_attributes: - - file_list - scan_interval: 60 - - automation: - - # Обновление списка файлов в фоне - - id: tr_refresh_file_list - alias: "tr|refresh_file_list" - mode: single - trigger: - - platform: time_pattern - minutes: "/1" - action: - - service: shell_command.tr_files - data: {} - - # ========================================== - # --- КОМАНДА: ПОЛУЧИТЬ ФАЙЛЫ (/getfiles) --- - # ========================================== - - id: ntf_tg_tr_send_url_file_list - alias: "ntf|tg|tr|send_url_file_list" - trigger: - - platform: event - event_type: telegram_command - event_data: - command: '/getfiles' - - platform: event - event_type: telegram_command - event_data: - command: '/getfiles@ha_dddennnisss_bot' - action: - - service: telegram_bot.send_message - data: - # ИСПРАВЛЕНО: Для send_message нужно использовать target! - chat_id: "{{ trigger.event.data.chat_id }}" - parse_mode: html - disable_web_page_preview: true - message: > - {% set base_url = "https://smb.dddennnisss.ru/files/share/downloads/" %} - {% set files = state_attr('sensor.tr_file_list', 'file_list') %} - - {% if files is none or files | length == 0 %} - 😔 Нет файлов для скачивания - (Проверьте наличие файлов в /config/tr_list_files.txt) - {% else %} - 📥 Ссылки для скачивания: - {% for file in files | reject('equalto', 'incomplete') | reject('equalto', 'unknown') %} - 📄 {{ file }} - {{ base_url }}{{ file | urlencode }} - {% endfor %} - {% endif %} - inline_keyboard: - - '⬇️ Меню торрентов:/tr_control' - - '🔙 Главное меню:/menu_back, 🗑️ Прочитано:/menu_hide' - - # ========================================== - # --- УВЕДОМЛЕНИЕ: СТАРТ ЗАГРУЗКИ --- - # ========================================== - - id: ntf_transm_torrents_start_download - alias: "ntf|transm_torrents_start_download" - trigger: - - platform: event - event_type: transmission_started_torrent - action: - - service: telegram_bot.send_message - data: - chat_id: - - -1002006010424 - - -1003233671944 - parse_mode: html - message: | - ▶️ Старт загрузки торрента! - - 📄 Название: {{ trigger.event.data.name }} - inline_keyboard: - - '⬇️ Статус торрентов:/tr_control' - - '🔙 Главное меню:/menu_back, 🗑️ Прочитано:/menu_hide' - - # ========================================== - # --- УВЕДОМЛЕНИЕ: ОКОНЧАНИЕ ЗАГРУЗКИ --- - # ========================================== - - id: ntf_torrents_complect_download - alias: "ntf|torrents_complect_download" - trigger: - - platform: event - event_type: transmission_downloaded_torrent - action: - - service: telegram_bot.send_message - data: - chat_id: - - -1002006010424 - - -1003233671944 - parse_mode: html - message: | - ✅ Загрузка завершена! - - 📄 Название: {{ trigger.event.data.name }} - inline_keyboard: - - '📥 Получить ссылки:/getfiles' - - '⬇️ Статус торрентов:/tr_control' - - '🔙 Главное меню:/menu_back, 🗑️ Прочитано:/menu_hide' - - # ========================================== - # --- КОМАНДА: ДОБАВИТЬ ТОРРЕНТ (/add) --- - # ========================================== - - id: tg_add_torrents_transm_magnet - alias: "tg|add_torrents_transm_magnet" - initial_state: true - trigger: - - platform: event - event_type: telegram_command - event_data: - command: '/add' - - platform: event - event_type: telegram_command - event_data: - command: '/add@ha_dddennnisss_bot' - action: - - variables: - torrent_link: "{{ trigger.event.data.args | join(' ') }}" - - choose: - # Если ссылку не передали - - conditions: "{{ torrent_link | length == 0 }}" - sequence: - - service: telegram_bot.send_message - data: - chat_id: "{{ trigger.event.data.chat_id }}" - parse_mode: html - message: "⚠️ Ошибка: Вы не указали ссылку.\nИспользуйте формат:\n/add magnet:?xt=urn:..." - - default: - - service: transmission.add_torrent - data: - torrent: "{{ torrent_link }}" - entry_id: "01JJCHRKJJ0GE2K3N9G4K20CB6" - download_path: "" - - service: telegram_bot.send_message - data: - chat_id: "{{ trigger.event.data.chat_id }}" - parse_mode: html - message: | - 🔄 Пытаюсь добавить торрент: - - {{ torrent_link | truncate(100, true, '...') }} - inline_keyboard: - - '⬇️ Статус торрентов:/tr_control' - - '🔙 Главное меню:/menu_back, 🗑️ Прочитано:/menu_hide' \ No newline at end of file diff --git a/includes/packages/vacuum.yaml b/includes/packages/vacuum.yaml deleted file mode 100644 index 61a85dd..0000000 --- a/includes/packages/vacuum.yaml +++ /dev/null @@ -1,437 +0,0 @@ -# взято тут https://sprut.ai/article/odin-iz-variantov-upravleniya-pylesosom-1c-stytj01zhm-dreame-vacuum-mc1808-iz-home-assistant -select_vacuum_clean_rooms: - - xiaomi_miot: - language: ru - translations: - # Global dictionary - '强劲': 'Турбо' - '标准': 'Стандартный' - '节能': 'Средний' - '关': 'Бесшумный' - '低': 'Низкий' - '中': 'Средний' - '高': 'Высокий' - 'Sweep': 'Пылесос' - 'Sweep And Mop': 'Пылесос и влажная уборка' - 'Mop': 'Влажная уборка' - 'Global': 'Авто' - 'Edge': 'Очистка углов' - 'Point': 'Точечная' - 'Remote': 'Дистанционная' - 'Mi Robot Vacuum-Mop 2 Lite Robot Cleaner Режим': 'Режим уборки' - 'Mi Robot Vacuum-Mop 2 Lite Robot Cleaner Sweep Type': 'Вид уборки' - 'Mi Robot Vacuum-Mop 2 Lite sweep water_state': 'Уровень воды' - 'starting': 'Начало уборки' - 'charger disconnected': 'Зарядное устройство отключено' - 'idle': 'Ожидание' - 'remote control active': 'Включено управление через пульт' - 'cleaning': 'Уборка' - 'returning home': 'Возвращение на базу' - 'manual mode': 'Ручной режим' - 'charging': 'Зарядка' - 'charging problem': 'Проблема с зарядкой' - 'paused': 'Пауза' - 'spot cleaning': 'Уборка точки' - 'error': 'Ошибка' - 'shutting down': 'Выключение' - 'updating': 'Обновление' - 'docking': 'Остановка у базы' - 'going to target': 'Направление до точки' - 'zoned cleaning': 'Уборка зоны' - 'segment cleaning': 'Уборка' - 'emptying the bin': 'Очистка бака' - 'charging complete': 'Зарядка завершена' - 'device offline': 'Устройство не в сети' - 'Sweeping and Mopping': 'Пылесосит и моет полы' - -#====================================================================================================================== - input_boolean: - - room_vacuum: - name: "Комната уборка" - lobby_vacuum: - name: "Прихожая уборка" - hallway_vacuum: - name: "Коридор уборка" - bathroom_vacuum: - name: "Ванная уборка" - kitchen_vacuum: - name: "Кухня уборка" - -#====================================================================================================================== - group: - all_rooms_for_vac_clean: - name: All rooms for vacuum clean - entities: - - input_boolean.room_vacuum - - input_boolean.lobby_vacuum - - input_boolean.hallway_vacuum - - input_boolean.bathroom_vacuum - - input_boolean.kitchen_vacuum - -#====================================================================================================================== - - template: - # Сенсор просматривает нашу группу на предмет включенных input boolean, - # затем забирает их названия, записывает их в строку, разделяя запятой, - # и, наконец, заменяет каждое имя в списке соотвестовующим набором цифр в квадратных скобках. - - sensor: - - default_entity_id: sensor.select_rooms_for_clean - icon: mdi:vacuum - name: Выбранные комнаты для пылесоса - state: "{% set room = expand('group.all_rooms_for_vac_clean') | selectattr('state', - 'eq', 'on') | map(attribute='entity_id') | list | join(',') | replace('input_boolean.room_vacuum','[3,1,3,3,1]') - | replace('input_boolean.lobby_vacuum','[2,1,3,3,1]') | replace('input_boolean.hallway_vacuum','[5,1,3,3,1]') - | replace('input_boolean.bathroom_vacuum','[1,1,3,3,1]') | replace('input_boolean.kitchen_vacuum','[4,1,3,3,1]') - %}\n {\"selects\":[{{room}}]}" - - # Сенсор выаода можности всасывания для обходя ограничения редактора карточки - - default_entity_id: sensor.select_vacuum_fan_speed - icon: mdi:vacuum - name: Выбранная мощность всасывания - state: '{{ state_attr(''vacuum.dreame_mc1808_044c_robot_cleaner_2'', ''fan_speed'')}}' - - # Сенсор выаода уровня воды для обходя ограничения редактора карточки - - default_entity_id: sensor.select_water_vacum - icon: mdi:vacuum - name: Выбранный уровень воды - state: '{{ state_attr(''vacuum.stytj01zhm'', ''water_level'')}}' - - # Сенсор состояния бака с водой - - default_entity_id: sensor.vacuum_water_box - icon: mdi:vacuum - name: Сенсор состояния бака с водой - state: '{{state_attr(''vacuum.dreame_mc1808_044c_robot_cleaner_2'',''clean.water_box'')}}' - -#====================================================================================================================== - #Скрипт запуска уборки - script: - clean_select_rooms: - alias: VCM|Убрать выбранные комнаты - sequence: - - service: xiaomi_miot.call_action - data_template: - 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: - - condition: state - entity_id: sensor.select_vacuum_fan_speed - state: Турбо - sequence: - - service: script.set_fanspeed_vacum_turbo - metadata: {} - data: {} - - conditions: - - condition: state - entity_id: sensor.select_vacuum_fan_speed - state: Средний - sequence: - - service: script.set_fanspeed_vacum_strong - data: {} - - conditions: - - condition: state - entity_id: sensor.select_vacuum_fan_speed - state: Стандартный - sequence: - - service: script.set_fanspeed_vacum_standart - data: {} - - conditions: - - condition: state - entity_id: sensor.select_vacuum_fan_speed - state: Тихий - sequence: - - service: script.set_fanspeed_vacum_silent - data: {} - - choose: - - conditions: - - condition: state - entity_id: sensor.select_water_vacum - state: Low - sequence: - - service: script.set_water_vacum_low - data: {} - - conditions: - - condition: state - entity_id: sensor.select_water_vacum - state: Med - sequence: - - service: script.set_water_vacum_middle - data: {} - - conditions: - - condition: state - entity_id: sensor.select_water_vacum - state: High - sequence: - - service: script.set_water_vacum_hight - data: {} - - # Смена уровня воды - set_water_vacum_hight: - alias: VCM|Смена уровня воды пылесос высокий - sequence: - - service: xiaomi_miot.set_miot_property - metadata: {} - data: - entity_id: vacuum.dreame_mc1808_044c_robot_cleaner_2 - siid: 18 - piid: 20 - value: 3 - - set_water_vacum_middle: - alias: VCM|Смена уровня воды пылесос средний - sequence: - - service: xiaomi_miot.set_miot_property - metadata: {} - data: - entity_id: vacuum.dreame_mc1808_044c_robot_cleaner_2 - siid: 18 - piid: 20 - value: 2 - - set_water_vacum_low: - alias: VCM|Смена уровня воды пылесос низкий - sequence: - - service: xiaomi_miot.set_miot_property - metadata: {} - data: - entity_id: vacuum.dreame_mc1808_044c_robot_cleaner_2 - siid: 18 - piid: 20 - value: 1 - - # Смена мощности всасывания - - set_fanspeed_vacum_silent: - alias: VCM|Смена мощности всасывания пылесос бесшумный - sequence: - - service: xiaomi_miot.set_miot_property - metadata: {} - data: - entity_id: vacuum.dreame_mc1808_044c_robot_cleaner_2 - siid: 18 - piid: 6 - value: 0 - - set_fanspeed_vacum_standart: - alias: VCM|Смена мощности всасывания пылесос стандартный - sequence: - - service: xiaomi_miot.set_miot_property - metadata: {} - data: - entity_id: vacuum.dreame_mc1808_044c_robot_cleaner_2 - siid: 18 - piid: 6 - value: 1 - - set_fanspeed_vacum_strong: - alias: VCM|Смена мощности всасывания пылесос интенсивный - sequence: - - service: xiaomi_miot.set_miot_property - metadata: {} - data: - entity_id: vacuum.dreame_mc1808_044c_robot_cleaner_2 - siid: 18 - piid: 6 - value: 2 - - set_fanspeed_vacum_turbo: - alias: VCM|Смена мощности всасывания пылесос турбо - sequence: - - service: xiaomi_miot.set_miot_property - metadata: {} - data: - entity_id: vacuum.dreame_mc1808_044c_robot_cleaner_2 - siid: 18 - piid: 6 - value: 3 - -#====================================================================================================================== -# автоматизацию, которая сбрасывает булеаны после окончания уборки - automation: - - alias: 'VCM|reset_select_rooms' - id: Reset select rooms - trigger: - - platform: state - entity_id: vacuum.dreame_mc1808_044c_robot_cleaner_2 - to: 'docked' - condition: [] - action: - - service: input_boolean.turn_off - entity_id: - - input_boolean.room_vacuum - - input_boolean.lobby_vacuum - - input_boolean.hallway_vacuum - - input_boolean.bathroom_vacuum - - input_boolean.kitchen_vacuum - - - alias: VCM|button_start_clean - description: "" - trigger: - - platform: device - domain: mqtt - device_id: 975fb5853727f1fa4279bac09fd7fb6b - type: action - subtype: hold_right - discovery_id: 0x00158d0006c6bca8 action_hold_right - condition: - - condition: or - conditions: - - condition: state - entity_id: vacuum.dreame_mc1808_044c_robot_cleaner_2 - state: docked - - condition: state - entity_id: vacuum.dreame_mc1808_044c_robot_cleaner_2 - state: idle - action: - - device_id: 885672257bd73c7492a4ba8b72b83699 - domain: vacuum - entity_id: f9d147842b81972de04c1be4dfd368f3 - type: clean - mode: single - - - alias: VCM|button_stop_clean - description: "" - trigger: - - platform: device - domain: mqtt - device_id: 975fb5853727f1fa4279bac09fd7fb6b - type: action - subtype: hold_right - discovery_id: 0x00158d0006c6bca8 action_hold_right - condition: - - condition: or - conditions: - - condition: state - entity_id: vacuum.dreame_mc1808_044c_robot_cleaner_2 - state: cleaning - - condition: state - entity_id: vacuum.dreame_mc1808_044c_robot_cleaner_2 - state: error - - condition: state - entity_id: vacuum.dreame_mc1808_044c_robot_cleaner_2 - state: paused - action: - - device_id: 885672257bd73c7492a4ba8b72b83699 - domain: vacuum - entity_id: f9d147842b81972de04c1be4dfd368f3 - type: dock - mode: single - -#====================================================================================================================== -# Уведомления Telegram -#====================================================================================================================== - - alias: "ntf|tg|VCM|clean_water_box_off" - id: telegram_ntf_vcm_water_box - description: "Напоминание о неснятом баке с водой" - mode: single - trigger: - - platform: state - entity_id: sensor.vacuum_water_box - to: "1" - for: - hours: 1 - minutes: 0 - seconds: 0 - action: - - repeat: - sequence: - - service: telegram_bot.send_message - data: - target: -1002006010424 - message: | - 💧 ❗ Напоминание: Снимите бак с водой с пылесоса! - Он установлен уже более часа. - inline_keyboard: - - '🌀 Управление пылесосом:/vcm_control' - - '🔙 Главное меню:/menu_back, 🗑️ Прочитано:/menu_hide' - - delay: - hours: 3 - while: - - condition: state - entity_id: sensor.vacuum_water_box - state: "1" - - - alias: "ntf|tg|VCM|vacuum_clean_finish" - id: telegram_ntf_vcm_finish - description: "Уведомление об окончании уборки" - mode: single - trigger: - - platform: state - entity_id: vacuum.dreame_mc1808_044c_robot_cleaner_2 - from: 'cleaning' - to: 'returning' - action: - - service: telegram_bot.send_message - data: - target: -1002006010424 - message: | - ✅ Пылесос завершил уборку - - 🕒 Завершена в: {{ states('sensor.time') }} - ⏱️ Затрачено времени: {{ state_attr('vacuum.stytj01zhm', 'cleaning_time') | default(0) }} мин - 🏠 Убрано: {{ state_attr('vacuum.stytj01zhm', 'cleaning_area') | default(0) }} м² - 🔋 Заряд: {{ state_attr('vacuum.dreame_mc1808_044c_robot_cleaner_2', 'battery_level') | default(0) }}% - - {% if state_attr('vacuum.dreame_mc1808_044c_robot_cleaner_2', 'clean.water_box') | int(0) == 1 %} - 💧 ❗ Внимание: Бак с водой всё ещё установлен! - {% else %} - 💧 Бак с водой: Снят - {% endif %} - inline_keyboard: - - '🌀 Управление пылесосом:/vcm_control, 🔙 Главное меню:/menu_back' - - '🗑️ Прочитано:/menu_hide' - - - alias: "ntf|tg|VCM|vacuum_error" - id: telegram_ntf_vcm_error - description: "Уведомление об ошибке пылесоса" - mode: single - trigger: - - platform: state - entity_id: vacuum.dreame_mc1808_044c_robot_cleaner_2 - to: 'error' - action: - - service: telegram_bot.send_message - data: - target: -1002006010424 - message: | - {%- set raw = state_attr('vacuum.dreame_mc1808_044c_robot_cleaner_2', 'vacuum.fault') -%} - {%- set code = raw | int(0) if raw not in ['unknown', 'unavailable', None] else 0 -%} - {%- set errors = { - 0: 'Нет ошибки', - 1: 'Пылесос подняли (на весу)', - 2: 'Щётка заблокирована', - 3: 'Ошибка мотора щётки', - 4: 'Колесо заблокировано', - 5: 'Ошибка датчиков высоты', - 6: 'Ошибка колеса', - 7: 'Ошибка контейнера для пыли', - 8: 'Ошибка лидара (вращение сенсора)', - 9: 'Ошибка бампера (столкновение)', - 10: 'Ошибка навигации', - 11: 'Ошибка зарядки', - 12: 'Что-то намоталось на основную щётку', - 13: 'Ошибка батареи', - 14: 'Ошибка Wi-Fi модуля', - 15: 'Ошибка бака с водой', - 16: 'Ошибка привода' - } -%} - - {%- if code == 0 -%} - ✅ Ошибка пылесоса устранена - {%- else -%} - ❗ Ошибка пылесоса: {{ errors.get(code, 'Неизвестная ошибка (код ' ~ raw ~ ')') }} - {%- endif %} - inline_keyboard: - - '🌀 Управление пылесосом:/vcm_control, 🔙 Главное меню:/menu_back' - - '🗑️ Прочитано:/menu_hide' - - diff --git a/includes/packages/washer.yaml b/includes/packages/washer.yaml deleted file mode 100644 index a375ce3..0000000 --- a/includes/packages/washer.yaml +++ /dev/null @@ -1,190 +0,0 @@ -washer: - - automation: - # ========================================== - # --- УВЕДОМЛЕНИЕ: ОШИБКА СТИРАЛКИ --- - # ========================================== - - id: ntf_washing_error - alias: "ntf|washing_error" - mode: single - trigger: - - platform: state - entity_id: binary_sensor.stiralnaia_mashina_s_gorizontalnoi_zagruzkoi_error_state - to: "on" - action: - - service: telegram_bot.send_message - data: - chat_id: - - -1002006010424 - - -1003233671944 - parse_mode: html - message: | - {% set err = states("sensor.stiralnaia_mashina_s_gorizontalnoi_zagruzkoi_error_message") %} - ⚠️ Ошибка стиральной машины! - - {% if err == "dE1" %}🚪 Открыт люк! - {% elif err == "UE" %}⚖️ Дисбаланс: бельё плохо распределено. Попробуйте переложить вещи. - {% else %}❓ Неизвестная ошибка: {{ err }}{% endif %} - inline_keyboard: - - '📊 Состояние:/bt_wh_control, 🔙 Меню:/menu_back' - - '🗑️ Прочитано:/menu_hide' - - # ========================================== - # --- УВЕДОМЛЕНИЕ: НАЧАЛО СТИРКИ --- - # ========================================== - - id: ntf_wshr_wash_start - alias: "ntf|wshr|wash_start" - trigger: - - platform: state - entity_id: sensor.stiralnaia_mashina_s_gorizontalnoi_zagruzkoi_run_state - to: "Стирка" - for: - seconds: 30 - action: - - service: telegram_bot.send_message - data: - chat_id: - - -1002006010424 - - -1003233671944 - parse_mode: html - message: | - 🧼 Стирка запущена - - 📋 Программа: {{ states('sensor.stiralnaia_mashina_s_gorizontalnoi_zagruzkoi_current_course') }} - 🌡️ Температура: {{ states('sensor.stiralnaia_mashina_s_gorizontalnoi_zagruzkoi_water_temp') }} - ♻️ Обороты: {{ states('sensor.stiralnaia_mashina_s_gorizontalnoi_zagruzkoi_spin_speed') }} - ⏳ Время: {{ state_attr('sensor.stiralnaia_mashina_s_gorizontalnoi_zagruzkoi', 'remain_time') }} - 🕒 Завершение в: {{ as_timestamp(state_attr('sensor.stiralnaia_mashina_s_gorizontalnoi_zagruzkoi', 'end_time')) | timestamp_custom('%H:%M:%S') }} - inline_keyboard: - - '🔙 Главное меню:/menu_back, 🗑️ Прочитано:/menu_hide' - - # ========================================== - # --- УВЕДОМЛЕНИЕ: ЗАВЕРШЕНИЕ СТИРКИ --- - # ========================================== - - id: ntf_wshr_wash_finish - alias: "ntf|wshr|wash_finish" - trigger: - - platform: state - entity_id: sensor.stiralnaia_mashina_s_gorizontalnoi_zagruzkoi_run_state - from: "Завершено" - to: "-" - action: - - service: telegram_bot.send_message - data: - chat_id: - - -1002006010424 - - -1003233671944 - parse_mode: html - message: "✅ Стирка успешно завершена!" - inline_keyboard: - - '🔙 Главное меню:/menu_back, 🗑️ Прочитано:/menu_hide' - - # ========================================== - # --- УВЕДОМЛЕНИЕ: НУЖНО ДОСТАТЬ БЕЛЬЕ --- - # ========================================== - - id: ntf_wshr_wash_cool_on - alias: "ntf|wshr|wash_cool_on" - trigger: - - platform: state - entity_id: sensor.stiralnaia_mashina_s_gorizontalnoi_zagruzkoi_run_state - from: "Завершено" - to: "Охлаждение" - action: - - service: telegram_bot.send_message - data: - chat_id: - - -1002006010424 - - -1003233671944 - parse_mode: html - message: "🧺 Сушка завершена! Пора достать бельё." - inline_keyboard: - - '🔙 Главное меню:/menu_back, 🗑️ Прочитано:/menu_hide' - - # ========================================== - # --- УВЕДОМЛЕНИЕ: ОХЛАЖДЕНИЕ ОСТАНОВЛЕНО --- - # ========================================== - - id: ntf_wshr_wash_cool_off - alias: "ntf|wshr|wash_cool_off" - trigger: - - platform: state - entity_id: sensor.stiralnaia_mashina_s_gorizontalnoi_zagruzkoi_run_state - from: "Охлаждение" - to: null - action: - - service: telegram_bot.send_message - data: - chat_id: - - -1002006010424 - - -1003233671944 - parse_mode: html - message: "✅ Охлаждение белья остановлено" - inline_keyboard: - - '🔙 Главное меню:/menu_back, 🗑️ Прочитано:/menu_hide' - - # ========================================== - # --- ПОВТОРЯЮЩЕЕСЯ НАПОМИНАНИЕ (УМНОЕ) --- - # ========================================== - - id: ntf_tg_wshr_get_laundry - alias: "ntf|tg|wshr|get_laundry" - description: "Напоминает достать белье тому, кто дома" - mode: single - trigger: - - platform: state - entity_id: timer.timer_cool_washer - from: "idle" - to: "active" - condition: - - condition: state - entity_id: binary_sensor.day_time - state: "on" - action: - - repeat: - while: - - condition: state - entity_id: timer.timer_cool_washer - state: "active" - sequence: - - variables: - denis_home: "{{ is_state('device_tracker.google_maps_108918666344169166438', 'home') }}" - lena_home: "{{ is_state('device_tracker.google_maps_118311730364158481019', 'home') }}" - finish: "{{ state_attr('timer.timer_cool_washer', 'finishes_at') }}" - msg: | - 🧺 Напоминание: Бельё в машинке! - {% if finish -%} - {%- set delta = (as_datetime(finish) - now()).total_seconds() | int -%} - {%- if delta > 0 -%} - {%- set hours = delta // 3600 -%} - {%- set minutes = (delta % 3600) // 60 -%} - {%- set seconds = delta % 60 %} - ⏳ До автовыключения: {{ '%02d:%02d:%02d' % (hours, minutes, seconds) }} - {%- else %} - ⏳ До автовыключения: 00:00:00 - {%- endif -%} - {%- else %} - ❌ Таймер не активен. - {%- endif %} - - # Пишем в группу Дениса, если он дома - - if: "{{ denis_home }}" - then: - - service: telegram_bot.send_message - data: - chat_id: -1002006010424 - parse_mode: html - message: "{{ msg }}" - inline_keyboard: - - '🔙 Меню:/menu_back, 🗑️ Прочитано:/menu_hide' - - # Пишем в группу Лены, если она дома - - if: "{{ lena_home }}" - then: - - service: telegram_bot.send_message - data: - chat_id: -1003233671944 - parse_mode: html - message: "{{ msg }}" - inline_keyboard: - - '🔙 Меню:/menu_back, 🗑️ Прочитано:/menu_hide' - - - delay: - minutes: 30 \ No newline at end of file diff --git a/includes/packages/weather.yaml b/includes/packages/weather.yaml deleted file mode 100644 index e69de29..0000000 diff --git a/scripts.yaml b/scripts.yaml deleted file mode 100644 index 8d91bef..0000000 --- a/scripts.yaml +++ /dev/null @@ -1,86 +0,0 @@ -uborka_koridora: - alias: Уборка коридора - sequence: - - service: xiaomi_miot.call_action - data: - entity_id: vacuum.dreame_mc1808_044c_robot_cleaner_2 - siid: 18 - aiid: 1 - throw: false - params: - - piid: 1 - value: 18 - - piid: 21 - value: '{"selects":[[5,1,3,3,1]]}' - force_params: true -uborka_prihoj: - alias: Уборка прихожей - sequence: - - service: xiaomi_miot.call_action - data: - entity_id: vacuum.dreame_mc1808_044c_robot_cleaner_2 - siid: 18 - aiid: 1 - throw: false - params: - - piid: 1 - value: 18 - - piid: 21 - value: '{"selects":[[2,1,3,3,1]]}' - force_params: true -uborka_vanni: - alias: Уборка ванны - sequence: - - service: xiaomi_miot.call_action - data: - entity_id: vacuum.dreame_mc1808_044c_robot_cleaner_2 - siid: 18 - aiid: 1 - throw: false - params: - - piid: 1 - value: 18 - - piid: 21 - value: '{"selects":[[1,1,3,3,1]]}' - force_params: true -uborka_kuhni: - alias: Уборка кухни - sequence: - - service: xiaomi_miot.call_action - data: - entity_id: vacuum.dreame_mc1808_044c_robot_cleaner_2 - siid: 18 - aiid: 1 - throw: false - params: - - piid: 1 - value: 18 - - piid: 21 - value: '{"selects":[[3,1,3,3,1]]}' - force_params: true -uborka_zal: - alias: Уборка зала - sequence: - - service: xiaomi_miot.call_action - data: - entity_id: vacuum.dreame_mc1808_044c_robot_cleaner_2 - siid: 18 - aiid: 1 - throw: false - params: - - piid: 1 - value: 18 - - piid: 21 - value: '{"selects":[[4,1,3,3,1]]}' - force_params: true -openweather_forecast: - alias: openweather_forecast - sequence: - - service: weather.get_forecasts - metadata: {} - data: - type: hourly - target: - device_id: 6e9d8372f8fb9df3f377095eea1d932b - response_variable: openweather_forecast - mode: single diff --git a/scripts/camera_log.txt b/scripts/camera_log.txt deleted file mode 100644 index 26fcce1..0000000 --- a/scripts/camera_log.txt +++ /dev/null @@ -1 +0,0 @@ -УСПЕХ! Ссылка: rtsp://vcore-jkh08.video.goodline.info:5... diff --git a/scripts/get_camera.py* b/scripts/get_camera.py* deleted file mode 100644 index e17d166..0000000 --- a/scripts/get_camera.py* +++ /dev/null @@ -1,97 +0,0 @@ -import urllib.request -import urllib.error -import json -import traceback -import os - -def get_token_from_file(): - # Теперь читаем токен из обычного текстовика, а не из secrets - token_path = '/config/scripts/goodline_token.txt' - if os.path.exists(token_path): - with open(token_path, 'r') as f: - return f.read().strip() - return None - -def request_new_sms(log_file): - # Данные твоего бота (замени BOT_TOKEN на свой) - bot_token = "8329968936:AAFWZz2RTNKWvnhhKXpEXOC55qoj5Cg4_Kk" - chat_id = "-1002006010424" # Твой ID группы из прошлой автоматизации - - url_sms = 'https://api-video.goodline.info/ords/mobile/vc2/auth/phone' - payload = { - "id_device": "5116c3f1822f08", - "id_platform": 3, - "phone": "79134374202" - } - - data = json.dumps(payload).encode('utf-8') - headers = {'Content-Type': 'application/json'} - - try: - # 1. Запрос СМС у провайдера - req = urllib.request.Request(url_sms, data=data, headers=headers, method='POST') - urllib.request.urlopen(req, timeout=10) - - # 2. Уведомление в Телеграм о попытке - tg_msg = "🔄 Внимание: Токен камеры протух. Запросил новое СМС с кодом..." - tg_url = f"https://api.telegram.org/bot{bot_token}/sendMessage" - tg_payload = json.dumps({ - "chat_id": chat_id, - "text": tg_msg, - "parse_mode": "HTML" - }).encode('utf-8') - - tg_req = urllib.request.Request(tg_url, data=tg_payload, headers=headers, method='POST') - urllib.request.urlopen(tg_req, timeout=5) - - with open(log_file, 'a') as f: - f.write("СЕРВЕР: Запрошена новая СМС с кодом и отправлено уведомление в TG!\n") - - except Exception as e: - with open(log_file, 'a') as f: - f.write(f"ОШИБКА в request_new_sms: {e}\n") - -def get_url(): - log_file = '/config/scripts/camera_log.txt' - master_token = get_token_from_file() - - if not master_token: - with open(log_file, 'w') as f: - f.write("ОШИБКА: Файл goodline_token.txt пуст или не существует!\n") - request_new_sms(log_file) # Просим СМС, если токена вообще нет - return - - url = 'https://api-video.goodline.info/ords/mobile/vc2/v2/cameras/23079' - headers = { - 'token': master_token, - 'origin': 'https://video.online-dozor.ru', - 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)' - } - - try: - req = urllib.request.Request(url, headers=headers) - with urllib.request.urlopen(req, timeout=15) as response: - data = json.loads(response.read().decode()) - - rtsp = data.get('STREAM_LIVE_RTSP_HD') - sig = data.get('SIGNATURE', '').replace('wmsAuthSign=', '') - - if rtsp and sig: - final_link = f"{rtsp}?wmsAuthSign={sig}" - print(final_link, end='') - with open(log_file, 'w') as f: - f.write(f"УСПЕХ! Ссылка: {final_link[:40]}...\n") - - except urllib.error.HTTPError as e: - error_body = e.read().decode() - with open(log_file, 'w') as f: - f.write(f"ОШИБКА 401: Токен устарел!\n") - # ТОКЕН ПРОТУХ - ЗАПРАШИВАЕМ СМС! - request_new_sms(log_file) - - except Exception as e: - with open(log_file, 'w') as f: - f.write(f"КРИТИЧЕСКАЯ ОШИБКА:\n{traceback.format_exc()}\n") - -if __name__ == "__main__": - get_url() diff --git a/scripts/goodline_token.txt b/scripts/goodline_token.txt deleted file mode 100644 index 792cdab..0000000 --- a/scripts/goodline_token.txt +++ /dev/null @@ -1 +0,0 @@ -566AFC0A-AE12-4F15-E063-2965660ADC25 \ No newline at end of file diff --git a/scripts/update_goodline_token.py* b/scripts/update_goodline_token.py* deleted file mode 100644 index 3db7c0d..0000000 --- a/scripts/update_goodline_token.py* +++ /dev/null @@ -1,44 +0,0 @@ -import urllib.request -import json -import sys - -def verify_code(sms_code): - url = 'https://api-video.goodline.info/ords/mobile/vc2/auth/token/sms' - - # Данные из твоего скриншота - payload = { - "phone": "79134374202", - "code": str(sms_code) - } - - data = json.dumps(payload).encode('utf-8') - headers = { - 'Content-Type': 'application/json', - 'origin': 'https://video.online-dozor.ru', - 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)' - } - - req = urllib.request.Request(url, data=data, headers=headers, method='POST') - - try: - with urllib.request.urlopen(req, timeout=10) as response: - resp_json = json.loads(response.read().decode('utf-8')) - new_token = resp_json.get('TOKEN') - - if new_token: - # Записываем свежий токен в текстовый файл - with open('/config/scripts/goodline_token.txt', 'w') as f: - f.write(new_token) - print(f"Успех! Новый токен сохранен: {new_token[:10]}...") - else: - print("Ошибка: Токен не найден в ответе сервера!") - - except Exception as e: - print(f"Ошибка при отправке кода: {e}") - -if __name__ == "__main__": - # Скрипт принимает код из аргумента командной строки - if len(sys.argv) > 1: - verify_code(sys.argv[1]) - else: - print("Ошибка: Не передан СМС код!")