cloud.lua 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. -- 引入 ThingsCloud 接入库
  2. -- 接入协议参考:ThingsCloud MQTT 接入文档 https://docs.thingscloud.xyz/guide/connect-device/mqtt.html
  3. _G.ThingsCloud = require "ThingsCloud"
  4. -- 进入 ThingsCloud 控制台:https://www.thingscloud.xyz
  5. -- 创建设备,进入设备详情页的【连接】页面,复制设备证书和MQTT接入点地址。请勿泄露你的设备证书。
  6. -- projectKey
  7. local projectKey = "PyvS86eR0D"
  8. -- typeKey
  9. local typeKey = "b0c0eqsmta"
  10. -- MQTT 接入点,只需主机名部分
  11. local host = "sh-1-mqtt.iot-api.com"
  12. -- apiEndpoint
  13. local apiEndpoint = "http://sh-1-api.iot-api.com"
  14. -- 设备成功连接云平台后,触发该函数
  15. local function onConnect(result)
  16. log.info("cloud","onConnect", result)
  17. if result then
  18. sys.publish("CLOUD_CONNECTED")
  19. _G_CONNECTED = true
  20. -- 当设备连接成功后
  21. -- 例如:切换设备的LED闪烁模式,提示用户设备已正常连接。
  22. --上报所有参数
  23. attributes.setAll()
  24. end
  25. end
  26. -- 设备接收到云平台下发的属性时,触发该函数
  27. local function onReceive(response)
  28. for k, v in pairs(response) do
  29. log.info("onReceive", k, v)
  30. if k == "phone" then
  31. -- 设备接收到云端下发的电话号码,开始拨打电话。
  32. sys.publish("AUDIO_CMD_RECEIVED","call",v)
  33. elseif k == "sleepMode" then
  34. -- 设备收到低功耗要求,更改低功耗模式
  35. attributes.set("isGPSOn", false)
  36. attributes.set("isFixed", "定位功能已关闭")
  37. attributes.set("lat", "无数据")
  38. attributes.set("lng", "无数据")
  39. --最后再更改变量
  40. attributes.set(k, v, true)
  41. sys.timerStart(sys.publish, 6000, "SLEEP_CMD_RECEIVED", v)
  42. else
  43. attributes.set(k, v, true)
  44. end
  45. end
  46. end
  47. -- 设备接收到云平台下发的命令时,触发该函数
  48. local function onCommand(cmd)
  49. if cmd.method == "play" then
  50. -- 设备接收到云端下发的播放命令,开始播放音乐。
  51. log.info("play music")
  52. sys.publish("AUDIO_CMD_RECEIVED","music")
  53. end
  54. end
  55. -- 设备接入云平台的初始化逻辑,在独立协程中完成
  56. sys.taskInit(function()
  57. -- 连接云平台,内部支持判断网络可用性、MQTT自动重连
  58. -- 这里采用了设备一机一密方式,需要为每个设备固件单独写入证书。另外也支持一型一密,相同设备类型下的所有设备使用相同固件。
  59. ThingsCloud.connect({
  60. host = host,
  61. projectKey = projectKey,
  62. typeKey = typeKey,
  63. apiEndpoint = apiEndpoint,
  64. })
  65. -- 注册各类事件的回调函数,在回调函数中编写所需的硬件端操作逻辑
  66. ThingsCloud.on("connect", onConnect)
  67. ThingsCloud.on("attributes_push", onReceive)
  68. ThingsCloud.on("command_send", onCommand)
  69. sys.waitUntil("CLOUD_CONNECTED") -- 连接成功
  70. end)