Передача GPS-координат по SNMP в роутерах TELEOFIS LT7x-G

Передача GPS-координат по SNMP в роутерах TELEOFIS LT7x-G

← Все разделы FAQ

Разделы FAQ:

Введение

В 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 сместятся.

Проверка работы и 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.
Примечание: если роутер не отвечает по SNMP снаружи, разрешите входящий UDP-порт 161 в настройках межсетевого экрана (firewall) роутера.

Заключение

После настройки роутер LT7x-G отдаёт по SNMP режим фикса, широту, долготу и высоту. Координаты собираются той же системой мониторинга, что и остальные параметры устройства, без отдельного ПО для работы с gpsd. По параметру режима фикса удобно строить триггер на потерю спутников, а по координатам — отслеживать перемещение роутеров на подвижных объектах и транспорте.