设备时间同步(NTP)
设备时间同步(NTP)
物联网平台提供NTP服务,为资源受限的嵌入式设备,解决无法实时地获取服务端时间的问题。
原理介绍
物联网平台的NTP服务,借鉴NTP协议原理,将物联网平台作为NTP服务器。高精准度的时间校正流程如下:
设备端通过指定Topic向物联网平台发送消息,会携带发送时间deviceSendTime。
物联网平台接收设备端消息后,回复消息中,会增加接收消息的时间serverRecvTime和回复消息的时间serverSendTime。
设备端接收到物联网平台回复,会根据本地时间,给出接收回复的时间deviceRecvTime。
根据以上出现的4个时间,计算设备端与物联网平台的时间差,得出设备端获取到的,服务端当前的精确时间Time。
仅当设备端成功接入物联网平台后,才能通过NTP服务进行时间校准。
若嵌入式设备未接入物联网平台,设备上电后,无法通过NTP服务进行时间校准,则TSL建连过程中,证书时间校验会失败。
通信的Topic
上行(Alink JSON)。
设备向云端请求获取时间戳
请求Topic:/ext/ntp/${ProductID}/${HardwareID}/request
响应Topic:/ext/ntp/${ProductID}/${HardwareID}/response
其中,${ProductID}和${HardwareID}是设备证书中的ProductID和HardwareID,您可在物联网平台控制台的设备详情页面获取。
请求数据格式:
{
"deviceSendTime":"1571724098000"
}
响应数据格式:
{
"deviceSendTime":"1571724098000",
"serverRecvTime":"1571724098110",
"serverSendTime":"1571724098115"
}
如何使用
设备端计算出服务端当前精确的Unix时间。
假设基于请求的时延和响应的时延相同,设备端收到服务端的时间即${deviceRecvTime},则设备上的精确时间为:(${serverRecvTime}+${serverSendTime}+${deviceRecvTime}-${deviceSendTime})/2
如果设备端无时间戳,可以发送一个空请求设备空对象请求。
设备空对象请求。
{
}
平台返回时间戳。
{
"serverRecvTime":"1571724098110",
"serverSendTime":"1571724098115"
}
如果设备对时间精度要求不高(允许10ms~30ms的误差),可以直接使用serverRecvTime或serverSendTime