Matter - nordic 自定义开发(4)

nRF Connect SDK 和 Matter SDK 的 matter 协议版本

  1. nRF Connect SDK(NCS)是 Nordic 官方维护的,里面包含某个版本的 Matter SDK。
  2. Matter SDK 为 CSA 联盟维护的,里面包含各平台的SDK,其中包含了某个版本的 NCS。

需要探索最新标准 matter 协议,使用最新 Matter SDK ,去配置需要使用的 NCS 版本。

需要 Nordic 最新维护发布的稳定版本,直接使用 NCS 即可。

NCS 适配的 Matter 协议版本:

ZAP Tool 

        Matter开发主要包括两方面的工作:一是Matter应用本身的开发,二是非Matter应用开发。Matter应用开发本质上就是cluster/endpoint/node的添加、编辑、删除以及相关回调事件处理等,如前所述,这个需要通过 zcl 编辑工具 zap 来生成ember层的代码,以及手动添加或者修改其他c++文件来实现。

保证 zap 版本一致性:

NCS 安装:

~/ncs/v2.5.2/modules/lib/matter/scripts/setup/nrfconnect/get_zap.py -l ~/Nordic/Tools/zap_tool -o

Matter SDK 安装:

查看 ~/connectedhomeip/scripts/setup/zap.version,文件确认版本

到 https://github.com/project-chip/zap/releases,下载对应版本:

下载解压完成后,如:~/Nordic/Tools/zap_tool,将 zap_tool 文件夹添加到环境变量。

已经安装了的旧版或者其他版本,Linux 系统下将 ~/.zap 这个文件夹删除,windows 下位于 C:\Users\${username}\.zap

添加 Cluster

创建 Matter Template 工程

