更新请关注:Matter协议开发者指南:使用Matter SDK构建智能家居应用

图片

智能家居的演变从根本上改变了我们日常生活中与技术互动的方式。从语音助手到自动化照明和安防系统,机遇似乎无穷无尽。然而,开在这个迅速扩张的领域中,开发者面临的最大挑战之一是确保互操作性,即各种智能设备无论品牌或平台如何,都能无缝协同工作的能力。

Matter是什么?为何它对智能家居协议至关重要?

MMatter 是一种全新的开源智能家居设备标准,旨在让您家中所有联网设备协同工作——无论品牌或平台如何。可以将其视为所有智能设备的通用语言,无论是智能灯具、恒温器、门锁还是安防摄像头。

在Matter出现之前,这就像一个令人沮丧的技术谜题。您可能拥有Alexa音箱、Google Nest恒温器和其他品牌的智能灯泡,但它们并不总是能良好协作。这是因为每个品牌都使用自己的系统,要将它们全部连接起来非常麻烦。Matter改变了这种现状。

为什么 Matter 对开发者和智能家居连接如此重要?

1. 万物互联
Matter确保无论您选择哪个品牌,智能设备都能相互通信。无论是Apple、Amazon还是Google设备,它们都能在你家中无缝协同工作。

2. 增强安全性
Matter将安全功能直接内置于系统中。您的设备会对数据进行加密,确保一切安全无虞。这对于控制门锁或摄像头等设备来说无疑是一种极大的保障。

3. 开发者更轻松
对于开发者而言,Matter 意味着他们能够创建一款适用于所有主流平台的应用程序或解决方案。无需再为每个系统(如Google Home、Apple HomeKit或Alexa)重复造轮子。这不仅效率更高,还能节省大量时间。

4. 面向未来
苹果、谷歌、亚马逊等大公司都在支持Matter,这意味着它旨在跟上新技术和潮流的发展。它的设计初衷是支持未来的设备,因此您的智能设备不会很快过时。

5. 消费者更安心
对于普通人来说,MMatter 确保你能够放心购买新的智能设备。你无需担心这些设备能否能与你现有设备协同工作。无论是现在还是将来,所有设备都能轻松实现同步。

简而言之,Matter通过将我们家中所有技术整合成一个连贯、安全且面向未来的系统,让我们的生活更轻松、更智能。对于开发者和消费者来说都是一个变革性的存在,确保所有设备都能平稳、安全地协同工作。

本指南将指导您完成在 iOS 应用程序中添加 Matter 设备的过程,为您提供构建安全、可互操作且面向未来的智能家居解决方案所需的工具。

准备进入智能家居集成的世界吧!

我们将使用 HomeKit,轻松地把 Matter 设备作为配件添加到我们的 iOS 应用程序中。Apple推荐HomeKit作为将Matter设备集成到iOS生态系统的最佳解决方案。作为Apple设备上Matter的中央枢纽,HomeKit 提供了一种流畅且安全的方式来管理这些设备。它处理所有关键任务,包括设备认证、安全密钥交换、网络详细信息共享以及设备设置。

通过使用 HomeKit,我们也在让我们的应用程序具备面向未来的能力。Apple公司确保 HomeKit 与最新的 Matter 标准、iOS 更新、新设备类型以及安全改进保持一致,从而使我们的应用程序始终保持兼容性和时效性。

使用CHIP工具配置Matter设备模拟器进行智能家居开发

让我们深入了解一下使用 CHIP(IP 上的连接家庭)工具配置 Matter 设备模拟器的过程。

运行Matter设备模拟器的先决条件和步骤:

步骤1:系统要求

对于macOS,请安装以下先决条件:

brew install openssl
brew install pkg-config
brew install ninja
brew installgit
brew install gcc
brew install python3

步骤2:设置开发环境

克隆Matter仓库:

git clone https://github.com/project-chip/connectedhomeip.git

导航到仓库目录:

cd connectedhomeip

更新子模块:

git submodule update --init

步骤3:构建环境设置

引导环境:

