时间服务
时间服务提供时间校正 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
设备发送消息
设备主动请求获取产品下最新版本的配置文件。
| 接口 | 主题 |
|---|---|
| MQTT | things/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。 |
| msgId | string | 消息 ID | 是 | 总长度不超过 32 位的字符,请求和响应消息通过该值建立应答关系。 |
| time | number | 消息时间戳 | 是 | 消息发送时的 Unix 时间戳,10 位秒级或 13 位毫秒级。 |
| method | string | 消息类型 | 否 | 消息类型,http和mqtt传输非必填,Websocket、TCP和UDP传输必填。 |
| data | object | 请求参数集合对象 | 是 | 请求参数集合对象 |
| data.bizType | string | 业务类型 | 是 | NTP:时间校正服务。 |
| data.dst | number | 设备请求时间戳 | 是 | 设备请求时的 Unix 时间戳,13 位毫秒级。bizType = NTP,时间校正服务调用时,若需要高精度校正则必填,否则返回的是服务端的时间戳。 |
设备接收消息
设备请求云端获取最新版本配置文件,云端响应返回最新版本配置文件的 URL。
| 接口 | 主题 |
|---|---|
| MQTT | things/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。 |
| msgId | string | 消息 ID | 是 | 总长度不超过 32 位的字符,请求和响应消息通过该值建立应答关系。 |
| time | number | 消息时间戳 | 是 | 消息发送时的 Unix 时间戳,10 位秒级或 13 位毫秒级。 |
| method | string | 消息类型 | 否 | 消息类型,http和mqtt传输非必填,Websocket、TCP和UDP传输必填。 |
| code | number | 响应状态码 | 否 | 0 代表成功,默认值。非 0 代表失败。 |
| data | object | 响应参数集合对象 | 是 | 响应参数集合对象。 |
| data.bizType | string | 业务类型 | 是 | NTP:时间校正服务。 |
| data.dst | number | 设备请求时间戳 | 是 | 原样返回 |
| data.srt | number | 服务端收到请求时间戳 | 是 | 服务端收到请求时的 Unix 时间戳,13 位毫秒级。bizType = NTP,且请求中传 dst 参数,该字段才返回。 |
| data.sst | number | 服务端响应时间戳 | 是 | 服务端响应的 Unix 时间戳,13 位毫秒级。bizType = NTP,且请求中传 dst 参数,该字段才返回。 |
