Если вы хотите отслеживать свое местоположение, но не хотите, чтобы оно передавалось слишком большому количеству компаний, которые не должны этого знать, взгляните на это фантастическое мобильное приложение с открытым исходным кодом OwnTracks (https: // github. com / owntracks ), который может отправлять данные о местоположении телефона на выбранный вами сервер. Никакой внешней службы, которая объединяет ваши данные, не требуется, что позволяет вам делать практически все, что вы хотите, с собранными данными о местоположении. OwnTracks может отправлять полезные данные либо на сервер MQTT, либо на стандартную конечную точку HTTP. Похоже, что многие люди запускают службы MQTT на облачных провайдерах, таких как Bluemix, а затем пересылают эти сообщения в свои частные сети, которые работают дома или в другом месте, защищенном брандмауэром.
В этом коротком руководстве мы будем использовать Node-RED для получения, обработки и визуализации данных о нашем местоположении. Данные о местоположении будут зашифрованы во время транспортировки с помощью TLS, а также с использованием libsodium (шифрование с проверкой подлинности секретного ключа) до самого конца, прежде чем они попадут на карту:
Никакого маршрутизатора, конфигурации брандмауэра или общедоступного IP-адреса не потребуется, поскольку Webhook Relay будет предоставлять общедоступные конечные точки для получения веб-перехватчиков, а затем отправлять их на наш экземпляр Node-RED через WebSocket.
Если ваш Node-RED доступен из Интернета, вы можете пропустить часть Webhook Relay и просто добавить обработчик HTTP для обработки веб-перехватчиков OwnTracks. Проверьте Документы по безопасности Node-RED и убедитесь, что в вашем экземпляре включена аутентификация.
Предпосылки
- Учетная запись Webhook Relay - вместо MQTT мы будем использовать веб-перехватчики HTTP, поэтому нам не нужно запускать отдельную службу. Кроме того, Webhook Relay позволяет получать веб-перехватчики без общедоступного IP-адреса или настройки NAT.
- Node-RED instance - я полагаю, он у вас запущен, в противном случае инструкции по установке можно найти здесь.
- Узел node-red-contrib-webhookrelay, чтобы мы могли подписаться на веб-перехватчики.
- Узел node-red-contrib-owntracks для расшифровки данных о местоположении.
- Узел node-red-contrib-web-worldmap для отображения карты и размещения на ней маркера местоположения.
Вы можете установить узлы через npm
или щелкнуть «Управление палитрой» в настройках Node-RED.
Создайте общедоступную конечную точку для веб-перехватчиков и установите приложение
Наши данные о местоположении будут переданы в Node-RED через общедоступный адрес Webhook Relay. Поэтому первое, что нужно сделать, - это настроить вашу конечную точку:
- Перейдите на https://my.webhookrelay.com/buckets и нажмите СОЗДАТЬ ВЕДРО. Назовите его ownracks. Сегменты - это механизм группировки для объединения веб-перехватчиков и их разветвления по нескольким адресатам. Поскольку мы будем использовать WebSockets, нам не нужно создавать выходные данные (вы можете создать его, если хотите, чтобы функция повторной отправки работала через веб-интерфейс).
- После создания корзины обратите внимание на URL общедоступной конечной точки, который имеет формат
https://my.webhookrelay.com/v1/webhooks/[your-unique-uuid]
. Вам нужно будет указать это в вашем приложении OwnTracks.
Установите и настройте приложение:
- Перейдите на сайт https://ghtracks.org/ и следуйте инструкциям в зависимости от операционной системы вашего телефона.
- После того, как у вас есть приложение, перейдите к настройкам и установите режим HTTP, а конечная точка должна быть установлена на входной URL-адрес Webhook Relay, который вы получили ранее. Не устанавливайте параметр
Secret encryption key
, если хотите взглянуть на структуру данных.
После того, как вы установили эти параметры, вы можете вручную опубликовать свое местоположение из приложения. Журналы веб-перехватчиков должны начать появляться на странице сведений о вашем сегменте или в https://my.webhookrelay.com/logs.
Структура данных
Если вы не установили Секретный ключ шифрования в приложении OwnTracks, вы можете просматривать веб-перехватчики в своем Webhook Relay https: //my.webhookrelay/logs. Пример полезной нагрузки:
{ "batt": 69, "lon": 0.008261475503538551, "acc": 2000, "p": 102.94917297363281, "vac": 44, "topic": "owntracks/kr-1/EEIR6BC7-17AB-57AD-803E-651363E02256", "lat": 52.416367098924324, "conn": "w", "tst": 1546786399, "alt": 10, "_type": "location", "tid": "kr" }
Поскольку это полезная нагрузка JSON, работать с ней намного проще. Согласно документации Socket Server, наша фактическая полезная нагрузка будет внутри переменной payload.body
, когда она будет получена из WebSocket. Хотя расшифрованные данные хороши и хороши, мы можем зашифровать их, чтобы получить дополнительный уровень безопасности поверх уже существующего TLS. Зайдите в приложение и установите Secret encryption key
на свой секрет. Теперь данные полезной нагрузки должны выглядеть так:
{ "_type": "encrypted", "data": "edxJuWXnAOWvWdIHx1wfu6/IQsRQf5Gs3XFqRY4gQU1p3NLV2Upr8u4u8Lu4p9x+nEPnONKy0Gio1qumdjJV6n+U6YUqkj9mZIUVuyHznNuLM2zzaGKuTFFQeJjo+AjRYtnlK4rSsQou6LnaDcT9lqKYZinWESNWsg6qIKcfx8jsl2f//dSDzH02VBvO0Dg5iqupf9ZWBMuQbO9/EPvBtkaaOt0c41dfQUR3+4YY8cQx+FXB9yWHPyuyKlxAU+vAgSo6QAyJE4h4z9ZuD4y5SYkZ35Rp+QS8tsI0CNTUzA551Jo4EsWl7dwcTfbYyQB+7sDU3yFhD3oLAuwPOCRdvHLlpGS0G3D6T/ujU8pKkJj5ldT8Sw==" }
Создание потока
Фактический поток становится простым, если мы знаем, какие данные мы получаем и какие данные ожидает карта мира. Посмотрим, какая конфигурация требуется согласно node-red-contrib-web-worldmap:
msg.payload = { name:”Jason”, lat:51.05, lon:-1.35 }
Мы также можем включить поле icon
, чтобы различать несколько трекеров.
Шаг 1: получение данных
Мы будем использовать узел node-red-contrib-webhookrelay для получения веб-перехватчиков из корзины Webhook Relay, которая получает веб-перехватчики OwnTracks. Перейдите на страницу токенов, сгенерируйте пару ключ-секретный токен и добавьте их в узел. Установите для корзины значение owntracks
(оно должно соответствовать имени сегмента в Webhook Relay, который получает веб-перехватчики). Как только он появится, попробуйте развернуть поток и посмотрите, переходит ли узел в состояние подключено.
Сообщения узла Webhook Relay содержат метаданные сегмента, заголовки, запрос запроса, метод и тело. Однако в данном случае мы заботимся только о теле, поэтому давайте его извлечем. Создайте узел функции со следующим кодом:
return { payload: msg.payload.body };
Шаг 3: расшифруйте данные о местоположении OwnTracks
Когда у нас есть полезная нагрузка, нам нужно ее расшифровать. Добавьте узел node-red-contrib-owntracks и подключите к нему выход из шага 2. Откройте настройки узла и установите тот же секрет, который вы установили в приложении на телефоне (Secret encryption key
). Никакой дополнительной настройки здесь не требуется, он вернет исходную расшифрованную полезную нагрузку.
Шаг 4: отформатируйте JSON
На этом этапе мы можем настроить расшифрованные данные о местоположении перед их передачей в узел карты мира. В следующем примере просто добавляется значок, но вы можете изменить его, как хотите, в соответствии с документами:
return { payload: { name: msg.payload.tid, lat: msg.payload.lat, lon: msg.payload.lon, icon: 'user-circle-o' } };
Шаг 5: отправка данных о местоположении на карту
Этот шаг довольно прост. Подключите выход из шага 4 к обоим узлам worldmap
и tracks
. Это всегда будет обновлять указатель на карте, одновременно отправляя данные также на узел tracks
, который рисует линии на карте при перемещении объекта. Настройте узел worldmap
с увеличенным максимальным возрастом, а также настройте отслеживаемые точки на узле tracks
на любое количество, которое вам нравится.
Государственное управление
По умолчанию компонент карты мира будет отображать в реальном времени информацию только о вновь созданных точках отслеживания местоположения. Вы можете использовать узел status, чтобы получить статус с карты мира при подключении новых сеансов и просто воспроизвести данные. Вы можете хранить точки в postgres или sqlite, в зависимости от ваших потребностей. Если вас интересуют только действия геозоны, состояние, вероятно, не требуется.
Бонус: триггеры геозоны
Вы также можете подключить захват данных из узла дешифрования OwnTracks с узлом node-red-node-geofence для создания триггеров на основе геозоны:
Используйте это для создания автоматических действий, которые запускаются, когда трекеры покидают или въезжают на территорию (например, ваша машина выезжает из города, а ваш телефон находится дома в 3 часа ночи).
Бонус: домашний помощник
Если вы используете Home Assistant и оказались за двойным NAT от вашего интернет-провайдера или просто не можете иметь общедоступный IP-адрес, обратите внимание на нашу надстройку для создания безопасных сквозных туннелей TLS для удаленного доступа. Подробную документацию можно найти здесь.
использованная литература
- Замечательная статья о расшифровке данных о местоположении OwnTracks: https://www.hardill.me.uk/wordpress/2016/04/26/ inventory-encrypted-location-node-red-node/
- Руководство Webhook Relay Node-RED
Первоначально опубликовано на сайте webhookrelay.com 9 января 2019 г.