Matter 冰箱与温控柜示例完全指南:Silicon Labs EFR32 / SiWx917 平台的定制、构建与调试实战
Matter 冰箱与温控柜示例完全指南Silicon Labs EFR32 / SiWx917 平台的定制、构建与调试实战【免费下载链接】connectedhomeipMatter (formerly Project CHIP) creates more connections between more objects, simplifying development for manufacturers and increasing compatibility for consumers, guided by the Connectivity Standards Alliance.项目地址: https://gitcode.com/GitHub_Trending/co/connectedhomeip本指南以 Matter 仓库中的refrigerator-appSilabs 示例为核心系统讲解 Temperature Controlled Cabinet温控柜参考设备的整体架构、基于 CRTP 模式的应用定制方法、EFR32 MG24 与 SiWx917 平台的构建烧录流程、日志调试手段以及如何通过 chip-tool 与 Matter Shell 完成配网、控制与事件订阅。读完本文你将掌握 Silabs 平台 Matter 示例从“开箱编译”到“深度定制产品代码”的完整链路。示例简介一款可实际配网的温控柜参考设备examples/refrigerator-app/silabs示例基于 Matter 与 Silicon Labs Simplicity SDK提供了一个Temperature Controlled Cabinet温控柜设备的基线演示。它面向两类 Silabs 硬件EFR32 MG24802.15.4 Thread SoCSiWx917 Wi-Fi SoC设备可以通过 chip controller控制器经OpenThread 或 Wi-Fi 网络进行控制。配网流程符合 Matter 标准 Rendez-vous 机制设备通过BLEBluetooth Low Energy广播配网信息控制器扫码或输入配对码后建立安全会话对于 Thread 版本设备拿到 Thread 网络凭据后加入 Thread 网络。如果 LCD 使能Silabs WSTK 开发板上的 LCD 会显示包含 BLE 配网信息的QR Code配网完成后屏幕切换为冰箱温控状态的图形化表示。该示例的定位不仅是演示 Matter 工作方式更是基于 Silabs 平台打造真实产品时的模板工程。从源码结构可以印证这一设计意图示例根目录下同时提供 Thread 与 Wi-Fi 两套数据模型文件data_model/refrigerator-thread-app.matter、data_model/refrigerator-wifi-app.matterBUILD.gn中通过wifi_soc开关区分两条 SDK 集成路径设备本身在 include/CHIPProjectConfig.h 中登记为测试厂商 ID0xFFF1、产品 ID0x800E并启用 CHIPoBLECHIP_DEVICE_CONFIG_ENABLE_CHIPOBLE 1。扩展基础应用实现CustomerAppTask 定制机制这是该示例最重要的工程特性所有 Silabs 实现的 API 都可以在CustomerAppTask文件中覆写从而把“通用 SDK 示例”改造成“自己的产品代码”。CustomerAppTask 的角色与文件布局示例为定制提供了两对文件通用定制入口examples/platform/silabs/customer/CustomerAppTask.h 与 examples/platform/silabs/customer/CustomerAppTask.cpp位于examples/platform/silabs/customer/目录本示例的基类实现与全部可覆写的*Impl()API位于 include/AppTaskImpl.h 与 src/AppTask.cpp。默认情况下示例直接编译examples/platform/silabs/customer/下的通用 CustomerAppTask见 BUILD.gn 中的${examples_common_plat_dir}/customer/CustomerAppTask.cpp。任何未被覆写的*Impl()都保持 Silabs 默认行为。要定制行为只需将 CustomerAppTask.h 与 CustomerAppTask.cpp 从examples/platform/silabs/customer/复制到本应用的include/与src/目录更新BUILD.gn中对应的源文件路径。如何覆写 APICRTP 模式详解CustomerAppTask通过Curiously Recurring Template Pattern奇异递归模板模式CRTP继承自基类 AppTask。你只需覆写需要的*Impl()方法基类为每个可覆写 API 声明一个对应的*Impl()。以 include/AppTaskImpl.h 为例基类模板的关键机制清晰可见template typename Derived class AppTaskImpl : public AppTask { public: // Common AppTask bring up CHIP_ERROR AppInit() override { CRTP_OPTIONAL_DISPATCH(AppTaskImpl, Derived, AppInitImpl); } // Handle button press static void ButtonEventHandler(uint8_t button, uint8_t btnAction) { CRTP_OPTIONAL_STATIC_DISPATCH(AppTaskImpl, Derived, ButtonEventHandlerImpl, button, btnAction); } // Data model hook invoked when a cluster attribute changes void DMPostAttributeChangeCallback(...) { CRTP_OPTIONAL_VOID_DISPATCH(...); } private: // Default *Impl() hooks, each forwards to the matching AppTask method CHIP_ERROR AppInitImpl() { return AppTask::AppInit(); } ... };每个公开方法通过CRTP_OPTIONAL_DISPATCH系列宏派发到Derived::*Impl()如果派生类定义了同名*Impl()就调用派生实现否则回落到私有默认实现转发给 AppTask。覆写步骤为在 Override API Reference 中找到要覆写的基类方法在CustomerAppTask.h的private:区声明同名方法签名必须与基类*Impl()完全一致——注意即使公开派发器如ButtonEventHandler是static*Impl()覆写也是非静态实例方法在CustomerAppTask.cpp中实现重新构建。CRTP 层会自动把每次调用路由到你的*Impl()如果存在否则走 Silabs 默认实现。DataModelCallbacks 与 CustomerAppTask 的演进原先位于DataModelCallbacks.cpp的逻辑已并入AppTask.cpp。Matter SDK 的MatterPostAttributeChangeCallback在examples/platform/silabs/BaseApplication.cpp中实现并转发到AppTask::DMPostAttributeChangeCallback定义于src/AppTask.cpp你可以在 CustomerAppTask 中通过DMPostAttributeChangeCallbackImpl()定制。转发进入 AppTask 依然走 CRTP。定制时遵循两条原则AppTask 中已存在的方法——通过在 CustomerAppTask 中覆写对应的*Impl()来定制不要为应用特有行为直接修改AppTask.cpp全新的自定义数据模型方法——直接在 CustomerAppTask 中新增。切勿在自动生成的源码中加入应用逻辑因为重新生成或项目升级时这些改动不会保留。从 src/AppTask.cpp 可以看到默认实现的处理逻辑它按 cluster 分发DMPostAttributeChangeCallback对RefrigeratorAlarm集群维护mMask/mStateAlarmBitmap 类型对TemperatureControl集群把TemperatureSetpoint经ConvertToPrintableTemp()四舍五入到整数摄氏度后保存为mTemperatureSetpoint供 LCD 显示等使用。示例实现一个最小 CustomerAppTask以下为 README 提供的完整示例——覆写AppInitImpl()与ButtonEventHandlerImpl()两个方法CustomerAppTask.h#pragma once #include AppTaskImpl.h /** Minimal AppTaskImpl-derived class. Override only the *Impl() methods you need **/ class CustomerAppTask : public AppTaskImplCustomerAppTask { public: static CustomerAppTask GetAppTask() { return sAppTask; } private: friend class AppTaskImplCustomerAppTask; CHIP_ERROR AppInitImpl(); void ButtonEventHandlerImpl(uint8_t button, uint8_t btnAction); static CustomerAppTask sAppTask; };CustomerAppTask.cpp#include CustomerAppTask.h #include AppTask.h #include AppEvent.h #include platform/CHIPDeviceLayer.h #include platform/silabs/platformAbstraction/SilabsPlatform.h #define APP_FUNCTION_BUTTON 0 CustomerAppTask CustomerAppTask::sAppTask; AppTask AppTask::GetAppTask() { return CustomerAppTask::GetAppTask(); } CHIP_ERROR CustomerAppTask::AppInitImpl() { SILABS_LOG(CustomerAppTask: custom implementation (AppInitImpl)); CHIP_ERROR err AppTask::AppInit(); if (err CHIP_NO_ERROR) { // Override the SDK default button handler registered in AppTask::AppInit(). chip::DeviceLayer::Silabs::GetPlatform().SetButtonsCb(CustomerAppTask::ButtonEventHandler); } return err; } void CustomerAppTask::ButtonEventHandlerImpl(uint8_t button, uint8_t btnAction) { SILABS_LOG(CustomerAppTask: custom implementation (ButtonEventHandlerImpl)); AppEvent aEvent {}; aEvent.Type AppEvent::kEventType_Button; aEvent.ButtonEvent.Action btnAction; if (button APP_FUNCTION_BUTTON) { aEvent.Handler BaseApplication::ButtonHandler; AppTask::GetAppTask().PostEvent(aEvent); } }注意两点实现细节AppInitImpl()调用基类AppTask::AppInit()完成 SDK 默认初始化如注册按钮回调、初始化冰箱端点树、注册 Shell 事件随后用SetButtonsCb()替换默认按钮处理ButtonEventHandlerImpl()构造AppEvent并投递到事件队列由AppTaskMain循环取出分发。Override API ReferenceCHIP_ERROR StartAppTask()只声明在AppTask上它不是*Impl()钩子平台代码例如MatterConfig以静态类型AppTask 调用AppTask::GetAppTask().StartAppTask()运行的是AppTask.cpp中的实现通过BaseApplication::StartAppTask(...)创建 FreeRTOS 应用任务。要改变启动行为应在产品源码中修改AppTask::StartAppTask()或BaseApplication::StartAppTask。本示例的基类 API 与默认 AppTask 行为维护在以下位置它们是可覆写方法与应用配置的权威参考文件用途include/AppTaskImpl.h声明全部可覆写的*Impl()方法。把需要的签名复制到CustomerAppTask.hsrc/AppTask.cppSilabs 对 AppTask 的默认实现。任何未覆写的*Impl()都运行这里的代码可作为定制行为的参考从 include/AppTaskImpl.h 可以看到完整的可覆写集合AppInitImpl、InitRefrigeratorImpl、ButtonEventHandlerImpl、DMPostAttributeChangeCallbackImpl、CabinetModeClusterInitImpl、CabinetModeClusterShutdownImpl以及 ModeBase::Delegate 系列CabinetModeInitImpl、HandleChangeToModeImpl、GetModeLabelByIndexImpl、GetModeValueByIndexImpl、GetModeTagsByIndexImpl。温控柜模式Cabinet Mode与端点组合的源码透视默认端点定义在 include/RefrigeratorConfig.h可修改宏调整REFRIGERATOR_ENDPOINT 1—— 冰箱根端点树的根节点COLD_CABINET_ENDPOINT 2—— 冷藏柜端点FREEZE_CABINET_ENDPOINT 3—— 冷冻柜端点。AppTask::InitRefrigerator()中通过SetTreeCompositionForEndpoint/SetParentEndpointForEndpoint建立端点树冷/冻柜父级为冰箱端点并通过SetTagList为冷柜打上语义标签命名空间0x41、tag0x00Refrigerator、为冷冻柜打上命名空间0x41、tag0x01Freezer。CabinetModeClusterInit()在冰箱端点上创建ModeBase::Instance注册三种模式见 include/AppTask.h 中的常量ModeNormal(0)、ModeRapidCool(1)、ModeRapidFreeze(2)并带Auto/RapidCool/RapidFreeze模式标签。HandleChangeToMode()还实现了业务约束不允许 Normal(0) 与 Rapid Freeze(2) 之间直接切换否则返回kGenericFailure。温度档位选项Hot / Warm / Freezing则由 refrigerator-common/src/static-supported-temperature-levels.cpp 中按端点2、3配置。构建示例环境准备下载Simplicity Commander命令行工具并确保commander在 shell 搜索路径中macOS 下位于Commander.app/Contents/MacOS/下载并安装合适的ARM gcc 工具链多数主机通过 bootstrap 已自动安装GNU Arm Embedded Toolchain 12.2 Rel1安装附加工具CHIP 开发者通常已具备# Linux $ sudo apt-get install git ninja-build # Mac OS X $ brew install ninja支持的硬件Silabs 开发板板卡套件频段 / 功率BRD2703ASLWSTK6000B / Wireless Starter Kit2.4GHz 10dBmBRD4186CSLWSTK6006A / Wireless Starter Kit2.4GHz 10dBmBRD4187CSLWSTK6006A / Wireless Starter Kit2.4GHz 20dBmBRD4338ASLWSTK6006A / Wireless Starter Kit2.4GHz 20dBmBRD4346ASLWSTK6006A / Wireless Starter Kit2.4GHz 20dBm最新的硬件支持清单以 Silicon Labs Matter 文档的 Hardware Requirements 页面为准。SiWx917 Wi-Fi 项目还需设置地区码region code在src/platform/silabs/wifi/SiWx/WifiInterfaceImpl.cpp中配置可用地区码定义于 Silicon Labs wiseconnect SDK 的sl_si91x_types.h。标准构建脚本方式在仓库根目录执行cd ~/connectedhomeip ./scripts/examples/gn_silabs_example.sh ./examples/refrigerator-app/silabs/ ./out/refrigerator-app BRD4187C清除生成物$ cd ~/connectedhomeip $ rm -rf ./out/标准构建GN/Ninja 直连方式$ cd ~/connectedhomeip/examples/refrigerator-app/silabs $ git submodule update --init $ source third_party/connectedhomeip/scripts/activate.sh $ export SILABS_BOARDBRD4187C $ gn gen out/debug $ ninja -C out/debug清理$ cd ~/connectedhomeip/examples/refrigerator-app/silabs $ rm -rf out/构建为间歇性连接设备ICD$ ./scripts/examples/gn_silabs_example.sh ./examples/refrigerator-app/silabs/ ./out/refrigerator-app_ICD BRD4187C --icd或使用 GN 直连并附加参数$ gn gen out/debug --argsSILABS_BOARDBRD4187C enable_sleepy_devicetrue chip_openthread_ftdfalse构建带 Pigweed RPC 的版本$ ./scripts/examples/gn_silabs_example.sh examples/refrigerator-app/silabs/ out/refrigerator_app_rpc BRD4187C import(//with_pw_rpc.gni)GN/Ninja 直连方式$ cd ~/connectedhomeip/examples/refrigerator-app/silabs $ git submodule update --init $ source third_party/connectedhomeip/scripts/activate.sh $ export SILABS_BOARDBRD4187C $ gn gen out/debug --argsimport(//with_pw_rpc.gni) $ ninja -C out/debug更多构建选项可运行不带参数的构建脚本查看帮助./scripts/examples/gn_silabs_example.sh构建系统的源码级说明从 BUILD.gn 可以看出关键构建开关与结构目标名为refrigerator_app输出matter-silabs-refrigerator-example.out通过wifi_soc在SiWx917 SDKSiWx917_sdk.gniexamples/platform/silabs/SiWx917与EFR32 SDKefr32_sdk.gniexamples/platform/silabs/efr32两条路径间切换use_temp_sensor默认false可启用温湿度传感器si70xx / i2cspm 驱动定义USE_TEMP_SENSORchip_enable_pw_rpc使能 Pigweed RPC 相关服务Attribute / Button / Descriptor / Device service!disable_lcd时编译 src/RefrigeratorUI.cppchip_build_libshell时加入 src/EventHandlerLibShell.cpp提供 Matter Shell 事件注入命令chip_print_memory_usage可在链接时打印内存占用--print-memory-usage-fstack-usage。烧录应用在命令行烧录$ cd ~/connectedhomeip/examples/refrigerator-app/silabs $ python3 out/debug/matter-silabs-refrigerator-example.flash.py也可以使用SEGGER Ozone 调试器直接加载.out文件。注意所有 EFR32 板卡都需要 bootloader预编译 bootloader 二进制可从 Silicon Labs Matter Software Artifacts 页面获取。查看日志输出SEGGER RTT示例默认使用SEGGER Real Time TransferRTT输出日志。RTT 内置于 WSTK 开发板的 J-Link 接口 MCU无需专用 UART 即可与嵌入式应用双向通信。使用 RTT 需要安装 SEGGER J-Link Software and Documentation Pack也可用 SEGGER Ozone 调试器在烧录.out后查看 RTT 日志$ cd ~/Downloads $ sudo dpkg -i JLink_Linux_V*_x86_64.debLinux 下还需把当前用户加入dialout组以访问开发硬件/dev/ttyACMx$ sudo usermod -a -G dialout ${USER}之后用JLinkExe配合JLinkRTTClient查看日志# 终端 1自动连接 WSTKMG24 设备 $ JLinkExe -device EFR32MG24AXXXF1536 -if SWD -speed 4000 -autoconnect 1 # 终端 2查看日志 $ JLinkRTTClient串口控制台Console Log如果二进制以对应选项构建或使用SiWx917 Wi-Fi SoC日志与 CLI若启用会输出到串口控制台。控制台默认波特率为115200带 CTS/RTS 硬件流控Silabs 开发套件默认配置选择verbose 模式--verbose时波特率需切换为 921600 CTS/RTS。配置 VCOM 的两种方式使用 Simplicity StudioWSTK 虚拟串口波特率设置使用 commander 命令行commander vcom config --baudrate 921600 --handshake rtscts使用任意串口终端screen、putty、minicom 等连接即可。运行完整示例前置条件OpenThread 边界路由器假定你已配置并运行 OpenThread 边界路由器OTBR。如未配置可参考 openthread_border_router_pi.md树莓派上搭建边界路由器的完整指南。RCP 固件可在 Simplicity Studio 5 中通过 File → New → Project Wizard → Examples → Thread →ot-rcp获取。用户界面与状态指示LCDSilabs WSTK 的 LCD 显示 QR Code由 CHIP Tool 应用扫描以完成 BLE Rendez-vous。对没有/不支持 LCD 的板卡如 BRD4166A Thunderboard Sense 2RTT 日志中会打印二维码 URLinfo [SVR] Copy/paste the below URL in a browser to see the QR Code: info [SVR] https://project-chip.github.io/connectedhomeip/qrcode.html?dataCH%3AI34NM%20-00%200C9SS0LED 0设备整体状态与连接状态状态含义短闪亮50ms 亮 / 950ms 灭未配网unpaired等待配网应用连接快速均匀闪烁100ms 亮 / 100ms 灭未配网但已有配网应用通过 Bluetooth LE 连接短灭950ms 亮 / 50ms 灭已配网但尚无完整 Thread 网络或服务连接常亮完全配网Thread 网络与服务连接正常LED 1冰箱温控柜状态——当前 README 明确标注“暂无实现将在未来更新中提供”。Push Button 0功能键 恢复出厂按下并释放暂无实现未来更新提供按住 6 秒触发设备恢复出厂设置6 秒窗口内松开则取消。恢复出厂流程启动时LED 会同步闪烁。Push Button 1应用键按下并释放、按住 3 秒均暂无实现未来更新提供。配网并加入 Thread 网络设备配网后加入 Thread 网络在 RTT 日志中可以看到[DL] Device Role: CHILD [DL] Partition Id:0x6A7491B7 [DL] \_OnPlatformEvent default: event-Type 32778 [DL] OpenThread State Changed (Flags: 0x00000001) [DL] Thread Unicast Addresses: [DL] 2001:DB8::E1A2:87F1:7D5D:FECA/64 valid preferred [DL] FDDE:AD00:BEEF::FF:FE00:2402/64 valid preferred rloc [DL] FDDE:AD00:BEEF:0:383F:5E81:A05A:B168/64 valid preferred [DL] FE80::D8F2:592E:C109:CF00/64 valid preferred [DL] LwIP Thread interface addresses updated [DL] FE80::D8F2:592E:C109:CF00 IPv6 link-local address, preferred) [DL] FDDE:AD00:BEEF:0:383F:5E81:A05A:B168 Thread mesh-local address, preferred) [DL] 2001:DB8::E1A2:87F1:7D5D:FECA IPv6 global unicast address, preferred)验证设备在 Thread 网络上用串口终端screen / minicom在运行 refrigerator-app 的板卡上执行router table命令或通过ipaddr命令获取地址列表。设备配网可通过CHIP Tool Android/iOS 应用或OTBR 上的 CLI 命令完成。配网完成后可用 chip-tool 向冰箱设备发送 ZCL 命令。基于示例配置include/CHIPProjectConfig.h 中测试配对码20202021、discriminator0xF00配网与读写示例chip-tool pairing ble-thread 1 hex:operationalDataset 20202021 3840 ./chip-tool refrigeratoralarm read state 1 1 Refrigerator Endpoint Id 1 This enpoint support the refrigerator alarm cluster ./chip-tool temperaturecontrol read temperature-setpoint 1 2 Enpoint for temperaturecontrol is 2 and 3 Freeze Cabinet Endpoint Id 2 Cold Cabinet Endpoint Id 3 This enpoint support Temperature control cluster即Endpoint 1冰箱承载 Refrigerator Alarm 集群及 RefrigeratorAndTemperatureControlledCabinetMode 温控柜模式集群Endpoint 2冷冻柜与 Endpoint 3冷藏柜承载 Temperature Control 集群——与 include/RefrigeratorConfig.h 的端点默认值完全一致。查看支持的冰箱集群命令chip-tool refrigeratorandtemperaturecontrolledcabinetmode chip-tool temperaturecontrol订阅 RefrigeratorAlarm 事件Notify 事件最小/最大间隔 10/1端点 1chip-tool interactive start refrigeratoralarm subscribe-event notify 1 10 1 1IPv6 网络注意点部分路由器不会为设备边界路由器 / PC提供原生 IPv6 地址。此时需在两侧手动配置静态 IPv6 地址并在 PC 上添加指向边界路由器的 IPv6 路由# 边界路由器上 $ sudo ip addr add dev Network interface 2002::2/64 # PCLinux上 $ sudo ip addr add dev Network interface 2002::1/64 # PCLinux上添加 IPv6 路由 $ sudo ip route add Thread global ipv6 prefix/64 via 2002::2从 Matter CLI 触发事件示例还提供 Matter Shell 命令用于模拟/注入冰箱事件便于联调测试。在串口控制台或已启用 shell 的终端执行door-state-change门状态变化事件- matterCli refrigeratoralarm event door-state-change open - DoneNotes从 src/EventHandlerLibShell.cpp 的RegisterRefrigeratorEvents()可以看到 Shell 命令树的完整结构根命令refrigeratoralarm子命令help、event、alarmevent子命令help、door-state-changealarm子命令help、suppress抑制冰箱告警。实现层面door-state-change通过DeviceLayer::PlatformMgr().ScheduleWork()调度到事件工作线程由于 AlarmBase 要求 State 中的每个置位比特都必须在 Mask 与 Supported 中使能开门非零状态更新会先设置 Mask 再设置 State同时也能在suppress之后重新启用监控而关门零状态只清除 State、保持 Mask 使能。suppress则清空 Mask禁用所有已使能告警AlarmBase 同时会裁剪 State。OTA 软件更新EFR32 示例的软件更新流程参见 silabs_efr32_software_update.mdSiWx917 示例的 OTA 软件更新流程参见 Silicon Labs Matter 文档的 OTA Software UpdateSoC章节。构建选项Matter 仓库中所有 Silabs 示例默认启用全部特性以获得最佳用户体验但部分特性可通过构建参数轻松开关。以下选项均通过gn_silabs_example.sh脚本以附加参数形式传入。禁用日志对应 GN 参数chip_progress_logging、chip_detail_logging、chip_automation_logging$ ./scripts/examples/gn_silabs_example.sh ./examples/refrigerator-app/silabs ./out/refrigerator-app BRD4164A chip_detail_loggingfalse chip_automation_loggingfalse chip_progress_loggingfalseDebug / Release 构建对应 GN 参数is_debug$ ./scripts/examples/gn_silabs_example.sh ./examples/refrigerator-app/silabs ./out/refrigerator-app BRD4164A is_debugfalse禁用 LCD / QR Code对应 GN 参数show_qr_code$ ./scripts/examples/gn_silabs_example.sh ./examples/refrigerator-app/silabs ./out/refrigerator-app BRD4164A show_qr_codefalseKVS 最大条目数对应 GN 参数kvs_max_entries设置 NVM 中可存储的最大 KVSKey-Value Store条目数默认 75取值范围30 ≤ kvs_max_entries ≤ 255$ ./scripts/examples/gn_silabs_example.sh ./examples/refrigerator-app/silabs ./out/refrigerator-app BRD4164A kvs_max_entries50总结examples/refrigerator-app/silabs是一个结构完整、可直接上手的 Silabs 平台 Matter 参考实现它以 CRTP 派发架构把“SDK 默认行为”与“产品定制逻辑”清晰解耦开发者只需覆写*Impl()钩子即可注入自己的业务代码而无需触碰自动生成源码构建层面同时覆盖 ThreadEFR32 MG24与 Wi-FiSiWx917两条硬件路径并支持 ICD、Pigweed RPC、温湿度传感器、LCD 等可裁剪特性。配合本文所述的配网、chip-tool 控制、Shell 事件注入与日志调试手段即可基于该模板快速开展基于 Silicon Labs 平台的 Matter 温控设备产品开发。【免费下载链接】connectedhomeipMatter (formerly Project CHIP) creates more connections between more objects, simplifying development for manufacturers and increasing compatibility for consumers, guided by the Connectivity Standards Alliance.项目地址: https://gitcode.com/GitHub_Trending/co/connectedhomeip创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

