高度なアプリケーションでシステム時刻と RTC を管理するManage system time and the RTC in high-level applications

Azure Sphere デバイスの電源が切断され、デバイスの再起動後にネットワークに接続できない場合に、デバイスに時刻を保存しておくために RTC (リアルタイム クロック) が使用されます。The RTC (real-time clock) is used to keep time on an Azure Sphere device when the device loses power and has no access to a network connection after the device reboots. これによって、デバイスが NTP サーバーにアクセスできない場合でも、電源喪失時に時間を維持できます。This allows the device maintain time during a power loss even if it doesn't have access to an NTP server.

システム時刻を設定しても、デバイスの電源喪失時には維持されません。If you set the system time, it does not persist when the device loses power. 電源喪失時に時刻を維持するには、Applibs 関数 clock_systohc を呼び出す必要があります。To persist the time during power loss, you must call the Applibs function clock_systohc. clock_systohc が呼び出されると、システム時刻が RTC にプッシュされます。When clock_systohc is called, the system time is pushed to the RTC.

RTC の要件RTC requirements

RTC を使用するアプリケーションでは、適切なヘッダー ファイルをインクルードし、RTC の設定をアプリケーション マニフェストに追加する必要があります。Applications that use the RTC must include the appropriate header files and add RTC settings to the application manifest.

ヘッダー ファイルHeader files

次のように、プロジェクトに rtc ヘッダーを含めます。Include the rtc header in your project:

 #include <applibs\rtc.h>

アプリケーション マニフェストの設定Application manifest settings

RTC と標準クロック API を使用するには、SystemTime アプリケーション機能をアプリケーション マニフェストに追加した後、値を true に設定する必要があります。To use the RTC and standard clock APIs, you must add the SystemTime application capability to the application manifest and then set the value to true. Azure Sphere のアプリケーション マニフェスト」トピックで、アプリケーション マニフェストの詳細が説明されています。The Azure Sphere application manifest topic has more details about the application manifest.

{
  "SchemaVersion": 1,
  "Name" : "Mt3620App3_RTC",
  "ComponentId" : "bb267cbd-4d2a-4937-8dd8-3603f48cb8f6",
  "EntryPoint": "/bin/app",
  "CmdArgs": [],
   "Capabilities": {
    "AllowedConnections": [],
    "AllowedTcpServerPorts": [],
    "AllowedUdpServerPorts": [],
    "HardwareAddressConfig": true,
    "Gpio": [],
    "Uart": [],
    "WifiConfig": false,
    "NetworkConfig": false,
    "SystemTime": true,
    "TimeSyncConfig": true
 }
}

システム時刻を取得するGet the system time

システム時刻を取得するには、標準 clock_gettime 関数を呼び出します。To get the system time, call the standard clock_gettime function.

システム時刻を設定するSet the system time

システム時刻を設定するには、標準 clock_settime 関数を呼び出します。To set the system time, call the standard clock_settime function.

システム時刻を RTC と同期するSynchronize the system time with the RTC

システム時刻を設定しても、デバイスの電源喪失時には維持されません。When the system time is set, it does not persist when the device loses power. 電源の切断中に時間を維持するには、 clock_systohc 関数を呼び出します。To persist the time during power loss, call the Applibs clock_systohc function. clock_systohc が呼び出されると、システム時刻が RTC にプッシュされます。When clock_systohc is called the system time is pushed to the RTC.

NTP クライアント サービスを構成するConfigure the NTP client service

NTP クライアント サービスは既定で有効になっています。The NTP client service is enabled by default. デバイスがインターネットに接続されている場合、NTP クライアント サービスが有効な状態でシステム時刻を設定すると、UTC 時刻がオーバーライドされます。If you set the system time while the NTP client service is enabled, it will overwrite the UTC time when the device has internet connectivity. NTP クライアント サービスを無効にすることはできますが、システム時刻と NTP サーバー時刻の差が大きすぎると、デバイスに対するクラウド更新が失敗する可能性があります。You can disable the NTP client service; however, this can cause cloud updates on the device to fail if the difference between the system time and the NTP server time is too great.

タイム ゾーンを設定するSet the time zone

システム時刻と RTC 時刻は、GMT/UTC で格納されます。The system time and the RTC time are stored in GMT/UTC. アプリケーションに使用されるタイム ゾーンを変更するには、setenv 関数を呼び出して TZ 環境変数を更新し、tzset 関数を呼び出します。You can change the time zone used by your application by calling the setenv function to update the TZ environment variable, and then calling the tzset function.

Azure Sphere OS は、TZ 環境変数に使用できる形式のすべてではなく一部をサポートしています。The Azure Sphere OS supports some, but not all, possible formats for the TZ environment variable:

  • 現在のタイムゾーンは、夏時間 (DST) の有無にかかわらず設定できます。You can set the current time zone with or without Daylight Saving Time (DST). 例: "EST+5"、"EST+5EDT"。Examples: "EST+5", "EST+5EDT". ローカルのタイム ゾーンが本初子午線の西側にある場合、この値は正であり、東側にある場合は負です。This value is positive if the local time zone is west of the Prime Meridian and negative if it is east.
  • DST が有効になる日付と時刻を指定することはできません。You can't specify the date and time when DST should come into effect.
  • タイムゾーンファイルまたはデータベースを指定することはできません。You can't specify a time zone file/database.

