-1
我有一个运行在Linux系统上的GPSD
(特别是上的SkyTraq Venus 6
,但这应该不重要)。有没有办法在GPS第一次获得或失去3D修复时触发命令,就像/etc/network/if-up.d
和/etc/network/if-down.d
中的脚本一样?关于GPS定位的运行命令
我有一个运行在Linux系统上的GPSD
(特别是上的SkyTraq Venus 6
,但这应该不重要)。有没有办法在GPS第一次获得或失去3D修复时触发命令,就像/etc/network/if-up.d
和/etc/network/if-down.d
中的脚本一样?关于GPS定位的运行命令
我找到了解决方案:
步骤1:随着GPSD
运行,gpspipe -w
输出JSON
数据,记录here。该TPV
类有一个mode
值,它可以利用这些值中的一个:
步骤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 |
|| ||