Files
dddennnisss 47eee0291f revert 9c5f315f73
revert Clean main branch
2026-07-14 17:02:06 +07:00

305 lines
14 KiB
YAML
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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'