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,一经查实,立即删除!

相关文章

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

抖音视频关键词批量采集工具&#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;实现互…

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

修改文件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;包括硬链…

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

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

[蓝桥杯 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 三层交换机为例准备一台物理服务器&…

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

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

大型集团公司企业文化知识竞活动赛策划方案

一场高端企业文化知识竞赛活动完整策划书&#xff0c;按诗词大会舞美标准进行设计&#xff0c;竞赛规则新颖&#xff0c;值得收藏。 天纵高端知识竞赛服务商&#xff0c;20多年现场经验和软硬件开发。 专业承办全国高端知识竞赛活动。线上线下各类竞赛活动均可执行&#xff0c;…

鸿蒙开发之了解ArkTS

鸿蒙开发者官网 &#xff1a; https://developer.huawei.com/consumer/cn/ 开发鸿蒙要用的软件是 DevEco Studio ArkTS建立在JS和TS的基础之上&#xff0c;扩展了声明式UI开发范式和状态管理&#xff0c;提供更简洁和自然的开发方式。 ArkTS引入了渲染引擎的增强&#xff0c…

04. 【Android教程】Android 工程解析及使用

在上一章中已经搭建好了 Android 开发环境&#xff0c;本章我们将一起通过 Eclipse 创建我们的第一个 Android App。 1. 创建 Android 工程 首先打开 Eclipse&#xff0c;在菜单栏依次选择“New” -> “Android App Project”。如果是第一次创建&#xff0c;可能没有“Andr…

ChatGPT,来一份3·28雷布斯米时捷上市发布会即时发言稿

你新招了一个秘书。上班第一天&#xff0c;你对他说&#xff1a;“3月28号我可能会受邀参加雷老板的米时捷’上市发布会&#xff0c;届时我可能会有十分钟的发言机会&#xff0c;你现在准备一篇演讲稿。” 秘书问你有何指导意见&#xff1f; 你自己都不知说啥子&#xff0c;能…

gcc任意版本安装流程(linux)

一.更换镜像源 仅仅针对有需要换镜像需求的用户 sudo gedit /etc/apt/sources.list 用于在基于Debian的Linux发行版&#xff08;如Ubuntu&#xff09;上用来编辑软件源列表的命令。 我们更换阿里源&#xff1a; deb http://mirrors.aliyun.com/ubuntu/ focal main restricted…

fl studio21.2中文版下载及使用基础教学

FL Studio 21.2.2是一款功能强大的音乐制作软件&#xff0c;也被广大用户称为“水果编曲”。这款软件支持简体中文和英语&#xff0c;适用于Windows 10/11&#xff08;仅限64位&#xff09;以及MacOS 10.13.6或更高版本的系统。 在FL Studio 21.2.2中&#xff0c;用户可以享受…

AI论文速读 | 【综述】用于轨迹数据管理和挖掘的深度学习:综述与展望

论文标题&#xff1a;Deep Learning for Trajectory Data Management and Mining: A Survey and Beyond 作者&#xff1a;Wei Chen(陈伟), Yuxuan Liang(梁宇轩), Yuanshao Zhu, Yanchuan Chang, Kang Luo, Haomin Wen(温皓珉), Lei Li, Yanwei Yu(于彦伟), Qingsong Wen(文青…

【PADS 原理图Logic发送网表元器件丢失的解决办法】

1、PADS版本&#xff1a;VX1.2 2、PADS Logic原理图导入PCB Layout后&#xff0c;发现总有几个元器件怎么导都不会显示在PADS Layout上&#xff0c;如下图&#xff1a; PADS Logic上也选择了封装&#xff0c;还是不行&#xff0c;如下图&#xff1a; 3、解决办法&#xff1a; …