Add files from /homeassistant/includes/packages/

This commit is contained in:
Hermes Agent
2026-07-13 10:06:40 +07:00
parent 8d4100bccc
commit 076aff1ce9
17 changed files with 7410 additions and 0 deletions
+304
View File
@@ -0,0 +1,304 @@
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'