commit | 78c62b0e43b223a72e0aba40ef5090c308575182 | [log] [tgz] |
---|---|---|
author | Tobiasgraf <4622393+tobiasgraf@users.noreply.github.com> | Thu Jul 20 04:16:15 2023 +0200 |
committer | GitHub <noreply@github.com> | Thu Jul 20 02:16:15 2023 +0000 |
tree | b181ffc9291b7c0e99c42d276346678ed1226532 | |
parent | b5bb8ff135900af61a151de38b2a41e5689a268c [diff] |
Add Resource Monitoring Cluster Implementation (#27798) * Add Basic Resource Monitoring Server Implementation * Add Basic Working Resource Monitoring Example App * Improve log output * Replace some HepafilterMonitoring specifics with more general ResourceMonitoring defines - using `using` - and adding by hand * Apply clang-format * More Hepa to ResourceMonitoring replacement * Add ActivatedCarbonFilterMonitoring Cluster * Rename ActivatedCarbonFilterMonitoring.cpp to ActivatedCarbonFilterMonitoringDelegate.cpp * Split delegate definitions into separate files * Cleanup some Headers * Rename member variables * Refactoring: Rename Delegate to Instance Add cluster-objects.h / cpp instead of defining it inside the server.h / cpp * Refactoring: Implement Read and Write function - have External Attribute Storage inside Instances - implement getters and Setters for Attributes * Refactoring: reorder methods to math the order in the .h file * Run Clang-Format * Add Getter for DegradationDirection Attribute - also clean up some namespaces * Add Construction Option To Set OnResetCondition To Supported Also add basic OnResetCondition implementation. * Add Default Values * Modified the AttributePersistenceProvider ReadValue function signiture to take the required attribute information directly rather than as a EmberAfAttributeMetadata structure. * Force External Storage for All Resource Monitoring Clusters * Force External Storage for All Resource Monitoring Clusters Regenerated Code * Expanded AttributePersistanceProvider API to include reading and wirting of uint8 and nullable uint8 * Add LastChangedTime to Attributes For ResourceMonitoring Clusters * Add LastChangedTime to Attributes For ResourceMonitoring Clusters Regenerated Code * Add `LastChangedTime` to Forced External Storage List For Resource Monitoring * Add LastChangedTime To Resource-Monitoring Server Implementation * Templated the AttributePersistanceProvider read and wiret function to work for all uint types. * Fixed AttributePersistanceProvider accepted types. Added read helper for type bool. * Restyled by clang-format * Formatting and some comments * Make OnResetCondition Pure Virtual And remove implementation from resource-monitor-server.cpp. It's not allowed to use the resource-monitoring-server::instance without deriving it yourself. * Set LastChangedTime In the OnResetCondition Handler * Fixed mismatched size return error of DefaultAttributePersistenceProvider * Add All Missing Aliased Clusters - CeramicFilterMonitoring - ElectrostaticFilterMonitoring - FuelTankMonitoring - InkCartridgeMonitoring - IonizingFilterMonitoring - OzoneFilterMonitoring - TonerCartridgeMonitoring - UvFilterMonitoring - WaterTankMonitoring - ZeoliteFilterMonitoring * Started work on tests for the AttributePersistenceProvider. * Add Missing Instances to resourceMonitoring Test App * Add Persistent Storage To LastChangedTime * Add README.md * Remove `ResourceMonitoringAliasesInstanceMap` as it wasn't really needed * Update Description Of Init() * Update Description of AppInit() and OnResetCondition() * Added unit tests for AttributePersistenceProvider testing the storage and retrival of all unsigned types and their nullable veriaties, bool and ByteSpan. Tested for small buffer errors. * Changed the type of aSize in ReadValue to size_t * Removed the dependancy on generated code in the AttributePersistencezprovider.h * Added static funtctions to get the KVS null representation for different types. * Fix Errors after Merge * Some Changes From Comments From The ModeBase PR * Added functions to read and write nullable bools and accompanying tests. * Incorporated boolean tests in the scalar test. * Added failure before init test * Restyled by clang-format * Move Headers To Resource-Monitoring-Common * Move Cpp files To resource-monitor-common * Remove All Unused Aliases For The Resource-Monitoring-Cluster this was decided in the AirQuality Call on 06.07.2023 * Fixed after merge. * Removed the failure on init test as it may have been causing seg faults in some tests. * Renamed GetNull -> GetNullValueForNullableType * Added the initialisation of valueReadBack and added a new templated function for nullable types to avoid the error: The left operand of '==' is a garbage value, on some platforms. * Added handline of signed ints and accompanying tests. * Added handline of nullable signed ints and accompanying tests. * Type cast null. * Restyled by clang-format * Changed shift bit to be af the same type are the return val. * Added tests got GetNull functions * Remove Aliased Clusters From Resource Monitoring Clusters except Hepa and ActivatedCarbon enable LastChangedTime for Hepa and ActivatedCarbon * Add Resource Monitoring Aliased Clusters Server implementation To Linux All-Clusters-App * Remove Todo * Remove Aliased Clusters From Resource Monitoring Clusters except Hepa and ActivatedCarbon * Remove Redundant Check apparently it's not necessary / allow to check this * Apply Restyled patch * Remove Tests For Removed Aliased Clusters - all except Hepa and ActivatedCarbon * Fix Spelling * Remove Unused / disallowed #include <maps> * Remove resource-monitoring-instances.h * Remove Unneeded Destructors * Use Default Descructor and Make Class Non copyable or moveable * Change IsAliascluster to IsValidAliasCluster * Fix Typo * Reset ChangeIndication Attribute On ResetCondition Command Spec requires this to be reset as well * Set FeatureMap To 3 For testing with Warning Feature enabled * Rename mFeature To mFeatureMap * Rewrite Some Comments From "function" to "method" * Remove Const * Update Comment Of Init() Method added the exact CHIP_ERROR_XXX that this can return. * Remove Commented Code * Added TODO For REP Feature * Change From "Next value" To "UINT8_MAX" * Use ChipLogDetail Instead Of ChipLogError * Fix Log on Some Platforms On some platforms (e.g. ASR) uint32_t seems to be a long and will produce a error if %u is used. So cast it to unsinged long on all platforms and use %lu. * Update README.md For Linux Resource-Monitoring-Example-App * Remove Aliased Clusters From Resource Monitoring Clusters except Hepa and ActivatedCarbon * Regen Code * Apply Restylerd Patch * Update Wordlist - Add HEPA * Remove PICS values For Resource Monitoring Clusters That Were Removed * Remove PICS For Resource Monitoring Clusters from PICS.yaml * Add Resource Monitoring README.md To docs/examples/index.md * Remove redundant chip::app:: prefixes * Use Bitset Instead Of Just a Number For FeatureMap * Remove Options from CHIPProjectAppConfig.h not needed or wrong * Remove network commissioning bits As of earlier today that's handled by AppInit. Which is good, because the bits here are buggy. * Make Hepa And ActivateCarbon Filter Monitoring Instances Static * Remove ClusterId From Specialized Hepa and Activated Carbon Construtors They should know their cluster ids, and now they do! * Add Getter for Endpoint * Remove Nonsense Comment * Remove Aliased Cluster IDs That Got Removed * Fix Typo * Simplify HandleResetCondition Method * Add Copyright * Sort out Includes Add what is needed using "include what you use" tool * Make Methods To Private and move private section to bottom instead of in between * Initialize All The Member Varaibles With Initializer List also updated the comment with the new parameters * Explicit Delete Move Constructors * Make More Methods To Private * Update Comment For OnResetCondition Command Handler * Add FeatureMap To Zcl*.json Files * Apply restyled Patch * Remove ResetCondtion::Type And Encode they are only needed for sending the command, it does not send the command. * Remove While Loop's Body is a very complicated no-op. Keep the while itself, it basically check if this is not malformed TLV * Move OnResetCondition Handling to Cluster Implementation - add PreResetCondition and PostResetCondition() methods to be overwritten fixes #27986 * Apply Restyled Patch * Fix Typo * Remove Init For Resource Monitoring Clusters From main-common.cpp And put it in resource-monitoring-helper.cpp. This will use the ClusterInitCallbacks to initialize the instance objects. This removes the need to have the init code in every example app, just include the helper.cpp file. * Apply Restyled Patch * Update examples/resource-monitoring-app/linux/src/main.cpp Co-authored-by: Cliff Chung <cliffchung@users.noreply.github.com> * Update examples/resource-monitoring-app/linux/src/main.cpp Co-authored-by: Cliff Chung <cliffchung@users.noreply.github.com> * Fix Some Typos * Disable Removed Test Cases * Apply Restylerd Patch * Apply Restyled Patch * Add Resource-Monitoring-Server To ESP32 All Clusters Example * Remove Test Scripts For Aliased Clusters * Revert "Disable Removed Test Cases" This reverts commit 34e63558989f7232df24e0c71857d41c626d2596. * Add VerifyOrDie() When More Than 1 EP gets Initialized For Hepa Or Activated Carbon Filter Monitoring * Add Resource-Monitoring Clusters To ESP32 Minimal App * Apply Restyled Patch * Move Resource-Monitoring Instances/Delegates To All-Clusters-Common to avoid having to include multiple directories and source code from another example app. * Apply Restyled Patch * Update Code Gen * Fix Zap After Merge + CodeGen --------- Co-authored-by: William Hicklin <william.hicklin@dyson.com> Co-authored-by: William <hicklin@users.noreply.github.com> Co-authored-by: Restyled.io <commits@restyled.io> Co-authored-by: Cliff Chung <cliffchung@users.noreply.github.com> Co-authored-by: Cliff Chung <116232729+cliffamzn@users.noreply.github.com>
Builds
Tests
Tools
Documentation
Matter (formerly Project CHIP) creates more connections between more objects, simplifying development for manufacturers and increasing compatibility for consumers, guided by the Connectivity Standards Alliance.
Matter is a unified, open-source application-layer connectivity standard built to enable developers and device manufacturers to connect and build reliable, and secure ecosystems and increase compatibility among connected home devices. It is built with market-proven technologies using Internet Protocol (IP) and is compatible with Thread and Wi-Fi network transports. Matter was developed by a Working Group within the Connectivity Standards Alliance (Alliance). This Working Group develops and promotes the adoption of the Matter standard, a royalty-free connectivity standard to increase compatibility among smart home products, with security as a fundamental design tenet. The vision that led major industry players to come together to build Matter is that smart connectivity should be simple, reliable, and interoperable.
Matter simplifies development for manufacturers and increases compatibility for consumers.
The standard was built around a shared belief that smart home devices should be secure, reliable, and seamless to use. By building upon Internet Protocol (IP), Matter enables communication across smart home devices, mobile apps, and cloud services and defines a specific set of IP-based networking technologies for device certification.
The Matter specification details everything necessary to implement a Matter application and transport layer stack. It is intended to be used by implementers as a complete specification.
The Alliance officially opened the Matter Working Group on January 17, 2020, and the specification is available for adoption now.
Visit buildwithmatter.com to learn more and read the latest news and updates about the project.
Matter is developed with the following goals and principles in mind:
Unifying: Matter is built with and on top of market-tested, existing technologies.
Interoperable: The specification permits communication between any Matter-certified device, subject to users’ permission.
Secure: The specification leverages modern security practices and protocols.
User Control: The end user controls authorization for interaction with devices.
Federated: No single entity serves as a throttle or a single point of failure for root of trust.
Robust: The set of protocols specifies a complete lifecycle of a device — starting with the seamless out-of-box experience, through operational protocols, to device and system management specifications required for proper function in the presence of change.
Low Overhead: The protocols are practically implementable on low compute-resource devices, such as MCUs.
Pervasive: The protocols are broadly deployable and accessible, by leveraging IP and being implementable on low-capability devices.
Ecosystem-Flexible: The protocol is flexible enough to accommodate deployment in ecosystems with differing policies.
Easy to Use: The protocol provides smooth, cohesive, integrated provisioning and out-of-box experience.
Open: The Project’s design and technical processes are open and transparent to the general public, including non-members wherever possible.
Matter aims to build a universal IPv6-based communication protocol for smart home devices. The protocol defines the application layer that will be deployed on devices and the different link layers to help maintain interoperability. The following diagram illustrates the normal operational mode of the stack:
The architecture is divided into layers to help separate the different responsibilities and introduce a good level of encapsulation among the various pieces of the protocol stack. The vast majority of interactions flow through the stack captured in the following Figure:
Security: An encoded action frame is then sent down to the Security Layer to encrypt and sign the payload to ensure that data is secured and authenticated by both sender and receiver of a packet.
Message Framing & Routing: With an interaction encrypted and signed, the Message Layer constructs the payload format with required and optional header fields; which specify the message's properties and some routing information.
Matter’s design and technical processes are intended to be open and transparent to the general public, including to Working Group non-members wherever possible. The availability of this GitHub repository and its source code under an Apache v2 license is an important and demonstrable step to achieving this commitment. Matter endeavors to bring together the best aspects of market-tested technologies and redeploy them as a unified and cohesive whole-system solution. The overall goal of this approach is to bring the benefits of Matter to consumers and manufacturers as quickly as possible. As a result, what you observe in this repository is an implementation-first approach to the technical specification, vetting integrations in practice. The Matter repository is growing and evolving to implement the overall architecture. The repository currently contains the security foundations, message framing and dispatch, and an implementation of the interaction model and data model. The code examples show simple interactions, and are supported on multiple transports -- Wi-Fi and Thread -- starting with resource-constrained (i.e., memory, processing) silicon platforms to help ensure Matter’s scalability.
We welcome your contributions to Matter. Read our contribution guidelines here.
Instructions about how to build Matter can be found here .
The Matter repository is structured as follows:
File/Folder | Content |
---|---|
build | Build system support content and built output directories |
build_overrides | Build system parameter customization for different platforms |
config | Project configurations |
credentials | Development and test credentials |
docs | Documentation, including guides. Visit the Matter SDK documentation page to read it. |
examples | Example firmware applications that demonstrate use of Matter |
integrations | 3rd Party integrations |
scripts | Scripts needed to work with the Matter repository |
src | Implementation of Matter |
third_party | 3rd party code used by Matter |
zzz_generated | zap generated template code - Revolving around cluster information |
BUILD.gn | Build file for the gn build system |
CODE_OF_CONDUCT.md | Code of conduct for Matter and contribution to it |
CONTRIBUTING.md | Guidelines for contributing to Matter |
LICENSE | Matter license file |
REVIEWERS.md | PR reviewers |
gn_build.sh | Build script for specific projects such as Android, EFR32, etc. |
README.md | This File |
Matter is released under the Apache 2.0 license.