Запустить команду на починку 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 |
|| ||