概述
物联网平台提供NTP服务,解决嵌入式设备资源受限,系统不包含NTP服务,端上没有精确时间戳的问题。
物联网平台借鉴NTP协议原理,将云端作为NTP服务器。设备端发送一个特定Topic给云端,payload中带上发送时间。云端回复时在payload中加上云端的接收时间和发送时间。设备端收到回复后,再结合自己本地当前时间,得出一共4个时间。一起计算出设备端与云端的时间差,从而得出端上当前的精确时间。
本文通过MQTT.fx模拟设备端进行功能测试,工具接入请参考MQTT.fx接入物联网平台使用说明
使用说明
- 相关Topic
/ext/ntp/${YourProductKey}/${YourDeviceName}/request
/ext/ntp/${YourProductKey}/${YourDeviceName}/response
- 时间戳格式
{"deviceSendTime":"1571724098000"}
说明
1.时间戳数字的格式,支持Long和String。默认为Long类型。
2.NTP服务目前仅支持QoS=0的消息。
示例
- 通过MQTT.fx模拟设备成功和平台进行连接
- 设备端订阅Topic:
/ext/ntp/${YourProductKey}/${YourDeviceName}/response
- 设备端向Topic:
/ext/ntp/${YourProductKey}/${YourDeviceName}/request
发送一条QoS=0的消息,payload中带上设备当前的时间戳,单位为毫秒。{"deviceSendTime":"1592361428000"}
- 设备端收到服务端回复的消息
{"deviceSendTime":"1592361428000","serverSendTime":"1592366463548","serverRecvTime":"1592366463548"}
- 设备端计算出当前精确的unix时间
设备端收到服务端的时间记为${deviceRecvTime},则设备上的精确时间为:(${serverRecvTime} + ${serverSendTime} + ${deviceRecvTime} - ${deviceSendTime}) / 2
官方文档
请参考:NTP服务