47eee0291f
revert Clean main branch
305 lines
14 KiB
YAML
305 lines
14 KiB
YAML
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'
|
||
|
||
|
||
|
||
|
||
|
||
|