Введение
В 4G-роутерах TELEOFIS LT70-G и LT71-G есть GPS-приёмник, поэтому местоположение маршрутизатора можно получать не только через службу gpsd, но и по протоколу SNMP — вместе с остальными параметрами, которые уже собирает система мониторинга (Zabbix, PRTG и другие NMS).
В статье описано, как настроить роутер LT7x-G так, чтобы он отдавал по SNMP четыре параметра GPS: режим фикса, широту, долготу и высоту. Настройка выполняется из консоли роутера: создаётся скрипт чтения координат, затем он подключается к агенту SNMP, после чего проверяются OID для опроса GPS-координат.
Теоретическая часть
Данные GPS-приёмника на роутере обрабатывает служба gpsd. Она слушает TCP-порт 2947 и по запросу отдаёт сведения о местоположении в формате JSON. Нужные значения содержатся в сообщении класса TPV (time-position-velocity): поля mode, lat, lon, altMSL/alt.
Агент SNMP на роутере (snmpd) умеет запускать внешние программы и публиковать их вывод в ветке UCD-SNMP-MIB .1.3.6.1.4.1.2021.8 (extTable). Каждая запись exec в конфигурации получает свой порядковый номер, а результат выполнения программы доступен по OID .1.3.6.1.4.1.2021.8.1.101.<номер>.
Таким образом, скрипт запрашивает у gpsd одно значение, а snmpd при каждом опросе запускает скрипт и возвращает его вывод системе мониторинга.
Создание скрипта для чтения GPS
Подключитесь к роутеру по SSH под пользователем root (по умолчанию адрес 192.168.88.1, порт 22). Каждую команду ниже копируйте целиком, вставляйте в терминал и нажимайте Enter.
Шаг 1. Создайте скрипт
Выполните команду — она создаст файл /usr/bin/gps.sh:
cat > /usr/bin/gps.sh << 'EOF'
#!/bin/sh
get_field(){
port=$(uci -q get gpsd.core.port)
[ -n "$port" ] || port="2947"
tpv=$( (echo '?WATCH={"enable":true,"json":true};'; sleep 2) | nc 127.0.0.1 "$port" 2>/dev/null | grep -m1 '"class":"TPV"')
val=""
for key in "$@"; do
val=$(jsonfilter -s "$tpv" -e "@.$key" 2>/dev/null)
[ -n "$val" ] && break
done
if [ -z "$val" ]; then
echo "n/a"
exit 1
fi
echo $val
}
case "$1" in
mode) get_field mode ;;
lat) get_field lat ;;
lon) get_field lon ;;
alt) get_field altMSL alt ;;
*) echo "Unsupported request: mode lat lon alt"; exit 1 ;;
esac
exit 0
EOF
Затем дайте скрипту права на запуск:
chmod +x /usr/bin/gps.sh
Шаг 2. Проверьте скрипт
/usr/bin/gps.sh mode
Команда должна вывести цифру:
2или3— координаты определены;0или1— спутники пока не найдены.
0 и 1 — нормальная ситуация, если GPS-антенна не подключена к разъёму GNSS или роутер стоит в помещении. Для уверенного приёма вынесите антенну ближе к окну или на улицу.
Настройка SNMP
Шаг 3. Добавьте параметры в SNMP и включите SNMP
Команда добавляет в конфигурацию snmpd четыре записи exec (gps_mode, gps_lat, gps_lon, gps_alt), включает агент SNMP с поддержкой версий v1 и v2c, добавляет его в автозагрузку и перезапускает:
for f in mode lat lon alt; do s=$(uci add snmpd exec); uci set snmpd.$s.name="gps_$f"; uci set snmpd.$s.prog='/usr/bin/gps.sh'; uci set snmpd.$s.args="$f"; done; uci set snmpd.general.enabled='1'; uci set snmpd.general.mode='v1_v2c'; uci commit snmpd; /etc/init.d/snmpd enable; /etc/init.d/snmpd restart
Проверка работы и OID для системы мониторинга
Шаг 4. Проверьте, что SNMP отдаёт данные
snmpwalk -m '' -v2c -c public -t 10 127.0.0.1 .1.3.6.1.4.1.2021.8.1.2
В выводе должны появиться строки gps_mode, gps_lat, gps_lon, gps_alt. Число в конце OID напротив каждой из них — это номер параметра.
OID параметров GPS
На заводской конфигурации номера параметров такие:
| Параметр | OID |
|---|---|
| Режим фикса (0–1 — нет, 2 — 2D, 3 — 3D) |
.1.3.6.1.4.1.2021.8.1.101.19
|
| Широта |
.1.3.6.1.4.1.2021.8.1.101.20
|
| Долгота |
.1.3.6.1.4.1.2021.8.1.101.21
|
| Высота, м |
.1.3.6.1.4.1.2021.8.1.101.22
|
Если на шаге 4 номера оказались другими, подставьте их вместо 19–22. Пока координаты не определены, вместо чисел приходит n/a.
Настройки на стороне системы мониторинга
- Версия SNMP —
v2c, community —public. - Таймаут опроса — не меньше
5секунд: каждое значение готовится около 2 секунд. - Тип данных для широты, долготы и высоты — строка или число с плавающей точкой: при отсутствии фикса приходит текст
n/a.
161 в настройках межсетевого экрана (firewall) роутера.
Заключение
После настройки роутер LT7x-G отдаёт по SNMP режим фикса, широту, долготу и высоту. Координаты собираются той же системой мониторинга, что и остальные параметры устройства, без отдельного ПО для работы с gpsd. По параметру режима фикса удобно строить триггер на потерю спутников, а по координатам — отслеживать перемещение роутеров на подвижных объектах и транспорте.