Socket-сервер для GPS маяка
Простая реализация сокет-сервера на Python для перехвата данных от GPS маяка SinoTrack с последующей отправкой на сервер мониторинга Ruhavik, а также записью координат во временную базу данных Influx с последующей визуализацией данных в Grafana.
Такая схема используется для того, чтобы в Grafana выставить уведомление на различные события, например, низкий заряд батареи или когда маяк начал движение.
Сервер на Python
Supervisor - это простой менеджер процессов с открытым исходным кодом, написанный на Python, с помощью которого можно запускать нужное количество копий процесса и следить за их состоянием.
GitHub Gist: Socket-сервер на Python и Influx
https://gist.github.com/telnex/8aa003055062b4c5f142321fe6da31d6
Клиент
В нашем случае клиент нужен только для отладки, т.к. на практике в роли клиента будет наш SinoTrack маяк.
import socket HOST = 'localhost' PORT = 30200 with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: s.connect((HOST, PORT)) s.sendall(b'*HQ,7028702252,V1,182350,A,4740.7697,N,04950.0711,E,0.00,0,250324,fbfffbff,250,02,3039,23394,55#') data = s.recv(1024) print('Received', repr(data))
Настройка маяка через СМС
Стандартные команды для настройки SinoTrack.
Команда: 804paswd IP PORT. Пример: 8040000 45.112.204.217 8090 Ответ: SET OK
Настройка базы данных Influx
На данном этапе InfluxDB версии 1.х уже должна быть установлена.
CREATE DATABASE GPS USE DATABASE GPS SHOW RETENTION POLICIES CREATE RETENTION POLICY "Month" ON "GPS" DURATION 720h REPLICATION 1; ALTER RETENTION POLICY "Month" ON "GPS" DEFAULT
Evaluate every 1m For 2m
WHEN last() OF query (A, 5m, now) IS ABOVE 1
Периодически возникали проблемы с недоступностью скрипта: не отвечал на запросы. Ошибок не было, порт также прослушивался. Искусственно воспроизвести ошибку не получалось. По этой причине код был переписан на Twisted. На данном фреймворке описанная проблема не наблюдалась.