すべてのプロダクト
Search
ドキュメントセンター

IoT Platform:NTP サービス

最終更新日:Mar 27, 2025

IoT Platform は、Network Time Protocol(NTP)サービスを提供します。 この方法により、IoT Platform はサーバー時間をリソースが限られている組み込みデバイスと同期できます。

仕組み

NTP サービスは、NTP プロトコルに基づいて動作します。 IoT Platform は NTP サーバーとして使用されます。 次のセクションでは、高精度時間調整のプロセスについて説明します。

  1. デバイスは、指定された Topic を使用して IoT Platform にメッセージを送信します。 メッセージには、deviceSendTime パラメーターが含まれています。

  2. IoT Platform はメッセージを受信した後、応答を返します。 応答には、serverRecvTime パラメーターと serverSendTime パラメーターが含まれています。

  3. デバイスは応答を受信すると、ローカル時間に基づいて deviceRecvTime パラメーターを生成します。

  4. デバイスは、デバイスと IoT Platform の間の時間差を計算し、Time パラメーターの値を取得します。 このパラメーターは、サーバーのシステム時間を示します。

重要

デバイスのシステム時間は、デバイスが IoT Platform に接続されている場合にのみ、NTP サービスを使用して調整できます。

デバイスが IoT Platform に接続されていない場合、デバイスの電源を入れた後、デバイスは正確な時間値を取得できません。 デバイスが IoT Platform への TSL ベースの接続を確立すると、証明書時間のタイムスタンプの検証に失敗します。

Topic

リクエスト Topic:/ext/ntp/${YourProductKey}/${YourDeviceName}/request

レスポンス Topic:/ext/ntp/${YourProductKey}/${YourDeviceName}/response

${YourProductKey}${YourDeviceName} は、デバイス証明書の ProductKeyDeviceName を指定します。 デバイス証明書は、IoT Platform コンソール[デバイスの詳細] ページで取得できます。

デバイスの接続

NTP サービスは、C 用 Link SDK のみを使用して構成できます。 サンプルコードをダウンロードするには、「C 用 Link SDK の取得と使用」をご参照ください。

デバイスで NTP サービスを構成する方法については、「NTP サービス」をご参照ください。

指定された Topic を使用して NTP サービスを使用する手順は次のとおりです。

  1. デバイスは、QoS 0 メッセージを /ext/ntp/${YourProductKey}/${YourDeviceName}/request Topic に送信します。 メッセージには、デバイスの現在の時刻を示すタイムスタンプが含まれています。 タイムスタンプの単位はミリ秒です。 例:

    {
        "deviceSendTime":"1571724098000"
    }
    説明
    • タイムスタンプのデータ型は、Long または String にすることができます。 デフォルトでは、Long データ型が使用されます。

    • NTP サービスは、QoS 0 メッセージのみをサポートしています。

  2. デバイスは、/ext/ntp/${YourProductKey}/${YourDeviceName}/response Topic を使用して IoT Platform から応答を受信します。 次のサンプルコードは例を示しています。

    {
        "deviceSendTime":"1571724098000",
        "serverRecvTime":"1571724098110",
        "serverSendTime":"1571724098115"
    }
  3. デバイスは、UNIX タイムスタンプ形式で正確な現在時刻を計算します。

    デバイスは、NTP サーバーから応答を受信したときのタイムスタンプを ${deviceRecvTime} として記録します。 デバイスの正確な現在時刻は、次の式を使用して計算されます:(${serverRecvTime} + ${serverSendTime} + ${deviceRecvTime} - ${deviceSendTime})/2

説明

デバイスと NTP サーバーによって送信されるタイムスタンプは、同じデータ型です。 たとえば、デバイスによって送信されるタイムスタンプが STRING 型の場合、NTP サーバーによって返されるタイムスタンプも STRING 型になります。

この例では、デバイスのタイムスタンプは 1571724098000 です。 NTP サーバーのタイムスタンプは 1571724098100 です。 リンクのレイテンシは 10 ミリ秒です。 NTP サーバーは、サーバーがデバイスからメッセージを受信してから 5 ミリ秒後に応答を送信します。

操作

デバイス時間(ミリ秒)

サーバー時間(ミリ秒)

デバイスがメッセージを送信する

1571724098000 (deviceSendTime)

1571724098100

NTP サーバーがメッセージを受信する

1571724098010

1571724098110 (serverRecvTime)

NTP サーバーが応答を送信する

1571724098015

1571724098115 (serverSendTime)

デバイスが応答を受信する

1571724098025 (deviceRecvTime)

1571724098125

デバイスは、次の式を使用して正確な現在時刻を計算します:(1571724098110 + 1571724098115 + 1571724098025 - 1571724098000)/2 = 1571724098125

デバイスが IoT Platform によって返されたタイムスタンプ 1571724098115 を使用する場合、デバイスと IoT Platform の間で発生する 10 ミリ秒のリンク レイテンシは計算に含まれません。