Argilla FeedbackDataset 回答统一策略实战:用 compute_unified_responses 把多人标注聚合为训练数据

Argilla FeedbackDataset 回答统一策略实战:用 compute_unified_responses 把多人标注聚合为训练数据

Argilla FeedbackDataset 回答统一策略实战:用 compute_unified_responses 把多人标注聚合为训练数据 【免费下载链接】argilla Argilla is a collaboration tool for AI engineers and domain experts to build high-quality datasets 项目地址: https://gitcode…

2026/9/18 23:37:19 阅读更多 →
OpenClaw 跑 CSDN 发布任务,Key 走 TaoToken 行不行

OpenClaw 跑 CSDN 发布任务,Key 走 TaoToken 行不行

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/18 23:37:19 阅读更多 →
编写 Redux 自定义中间件:从标准模式到源码级兼容性实践

编写 Redux 自定义中间件:从标准模式到源码级兼容性实践

编写 Redux 自定义中间件:从标准模式到源码级兼容性实践 【免费下载链接】redux A JS library for predictable global state management 项目地址: https://gitcode.com/gh_mirrors/re/redux 导读:中间件(Middleware)是 Re…

2026/9/18 23:37:19 阅读更多 →

最新新闻

YOLOv11岩石裂隙检测与三维地质建模联合优化实战

