Если вы хотите отслеживать свое местоположение, но не хотите, чтобы оно передавалось слишком большому количеству компаний, которые не должны этого знать, взгляните на это фантастическое мобильное приложение с открытым исходным кодом 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 и убедитесь, что в вашем экземпляре включена аутентификация.

Предпосылки

Вы можете установить узлы через npm или щелкнуть «Управление палитрой» в настройках Node-RED.

Создайте общедоступную конечную точку для веб-перехватчиков и установите приложение

Наши данные о местоположении будут переданы в Node-RED через общедоступный адрес Webhook Relay. Поэтому первое, что нужно сделать, - это настроить вашу конечную точку:

  1. Перейдите на https://my.webhookrelay.com/buckets и нажмите СОЗДАТЬ ВЕДРО. Назовите его ownracks. Сегменты - это механизм группировки для объединения веб-перехватчиков и их разветвления по нескольким адресатам. Поскольку мы будем использовать WebSockets, нам не нужно создавать выходные данные (вы можете создать его, если хотите, чтобы функция повторной отправки работала через веб-интерфейс).
  2. После создания корзины обратите внимание на URL общедоступной конечной точки, который имеет формат https://my.webhookrelay.com/v1/webhooks/[your-unique-uuid]. Вам нужно будет указать это в вашем приложении OwnTracks.

Установите и настройте приложение:

  1. Перейдите на сайт https://ghtracks.org/ и следуйте инструкциям в зависимости от операционной системы вашего телефона.
  2. После того, как у вас есть приложение, перейдите к настройкам и установите режим 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 для удаленного доступа. Подробную документацию можно найти здесь.

использованная литература

Первоначально опубликовано на сайте webhookrelay.com 9 января 2019 г.