Движение автобусов в 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, в котором содержится путь до нужной остановки, по которой получаем информацию о времени прибытия. Буквой «А» закодировано направление движения транспорта, которое вы видите в левой части экрана, а буквой «В» — в правой части экрана.

Такие же буквы присутствуют на самом сайте и в приложении.

Я сделал два сенсора: прибытие и убытие, чтобы ориентироваться когда придет следующий трамвай на конечную остановку. Можно оформить и получше, но это — не главное.

Вид сенсоров в Home Assistant

Ах да, чуть не забыл. Как посмотреть номер нужной остановки? Открываем страницу по ссылке, выбираем тип транспорта, маршрут и направление движения. Затем щелкаем на нужной остановке, чтобы открыть прогноз движения транспорта. Среди прочей информации будет строка вида:

Остановка: Детский кинотеатр «Мечта» (код 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 %}
Отправить
Поделиться
Запинить