YOLOv11岩石裂隙检测与三维地质建模联合优化实战

简介:这是一份面向地质勘探、目标检测和三维建模领域从业者与研究人员的技术方案文档,聚焦YOLOv11在岩石裂隙检测与三维地质建模联合优化中的实践方法。文档从YOLO系列算法演进入手,详细剖析YOLOv11的网络结构、训练流程与检测机制&#xff0…

2026/9/19 0:17:44 阅读更多 →
从CLIP到AnomalyCLIP:零样本异常检测原理与工程复现指南

从CLIP到AnomalyCLIP:零样本异常检测原理与工程复现指南

零样本异常检测最近一年多简直是井喷式发展,核心诱因就是CLIP这类多模态基础模型的落地。CLIP原本是给图文匹配设计的,但大家突然发现,把它搬到异常检测领域,居然能实现“训练阶段完全没见过异常样本,甚至没见过对应类…

2026/9/19 0:17:44 阅读更多 →
New API 日文版指南精读:部署、环境变量与多机集群配置实战

New API 日文版指南精读:部署、环境变量与多机集群配置实战

New API 日文版指南精读:部署、环境变量与多机集群配置实战 【免费下载链接】new-api A unified AI model hub for aggregation & distribution. It supports cross-converting various LLMs into OpenAI-compatible, Claude-compatible, or Gemini-compatible …