sh ./scripts/bootstrap.sh

激活环境:

source scripts/activate.sh

注意:授予执行权限以使目录可搜索/可访问

chmod +x scripts

步骤4:构建Lighting应用

在终端中执行以下命令以构建照明应用:

./scripts/examples/gn_build_example.sh examples/lighting-app/linux out/lighting-app

注意:执行此命令后,输出目录结构应如下所示:

connectedhomeip/
├── out/
│   └── lighting-app/
│       └── chip-lighting-app
├── scripts/
├── examples/
└── src/

步骤5:验证网络

检查您的网络接口:

ifconfig

对于WiFi,Mac上通常是en0
对于以太网,可能是en1或其他接口。

步骤6:运行Matter Lighting模拟器

执行以下命令以启动Matter照明模拟器:

./out/lighting-app/chip-lighting-app --wifi--interface en0

命令解析

  • ./out/lighting-app/chip-lighting-app

    :Matter照明设备模拟器的可执行文件。

  • --wifi

    :指示模拟器使用 WiFi 进行网络连接。

  • --interface en0

    :指定WiFi网络接口(Mac上WiFi通常为en0)。

目的

  • 在本地网络上模拟一个Matter照明设备。

  • 使设备可被HomeKit发现。

  • 允许将设备作为真实的Matter设备添加到您的Home应用中。

注意

  • 运行此命令时,请确保您位于connectedhomeip目录中。

  • en0

    通常是Mac上的WiFi接口;可以使用ifconfig命令验证您的接口名称。

  • 在尝试将模拟器添加到应用程序之前,模拟器必须处于运行状态。

图片

完成!我们的Matter设备模拟器现在已在网络上运行。要通过HomeKit添加Matter设备,只需扫描二维码即可。您可以在控制台日志中找到该URL。

图片

在浏览器中打开URL后,您应该会看到一个二维码。                                             

图片

常见问题及解决方案

1. 构建失败

如果构建失败,请尝试以下步骤:

  • 清理构建

    rm-rf out/lighting-app
    
  • 使用Debugging重新构建

    ./scripts/examples/gn_build_example.sh examples/lighting-app/linux out/lighting-app --debug
    

2. Matter设备运行后无法添加配件

如果在 Matter 设备运行后无法添加配件,请按照以下步骤操作:

  • 终止现有模拟器

    killall chip-lighting-app
    
  • 重新构建模拟器

    ./out/lighting-app/chip-lighting-app –wifi –interface en0
    

配置并设置您的 iOS 应用程序,以便通过 HomeKit 添加 Matter 设备

步骤 1:注册您的应用程序标识符,并在应用程序标识符设置和 Xcode 项目中启用以下列出的功能

  • HomeKit

  • 访问WiFi信息

  • Matter允许设置负载 

图片

步骤 2:添加所需的 Info.plist 条目

<!-- Home Kit --><key>NSHomeKitUsageDescription</key><string>This app needs access to HomeKit to control your Matter devices</string><!-- Local Network --><key>NSLocalNetworkUsageDescription</key><string>This app needs access to discover and control Matter devices on your local network</string><!-- Bonjour Services --><key>NSBonjourServices</key><array><string>_matter._tcp</string><string>_matterc._udp</string></array>

注意:iOS 开发先决条件:

  • Xcode 14.0 或更高版本

  • 测试设备上的 iOS 16.1 或更高版本

  • Apple 开发者账户

步骤 3:在 iOS 中使用 HomeKit SDK 设置新Home

class MatterManager: NSObject {static let shared = MatterManager()let homeManager = HMHomeManager()var homesUpdateCallback: (() -> Void)?private override init() {super.init()homeManager.delegate = self}func createHome(named name: String, completion: @escaping (Result<Void, Error>) -> Void) {homeManager.addHome(withName: name) { [weak self] home, error inif let error = error {completion(.failure(error))} else {completion(.success(()))self?.homesUpdateCallback?()}}}...}
  • MatterManager 是一个单例类,可以通过 MatterManager.shared 来访问。

  • HomeKit 管理器

