GPS定位
M2000网关支持GPS定位,使用 调用RESTful API 调用GPS相关接口:
读取定位状态:
GET /cassia/info响应中的gps字段,参考 网关信息获取/设置开机启用GPS:
POST /cassia/info设置dongle.gps_startup为"1"请求定位:
GET /cassia/gps/request,等待定位成功后返回
备注
需要网关支持
gps功能(/cassia/info响应的features包含gps)网关刚启动时GPS模块初始化中,接口可能返回
gps is starting无卫星信号时
/cassia/gps/request会长时间阻塞,务必配合asyncio.wait_for()设置超时
示例
1import asyncio
2import json
3
4import cassiablue
5
6REQUEST_TIMEOUT_S = 30
7
8
9def dms_to_deg(dms, sign):
10 d, m, s = str(dms).split(".")
11 deg = int(d) + int(m) / 60 + int(s) / 3600
12 return -deg if sign in ("S", "W") else deg
13
14
15def print_gps(gps):
16 if not gps:
17 print("no gps data")
18 return
19
20 lat, lon = gps.get("LAT"), gps.get("LON")
21 if lat and lon:
22 print("lat:", dms_to_deg(lat, gps.get("NS")))
23 print("lon:", dms_to_deg(lon, gps.get("WE")))
24 print("time(UTC):", gps.get("TIME"))
25 else:
26 print("no fix")
27
28 for i in (1, 2, 3):
29 sv = gps.get("SATELLITE%d" % i)
30 if sv:
31 print("satellite:", sv, "snr:", gps.get("SATELLITE%d_SNR" % i))
32
33
34async def read_gps_state():
35 ok, ret = await cassiablue.send_cmd("/cassia/info")
36 if not ok:
37 print("get info failed:", ret)
38 return
39 print_gps(json.loads(ret).get("gps"))
40
41
42async def request_gps():
43 try:
44 ok, ret = await asyncio.wait_for(cassiablue.send_cmd("/cassia/gps/request"), REQUEST_TIMEOUT_S)
45 except asyncio.TimeoutError:
46 print("gps request timeout, no fix yet")
47 return
48
49 if not ok:
50 print("gps request failed:", ret)
51 return
52 print_gps(json.loads(ret).get("gps"))
53
54
55async def main():
56 print("read cached gps state")
57 await read_gps_state()
58
59 print("request gps")
60 await request_gps()
61
62
63asyncio.run(main())
API
请求定位
ok, result = await asyncio.wait_for(cassiablue.send_cmd("/cassia/gps/request"), 30)
定位成功响应示例:
{
"gps": {
"TIME": "07:40:09",
"LON": "117.14.18",
"LAT": "32.47.21",
"NS": "N",
"WE": "E",
"SATELLITE1": 8,
"SATELLITE1_SNR": 37,
"SATELLITE2": 26,
"SATELLITE2_SNR": 44,
"SATELLITE3": 31,
"SATELLITE3_SNR": 46
}
}
字段 |
类型 |
说明 |
示例 |
|---|---|---|---|
TIME |
str |
UTC时间 |
|
LON |
str |
经度(度.分.秒格式) |
|
LAT |
str |
纬度(度.分.秒格式) |
|
NS |
str |
南北半球( |
|
WE |
str |
东西半球( |
|
SATELLITE1~3 |
int |
卫星编号(0表示无) |
8 |
SATELLITE1~3_SNR |
int |
卫星信噪比 |
37 |
坐标格式
LAT / LON 为 度.分.秒 格式,非十进制度,换算方式:
32.47.21 = 32 + 47/60 + 21/3600 = 32.789167
NS 为 S 或 WE 为 W 时,对应坐标取负值。
读取定位状态
GET /cassia/info 响应中的 gps 字段为最近一次定位状态,字段与上表一致,未定位时 LAT / LON 为空字符串。
开机启用GPS
body = json.dumps({"dongle": {"gps_startup": "1"}})
ok, result = await cassiablue.send_cmd("/cassia/info", "POST", None, body)
设置方式参考 网关信息获取/设置,配置变更后网关会重启,重启后自动开启GPS。