Skip to content

时间服务

时间服务提供时间校正 NTP 以及夏令时获取 DST 服务。

时间校正(NTP)

设备时钟不准确或者无时钟,需要从云端同步时间,称之为时间校正(NTP)。

若设备对时间精度要求不高,可以直接用服务端的时间戳,相对来说比较简单,不多介绍。 若设备对时间精度敏感,需要高精度校正,那么就要考虑网络耗时。假如服务端的时间戳 t3,经过网络耗时 10ms 发到设备端,设备取到的 t3 已经是 10ms 之前的时间了,需要 t3+10ms 才是相对准确的时间。

示例

假设请求的耗时和响应的耗时相等,响应耗时是总体网络耗时的一半。可以参考如下图示:

t4 − t1 = 总耗时 t3 − t2 = 服务端系统耗时 总体网络耗时 = 总耗时 − 服务端耗时 响应耗时 = 总体网络耗时 ÷ 2=(总耗时 − 服务端耗时) ÷ 2 = (t4 − t1 − (t3 − t2)) ÷ 2 = (t4 − t1 − t3 + t2) ÷ 2 精准时间 = t3 + 响应耗时 = t3 + (t4 − t1 − t3 + t2) ÷ 2=(t4 − t1 + t3 + t2) ÷ 2

设备发送消息

设备主动请求获取产品下最新版本的配置文件。

接口主题
MQTTthings/up/${tenantId}/${productKey}/${deviceKey}/ext/time/get
json
{
    "msgId":"45lkj3551234001",
  	"time":1655957399000,
    "method": "ext/time/get",
	"data":{
        "bizType":"NTP",
        "dst":1655957399000
    }
}

参数说明

参数类型说明必选备注
${tenantId}string租户 ID云平台分配的租户ID。
${productKey}string产品 ID属性上报的来源设备所属产品 Key。
${deviceKey}string设备 ID属性上报的来源设备 Key。
msgIdstring消息 ID总长度不超过 32 位的字符,请求和响应消息通过该值建立应答关系。
timenumber消息时间戳消息发送时的 Unix 时间戳,10 位秒级或 13 位毫秒级。
methodstring消息类型消息类型,http和mqtt传输非必填,Websocket、TCP和UDP传输必填。
dataobject请求参数集合对象请求参数集合对象
data.bizTypestring业务类型NTP:时间校正服务。
data.dstnumber设备请求时间戳设备请求时的 Unix 时间戳,13 位毫秒级。bizType = NTP,时间校正服务调用时,若需要高精度校正则必填,否则返回的是服务端的时间戳。

设备接收消息

设备请求云端获取最新版本配置文件,云端响应返回最新版本配置文件的 URL。

接口主题
MQTTthings/down/${tenantId}/${productKey}/${deviceKey}/ext/config/get_reply
json
{
    "msgId":"45lkj3551234001",
  	"time":1655957399000,
    "method": "ext/config/get_reply",
	"data":{
        "bizType":"NTP",
        "dst":1655957399000,
        "srt":1655957399100,
        "sst":1655957399300,
    }
}

参数说明

参数类型说明必选备注
${tenantId}string租户 ID云平台分配的租户ID。
${productKey}string产品 ID属性上报的来源设备所属产品 Key。
${deviceKey}string设备 ID属性上报的来源设备 Key。
msgIdstring消息 ID总长度不超过 32 位的字符,请求和响应消息通过该值建立应答关系。
timenumber消息时间戳消息发送时的 Unix 时间戳,10 位秒级或 13 位毫秒级。
methodstring消息类型消息类型,http和mqtt传输非必填,Websocket、TCP和UDP传输必填。
codenumber响应状态码0 代表成功,默认值。非 0 代表失败。
dataobject响应参数集合对象响应参数集合对象。
data.bizTypestring业务类型NTP:时间校正服务。
data.dstnumber设备请求时间戳原样返回
data.srtnumber服务端收到请求时间戳服务端收到请求时的 Unix 时间戳,13 位毫秒级。bizType = NTP,且请求中传 dst 参数,该字段才返回。
data.sstnumber服务端响应时间戳服务端响应的 Unix 时间戳,13 位毫秒级。bizType = NTP,且请求中传 dst 参数,该字段才返回。