You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Python开发自定义Matter设备:自定义端点与ZAP工具求助

Matter自定义设备:实现Google语音触发自定义Action的方案

需求可行性

完全可行。Matter协议原生支持厂商自定义集群、端点和设备类型,Google Home(结合Home Assistant)可以识别自定义设备并映射语音指令到对应的Matter命令,满足你通过「OK Google,Action X」触发API调用的需求。


步骤1:通过ZAP工具定义自定义集群、端点与设备类型

ZAP是Matter官方配置工具,用于生成设备的集群、端点和代码绑定,操作如下:

  • 打开你基于灯光示例的.zap配置文件(通常在Python灯光示例目录下)
  • 创建自定义集群:
    • 在ZAP的「Clusters」面板点击「Add Cluster」,选择「Custom Cluster」
    • 设置集群ID(需使用厂商自定义范围:0xFF00至0xFFFF),命名为CustomActionCluster
    • 添加自定义命令:比如TriggerAction,携带参数ActionID(整数)和RoomID(字符串/整数),用于标识要执行的操作
  • 添加端点:
    • 若每个Action对应独立端点:为Action 1、Action 2分别创建端点(比如端点10、11),每个端点绑定上述自定义集群,并设置设备类型(可选择标准的Generic Controller(ID: 0x0013)或自定义设备类型)
    • 若多个Action共享一个端点:在单个端点下挂载自定义集群,通过ActionID区分不同操作(更推荐,减少端点冗余)
  • 生成代码:点击ZAP的「Generate」按钮,生成适配Python的代码文件,替换原有lighting示例中的集群/端点相关代码

步骤2:实现配网前的API配置

要在配网前完成API参数配置,可通过两种方式实现:

  • 本地配置文件:在设备本地存储(比如config.json)中预存API地址、密钥等信息,设备启动时读取该文件并加载到自定义集群的属性中
  • Matter属性预配置:在ZAP中给自定义集群添加可读写属性(比如APIEndpoint、AuthToken),通过Matter调试工具(如chip-tool)在配网前设置这些属性:
    chip-tool attributes write 0xFF00 0x0001 "https://your-api-endpoint.com" 1 0
    
    (注:0xFF00是自定义集群ID,0x0001是APIEndpoint属性ID,1是端点ID,0是节点ID)

步骤3:对接Google Home与语音指令映射

  • 设备类型适配:优先使用Matter标准设备类型(如Generic Controller),Google Home对标准类型的识别和指令映射更顺畅;若使用自定义设备类型,需在Google Home开发者控制台中注册设备类型
  • 语音指令配置:
    1. 在Home Assistant中添加Matter设备,确保自定义集群的命令被识别为实体服务
    2. 在Home Assistant的自动化中,创建触发规则:当收到语音指令「OK Google,Action 1」时,调用对应Matter设备的TriggerAction命令,传入ActionID=1和对应RoomID
    3. 或直接在Google Home应用中,将自定义Action命令映射为语音快捷指令

步骤4:Python代码实现API触发逻辑

在ZAP生成的Python代码基础上,修改命令处理函数,实现API调用:

import requests
import json
from matter_server.vendor.chip.clusters import ClusterHandler

class CustomActionClusterHandler(ClusterHandler):
    def __init__(self, endpoint):
        super().__init__(endpoint, 0xFF00)  # 0xFF00为自定义集群ID
        # 加载预配置的API参数
        self.api_config = self.load_api_config()

    def load_api_config(self):
        # 从本地配置文件读取API信息
        with open('config.json', 'r') as f:
            return json.load(f)

    def handle_trigger_action(self, action_id, room_id):
        # 根据ActionID调用对应API
        api_url = f"{self.api_config['endpoint']}/action/{action_id}?room={room_id}"
        response = requests.post(api_url, headers={"Authorization": self.api_config['token']})
        # 更新Matter属性反馈执行状态
        if response.status_code == 200:
            self.update_attribute(0x0002, "Success")  # 0x0002为自定义ActionStatus属性ID
        else:
            self.update_attribute(0x0002, "Failed")

关键注意事项

  • 自定义集群和属性ID必须遵循Matter规范,避免与标准ID冲突
  • 测试阶段先用chip-tool发送自定义命令验证设备响应,再对接Google Home
  • 配网前配置需确保设备启动时能正确加载参数,避免API调用失败

内容的提问来源于stack exchange,提问作者Jaroslav Šinkovský

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 16:52:09