-1
私はGPSD
をLinuxシステムで実行しています(具体的にはSkyTraq Venus 6
はRaspberry Pi 3
ですが、問題はありません)。 GPSが最初に3D修正を取得または紛失したときにコマンドをトリガする方法はありますか?/etc/network/if-up.d
と/etc/network/if-down.d
のスクリプトとほとんど同じですか?GPSでコマンドを実行する
私はGPSD
をLinuxシステムで実行しています(具体的にはSkyTraq Venus 6
はRaspberry Pi 3
ですが、問題はありません)。 GPSが最初に3D修正を取得または紛失したときにコマンドをトリガする方法はありますか?/etc/network/if-up.d
と/etc/network/if-down.d
のスクリプトとほとんど同じですか?GPSでコマンドを実行する
私は解決策を見つけた:
ステップ1:GPSD
ランニング、gpspipe -w
出力JSON
データとをhereを記録しました。
TPV
クラスは、これらの値のいずれかをとることができる
mode
値を持ちます
ステップ2:
:gpsfix.py
と呼ばれる小さなプログラムを書きます3210
#!/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:
#!/usr/bin/env bash
# Wait for first 3D fix
gpspipe -w | ./gpsfix.py | grep 3D -m 1
# Do something nice
cowsay "TARGET LOCATED"
をし、それを実行します:bashスクリプトに入れ
$ ./act_on_gps_fix.sh
3D
________________
< TARGET LOCATED >
----------------
\ ^__^
\ (oo)\_______
(__)\ )\/\
||----w |
|| ||