電源の切断中にタイムゾーンの設定を維持するには、変更可能な 記憶域 を使用して、タイムゾーンを永続ストレージに格納し、デバイスの再起動時に設定を再呼び出します。To maintain the time zone settings during a power loss, you can use mutable storage to store the time zone in persistent storage and then recall the setting when the device reboots.

NTP サーバーの指定Specifying an NTP server

NTP クライアントサービスは、複数のソースから時刻を取得するように構成できます。The NTP client service can be configured to obtain time from multiple sources. [ prod.time.sphere.azure.net AZURE SPHERE OS のネットワーク要件] に示されているように、既定のタイムソースはです。The default time source is prod.time.sphere.azure.net, as noted in the Azure Sphere OS networking requirements.

システムが DHCP サーバーから時刻を取得するように指定することも、 Networking_TimeSync_EnableCustomNTP または Networking_TimeSync_EnableDefaultNTPを使用してアプリケーションでタイムソースを指定することもできます。You can specify that the system obtain time from a DHCP server, or you can specify the time source in the application via Networking_TimeSync_EnableCustomNTP or Networking_TimeSync_EnableDefaultNTP.

タイムサーバーソースとして DHCP を使用するように構成されている場合、Azure Sphere は DHCP オプション042を処理し、NTP クライアントは DHCP オプションで送信された最初の2つのエントリのみを処理します。このオプションは、優先順に一覧表示する必要があります。If configured to use DHCP for time server sources, Azure Sphere will process the DHCP option 042 and the NTP client will only process the first two entries sent in the DHCP option, which should be listed in order of preference. これらは、プライマリサーバーとセカンダリサーバーとして扱われます。These will be considered as a primary server and secondary server.

アプリケーションを使用してプライマリタイムサーバーとセカンダリタイムサーバーを指定する場合は、 Networking_TimeSync_EnableCustomNTP を使用してタイムサーバーを構成することもできます。You may also configure a time server via Networking_TimeSync_EnableCustomNTP if you would like to specify the primary and secondary time server via the application. 各タイムサーバーの完全修飾ドメイン名 (FQDN) の最大長は255文字です。The maximum length for each time server fully qualified domain name (FQDN) is 255 characters.

フォールバックFallback

  • NTP クライアントが DHCP または API を使用してタイムサーバーを取得するように構成されている場合は、フォールバック動作を指定するために追加のパラメーターが必要になります。If the NTP client is configured to obtain the time server(s) via DHCP or API, an additional parameter is required to specify fallback behavior.

  • クライアントは、最初にプライマリタイムサーバーに接続しようとします。The client will attempt to contact the primary time server first. クライアントは、有効なタイムサーバーの応答を取得できない場合、セカンダリタイムサーバーを試行します (指定されている場合)。If the client fails to obtain a valid time server response, it will try the secondary time server (if specified).

  • セカンダリタイムサーバーが指定されているときにエラーが発生した場合、またはによって OS の既定値にフォールバックするオプションが失敗した場合 Networking_NtpOption_FallbackServerEnabled 、システムは既定の os タイムソース prod.time.sphere.azure.net に接続します。If a secondary time server is specified and it fails, or if the option to fall back to OS defaults via Networking_NtpOption_FallbackServerEnabled fails, the system will then contact the default OS time source prod.time.sphere.azure.net.

    • 次の24時間の同期間隔では、OS が戻り、プライマリタイムサーバーのクエリを実行しようとします。On the next 24-hour time sync interval the OS will go back and attempt to query the primary time server.
  • Networking_NtpOption_FallbackServerDisabled を指定した場合、OS は、1つのタイムサーバーと正常に同期されるまで、プライマリサーバーとセカンダリサーバーのクエリを15秒ごとに実行し続けます。If you specified Networking_NtpOption_FallbackServerDisabled , the OS will continue to query the primary and secondary server every 15 seconds until it has successfully synchronized with one of the time servers.

マルチホームデバイスMultihomed devices

タイムサーバーの設定は、インターフェイスごとの設定ではなく、グローバル設定です。The time server settings are a global setting, not a per interface setting. Azure Sphere デバイスがマルチホームで、両方のインターフェイスが DHCP を使用して NTP サーバー情報を取得する場合、最後に処理された DHCP NTP オプションのセットが優先されます。If the Azure Sphere device is multihomed and both interfaces obtain NTP server information via DHCP, the most recently processed DHCP NTP set of options wins.

システム時刻のサンプルSystem time sample

システム時刻のサンプルは、システム時刻を管理し、ハードウェア RTC を使用する方法を示しています。The System Time sample shows how to manage the system time and use the hardware RTC. このサンプルアプリケーションはシステム時刻を設定し、関数を使用して clock_systohc システム時刻を RTC と同期します。The sample application sets the system time and then uses the clock_systohc function to synchronize the system time with the RTC.

カスタム NTP サンプルCustom NTP sample

カスタム ntp」サンプル では、複数のソースから時刻を取得するように ntp クライアントサービスを構成する方法を示します。The Custom NTP sample shows how to configure the NTP client service to obtain time from multiple sources.