Explorar o código

add:airlbs支持wifi定位

Dozingfiretruck hai 1 ano
pai
achega
eed04e4fe3
Modificáronse 2 ficheiros con 37 adicións e 6 borrados
  1. 12 2
      demo/airlbs/main.lua
  2. 25 4
      script/libs/airlbs.lua

+ 12 - 2
demo/airlbs/main.lua

@@ -29,17 +29,27 @@ local airlbs_project_key = "xxx"
 sys.taskInit(function()
     sys.waitUntil("IP_READY")
 
+    -- 如需wifi定位,需要硬件以及固件支持wifi扫描功能
+    local wifi_info = nil
+    if wlan then
+        sys.wait(3000) -- 网络可用后等待一段时间才再调用wifi扫描功能,否则可能无法获取wifi信息
+        wlan.init()
+        wlan.scan()
+        sys.waitUntil("WLAN_SCAN_DONE", 15000)
+        wifi_info = wlan.scanResult()
+        log.info("scan", "wifi_info", #wifi_info)
+    end
+
     socket.sntp()
     sys.waitUntil("NTP_UPDATE", 1000)
 
     while 1 do
-        local result , data = airlbs.request({project_id = airlbs_project_id,project_key = airlbs_project_key})
+        local result , data = airlbs.request({project_id = "xxx",project_key = 'xxx',wifi_info = wifi_info,timeout = 1000})
         if result then
             print("airlbs", json.encode(data))
         end
         sys.wait(20000)
     end
-
 end)
 
 -- 用户代码已结束---------------------------------------------

+ 25 - 4
script/libs/airlbs.lua

@@ -1,8 +1,8 @@
 --[[
 @module airlbs
 @summary airlbs 定位服务(收费服务,需自行联系销售申请)
-@version 1.0
-@date    2024.11.01
+@version 1.1
+@date    2024.11.18
 @author  Dozingfiretruck
 @usage
 --注意:因使用了sys.wait()所有api需要在协程中使用
@@ -13,11 +13,22 @@ local airlbs = require "airlbs"
 sys.taskInit(function()
     sys.waitUntil("IP_READY")
 
+    -- 如需wifi定位,需要硬件以及固件支持wifi扫描功能
+    local wifi_info = nil
+    if wlan then
+        sys.wait(3000) -- 网络可用后等待一段时间才再调用wifi扫描功能,否则可能无法获取wifi信息
+        wlan.init()
+        wlan.scan()
+        sys.waitUntil("WLAN_SCAN_DONE", 15000)
+        wifi_info = wlan.scanResult()
+        log.info("scan", "wifi_info", #wifi_info)
+    end
+
     socket.sntp()
     sys.waitUntil("NTP_UPDATE", 1000)
 
     while 1 do
-        local result , data = airlbs.request({project_id = "xxx",project_key = 'xxx',timeout = 1000})
+        local result , data = airlbs.request({project_id = "xxx",project_key = 'xxx',wifi_info = wifi_info,timeout = 1000})
         if result then
             print("airlbs", json.encode(data))
         end
@@ -99,7 +110,7 @@ end
 --[[
 获取定位数据
 @api airlbs.request(param)
-@param table 参数(联系销售获取id与key) project_id:项目ID project_key:项目密钥 timeout:超时时间,单位毫秒 默认15000
+@param table 参数(联系销售获取id与key) project_id:项目ID project_key:项目密钥 wifi_info:wifi扫描结果(wlan.scanResult()的返回值,wifi定位使用)timeout:超时时间,单位毫秒 默认15000
 @return bool 成功返回true,失败会返回false
 @return table 定位成功生效,成功返回定位数据
 @usage
@@ -155,6 +166,16 @@ function airlbs.request(param)
         lbs_data.cells[k].snr = v.snr
         lbs_data.cells[k].earfcn = v.earfcn
     end
+
+    if param.wifi_info and #param.wifi_info > 0 then
+        lbs_data.macs={}
+        for k, v in pairs(param.wifi_info) do
+            lbs_data.macs[k] = {}
+            lbs_data.macs[k].mac = v.bssid:toHex():gsub("(%x%x)", "%1:"):sub(1, -2)
+            lbs_data.macs[k].rssi = v.rssi
+        end
+    end
+
     local lbs_jdata = json.encode(lbs_data)
 
     udp_buff:write(string.char(auth_type) .. project_id .. imei .. muid .. timestamp .. nonce .. hmac_data:fromHex() .. string.char(lbs_data_type) .. lbs_jdata)