- PVSM.RU - https://www.pvsm.ru -

Полная автоматизация ворот

Для меня "умный дом" - это когда автоматика за тебя делает всяческую "рутину" и делает это без моего участия.

В загородной жизни аспектов, подлежащих автоматизации, гораздо больше, чем при городской. Один из таких объектов автоматизации - ворота для въезда на участок.

Понятно, что любой уважающий себя домовладелец поставит на них автоматику, чтобы возвращаясь домой не надо было выходить из машины, чтобы их открыть, а потом закрыть. Радиоуправление - все супер.

Но это же скучно.

Гики (типа меня) к этой автоматике начинают прикручивать всяческую автоматику управления: начиная от GSM-модулей (чтобы на номер ворот можно было позвонить и "своему" ворота откроются) до всяческих систем, позволяющих голосом попросить Siri, Алису или Google (часы, телефоны, автомагнитолы и т.п.).

Но и это тоже как-то "неаккуратненько". Сильно хочется, чтобы "оно само".

Первоначально мысль была выдергивать изображения с камеры, которая контролирует подъезд к участку, дальше распознавание образов (что это машина) и гос.номера авто. Но как-то времени не было заняться этим, да и выглядело, что будут определенные сложности (грязные номера и т.п.).

И, наверное, хорошо что руки до этого варианта так и не дошли, а было сделано устройство GNSS для автомобиля [1].

"Бонусная функция" этого устройства - автомобильный трекер (реализована поддержка протокола Wialon IPS). Координаты можно отдавать во внешний мир куда угодно. Девайс пушит данные раз в 10 секунд.

Сначала я использовал эту функцию с бесплатным аккаунтом на сервисе Ruhavik - для проверки сервис подходит отлично. Функциональности обычного трекера - вполне достаточно.

Но тут мне на глаза попались несколько статей @tananaev [2] про различные протоколы GPS-трекеров и во всех статьях была ссылка на его Open Source проект traccar [3].

После этого уже в голове оформился следующий порядок действий:

  1. На имеющемся proxmox поднять контейнер с traccar.

  2. Выставить наружу необходимый порт для работы трекера (внешний айпишник у меня есть).

  3. Настроить GPS-трекер на передачу геолокации на свой сервер.

  4. Настроить систему оповещений о событиях (особенно интересовал "вход в геозону") для начала в телеграм.

  5. "Научить" traccar отдавать свои события в mqtt.

  6. С помощью имеющегося node-red получать событие "Monjaro вошел в геозону "Дом"" и по этому событию отправить в умный дом команду "открыть ворота".

Дальше все оказалось достаточно просто.

Первые три пункта описывать не буду - там очевидные вещи (установка traccar описана [4] на сайте проекта, а как настраивать роутер для проброса портов - уже все знают и/или найдут с помощью любимого поисковика, инструкция по настройке трекера есть, например, тут [5]).

А вот пункты, начиная с четвертого - опишу:

Конфигурация traccar находится в файле /opt/traccar/conf/traccar.xml (буду приводить для варианта установки на ubuntu).

Для установки системы оповещений в telegram в этот файл надо добавить следующие строки:

  <entry key='notificator.types'>telegram</entry>
  <entry key='notificator.telegram.key'>YourChatBotAPIkey</entry>
  <entry key='notificator.telegram.chatId'>YourChatID</entry>
  <entry key='notificator.telegram.sendLocation'>true</entry>

