main.lua 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. -- LuaTools需要PROJECT和VERSION这两个信息
  2. PROJECT = "paid_lbs"
  3. VERSION = "1.0.0"
  4. -- 使用合宙iot平台时需要这个参数
  5. PRODUCT_KEY = "xxx" -- 到 iot.openluat.com 创建项目,获取正确的项目id
  6. -- 引入必要的库文件(lua编写), 内部库不需要require
  7. sys = require("sys")
  8. sysplus = require("sysplus")
  9. libnet = require "libnet"
  10. log.info("main", PROJECT, VERSION)
  11. if wdt then
  12. -- 添加硬狗防止程序卡死,在支持的设备上启用这个功能
  13. wdt.init(20000) -- 初始化watchdog设置为9s
  14. sys.timerLoopStart(wdt.feed, 3000) -- 3s喂一次狗
  15. end
  16. local airlbs = require "airlbs"
  17. local timeout = 60 -- 扫描基站/wifi 做 基站/wifi定位 的超时时间,最小5S,最大60S
  18. -- 此为收费服务,需自行联系销售申请
  19. local airlbs_project_id = ""
  20. local airlbs_project_key = ""
  21. -- --多基站定位
  22. -- sys.taskInit(function()
  23. -- sys.waitUntil("IP_READY") -- 等待底层上报联网成功
  24. -- socket.sntp() -- 进行NTP授时,放置部分联通卡没有基站授时
  25. -- sys.waitUntil("NTP_UPDATE", 1000)
  26. -- while 1 do
  27. -- if airlbs_project_id and airlbs_project_key then
  28. -- local result, data = airlbs.request({
  29. -- project_id = airlbs_project_id,
  30. -- project_key = airlbs_project_key,
  31. -- timeout = timeout * 1000 -- 实际的超时时间(单位:ms)
  32. -- })
  33. -- if result then
  34. -- log.info("airlbs多基站定位返回的经纬度数据为", json.encode(data))
  35. -- end
  36. -- else
  37. -- log.warn("请检查project_id和project_key")
  38. -- end
  39. -- sys.wait(20000)
  40. -- end
  41. -- end)
  42. -- wifi/基站混合定位
  43. sys.taskInit(function()
  44. sys.waitUntil("IP_READY")
  45. -- 如需wifi定位,需要硬件以及固件支持wifi扫描功能
  46. local wifi_info = nil
  47. if wlan then
  48. sys.wait(3000) -- 网络可用后等待一段时间才再调用wifi扫描功能,否则可能无法获取wifi信息
  49. wlan.init()
  50. wlan.scan()
  51. sys.waitUntil("WLAN_SCAN_DONE", timeout * 1000)
  52. wifi_info = wlan.scanResult()
  53. log.info("scan", "wifi_info", #wifi_info)
  54. end
  55. socket.sntp()
  56. sys.waitUntil("NTP_UPDATE", 1000)
  57. while 1 do
  58. local result, data = airlbs.request({
  59. project_id = airlbs_project_id,
  60. project_key = airlbs_project_key,
  61. wifi_info = wifi_info,
  62. timeout = timeout * 1000
  63. })
  64. if result then
  65. local data_str = json.encode(data)
  66. log.info("airlbs多基站定位返回的经纬度数据为", data_str)
  67. -- 解析经纬度
  68. local lat = data_str:match("\"lat\":([0-9.-]+)")
  69. log.info("airlbs", "lat", lat)
  70. local lng = data_str:match("\"lng\":([0-9.-]+)")
  71. log.info("airlbs", "lng", lng)
  72. else
  73. log.warn("请检查project_id和project_key")
  74. end
  75. sys.wait(20000) -- 循环20S一次wifi定位
  76. end
  77. end)
  78. -- 用户代码已结束---------------------------------------------
  79. -- 结尾总是这一句
  80. sys.run()
  81. -- sys.run()之后后面不要加任何语句!!!!!