2026/9/19 0:17:44 阅读更多 →
Java堆转储文件hprof的生成、分析与安全删除指南

Java堆转储文件hprof的生成、分析与安全删除指南

1. 什么是hprof文件?hprof文件是Java虚拟机(JVM)生成的一种堆转储(Heap Dump)文件格式。当Java应用程序出现内存泄漏或需要分析内存使用情况时,开发人员通常会生成这种文件来进行诊断。在Windows系统上&…

2026/9/19 0:17:43 阅读更多 →
LeetCode Hot 100刷题总结:从零到百题的实战路线与核心解法

LeetCode Hot 100刷题总结:从零到百题的实战路线与核心解法

HOT 100 刷完的那天,提交记录定格在 100/100。盯着绿色对勾看了几秒,我第一反应不是“终于结束了”,而是“如果当初有人早点告诉我这些,我能少走三个月的弯路”。这篇总结,就是把这些“当初没人告诉我”的东西写出来。…

2026/9/19 0:17:43 阅读更多 →
Postman批量发送请求最佳实践:从数据驱动到CI集成全攻略

Postman批量发送请求最佳实践:从数据驱动到CI集成全攻略

直接用 Postman 发单个请求,是大多数接口调试场景里的日常操作。可一旦变成需要验证 50 个用户的订单状态、给 30 个不同参数的商品详情接口做回归、或者把一批线上数据拿回来重新造数,鼠标点到手酸不说,还特别容易漏掉中间某一条。这时候真正…