Если все сделано правильно, то в телеграм уже начнут приходить сообщения (не забудьте поставить свой ключ для телеграм-бота и свой идентификатор чата. Предварительно в веб-интерфейсе сервиса еще надо настроить типы событий, о которых надо оповещать. В моем случае наиболее интересен "вход в геозону".

Чтобы события транслировались в MQTT в тот же конфиг-файл надо добавить следующее:

  <entry key='forward.enable'>true</entry>
  <entry key='forward.type'>mqtt</entry>
  <entry key='event.forward.type'>mqtt</entry>
  <entry key='event.forward.url'>mqtt://IP-server:1883</entry>
  <entry key='event.forward.topic'>traccar/events</entry>

Параметры тут очевидные: предпоследняя строчка задает адрес mqtt-сервера, а последняя - топик, где будут публиковаться сообщения.

Собственно, после этого в MQTT будут прилетать сообщения следующего вида
{"event":{"id":139,"attributes":{},"deviceId":1,"type":"geofenceEnter","eventTime":"2024-10-08T14:28:13.000+00:00","positionId":155,"geofenceId":1,"maintenanceId":0},"position":{"id":155,"attributes":{"batteryLevel":38.0,"distance":302.7380494307562,"totalDistance":944.8448214274459,"motion":false},"deviceId":1,"protocol":"osmand","serverTime":"2024-10-08T14:28:13.302+00:00","deviceTime":"2024-10-08T14:28:13.000+00:00","fixTime":"2024-10-08T14:28:13.000+00:00","outdated":false,"valid":true,"latitude":хх.хххххх,"longitude":yy.yyyyyy,"altitude":216.8000030517578,"speed":0.0,"course":0.0,"address":null,"accuracy":45.599998474121094,"network":null,"geofenceIds":[1]},"device":{"id":1,"attributes":{},"groupId":0,"calendarId":0,"name":"Monjaro","uniqueId":"zzzzzzzzzzzzzzz","status":"online","lastUpdate":"2024-10-08T14:28:13.302+00:00","positionId":119,"phone":null,"model":null,"contact":null,"category":null,"disabled":false,"expirationTime":null},"geofence":{"id":1,"attributes":{},"calendarId":0,"name":"Дом","description":null,"area":"LINESTRING (координаты-полигона-описывающего-геозону)"}}

Собственно, дальше уже дело техники - накидать кубиков в nodered:

Поток делал максимально понятным: в первом "кубике" ищем целевое транспортное средство, во втором - событие "вход в зону", в третьем - проверяем, что эта зона "Дом". Дальше уже идет вызов функции "открыть ворота" и публикация ее в топике для УД на исполнение.

Поток делал максимально понятным: в первом "кубике" ищем целевое транспортное средство, во втором - событие "вход в зону", в третьем - проверяем, что эта зона "Дом". Дальше уже идет вызов функции "открыть ворота" и публикация ее в топике для УД на исполнение.

Стоит еще рассказать про формирование геозоны "Дом":

Подъезд к участку у меня возможен с двух сторон. Хотелось сделать так, чтобы ворота начинали открываться заранее (чтобы не ждать, стоя перед ними, когда они еще в движении), но и не слишком рано, чтобы видеть начало их движения.

Для того, чтобы эти "хотелки" сработали - геозону нарисовал следующим образом:

Тут тоже все очевидно: в геозону "Дом" прихватил два куска подъездной дороги.

Тут тоже все очевидно: в геозону "Дом" прихватил два куска подъездной дороги.

Поскольку по подъездной дороге едешь не слишком быстро (20 км/ч максимум), то периодичности отправки данных трекером (напомню, 1 раз в 10 секунд), оказывается вполне достаточно, чтобы ворота успели открыться, когда к ним подъезжаешь.

Вот такая "магия".

Теперь ворота открываются "сами". При этом не важно, день/ночь, чистые ли номера и т.п.

P.S. Теперь еще надо придумать, как сделать так, чтобы ворота сами бы открывались, когда надо выехать с участка ;)

P.P.S. Естественно, для такой автоматизации не обязательно использовать аппаратный трекер - вполне подойдет и софтовый (ПО на телефон и/или автомагнитолу/планшет и т.п.)

Автор: avstepanov

Источник [6]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/umny-j-dom/399334

Ссылки в тексте:

[1] сделано устройство GNSS для автомобиля: https://habr.com/ru/articles/847304/

[2] @tananaev: https://www.pvsm.ru/users/tananaev

[3] traccar: https://github.com/traccar/traccar

[4] описана: https://www.traccar.org/documentation/

[5] тут: https://sites.google.com/view/hwgps/%D0%BD%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0-%D1%81%D0%BE%D1%85%D1%80%D0%B0%D0%BD%D0%B5%D0%BD%D0%B8%D1%8F-%D0%BA%D0%BE%D0%BE%D1%80%D0%B4%D0%B8%D0%BD%D0%B0%D1%82-%D0%BD%D0%B0-%D1%81%D1%82%D0%BE%D1%80%D0%BE%D0%BD%D0%BD%D0%B5%D0%BC-%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80%D0%B5

[6] Источник: https://habr.com/ru/articles/850148/?utm_campaign=850148&utm_source=habrahabr&utm_medium=rss