跳到主要内容

dxNtp

1. 概述

此模块是 dejaOS 官方系统模块库的一部分,用于通过 NTP(网络时间协议)自动同步设备时间。它提供自动重试、时区管理和硬件时钟同步等功能,确保设备时间准确。

主要功能包括:

  • 从 NTP 服务器自动时间同步。
  • 可配置的同步间隔和失败重试间隔。
  • 成功同步后自动将系统时间写入硬件时钟(RTC)。
  • 支持更新系统时区。
  • 使用非阻塞定时器机制,不干扰主要业务逻辑。

注意

  • NTP 时间同步依赖于网络连接,应在网络成功连接后启动。
  • 建议在 dxNetwork 模块报告网络连接成功后启动此模块。

2. 文件

  • dxNtp.js

3. 依赖项

  • dxLogger(用于日志输出)
  • dxCommon(用于执行系统命令)

4. 兼容设备

兼容所有运行 dejaOS v2.0+ 且支持网络的设备。

5. 使用方法

启动和停止同步

// 使用默认设置启动 NTP 同步
// 默认服务器:'182.92.12.11',成功间隔:24 小时,重试间隔:5 分钟
dxNtp.startSync();

// 使用自定义参数启动同步
// NTP 服务器:'time.nist.gov',成功间隔:60 分钟,重试间隔:10 分钟
dxNtp.startSync("time.nist.gov", 60, 10);

// 停止 NTP 同步
dxNtp.stopSync();

查询状态

// 获取 NTP 同步状态
let status = dxNtp.getSyncStatus();
logger.info("NTP 状态:", status);

/*
返回格式:
{
"isRunning": true, // 是否正在运行
"server": "182.92.12.11", // 当前 NTP 服务器地址
"interval": 1440, // 正常同步间隔(分钟)
"retryInterval": 5, // 失败重试间隔(分钟)
"hasTimer": true, // 是否有活动定时器
"lastSyncTime": 1677610000000 // 上次成功同步的时间戳(毫秒)
}
*/

时区管理

// 更新 GMT 时区,例如设置为北京时间(GMT+8)。有效范围是 0-24。
// 注意:设备必须重启才能使更改生效。
dxNtp.updateGmt(8);

已弃用的方法

dxNtp.loop()dxNtp.beforeLoop() 方法已弃用。请使用 dxNtp.startSync() 代替,它提供更完整的自动管理机制。

6. 多线程支持

  • 不支持多线程。所有方法,包括 startSyncstopSyncgetSyncStatusupdateGmt,必须从同一线程调用。此模块的内部状态不是线程安全的。

7. 相关模块

此模块是系统时间管理的基础,通常与网络模块一起使用:

  • dxNetwork:建议在 dxNetwork 模块报告网络连接成功后启动此模块。

8. 示例