使用命令行打开 template.zap 文件,(windows 下路径默认用的是 '\',输入要换成 '/',否则出现乱码不兼容

zap ~/template/src/template.zap --zcl ~/ncs/v2.5.2/modules/lib/matter/src/app/zap-templates/zcl/zcl.json --gen ~/ncs/v2.5.2/modules/lib/matter/src/app/zap-templates/app-templates.json

 弹出ZCL窗口:

        例子目前只有Endpoint 0,选择Endpoint 0,并选择“Enabled Clusters”,我们可以看到这个Endpoint使能了哪些cluster,比如 Descriptor cluster。
        下面我们添加一个Endpoint以支持Matter On/Off Light设备,选择“ADD ENDPOINT”,如下添加:

       

 

完成添加后保存,点击 generate 生成代码到 template/src/zap-generated 文件夹中。或者使用python 脚本:

python ~/ncs/v2.5.0/modules/lib/matter/scripts/tools/zap/generate.py ~/template/src/template.zap -t src/app/zap-templates/app-templates.json -o ~/template/src/zap-generated

修改项目代码

        添加 Matter stack 回调函数,以处理 controller 发送过来的命令,比如开灯。这个主要通过覆盖 MatterPostAttributeChangeCallback() 来实现更新 attribute 数值,以让 Matter stack 可以将最新的状态或者 event 同步给 controller。这个主要通过Clusters::OnOff::Attributes::OnOff::Set()之类的函数实现。

        如 light_hulb 工程中的 zcl_callback.cpp:

/** Copyright (c) 2021 Nordic Semiconductor ASA** SPDX-License-Identifier: LicenseRef-Nordic-5-Clause*/#include <lib/support/logging/CHIPLogging.h>#include "app_task.h"#include <app-common/zap-generated/attributes/Accessors.h>
#include <app-common/zap-generated/ids/Attributes.h>
#include <app-common/zap-generated/ids/Clusters.h>
#include <app/ConcreteAttributePath.h>using namespace ::chip;
using namespace ::chip::app::Clusters;
using namespace ::chip::app::Clusters::OnOff;void MatterPostAttributeChangeCallback(const chip::app::ConcreteAttributePath &attributePath, uint8_t type,uint16_t size, uint8_t *value)
{ClusterId clusterId = attributePath.mClusterId;AttributeId attributeId = attributePath.mAttributeId;if (clusterId == OnOff::Id && attributeId == OnOff::Attributes::OnOff::Id) {ChipLogProgress(Zcl, "Cluster OnOff: attribute OnOff set to %" PRIu8 "", *value);AppTask::Instance().GetPWMDevice().InitiateAction(*value ? PWMDevice::ON_ACTION : PWMDevice::OFF_ACTION,static_cast<int32_t>(AppEventType::Lighting), value);} else if (clusterId == LevelControl::Id && attributeId == LevelControl::Attributes::CurrentLevel::Id) {ChipLogProgress(Zcl, "Cluster LevelControl: attribute CurrentLevel set to %" PRIu8 "", *value);if (AppTask::Instance().GetPWMDevice().IsTurnedOn()) {AppTask::Instance().GetPWMDevice().InitiateAction(PWMDevice::LEVEL_ACTION, static_cast<int32_t>(AppEventType::Lighting), value);} else {ChipLogDetail(Zcl, "LED is off. Try to use move-to-level-with-on-off instead of move-to-level");}}
}/** @brief OnOff Cluster Init** This function is called when a specific cluster is initialized. It gives the* application an opportunity to take care of cluster initialization procedures.* It is called exactly once for each endpoint where cluster is present.** @param endpoint   Ver.: always** TODO Issue #3841* emberAfOnOffClusterInitCallback happens before the stack initialize the cluster* attributes to the default value.* The logic here expects something similar to the deprecated Plugins callback* emberAfPluginOnOffClusterServerPostInitCallback.**/
void emberAfOnOffClusterInitCallback(EndpointId endpoint)
{// Cluster 初始化后调用,在这里同步最初的 Cluster 状态// 在 InitCallback 之前,调用 Attributes 下的方法会返回失败。EmberAfStatus status;bool storedValue;/* Read storedValue on/off value */status = Attributes::OnOff::Get(endpoint, &storedValue);if (status == EMBER_ZCL_STATUS_SUCCESS) {/* Set actual state to the cluster state that was last persisted */AppTask::Instance().GetPWMDevice().InitiateAction(storedValue ? PWMDevice::ON_ACTION : PWMDevice::OFF_ACTION,static_cast<int32_t>(AppEventType::Lighting), reinterpret_cast<uint8_t *>(&storedValue));}AppTask::Instance().UpdateClusterState();
}

使用 Apple Home Pod 测试 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/773633.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

调用第三方接口:springBoot整合forest

Forest是什么&#xff1f; Forest是一个高层的、极简的轻量级 HTTP调用API框架&#xff0c;让Java发送HTTP/HTTPS请求不再难。它比OkHttp和HttpClient更高层&#xff0c;比Feign更轻量&#xff0c;是封装调用第三方restful api client接口的好帮手。 相比于直接使用Httpclien…

抖音视频关键词批量采集工具|无水印视频爬虫提取软件

抖音视频关键词批量采集工具&#xff1a; 我们很高兴地介绍最新推出的抖音视频关键词批量采集工具&#xff0c;该工具集成了多项强大功能&#xff0c;让您轻松实现视频内容的批量提取和下载。以下是详细的功能解析和操作说明&#xff1a; 主要功能&#xff1a; 关键词批量提取…

数据库与缓存一致性如何保证

最近建了一个技术交流群&#xff0c;欢迎志同道合的同学加入&#xff0c;群里主要讨论&#xff1a;分享业务解决方案、深度分析面试题并解答工作中遇到的问题&#xff0c;同时也能为我提供写作的素材。 欢迎加Q&#xff1a;312519302&#xff0c;进群讨论 前言 在工作中&#…

锦城软件定义网络实验(只用于教学,第八周结束后自行删除)

一、实验环境简介&#xff1a; Ubuntu 20.0.4 Ryu/Opendaylightmininetsflow(网络监视技术)Apifox/postman(REST API流表控制工具) 二、软件定义网络知识图谱 三、SDN知识概述 1.SDN的三个主要特征&#xff1a; 网络开放可编程&#xff1b; 控制平面与数据平面分离…

云架构(二) 大使模式

Ambassador pattern &#xff08;https://learn.microsoft.com/en-us/azure/architecture/patterns/ambassador&#xff09; 简单描述 创建一个助手服务&#xff0c;这个服务代表消费服务或者应用程序发送网络请求。大使服务可以看做是与客户机同一个位置的进程外代理。 这种…

Web CSS笔记2

目录 1、背景 ①、背景图片(image) ②、背景平铺&#xff08;repeat&#xff09; ③、背景位置(position) ④、背景附着&#xff08;attachment&#xff09; ⑤、背景透明(CSS3) ⑥、背景图片缩放大小&#xff08;size&#xff09;&#xff1a; ⑦、背景简写 2、标签显…

java智慧工地源码 大型建筑公司应用的智慧工地系统源码 智慧工地建筑管理系统源码

java智慧工地源码 大型建筑公司应用的智慧工地系统源码 智慧工地建筑管理系统源码 智慧工地是智慧地球理念在工程领域的具体体现&#xff0c;它代表了一种全新的工程全生命周期管理理念。通过运用信息化手段&#xff0c;智慧工地能够精确设计和模拟工程项目&#xff0c;实现互…

低空经济:大疆创新、纵横股份的突围与成长

近期&#xff0c;“德国无人机初创公司Wingcopter试点无人机和电动货运自行车的联合运输项目”的消息在网上引起热议。网友在惊叹海外无人机技术取得了较大的突破和进步的同时&#xff0c;不忘对比自家无人机技术。 其实&#xff0c;国内早就实现无人机运载货物&#xff0c;只不…

【高危漏洞】关于视频分片上传的漏洞修复

修改文件crmeb/app/services/system/attachment/SystemAttachmentServices.php 增加下方代码&#xff0c;将分片上传的第几片强制转成INT类型解决 $data[chunkNumber] (int)$data[chunkNumber];

linux命令-ln命令详解

文章目录 前言一、ln命令介绍1. 简介2. 硬链接2.1 inode介绍 3. 软连接&#xff08;符号链接&#xff09;4. 语法5. 选项和参数 二、示例用法1. 创建硬链接2. 创建软链接2.1 给文件创建软链接2.2 给目录创建软链接 总结 前言 本文介绍了ln命令的用法和特点&#xff0c;包括硬链…

请简述一下Play框架的主要特点和优势是什么?你能解释一下Play框架中的MVC模式是如何工作的吗?

请简述一下Play框架的主要特点和优势是什么&#xff1f; Play框架是一个基于Java和Scala的轻量级Web开发框架&#xff0c;它以其高效、简洁和灵活的特点受到了广大开发者的青睐。以下是Play框架的主要特点和优势&#xff1a; 主要特点&#xff1a; 轻量级与模块化&#xff1a…

【TypeScript】解决字面量类型推断错误的四种方式

解决字面量类型推断错误的四种方式 方式一&#xff1a;对象属性使用类型断言方式二&#xff1a;传参使用类型断言方式三&#xff1a;对象使用类型断言方式四&#xff1a;对象属性使用变量&#xff0c;变量使用字面量类型参考 declare function handleRequest(url: string, meth…

Play框架如何处理请求和响应?能否详细描述一下处理流程?在Play框架中,你如何进行路由配置?

Play框架如何处理请求和响应&#xff1f;能否详细描述一下处理流程&#xff1f; Play框架处理请求和响应的流程相当直接且高效&#xff0c;它遵循了MVC&#xff08;Model-View-Controller&#xff09;的设计模式&#xff0c;将应用程序的不同部分进行了清晰的划分。以下是对Pla…

[蓝桥杯 2022 省 A] 求和

[蓝桥杯 2022 省 A] 求和 题目描述 给定 n n n 个整数 a 1 , a 2 , ⋯ , a n a_{1}, a_{2}, \cdots, a_{n} a1​,a2​,⋯,an​, 求它们两两相乘再相加的和&#xff0c;即 S a 1 ⋅ a 2 a 1 ⋅ a 3 ⋯ a 1 ⋅ a n a 2 ⋅ a 3 ⋯ a n − 2 ⋅ a n − 1 a n − 2 ⋅ a…

linux 网卡配置 vlan/bond/bridge/macvlan/ipvlan 模式

linux 网卡模式 linux网卡支持非vlan模式、vlan模式、bond模式、bridge模式&#xff0c;macvlan模式、ipvlan模式等&#xff0c;下面介绍交换机端及服务器端配置示例。 前置要求&#xff1a; 准备一台物理交换机&#xff0c;以 H3C S5130 三层交换机为例准备一台物理服务器&…

Hive在虚拟机中的部署

安装Mysql数据库 # 更新密钥 rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022 # 安装Mysql yum库 rpm -Uvh http://repo.mysql.com//mysql57-community-release-el7-7.noarch.rpm # yum安装Mysql yum -y install mysql-community-server # 启动Mysql设置开机启动…

【工具类】git log 常用别名,git log 干活,git log常用参数

git log 常用参数及 .gitconfig 配置 git log 常用参数及 .gitconfig 配置 干货&#xff0c;执行下边命令&#xff0c;添加别名git log 参数参考资料 干货&#xff0c;执行下边命令&#xff0c;添加别名 注意&#xff0c;需要将 knowledgebao 修改为自己的名字&#xff0c;…

AD域---共享文件夹-容量配额管理

域环境共享文件夹-容量配额管理 要求 1/李斯用户配额10G云盘空间&#xff0c;张珊用户配额30G云盘空间 2/D:\ 配额-启用配额-启用配额管理-拒绝将磁盘空间给超过配额限制的用户-勾选 3/将磁盘空间限制为:55GB&#xff0c;将警告等级设为50GB 4/选择该卷的配额记录选项-勾选…

道可云元宇宙每日资讯|上海以web3.0为主攻方向打造元宇宙高地

道可云元宇宙每日简报&#xff08;2024年3月26日&#xff09;讯&#xff0c;今日元宇宙新鲜事有&#xff1a; 江苏无锡设立5000万元算力券资金 近日&#xff0c;无锡市算力赋能人工智能产业发展暨算力应用政策发布会召开&#xff0c;《关于加快推进算力发展和应用的实施意见》…

12 mybatis 动态sql2

文章目录 user.sqlpom.xmlmybatis-config.xmllogback.xmlUserMapper.xmlUserMapper.javaUserMapperTest.java user.sql create table user (user_id int auto_incrementprimary key,user_name varchar(50) not null,password_hash varchar(…