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("Ошибка: Не передан СМС код!")