2017-09-30 37 views
-1

我有一个运行在Linux系统上的GPSD(特别是上的SkyTraq Venus 6,但这应该不重要)。有没有办法在GPS第一次获得或失去3D修复时触发命令,就像/etc/network/if-up.d/etc/network/if-down.d中的脚本一样?关于GPS定位的运行命令

回答

0

我找到了解决方案:

步骤1:随着GPSD运行,gpspipe -w输出JSON数据,记录here。该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 | 
       ||  ||