全部產品
Search
文件中心

IoT Platform:NTP服務

更新時間:Jun 30, 2024

物聯網平台提供NTP服務,為資源受限的嵌入式裝置,解決無法即時地擷取服務端時間的問題。

原理介紹

物聯網平台的NTP服務,借鑒NTP協議原理,將物聯網平台作為NTP伺服器。高精準度的時間校正流程如下:

  1. 裝置端通過指定Topic向物聯網平台發送訊息,會攜帶發送時間deviceSendTime

  2. 物聯網平台接收裝置端訊息後,回複訊息中,會增加接收訊息的時間serverRecvTime和回複訊息的時間serverSendTime

  3. 裝置端接收到物聯網平台回複,會根據本地時間,給出接收回複的時間deviceRecvTime

  4. 根據以上出現的4個時間,計算裝置端與物聯網平台的時間差,得出裝置端擷取到的,服務端當前的精確時間Time

重要

僅當裝置端成功接入物聯網平台後,才能通過NTP服務進行時間校準。

若嵌入式裝置未接入物聯網平台,裝置上電後,無法通過NTP服務進行時間校準,則TSL建連過程中,認證時間校正會失敗。

通訊的Topic

請求Topic:/ext/ntp/${YourProductKey}/${YourDeviceName}/request

響應Topic:/ext/ntp/${YourProductKey}/${YourDeviceName}/response

其中,${YourProductKey}${YourDeviceName}是裝置認證中的ProductKeyDeviceName,您可在物聯網平台控制台裝置詳情頁面擷取。

裝置端接入說明

目前僅C語言的裝置端Link SDK支援配置NTP服務功能。請訪問C Link SDK,下載開發代碼Demo。

裝置端配置NTP服務的流程和樣本,請參見NTP服務

NTP服務使用流程,及其Topic說明如下:

  1. 裝置端向Topic:/ext/ntp/${YourProductKey}/${YourDeviceName}/request發送一條QoS=0的訊息,攜帶裝置當前的時間戳記,單位為毫秒。樣本如下:

    {
        "deviceSendTime":"1571724098000"
    }
    說明
    • 時間戳記數字,支援Long(預設)和String類型。

    • NTP服務目前僅支援QoS=0的訊息。

  2. 裝置端通過Topic:/ext/ntp/${YourProductKey}/${YourDeviceName}/response,收到物聯網平台回複的訊息,包含以下資訊。

    說明

    裝置端可直接通過Topic:/ext/ntp/${YourProductKey}/${YourDeviceName}/response接收物聯網平台的訊息,無需訂閱。在物聯網平台控制台的裝置詳情頁面的已訂閱Topic列表中也不會顯示該Topic。

    {
        "deviceSendTime":"1571724098000",
        "serverRecvTime":"1571724098110",
        "serverSendTime":"1571724098115"
    }
  3. 裝置端計算出服務端當前精確的Unix時間。

    假設基於請求的時延和響應的時延相同,裝置端收到服務端的時間即${deviceRecvTime},則裝置上的精確時間為:(${serverRecvTime}+${serverSendTime}+${deviceRecvTime}-${deviceSendTime})/2

使用樣本

說明

裝置端和服務端發送的時間戳記資料的類型相同。例如,裝置端傳的時間戳記是String類型,服務端返回的時間戳記也是String類型。

例如,裝置上時間是1571724098000毫秒,服務端時間是1571724098100毫秒,鏈路延時是10毫秒,服務端從接收到發送間隔為5毫秒。

操作

裝置端時間(毫秒)

服務端時間(毫秒)

裝置端發送

1571724098000(deviceSendTime)

1571724098100

服務端接收

1571724098010

1571724098110(serverRecvTime)

服務端發送

1571724098015

1571724098115(serverSendTime)

裝置端接收

1571724098025(deviceRecvTime)

1571724098125

則裝置端計算出的當前準確時間為(1571724098110+1571724098115+1571724098025-1571724098000)毫秒÷2=1571724098125毫秒

如果直接採用物聯網平台返回的時間戳記,只能得到時間1571724098115毫秒,與服務端上的時間會有10毫秒的鏈路延時誤差。