Запустить команду на починку GPS

Я имею GPSD работает в системе Linux (особенно SkyTraq Venus 6 на Raspberry Pi 3, но это не должно иметь значения). Есть ли способ вызвать команду, когда GPS впервые получает или теряет 3D-решение, почти как сценарии в /etc/network/if-up.d а также /etc/network/if-down.d?

1 ответ

Я нашел решение:

Шаг 1: с GPSD Бег, gpspipe -w выходы JSON данные, документированные здесь. TPV класс имеет mode значение, которое может принимать одно из следующих значений:

  • 0 = неизвестный режим
  • 1= без исправления
  • 2=2D исправление
  • 3=3D исправить

Шаг 2: Напишите небольшую программу под названием gpsfix.py:

#!/usr/bin/env python

import sys
import errno
import json

modes = {
  0: 'unknown',
  1: 'nofix',
  2: '2D',
  3: '3D',
}

try:
  while True:
    line = sys.stdin.readline()
    if not line: break # EOF

    sentence = json.loads(line)
    if sentence['class'] == 'TPV':
      sys.stdout.write(modes[sentence['mode']] + '\n')
      sys.stdout.flush()
except IOError as e:
  if e.errno == errno.EPIPE:
    pass
  else:
    raise e

Для каждого TPV предложение, gpspipe -w | ./gpsfix.py напечатает режим.

Шаг 3: Используйте grep 3D -m 1 ждать первого исправления, а затем выйти (который отправляет SIGPIPE на все остальные процессы в трубе).

gpspipe -w | ./gpsfix.py | grep 3D -m 1 распечатает 3D на первом исправлении.

Шаг 4: Вставьте в скрипт bash:

#!/usr/bin/env bash

# Wait for first 3D fix
gpspipe -w | ./gpsfix.py | grep 3D -m 1

# Do something nice
cowsay "TARGET LOCATED"

И запустите это:

$ ./act_on_gps_fix.sh

3D
 ________________
< TARGET LOCATED >
 ----------------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||
Другие вопросы по тегам