let homeManager =HMHomeManager()

这将创建一个Apple HomeKit 管理器实例,该实例负责管理家庭、房间和配件。

  • 创建Home方法

func createHome(named name:String,completion: @escaping(Result<Void,Error>)->Void){homeManager.addHome(withName: name){[weak self] home, error in...}}

在该函数内部,我们从 HMHomeManager 调用 homeManager.addHome (withName: name)。此方法负责使用提供的名称将新home添加到 HomeKit 设置中。

步骤 4:将 Matter 设备作为配件集成到Home中

classMatterManager:NSObject{...privatelet setupManager =HMAccessorySetupManager()...func addAccessory(to home:HMHome)async throws {let setupManager =HMAccessorySetupManager()let request =HMAccessorySetupRequest()// Configure the request for the homerequest.homeUniqueIdentifier= home.uniqueIdentifier// Perform the setupdo{let result =tryawait setupManager.performAccessorySetup(using: request)print("Accessory setup completed successfully: \(result)")homesUpdateCallback?()}catch{print("Failed to setup accessory: \(error)")throw error}}...}

HMAccessorySetupManager 负责配置 Matter 设备。 在这个函数中,我们创建一个 HMAccessorySetupRequest 并调用 performAccessorySetup 方法,该方法将 Matter 设备添加到Home中。 这个过程是异步的,因为它执行以下任务:

  • 发现网络上的设备

  • 处理安全握手

  • 传输网络凭据

  • 完成 Matter 设备配网流程

注意:在添加配件之前,请确保您的 Matter 设备模拟器正在运行。有关设置,请参考 “使用 CHIP 工具配置 Matter 设备模拟器” 指南中的步骤。

图片

此时, Matter 设备应会在您的 Home 应用中显示为配件。您也可以在 Home 应用中进行验证,在那里您会看到该配件已添加到您的Home中。

 步骤 5:控制Matter设备配件。

func toggleLight(_ accessory:HMAccessory)async throws {guard let lightService = accessory.services.first(where:{ service inservice.serviceType==HMServiceTypeLightbulb})else{throwHMError(.invalidParameter)}guard let powerCharacteristic = lightService.characteristics.first(where:{ characteristic incharacteristic.characteristicType==HMCharacteristicTypePowerState})else{throwHMError(.invalidParameter)}// Toggle the current statelet currentValue = powerCharacteristic.valueas?Bool??falsetryawait powerCharacteristic.writeValue(!currentValue)}
  • toggleLight

     函数用于控制支持 HomeKit 的灯泡。

  • 它会在配件的服务数组中搜索灯泡服务。具体来说,它会查找类型为 HMServiceTypeLightbulb 的服务。

  • 然后,在该灯光服务中查找电源状态特性。此特性代表灯泡的on/off状态。

  • 最后,执行实际的切换操作:读取当前电源状态(如果无法将该值读取为布尔值,则默认为 false)。使用!运算符反转该状态。

当灯打开时,你应该在终端中看到控制台日志显示 Toggle on/off from state 0 to 1。 

图片

从状态 0 切换到 1(on/off):
0 = OFF状态
1 = ON状态
设备正在从关闭切换到开启
当灯光关闭时,你应该在终端中看到控制台日志显示 Toggle on/off from state 1 to 0

图片

从状态 1 切换到 0(on/off):
0 = OFF状态
1 = ON状态
设备正在从ON切换到OFF

Matter协议开发者指南:使用Matter SDK构建智能

总结

希望你在通过 HomeKit 使用 iOS 应用程序配置 Matter 设备的过程中,既感到愉快又觉得有用。这种集成提供了一种流畅的方式,可让你直接从 iOS 应用程序控制智能设备,提升你的智能家居体验。

更新请关注:Matter协议开发者指南:使用Matter SDK构建智能家居应用

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

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

相关文章

中科院1区TOP|IF8.3:广西中医药大学团队采用代谢组学-网络药理学整合策略,阐明鸡骨草的多靶点作用机制

中科院1区TOP|IF8.3&#xff1a;广西中医药大学团队采用代谢组学-网络药理学整合策略&#xff0c;阐明鸡骨草的多靶点作用机制 在当今生命科学研究领域&#xff0c;代谢性疾病的防治与传统中药的现代化研究已成为两大备受瞩目的热点方向。随着全球范围内脂质代谢紊乱相关疾病发…

c++中 Lambda表达式

Lambda优化技巧 尽量使用值捕获简单类型 避免捕获大型对象(使用引用或智能指针) 将不修改的捕获标记为const 使用初始化捕获移动语义资源 前言 1. Lambda表达式基本语法 [捕获列表](参数列表) mutable(可选) 异常属性(可选) -> 返回类型(可选) {// 函数体 } 捕获列表…

睿是信息携手Arctera,深化服务中国市场,共筑数据管理新未来

2025年6月23日&#xff0c;为了更加深入服务中国大陆地区的广大用户&#xff0c;上海睿是信息科技有限公司&#xff08;以下简称“睿是信息”&#xff09;与全球数据管理领域的领导者Arctera&#xff0c;双方正式达成战略合作&#xff0c;自2025年7月7日起&#xff0c;睿是信息…

【WebGIS系列】WebGIS 开发相关的资源

目录 数据 GIS 软件 地图渲染库 EPSG 相关工具 资源 以下为个人收集的与 WebGIS 开发相关的资源&#xff08;排名不分前后&#xff09;&#xff0c;欢迎补充。 数据 天地图(opens in a new tab)国家统计局行政区划(opens in a new tab)民政部全国行政区划信息查询平台(…

【单调栈】-----【小A的柱状图】

小A的柱状图 题目链接 题目描述 柱状图是有一些宽度相等的矩形下端对齐以后横向排列的图形&#xff0c;但是小A的柱状图却不是一个规范的柱状图&#xff0c;它的每个矩形下端的宽度可以是不相同的一些整数&#xff0c;分别为 a [ i ] a[i] a[i]&#xff0c;每个矩形的高度是…

MySQL 索引优化与慢查询优化:原理与实践

MySQL是一个广泛使用的关系型数据库管理系统&#xff0c;优化MySQL的性能对于保证应用的高效运行至关重要。本文将详细介绍MySQL索引优化与慢查询优化的原理和实践方法。 一、MySQL索引优化 1.1 索引的基本概念 索引是一种用于提高数据库查询速度的数据结构。常见的索引类型…

【AS32系列MCU调试教程】应用开发:基于AS32芯片的流水灯功能实现

摘要&#xff1a; 本文以国科安芯的AS32系列MCU芯片为例&#xff0c;聚焦于基于 AS32 芯片的流水灯功能开发&#xff0c;深入阐述了开发环境搭建、工程配置以及调试等关键环节。通过详尽的实验过程与结果分析&#xff0c;旨在为相关领域技术人员提供一套系统、高效且成本可控的…

爬虫001----介绍以及可能需要使用的技术栈

首先1️⃣。。。全篇使用的技术栈当然是python了&#xff0c;毕竟作为一名点点点工程师&#xff0c;实际工作中做测试开发用的也是python&#xff0c;毕竟测试框架么&#xff0c;不需要什么"速度"。也会一点点cpp和js&#xff0c;但不多。什么&#xff1f;你说go和ja…

Java 中基于条件动态决定字段参与分组的实现方法

在 Java 的 Stream API 中&#xff0c;Collectors.groupingBy()方法为数据分组提供了强大的支持。通过它&#xff0c;我们可以轻松地将集合中的元素按照某个属性进行分组&#xff0c;比如按照商品类别、日期等。然而&#xff0c;在实际业务场景中&#xff0c;有时需要根据特定条…

AppBarLayout+ CoordinatorLayout,ViewPager2为什么不会覆盖AppBarLayout

<?xml version"1.0" encoding"utf-8"?> <layout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:app"http://schemas.android.com/apk/res-auto"xmlns:tools"http://schemas.android.com/tools&quo…

【群体智能优化算法系列 】一 粒子群算法 (Particle Swarm Optimization, PSO)

【群体智能优化算法系列 】一 粒子算法 一&#xff1a;前言二&#xff1a;算法原理2.1 核心思想2.2 PSO核心公式​2.3 PSO算法流程图 三&#xff1a;python实现 二维Rastrigin函数 最低点检索例子参考 一&#xff1a;前言 粒子群算法是由Kennedy和Eberhart在1995年提出的一种基…

Jupyter notebook调试:设置断点运行

写了一段小代码&#xff0c;主要是用来测试一段序列的k均值聚类效果&#xff1b; 中间想到debug一下&#xff0c;但是想到自己似乎从来没有正式地接触过jupyter notebook中地debug&#xff0c;平时也只是多开几个cell&#xff0c;然后在其他cell中复制粘贴部分代码&#xff0c…

[12-2] BKP备份寄存器RTC实时时钟 江协科技学习笔记(14个知识点)

1 2 3 4 5 6 7 8 RTC是“Real-Time Clock”的缩写&#xff0c;中文意思是“实时时钟”。这是一种在电子设备中使用的时钟&#xff0c;它能够提供准确的时间信息&#xff0c;即使在设备断电的情况下也能继续运行&#xff0c;因为它通常由一个小型电池供电。RTC广泛应用于计算机…

优化给AI的“提问技巧”(提示工程),让大型语言模型(比如GPT)更好地扮演“心理治疗助手”的角色

优化给AI的“提问技巧”(提示工程),让大型语言模型(比如GPT)更好地扮演“心理治疗助手”的角色 尤其是在“问题解决疗法”(PST)中帮助 caregivers(家庭护理者)缓解焦虑、疲劳等心理症状。以下是核心内容的通俗解读: 一、研究背景:AI当心理医生靠谱吗? 现状:全球…

Java的lambda表达式应用

Lambda表达式是Java 8引入的一项强大特性&#xff0c;它允许以更加简洁的方式表示匿名函数。Lambda表达式不仅让代码更加简洁、清晰&#xff0c;而且为函数式编程提供了有力支持&#xff0c;从而提升了Java语言的表达能力。 本文主要讲解lambda应用stream处理集合的应用。 1、…

云原生/容器相关概念记录

文章目录 网络与虚拟化技术云平台与架构容器与编排容器网络方案性能优化与工具硬件与协议 网络与虚拟化技术 P4可编程网关 P4: Programming Protocol-independent Packet Processors一种基于P4语言的可编程网络设备&#xff0c;支持自定义数据包处理逻辑。P4可编程技术详解&am…

[C++] traits机制

文章目录 C之type_traitsis_floating_point<T> ..的使用std::enable_if<T>::type的使用std::remove_cv 如何自定义traits C之type_traits is_floating_point …的使用 一般在定义打印模板函数的时候&#xff0c;当我们用printf进行终端日志打印&#xff0c;需要根…

OpenCV 视频处理与保存

一、知识点 1、VideoCapture类 (1)、用于从视频文件、摄像机或图像序列中捕获视频帧。 (2)、构造函数 VideoCapture(const String & filename, int apiPreference CAP_ANY) a、filename可以是视频文件的名称(例如"video.avi")&#xff0c;可以是图…

【Leetcode】字符串之二进制求和、字符串相乘

文章目录 算法原理二进制求和题目链接题目描述解题思路代码 字符串相乘题目链接题目描述解题思路代码 算法原理 这两道题都是属于算法里一种经典题型&#xff1a;高精度加/减/乘/除法&#xff0c;需要我们模拟加/减/乘/除 列竖式运算。 二进制求和 题目链接 题目链接 题目描…

MongoDB:索引

目录 1、索引数据结构&#xff1a;B-树 2、索引类型 2.1 单字段索引 2.2 复合索引&#xff08;最重要&#xff01;&#xff09; 2.3 多键索引&#xff08;数组字段&#xff09; 2.4 地理空间索引 2.5 全文索引 2.6 哈希索引&#xff08;分片专用&#xff09; 2.7 TTL …