2026/9/19 0:16:43 阅读更多 →

日新闻

BP神经网络时序预测:滑窗长度与多窗口平均策略

BP神经网络时序预测:滑窗长度与多窗口平均策略

简介:面向机器学习、深度学习与数据建模学习者的一份完整研究文献,聚焦BP神经网络在农业产量预测中的应用。文档以1980—2018年全国棉花产量为样本,系统讲解数据归一化处理、激活函数原理、多层神经网络结构搭建及训练流程,展示敏…

2026/9/19 0:00:30 阅读更多 →
Transformer训练实时监控实战:基于MindSpore的损失曲线可视化方案

Transformer训练实时监控实战:基于MindSpore的损失曲线可视化方案

上个月调一个Deformable DETR模型,在单卡上要跑将近两天。第二天早上我下意识打开终端翻日志,发现loss从凌晨两点就开始往上爬,一路从0.8涨到1.35,整整六个小时没人发现。那六个小时的训练不仅白跑,还霸占着卡——等于…

2026/9/19 0:00:30 阅读更多 →
OpenCloud 中的 Go 类型安全转换库 spf13/cast:从零值回退到泛型 API 的完整实战指南

OpenCloud 中的 Go 类型安全转换库 spf13/cast:从零值回退到泛型 API 的完整实战指南

