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'