Движение автобусов в Home Assistant
Добавление движения общественного транспорта в Home Assistant
Наконец-то у меня получилось. Как обычно, делал всё сильно неспешно при наличии свободного времени и желания. «Воды» не будет, поэтому поехали.
Сейчас не вспомню как, но как-то я вышел на адрес сайта, который отдает данные в формате JSON. Так как меня интересовал в первую очередь конкретный маршрут трамвая, то я получил вот такой вот адрес:
https://mu-kgt.ru/informing/wap/marsh/?m=6%F2%F0&action=getMarshData
Что здесь интересного?
- m=6%F2%F0 — номер маршрута и обозначение типа транспорта. В данном случае часть «%F2%F0» — это всего лишь русские буквы «тр», то есть трамвай. Для троллейбуса это будет просто «т» или «%F2», для автобуса это либо «а», либо вообще без буквы — если честно, не пробовал, да и лень было.
- action=getMarshData — вызывает одноименную функцию в скрипте.
Переходим в Home Assistant. Здесь я создал новый сенсор в configuration.yaml такого вида:
sensor:
- platform: rest
resource: https://mu-kgt.ru/informing/wap/marsh/?m=6%F2%F0&action=getMarshData
name: Трамвай 6 прибытие
unique_id: tram6_arrival
value_template: "{{ value_json.ts_line.A[-1].st_arrive }}"
scan_interval: 120
Самое важное здесь — value_template, в котором содержится путь до нужной остановки, по которой получаем информацию о времени прибытия. Буквой «А» закодировано направление движения транспорта, которое вы видите в левой части экрана, а буквой «В» — в правой части экрана.
Я сделал два сенсора: прибытие и убытие, чтобы ориентироваться когда придет следующий трамвай на конечную остановку. Можно оформить и получше, но это — не главное.
Ах да, чуть не забыл. Как посмотреть номер нужной остановки? Открываем страницу по ссылке, выбираем тип транспорта, маршрут и направление движения. Затем щелкаем на нужной остановке, чтобы открыть прогноз движения транспорта. Среди прочей информации будет строка вида:
Остановка: Детский кинотеатр «Мечта» (код 336)
В скобках мы и увидим код остановки. В данных, которые нам отдает скрипт по запросу, это код содержится в поле st_regnum.
И еще небольшое дополнение. Значения «0» и «-1», конечно, хороши для выбора конечных остановок при условии, что мы не знаем количество остановок на маршруте, который может измениться, например, из-за ремонта дороги или аварии. Следующий шаблон выбирает остановку с заданным кодом:
value_template: >-
{% set stops = value_json.ts_line.A %}
{% for stop in stops %}
{% if stop.st_regnum == 1989 %} {{ stop.st_arrive }} {% endif %}
{% endfor %}
Обновлено. Автобусы маркируются без буквы в URL, только номер маршрута.