IoT Platform menyediakan layanan Network Time Protocol (NTP) untuk menyinkronkan waktu server dengan perangkat tertanam yang memiliki sumber daya terbatas.
Cara kerjanya
Layanan NTP beroperasi menggunakan protokol NTP, di mana IoT Platform bertindak sebagai server NTP. Berikut adalah proses kalibrasi waktu presisi tinggi:
Perangkat mengirim pesan ke IoT Platform melalui topik tertentu. Pesan tersebut mencakup parameter deviceSendTime.
Setelah menerima pesan, IoT Platform mengembalikan respons yang mencakup parameter serverRecvTime dan serverSendTime.
Ketika perangkat menerima respons, perangkat menghasilkan parameter deviceRecvTime berdasarkan waktu lokal.
Perangkat menghitung selisih waktu antara perangkat dan IoT Platform serta memperoleh nilai parameter Time, yang menunjukkan waktu sistem server.
Kalibrasi waktu sistem perangkat hanya dapat dilakukan menggunakan layanan NTP jika perangkat terhubung ke IoT Platform.
Jika perangkat tidak terhubung ke IoT Platform, perangkat tidak akan mendapatkan waktu yang akurat setelah dinyalakan. Selain itu, saat perangkat membangun koneksi berbasis TSL ke IoT Platform, verifikasi cap waktu sertifikat akan gagal.
Topik
Topik permintaan: /ext/ntp/${YourProductKey}/${YourDeviceName}/request
Topik respons: /ext/ntp/${YourProductKey}/${YourDeviceName}/response
${YourProductKey} dan ${YourDeviceName} menentukan ProductKey dan DeviceName dalam sertifikat perangkat. Sertifikat perangkat dapat diperoleh di halaman Device Details dari konsol IoT Platform atau .
Koneksi perangkat
Layanan NTP hanya dapat dikonfigurasi menggunakan Link SDK untuk C. Untuk mengunduh kode contoh, lihat Memperoleh dan Menggunakan Link SDK untuk C.
Untuk informasi lebih lanjut tentang cara mengonfigurasi layanan NTP pada perangkat, lihat Layanan NTP.
Berikut adalah langkah-langkah untuk menggunakan layanan NTP dengan topik tertentu:
Perangkat mengirim pesan QoS 0 ke topik
/ext/ntp/${YourProductKey}/${YourDeviceName}/request. Pesan tersebut mencakup cap waktu yang menunjukkan waktu saat ini perangkat, dengan unit milidetik. Contoh:{ "deviceSendTime":"1571724098000" }CatatanTipe data cap waktu dapat berupa Long atau String. Secara default, tipe data Long digunakan.
Layanan NTP hanya mendukung pesan QoS 0.
Perangkat menerima respons dari IoT Platform melalui topik
/ext/ntp/${YourProductKey}/${YourDeviceName}/response. Berikut adalah contoh kode:{ "deviceSendTime":"1571724098000", "serverRecvTime":"1571724098110", "serverSendTime":"1571724098115" }Perangkat menghitung waktu saat ini yang akurat dalam format cap waktu UNIX.
Perangkat mencatat cap waktu ketika menerima respons dari server NTP sebagai ${deviceRecvTime}. Waktu saat ini yang akurat dihitung menggunakan rumus berikut:
(${serverRecvTime} + ${serverSendTime} + ${deviceRecvTime} - ${deviceSendTime})/2.
Contoh
Cap waktu yang dikirim oleh perangkat dan server NTP harus memiliki tipe data yang sama. Misalnya, jika cap waktu yang dikirim oleh perangkat bertipe STRING, maka cap waktu yang dikembalikan oleh server NTP juga bertipe STRING.
Dalam contoh ini, cap waktu perangkat adalah 1.571.724.098.000, sedangkan cap waktu server NTP adalah 1.571.724.098.100. Latensi tautan adalah 10 milidetik, dan server NTP mengirim respons 5 milidetik setelah menerima pesan dari perangkat.
Operasi | Waktu perangkat (milidetik) | Waktu server (milidetik) |
Perangkat mengirim pesan | 1571724098000 (deviceSendTime) | 1571724098100 |
Server NTP menerima pesan | 1571724098010 | 1571724098110 (serverRecvTime) |
Server NTP mengirim respons | 1571724098015 | 1571724098115 (serverSendTime) |
Perangkat menerima respons | 1571724098025 (deviceRecvTime) | 1571724098125 |
Perangkat menghitung waktu saat ini yang akurat menggunakan rumus berikut: (1.571.724.098.110 + 1.571.724.098.115 + 1.571.724.098.025 - 1.571.724.098.000)/2 = 1.571.724.098.125.
Jika perangkat menggunakan cap waktu 1.571.724.098.115 yang dikembalikan oleh IoT Platform, latensi tautan sebesar 10 milidetik antara perangkat dan IoT Platform tidak termasuk dalam perhitungan.