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 | default('нет данных', true) }}" 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 | default('нет данных', true) }}" 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 | default('нет данных', true) }}" 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 | default('нет данных', true) }}" 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 | default('нет данных', true) }}" 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 | default('нет данных', true) }}" 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 | default('нет данных', true) }}" 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 | default('нет данных', true) }}" 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 | default('нет данных', true) }}" 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 | default('нет данных', true) }}" 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 | default('нет данных', true) }}" 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 | default('нет данных', true) }}" 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 проехал кемдор