Homekit

Last Updated on : 2024-11-20 08:51:19download

本文档主要针对串口协议对接苹果智能家居平台 Homekit 功能的一些常见问题,梳理出对应的问题排查指引,帮助您解决一些日常问题。

请教下这个上报指令的格式要怎么解读,不是对应DP数据吗?

Homekit

  • 00:服务序号,要看一下初始化配置的时候,服务序号为0对应的是哪个服务;
  • 02:之后的两个字节为功能id(此后会把此处描述改成特性字符串标识),也就是特性字符串标识,是42 30;
  • 42 30:特性字符串标识为B0,查表可知是active活动状态这个特性;
  • 01:数据类型,01表示uint8;
  • 00 01:value数据长度(这里应该传04的);
  • 00 00 00 00 :value数据;

另外,homekit数据上报和涂鸦dp没有关系。

Homekit 特性和产品的DP是一一对应的么?

没有对应关系。

请问下这个配置服务是什么含义,与配置特性有什么差异和关联?

Homekit

HomeKit的初始化配置需要包含3部分信息,品类、服务、特性。

  • 特性:特性的概念相当于Tuya的DP的概念,是对具体功能点的描述。例如:开关、工作状态、当前温度等。每个特性的名称、数据类型、数据范围、数据含义、数值步长、操作权限等信息都是确定好的,不能更改。这一点和Tuya的DP定义不同。
  • 服务:特性的概念相当于Tuya的产品的概念,HomeKit创建了一个服务可以理解为Tuya创建了一个产品。服务也可以称为附件,或者配件。每种服务都包含有必选特性和可选特性,并且只能包含特定的几个。
  • 品类:品类是产品所属的分类,例如:单插、照明、空气净化器等。因为Homekit的每个服务只包含少量的特性,对于像单插这种功能比较简单的产品,

品类的概念和服务的是相同的,服务即品类。但是对于像空气净化器这样功能比较多且复杂的产品,需要多个服务添加到一起才能组成一个功能比较全面的空气净化器。

例如:空气净化器可以包含的服务有空气净化器、风扇、板条、过滤器维护、空气质量传感器,这几个服务。

在初始化信息交互期间,模块需要从MCU获取到这三个信息。

  • 在01命令获取到品类信息;
  • 在36-02命令获取到服务配置信息;
  • 在36-05命令中获取可选特性配置信息

模块会根据服务自行添加必选特性,所以MCU只需发可选特性配置即可。

认证测试TCI014用例,有很多的步骤需要认证测试TCI014用例,有很多的步骤需要MCU主动上报特性的状态,为什么有些步骤需要上报0才能通过,而有些步骤需要上报1?

首先要了解的是,特性点有读写和只读等几种类型。这个测试工具根据类型会有不一样的测试流程。

  1. 如果是只读,测试工具会读取当前状态,然后弹出那个窗口提示,此时需要设备主动上报一个不一样的值,上报成功之后就会通过,如果上报的值与测试工具一开始读到的值一样,就没有反应。也就是说,如果之前的状态值是0,就要上报1或者其他值,如果之前的状态值是1,就要上报0或者其他值。
  2. 如果是读写,测试工具会读取当前状态,然后根据当前状态下发一个不一样的值,下发之后再一次读取。

例如:设置时间(D3)的类型是读写,按照这个逻辑,初始状态是0,测试工具读到之后会下发1,然后设备回复1,完成之后,这个特性的状态缓存记录就是1了。然后就会进行和上述1一样的测试步骤。此时如果还是上报1,就和一开始读到的值是一样的了,就没反应,上报0反而是可以通过的。

认证测试TCH096用例,设备无提示以及如何支持提示?

根据用例要求,设备需要在测试工具发出配件提示指令后,在5s内有提示信息(例如:指示灯闪烁几次,或者蜂鸣器响几声)。

用MCU通用对接方案,模块有自处理和配合处理两种工作模式。如果使用模块自处理,此逻辑模块已做成homekit状态指示灯闪烁3次,随后回复常亮状态。如果使用配合处理,模组会给MCU发送homekit状态为03的网络状态通知命令,MCU在收到此命令后5s内需作出提示逻辑,此逻辑需要用户的MCU自行实现,并且为防止此提示命令会影响到用户网络指示逻辑,在5s后模块会再发送一个homekit状态为02的命令。协议格式可参考Tuya_Homekit_通用串口通讯协议报告设备联网状态章节

MCU SDK 中也有提示:

/**
 * @brief  更新 Wi-Fi 状态结果
 * @param[in] {wifi_state_flag} 网络状态标志  0x00:tuya网络状态/0x01:homekit网络状态
 * @param[in] {wifi_state} 网络状态值
 * @ref       0x00: wifi状态 1
 * @ref       0x02: wifi状态 3
 * @ref       0x03: wifi状态 4
 * @ref       0x04: wifi状态 5
 * @return Null
 * @note   MCU需要自行实现该功能
 */
void update_wifi_status(u8 wifi_state_flag, u8 wifi_state)
{
    //#error "请自行完成获取 Wi-Fi 状态结果代码,并删除该行"
    if(0x00 == wifi_state_flag) { //tuya网络状态
        ty_wifi_work_state = wifi_state;
        switch(wifi_state) {
            case 0:
                //配置状态
            break;

            case 1:
                //Wi-Fi 已配置但未连上路由器
            break;

            case 2:
                //Wi-Fi 已配置且连上路由器
            break;

            case 3:
                //已连上路由器且连接到云端
            break;

            default:break;
        }
    }else {
        switch(wifi_state) { //homekit网络状态
            case 0:
                hk_wifi_work_state = wifi_state;
                //待绑定或绑定中
            break;

            case 1:
                hk_wifi_work_state = wifi_state;
                //Wi-Fi 已配置但未连接APP
            break;

            case 2:
                hk_wifi_work_state = wifi_state;
                //Wi-Fi 已配置且已连接APP
            break;

            case 3:
                //配件连接提示
                //收到此状态,表示用户发送了配件识别,需要设备5s内有所反馈,例如网络指示灯闪烁3次,或蜂鸣器响3声
            break;

            default:break;
        }
    }
}

更多资料请查看Wi-Fi Homekit 通用方案

Homekit协议支持的是双备份OTA吧,MCU资源较少,可以支持单备份OTA吗?

keysmghd5r8thpm5固件1.0.10及以上版本已支持。