OpenCloud 中的 Go 类型安全转换库 spf13/cast:从零值回退到泛型 API 的完整实战指南 【免费下载链接】opencloud 🌤️ OpenCloud is the open source platform for file management, sharing and collaboration. Simple and sovereign. 项目地址: htt…

2026/9/19 0:00:30 阅读更多 →

周新闻

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验 【免费下载链接】ai The AI Toolkit for TypeScript. From the creators of Next.js, the AI SDK is a free open-source library for building AI-powered applications and ag…

2026/9/16 19:03:19 阅读更多 →
Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化

Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化

Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化 【免费下载链接】refine A React Framework for building internal tools, admin panels, dashboards & B2B apps with unmatched flexibility. 项目地址: https://gitcode.com/GitH…

2026/9/17 7:57:36 阅读更多 →
Flutter应用改名全指南:从Android到iOS的配置与工具实践

Flutter应用改名全指南:从Android到iOS的配置与工具实践

刚接一个外包项目时,甲方要求把工程里临时用的应用名改成正式产品名。我本来觉得“改名”这种小事,打开配置文件改一行不就完了?结果真动手才发现,Flutter项目里“应用名称”根本不是一处配置,而是一整套散落在 Androi…

2026/9/17 10:19:14 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/16 22:31:27 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/15 21:39:18 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/16 22:32:59 阅读更多 →