请问zigbee os开发,如何主动同步网络时间

Zigbee 子设备开发


Post Reply
tts
Posts: 21

有时候,会出现如图中的本地时间同步错误的问题。请问该怎么主动再次获取网络时间

Attachments
efd884eb-beb8-4ee2-a7dd-4ca497dbf815.png
User avatar
huanghuan
Posts: 298

Re: 请问zigbee os开发,如何主动同步网络时间

1.看log,你这个是分包的日志;和时间同步没有关系
2.如果你确实需要时间同步,你可以自己组包发送时间请求,如下列函数所示

Code: Select all

VOID_T user_time_sync_request_send(VOID_T)
{
    TAL_ZG_SEND_DATA_T data;

tkl_system_memset(&data, 0, sizeof(TAL_ZG_SEND_DATA_T));

data.addr.mode = SEND_MODE_DEV;
data.addr.type.dev.dst_ep = TUYA_PRIMARY_ENDPOINT;
data.addr.type.dev.src_ep = TUYA_PRIMARY_ENDPOINT;
data.addr.type.dev.dst_addr = TUYA_GATEWAY_ADDRESS;
data.addr.type.dev.cluster_id = CLUSTER_TIME_CLUSTER_ID;

data.zcl_id = 0xF0;
data.qos = QOS_1;
data.frame_type = ZG_ZCL_FRAME_TYPE_GLOBAL;
data.direction = ZG_ZCL_DATA_CLIENT_TO_SERVER;
data.command_id = CMD_READ_ATTRIBUTES_COMMAND_ID;

data.data.zg.attr_sum = 1;
data.data.zg.attr[0].attr_id = ATTR_LOCAL_TIME_ATTRIBUTE_ID;

tal_time_sync_debug("gateway time sync.\r\n");
tal_zg_send_data(&data, NULL, 1000);
}
User avatar
huanghuan
Posts: 298

Re: 请问zigbee os开发,如何主动同步网络时间

同时再获取到网关时间后会有回调函数给到应用,你需要重新定义该虚函数

Code: Select all

VOID_T tal_time_sync_complete_callback(BOOL_T status, UINT_T time_sec)
{
    if(status && time_sec) {
        return;
    }
}
tts
Posts: 21

Re: 请问zigbee os开发,如何主动同步网络时间

获取到时间后,如何写入系统呢

User avatar
huanghuan
Posts: 298

Re: 请问zigbee os开发,如何主动同步网络时间

1.收到网关的回复后,sdk会自动同步网络时间;
2.后续你可以通过tal_current_time_get函数获取当前时间,这个时间需要加上 946656000 后为utc时间。

Post Reply