本地定时

更新时间:2024-04-17 06:15:13下载pdf

本文介绍本地定时功能。

概述

概念介绍

相对于云定时,实现蓝牙子设备本地定时,通过蓝牙通道设置本地定时功能,可离网使用。

能力特性

  • 功能点(Data point,DP)作为执行条件

  • 支持多种定时类型,包括普通、随机、循环、倒计时

  • 定时精度取决于本地时钟精度

交互流程

  1. App 连接蓝牙设备后,下发 查询设备信息 指令,设备回复该指令时,增加支持蓝牙本地定时能力的新字段。

  2. 面板进入定时界面,根据蓝牙定时能力值,判断是否需要开始同步设备数据,读取定时信息。

  3. App 获取设备定时个数和单次传输的最大定时条数 N(由设备决定)。

  4. App 按照单次最多 N 条数据,分批次读取设备定时数据,设备返回定时 ID 和 CRC32,App 计算对比是否和云端一致,不一致则向设备同步差异。

数据结构

tuya_ble_app_passthrough_data_t

typedef struct {
    uint16_t type;
    uint32_t data_len;
    uint8_t* p_data;
} tuya_ble_app_passthrough_data_t;
  • type:业务透传的数据类型,如果是本地定时,该值为固定的 0x0000

  • data_len:本地定时数据长度。

  • p_data:本地定时数据。

tal_local_timer_info_t

typedef struct {
    uint8_t  type;
    uint16_t len;
    uint8_t  year; // 低两位
    uint8_t  month;
    uint8_t  day;
    uint8_t  hour;
    uint8_t  minute;
    uint8_t  loop;
    uint32_t timer_id;
    uint8_t* dp_data;
    uint32_t crc32;
} tal_local_timer_info_t;
  • type:本地定时类型。

    • 0x01:普通定时
    • 0x02:随机定时(面板暂未支持)
    • 0x03:循环定时(面板暂未支持)
    • 0x04:倒计时(面板暂未支持)
  • len:本条数据长度。

  • year:年(低两位)。

  • month:月。

  • day:日。

  • hour:小时。

  • minute:分钟。

  • loop:循环。

    • 0x00:周六
    • 0x01:周五
    • 0x02:周四
    • 0x03:周三
    • 0x04:周二
    • 0x05:周一
    • 0x06:周日
    • 0x07:保留
  • timer_id:定时 ID。

  • dp_data:DP,支持多组。

    • dp_id:1 个字节,在开发平台注册的 dp_id 序号。

    • dp_type:1 个字节。

      • #define DT_RAW 0
      • #define DT_BOOL 1
      • #define DT_VALUE 2
      • #define DT_STRING 3
      • #define DT_ENUM 4
      • #define DT_BITMAP 5
    • dp_len:1 个字节,数据长度,最大 255。

    • dp_data:数据,dp_len 个字节。

  • crc32:CRC32。

接口说明

组件的初始化

接口说明

uint32_t tal_local_timer_init(void);

本地定时指令处理接口

接口说明

uint32_t tal_local_timer_handler(tuya_ble_app_passthrough_data_t* data);

参数说明

参数 说明
data 详见上文中对 tuya_ble_app_passthrough_data_t 的解析。

本地定时处理接口

用于处理本地定时的事件,此处通过发送串口指令到上位机模拟事件处理过程,您可以在这里实现自己的代码逻辑。

接口说明

void tal_local_timer_parser_event(void);

存储初始化接口

为了方便演示存储定时数据的功能,此处临时调用了 tbs_storage_ib.c 实现的存储功能接口,推荐您使用自己的存储逻辑替代存储相关接口。

接口说明

uint32_t tal_local_timer_storage_init(void);

存储写入接口

用于存储定时数据。

接口说明

uint32_t tal_local_timer_info_write(tal_local_timer_info_t* data);

参数说明

参数 说明
data 详见上文中对 tal_local_timer_info_t 的解析。

存储删除接口

用于删除定时数据。

接口说明

uint32_t tal_local_timer_info_delete(uint32_t timer_id);

参数说明

参数 说明
timer_id 本地定时编号

存储读取 DP 事件接口

用于读取定时数据对应的 DP 事件。

接口说明

uint32_t tal_local_timer_dp_item_read(uint8_t id, uint8_t* buf, uint32_t size);

参数说明

参数 说明
id 存储 ID
buf DP 数据
size DP 数据的长度

存储清空接口

用于清空定时数据。

接口说明

uint32_t tal_local_timer_info_delete_all(void);

获取本地定时的数量

接口说明

uint32_t tal_local_timer_get_num(void);

使用方法

通信流程

本地定时

代码开发

详细信息,参考 tuyaos_demo_local_timer 的实现。

功能测试

前置条件

  • 您已经下载了涂鸦智能 App。
  • 确认您的设备处于配网状态。
  • 嵌入式代码使用 tuyaos_demo_local_timer
  • 您的手机账号已经被面板加入白名单,可联系产品经理。

操作步骤

通过上位机(模拟实际产品)和手机 App 进行数据交互。

  1. 使用涂鸦智能 App 搜索并连接设备。

    本地定时
  2. 绑定成功。

    本地定时
  3. 单击 添加 按钮。

    本地定时
  4. 设置定时数据。

    本地定时
  5. 设置成功。

    本地定时

    上位机显示的信息为:

    本地定时
  6. 等待到 19:08(刚刚设定的时间),事件成功执行。

    本地定时

    上位机使用的相关问题,请访问 Logic 上位机使用指南

支持与帮助

在开发过程遇到问题,您可以登录 TuyaOS 开发者论坛 TuyaOS-蓝牙设备开发 版块进行沟通咨询。

咨询前建议首先查阅 官方资料 或参考已有帖子,并认真阅读 发帖规范