@project-chip/matter.js 0.0.2 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +14 -0
- package/dist/cjs/cluster/AccessControlCluster.js +105 -0
- package/dist/cjs/cluster/BasicInformationCluster.js +92 -0
- package/dist/cjs/cluster/BindingCluster.js +51 -0
- package/dist/cjs/cluster/BridgedDeviceBasicInformationCluster.js +75 -0
- package/dist/cjs/cluster/Cluster.js +49 -0
- package/dist/cjs/cluster/DescriptorCluster.js +53 -0
- package/dist/cjs/cluster/GeneralCommissioningCluster.js +89 -0
- package/dist/cjs/cluster/GroupsCluster.js +140 -0
- package/dist/cjs/cluster/IdentifyCluster.js +55 -0
- package/dist/cjs/cluster/LabelCluster.js +55 -0
- package/dist/cjs/cluster/OnOffCluster.js +105 -0
- package/dist/cjs/cluster/OperationalCredentialsCluster.js +205 -0
- package/dist/cjs/cluster/ScenesCluster.js +236 -0
- package/dist/cjs/common/AttributeId.js +23 -0
- package/dist/cjs/common/ClusterId.js +24 -0
- package/dist/cjs/common/DeviceTypeId.js +23 -0
- package/dist/cjs/common/EndpointNumber.js +23 -0
- package/dist/cjs/common/FabricId.js +24 -0
- package/dist/cjs/common/FabricIndex.js +28 -0
- package/dist/cjs/common/GroupId.js +30 -0
- package/dist/cjs/common/NodeId.js +31 -0
- package/dist/cjs/common/SubjectId.js +11 -0
- package/dist/cjs/common/VendorId.js +25 -0
- package/{dist-cjs → dist/cjs}/matter.js +12 -0
- package/dist/cjs/protocol/InteractionProtocol.js +136 -0
- package/dist/cjs/schema/BitmapSchema.js +133 -0
- package/{dist-cjs → dist/cjs}/tlv/TlvObject.js +6 -2
- package/{dist-cjs → dist/cjs}/util/ByteArray.js +2 -0
- package/{dist-cjs → dist/cjs}/util/Type.js +3 -0
- package/dist/dts/cluster/AccessControlCluster.d.ts +108 -0
- package/dist/dts/cluster/BasicInformationCluster.d.ts +57 -0
- package/dist/dts/cluster/BindingCluster.d.ts +23 -0
- package/dist/dts/cluster/BridgedDeviceBasicInformationCluster.d.ts +53 -0
- package/dist/dts/cluster/Cluster.d.ts +109 -0
- package/dist/dts/cluster/DescriptorCluster.d.ts +25 -0
- package/dist/dts/cluster/GeneralCommissioningCluster.d.ts +94 -0
- package/dist/dts/cluster/GroupsCluster.d.ts +92 -0
- package/dist/dts/cluster/IdentifyCluster.d.ts +60 -0
- package/dist/dts/cluster/LabelCluster.d.ts +34 -0
- package/dist/dts/cluster/OnOffCluster.d.ts +85 -0
- package/dist/dts/cluster/OperationalCredentialsCluster.d.ts +156 -0
- package/dist/dts/cluster/ScenesCluster.d.ts +200 -0
- package/dist/dts/common/AttributeId.d.ts +17 -0
- package/dist/dts/common/ClusterId.d.ts +18 -0
- package/dist/dts/common/DeviceTypeId.d.ts +17 -0
- package/dist/dts/common/EndpointNumber.d.ts +17 -0
- package/dist/dts/common/FabricId.d.ts +18 -0
- package/dist/dts/common/FabricIndex.d.ts +22 -0
- package/dist/dts/common/GroupId.d.ts +24 -0
- package/dist/dts/common/NodeId.d.ts +19 -0
- package/dist/dts/common/SubjectId.d.ts +15 -0
- package/dist/dts/common/VendorId.d.ts +19 -0
- package/dist/{matter.d.ts → dts/matter.d.ts} +12 -0
- package/dist/dts/protocol/InteractionProtocol.d.ts +159 -0
- package/dist/{schema → dts/schema}/BitmapSchema.d.ts +15 -3
- package/dist/{util → dts/util}/Type.d.ts +1 -0
- package/dist/es/cluster/AccessControlCluster.js +102 -0
- package/dist/es/cluster/BasicInformationCluster.js +89 -0
- package/dist/es/cluster/BindingCluster.js +48 -0
- package/dist/es/cluster/BridgedDeviceBasicInformationCluster.js +72 -0
- package/dist/es/cluster/Cluster.js +36 -0
- package/dist/es/cluster/DescriptorCluster.js +50 -0
- package/dist/es/cluster/GeneralCommissioningCluster.js +86 -0
- package/dist/es/cluster/GroupsCluster.js +137 -0
- package/dist/es/cluster/IdentifyCluster.js +52 -0
- package/dist/es/cluster/LabelCluster.js +52 -0
- package/dist/es/cluster/OnOffCluster.js +102 -0
- package/dist/es/cluster/OperationalCredentialsCluster.js +202 -0
- package/dist/es/cluster/ScenesCluster.js +233 -0
- package/dist/es/common/AttributeId.js +19 -0
- package/dist/es/common/ClusterId.js +20 -0
- package/dist/es/common/DeviceTypeId.js +19 -0
- package/dist/es/common/EndpointNumber.js +19 -0
- package/dist/es/common/FabricId.js +20 -0
- package/dist/es/common/FabricIndex.js +24 -0
- package/dist/es/common/GroupId.js +26 -0
- package/dist/es/common/NodeId.js +27 -0
- package/dist/es/common/SubjectId.js +8 -0
- package/dist/es/common/VendorId.js +21 -0
- package/dist/{matter.js → es/matter.js} +12 -0
- package/dist/es/protocol/InteractionProtocol.js +133 -0
- package/dist/es/schema/BitmapSchema.js +125 -0
- package/dist/{tlv → es/tlv}/TlvObject.js +6 -2
- package/dist/{util → es/util}/ByteArray.js +2 -0
- package/dist/{util → es/util}/Type.js +1 -1
- package/package.json +7 -8
- package/dist/schema/BitmapSchema.js +0 -48
- package/dist-cjs/schema/BitmapSchema.js +0 -55
- /package/{dist-cjs → dist/cjs}/schema/Schema.js +0 -0
- /package/{dist-cjs → dist/cjs}/spec/Specifications.js +0 -0
- /package/{dist-cjs → dist/cjs}/tlv/TlvAny.js +0 -0
- /package/{dist-cjs → dist/cjs}/tlv/TlvArray.js +0 -0
- /package/{dist-cjs → dist/cjs}/tlv/TlvBoolean.js +0 -0
- /package/{dist-cjs → dist/cjs}/tlv/TlvCodec.js +0 -0
- /package/{dist-cjs → dist/cjs}/tlv/TlvNullable.js +0 -0
- /package/{dist-cjs → dist/cjs}/tlv/TlvNumber.js +0 -0
- /package/{dist-cjs → dist/cjs}/tlv/TlvSchema.js +0 -0
- /package/{dist-cjs → dist/cjs}/tlv/TlvString.js +0 -0
- /package/{dist-cjs → dist/cjs}/tlv/TlvVoid.js +0 -0
- /package/{dist-cjs → dist/cjs}/tlv/TlvWrapper.js +0 -0
- /package/{dist-cjs → dist/cjs}/util/DataReader.js +0 -0
- /package/{dist-cjs → dist/cjs}/util/DataWriter.js +0 -0
- /package/{dist-cjs → dist/cjs}/util/Number.js +0 -0
- /package/dist/{schema → dts/schema}/Schema.d.ts +0 -0
- /package/dist/{spec → dts/spec}/Specifications.d.ts +0 -0
- /package/dist/{tlv → dts/tlv}/TlvAny.d.ts +0 -0
- /package/dist/{tlv → dts/tlv}/TlvArray.d.ts +0 -0
- /package/dist/{tlv → dts/tlv}/TlvBoolean.d.ts +0 -0
- /package/dist/{tlv → dts/tlv}/TlvCodec.d.ts +0 -0
- /package/dist/{tlv → dts/tlv}/TlvNullable.d.ts +0 -0
- /package/dist/{tlv → dts/tlv}/TlvNumber.d.ts +0 -0
- /package/dist/{tlv → dts/tlv}/TlvObject.d.ts +0 -0
- /package/dist/{tlv → dts/tlv}/TlvSchema.d.ts +0 -0
- /package/dist/{tlv → dts/tlv}/TlvString.d.ts +0 -0
- /package/dist/{tlv → dts/tlv}/TlvVoid.d.ts +0 -0
- /package/dist/{tlv → dts/tlv}/TlvWrapper.d.ts +0 -0
- /package/dist/{util → dts/util}/ByteArray.d.ts +0 -0
- /package/dist/{util → dts/util}/DataReader.d.ts +0 -0
- /package/dist/{util → dts/util}/DataWriter.d.ts +0 -0
- /package/dist/{util → dts/util}/Number.d.ts +0 -0
- /package/dist/{schema → es/schema}/Schema.js +0 -0
- /package/dist/{spec → es/spec}/Specifications.js +0 -0
- /package/dist/{tlv → es/tlv}/TlvAny.js +0 -0
- /package/dist/{tlv → es/tlv}/TlvArray.js +0 -0
- /package/dist/{tlv → es/tlv}/TlvBoolean.js +0 -0
- /package/dist/{tlv → es/tlv}/TlvCodec.js +0 -0
- /package/dist/{tlv → es/tlv}/TlvNullable.js +0 -0
- /package/dist/{tlv → es/tlv}/TlvNumber.js +0 -0
- /package/dist/{tlv → es/tlv}/TlvSchema.js +0 -0
- /package/dist/{tlv → es/tlv}/TlvString.js +0 -0
- /package/dist/{tlv → es/tlv}/TlvVoid.js +0 -0
- /package/dist/{tlv → es/tlv}/TlvWrapper.js +0 -0
- /package/dist/{util → es/util}/DataReader.js +0 -0
- /package/dist/{util → es/util}/DataWriter.js +0 -0
- /package/dist/{util → es/util}/Number.js +0 -0
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2022 Project CHIP Authors
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { TlvFabricIndex } from "../common/FabricIndex.js";
|
|
7
|
+
import { TlvVendorId } from "../common/VendorId.js";
|
|
8
|
+
import { TlvBoolean } from "../tlv/TlvBoolean.js";
|
|
9
|
+
import { TlvUInt16, TlvUInt32 } from "../tlv/TlvNumber.js";
|
|
10
|
+
import { TlvField } from "../tlv/TlvObject.js";
|
|
11
|
+
import { TlvString, TlvString256max, TlvString32max, TlvString64max } from "../tlv/TlvString.js";
|
|
12
|
+
import { Attribute, Cluster, Event, OptionalAttribute, OptionalEvent, OptionalWritableAttribute } from "./Cluster.js";
|
|
13
|
+
/**
|
|
14
|
+
* This Cluster serves two purposes towards a Node communicating with a Bridge:
|
|
15
|
+
* * indicate that the functionality on the Endpoint where it is placed (and its Parts) is bridged from a
|
|
16
|
+
* non-Matter technology, and
|
|
17
|
+
* * provide a centralized collection of attributes that the Node MAY collect to aid in conveying information
|
|
18
|
+
* regarding the Bridged Device to a user, such as the vendor name, the model name, or user-assigned name.
|
|
19
|
+
*
|
|
20
|
+
* This cluster is Derived from Basic Information Cluster.
|
|
21
|
+
*
|
|
22
|
+
* @see {@link MatterCoreSpecificationV1_0} § 9.13
|
|
23
|
+
*/
|
|
24
|
+
export const BridgedDeviceBasicInformationCluster = Cluster({
|
|
25
|
+
id: 0x39,
|
|
26
|
+
name: "Bridged Device Basic Information",
|
|
27
|
+
revision: 1,
|
|
28
|
+
/** @see {@link MatterCoreSpecificationV1_0} § 9.13.6 */
|
|
29
|
+
attributes: {
|
|
30
|
+
/** Human-readable (displayable) name of the vendor for the Node. */
|
|
31
|
+
vendorName: OptionalAttribute(1, TlvString32max),
|
|
32
|
+
/** Specifies the {@link VendorId}. */
|
|
33
|
+
vendorId: OptionalAttribute(2, TlvVendorId),
|
|
34
|
+
/** Human-readable name of the model for the Node such as the model number assigned by the vendor. */
|
|
35
|
+
productName: OptionalAttribute(3, TlvString32max),
|
|
36
|
+
/** User defined name for the Node. It is set during initial commissioning and may be updated by further reconfigurations. */
|
|
37
|
+
nodeLabel: OptionalWritableAttribute(5, TlvString32max, { default: "", writeAcl: 1 /* AccessLevel.Manage */ }),
|
|
38
|
+
/** Version number of the hardware of the Node. The meaning of its value, and the versioning scheme, are vendor defined. */
|
|
39
|
+
hardwareVersion: OptionalAttribute(7, TlvUInt16, { default: 0 }),
|
|
40
|
+
/** Human-readable representation of the {@link BasicInformationCluster.attributes.hardwareVersion hardwareVersion} attribute. */
|
|
41
|
+
hardwareVersionString: OptionalAttribute(8, TlvString.bound({ minLength: 1, maxLength: 64 })),
|
|
42
|
+
/** Current version number for the software running on this Node. A larger value is newer than a lower value. */
|
|
43
|
+
softwareVersion: OptionalAttribute(9, TlvUInt32, { default: 0 }),
|
|
44
|
+
/** Human-readable representation of the {@link BasicInformationCluster.attributes.softwareVersion softwareVersion} attribute. */
|
|
45
|
+
softwareVersionString: OptionalAttribute(10, TlvString.bound({ minLength: 1, maxLength: 64 })),
|
|
46
|
+
/** Node manufacturing date formatted with YYYYMMDD. The additional 8 characters might include other vendor related information. */
|
|
47
|
+
manufacturingDate: OptionalAttribute(11, TlvString.bound({ minLength: 8, maxLength: 16 })),
|
|
48
|
+
/** Human-readable vendor assigned part number for the Node whose meaning and numbering scheme is vendor defined. */
|
|
49
|
+
partNumber: OptionalAttribute(12, TlvString32max),
|
|
50
|
+
/** Link to a product specific web page following the syntax as specified in RFC 3986. */
|
|
51
|
+
productURL: OptionalAttribute(13, TlvString256max),
|
|
52
|
+
/** Vendor specific human readable product label. */
|
|
53
|
+
productLabel: OptionalAttribute(14, TlvString64max),
|
|
54
|
+
/** Human-readable serial number. */
|
|
55
|
+
serialNumber: OptionalAttribute(15, TlvString32max),
|
|
56
|
+
/** Indicates whether the bridged device is reachable by the bridge over the non-Matter network. */
|
|
57
|
+
reachable: Attribute(17, TlvBoolean, { default: true }),
|
|
58
|
+
/** Unique identifier for the device, which is constructed in a manufacturer specific manner, updated during factory reset. */
|
|
59
|
+
uniqueId: OptionalAttribute(18, TlvString32max),
|
|
60
|
+
},
|
|
61
|
+
/** @see {@link MatterCoreSpecificationV1_0} § 11.1.6.5 */
|
|
62
|
+
events: {
|
|
63
|
+
/** First event fired as soon as reasonable after completing a boot or reboot process. */
|
|
64
|
+
startUp: OptionalEvent(0, 0 /* EventPriority.Critical */, { softwareVersion: TlvField(0, TlvUInt32) }),
|
|
65
|
+
/** Last event fired prior to any orderly shutdown sequence on a best-effort basis. */
|
|
66
|
+
shutDown: OptionalEvent(1, 0 /* EventPriority.Critical */),
|
|
67
|
+
/** Fired prior to permanently leaving a given Fabric. */
|
|
68
|
+
leave: OptionalEvent(2, 1 /* EventPriority.Info */, { fabricIndex: TlvField(0, TlvFabricIndex) }),
|
|
69
|
+
/** Fired when there is a change in the {@link BasicInformationCluster.attributes.reachable reachable} attribute */
|
|
70
|
+
reachableChanged: Event(3, 1 /* EventPriority.Info */, { reachableNewValue: TlvField(0, TlvBoolean) }),
|
|
71
|
+
},
|
|
72
|
+
});
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2022 Project CHIP Authors
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { TlvBitmap, TlvUInt16, TlvUInt32 } from "../tlv/TlvNumber.js";
|
|
7
|
+
import { TlvObject } from "../tlv/TlvObject.js";
|
|
8
|
+
import { TlvVoid } from "../tlv/TlvVoid.js";
|
|
9
|
+
import { Merge } from "../util/Type.js";
|
|
10
|
+
;
|
|
11
|
+
export const Attribute = (id, schema, { default: conformanceValue, readAcl = 0 /* AccessLevel.View */ } = {}) => ({ id, schema, optional: false, writable: false, default: conformanceValue, readAcl });
|
|
12
|
+
export const OptionalAttribute = (id, schema, { default: conformanceValue, readAcl = 0 /* AccessLevel.View */ } = {}) => ({ id, schema, optional: true, writable: false, default: conformanceValue, readAcl });
|
|
13
|
+
export const WritableAttribute = (id, schema, { default: conformanceValue, readAcl = 0 /* AccessLevel.View */, writeAcl = 0 /* AccessLevel.View */ } = {}) => ({ id, schema, optional: false, writable: true, default: conformanceValue, readAcl, writeAcl });
|
|
14
|
+
export const OptionalWritableAttribute = (id, schema, { default: conformanceValue, readAcl = 0 /* AccessLevel.View */, writeAcl = 0 /* AccessLevel.View */ } = {}) => ({ id, schema, optional: true, writable: true, default: conformanceValue, readAcl, writeAcl });
|
|
15
|
+
/* Interfaces and helper methods to define a cluster command */
|
|
16
|
+
export const TlvNoArguments = TlvObject({});
|
|
17
|
+
export const TlvNoResponse = TlvVoid;
|
|
18
|
+
;
|
|
19
|
+
;
|
|
20
|
+
export const Command = (requestId, requestSchema, responseId, responseSchema) => ({ optional: false, requestId, requestSchema, responseId, responseSchema });
|
|
21
|
+
export const OptionalCommand = (requestId, requestSchema, responseId, responseSchema) => ({ optional: true, requestId, requestSchema, responseId, responseSchema });
|
|
22
|
+
export const Event = (id, priority, data = {}) => ({ id, schema: TlvObject(data), priority, optional: false });
|
|
23
|
+
export const OptionalEvent = (id, priority, data = {}) => ({ id, schema: TlvObject(data), priority, optional: true });
|
|
24
|
+
export const GlobalAttributes = (features) => ({
|
|
25
|
+
clusterRevision: Attribute(0xFFFD, TlvUInt16),
|
|
26
|
+
featureMap: Attribute(0xFFFC, TlvBitmap(TlvUInt32, features)),
|
|
27
|
+
});
|
|
28
|
+
export const Cluster = ({ id, name, revision, features = {}, attributes = {}, commands = {}, events = {}, }) => ({
|
|
29
|
+
id,
|
|
30
|
+
name,
|
|
31
|
+
revision,
|
|
32
|
+
features,
|
|
33
|
+
commands,
|
|
34
|
+
attributes: Merge(attributes, GlobalAttributes(features)),
|
|
35
|
+
events,
|
|
36
|
+
});
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2022 Project CHIP Authors
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { Attribute, Cluster } from "./Cluster.js";
|
|
7
|
+
import { TlvDeviceTypeId } from "../common/DeviceTypeId.js";
|
|
8
|
+
import { TlvClusterId } from "../common/ClusterId.js";
|
|
9
|
+
import { TlvEndpointNumber } from "../common/EndpointNumber.js";
|
|
10
|
+
import { TlvField, TlvObject } from "../tlv/TlvObject.js";
|
|
11
|
+
import { TlvUInt16 } from "../tlv/TlvNumber.js";
|
|
12
|
+
import { TlvArray } from "../tlv/TlvArray.js";
|
|
13
|
+
/**
|
|
14
|
+
* Provides information about endpoint conformance to a release of a device type definition.
|
|
15
|
+
*
|
|
16
|
+
* @see {@link MatterCoreSpecificationV1_0} § 9.5.5.1
|
|
17
|
+
*/
|
|
18
|
+
const TlvDeviceType = TlvObject({
|
|
19
|
+
/** Indicates the device type definition */
|
|
20
|
+
type: TlvField(0, TlvDeviceTypeId),
|
|
21
|
+
/** Indicates the implemented revision of the device type definition */
|
|
22
|
+
revision: TlvField(1, TlvUInt16.bound({ min: 1 })),
|
|
23
|
+
});
|
|
24
|
+
/**
|
|
25
|
+
* This cluster describes an endpoint instance on the node, independently of other endpoints, but also
|
|
26
|
+
* allows composition of endpoints to conform to complex device type patterns.
|
|
27
|
+
* This Cluster is also meant to replace the support from the Zigbee Device Object (ZDO) for describing a node,
|
|
28
|
+
* its endpoints and clusters.
|
|
29
|
+
*
|
|
30
|
+
* @see {@link MatterCoreSpecificationV1_0} § 9.5
|
|
31
|
+
*/
|
|
32
|
+
export const DescriptorCluster = Cluster({
|
|
33
|
+
id: 0x1d,
|
|
34
|
+
name: "Descriptor",
|
|
35
|
+
revision: 1,
|
|
36
|
+
/** @see {@link MatterCoreSpecificationV1_0} § 9.5.4 */
|
|
37
|
+
attributes: {
|
|
38
|
+
/** List of device types and corresponding revisions declaring endpoint conformance. */
|
|
39
|
+
deviceTypeList: Attribute(0, TlvArray(TlvDeviceType, { minLength: 1 })),
|
|
40
|
+
/** List containing each cluster ID for the server clusters present on the endpoint instance. */
|
|
41
|
+
serverList: Attribute(1, TlvArray(TlvClusterId), { default: [] }),
|
|
42
|
+
/** List containing each cluster ID for the client clusters present on the endpoint instance. */
|
|
43
|
+
clientList: Attribute(3, TlvArray(TlvClusterId), { default: [] }),
|
|
44
|
+
/**
|
|
45
|
+
* This indicates composition of the device type instance. Device type instance composition SHALL
|
|
46
|
+
* include the endpoints in this list.
|
|
47
|
+
*/
|
|
48
|
+
partsList: Attribute(4, TlvArray(TlvEndpointNumber), { default: [] }),
|
|
49
|
+
},
|
|
50
|
+
});
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2022 Project CHIP Authors
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { Attribute, Cluster, Command, TlvNoArguments, WritableAttribute } from "./Cluster.js";
|
|
7
|
+
import { TlvField, TlvObject } from "../tlv/TlvObject.js";
|
|
8
|
+
import { TlvEnum, TlvUInt16, TlvUInt64 } from "../tlv/TlvNumber.js";
|
|
9
|
+
import { TlvString } from "../tlv/TlvString.js";
|
|
10
|
+
import { TlvBoolean } from "../tlv/TlvBoolean.js";
|
|
11
|
+
/**
|
|
12
|
+
* This structure provides some constant values that MAY be of use to all commissioners.
|
|
13
|
+
*
|
|
14
|
+
* @see {@link MatterCoreSpecificationV1_0} § 11.9.5.2
|
|
15
|
+
*/
|
|
16
|
+
const TlvBasicCommissioningInfo = TlvObject({
|
|
17
|
+
/** Contains a conservative initial duration (in seconds) to set in the FailSafe for the commissioning flow to complete successfully. */
|
|
18
|
+
failSafeExpiryLengthSeconds: TlvField(0, TlvUInt16),
|
|
19
|
+
/** Contain a conservative value in seconds denoting the maximum total duration for which a fail-safe timer can be re-armed. */
|
|
20
|
+
maxCumulativeFailsafeSeconds: TlvField(1, TlvUInt16),
|
|
21
|
+
});
|
|
22
|
+
/**
|
|
23
|
+
* Used by the following commands as response payload:
|
|
24
|
+
* ArmFailSafeResponse, @see {@link MatterCoreSpecificationV1_0} § 11.9.7.3
|
|
25
|
+
* CommissioningCompleteResponse, @see {@link MatterCoreSpecificationV1_0} § 11.9.7.7
|
|
26
|
+
* CommissioningCompleteResponse, @see {@link MatterCoreSpecificationV1_0} § 11.9.7.7
|
|
27
|
+
*/
|
|
28
|
+
const TlvCommissioningSuccessFailureResponse = TlvObject({
|
|
29
|
+
/** Contain the result of the operation. */
|
|
30
|
+
errorCode: TlvField(0, TlvEnum()),
|
|
31
|
+
/** Should help developers in troubleshooting errors. The value MAY go into logs or crash reports, not User UIs. */
|
|
32
|
+
debugText: TlvField(1, TlvString.bound({ maxLength: 128 })),
|
|
33
|
+
});
|
|
34
|
+
/** @see {@link MatterCoreSpecificationV1_0} § 11.9.7.3. */
|
|
35
|
+
const TlvArmFailSafeRequest = TlvObject({
|
|
36
|
+
/** Contains timeframe for fail-safe timer actions. */
|
|
37
|
+
expiryLengthSeconds: TlvField(0, TlvUInt16),
|
|
38
|
+
/** Value to atomically set the Breadcrumb attribute on success of this command. */
|
|
39
|
+
breadcrumbStep: TlvField(1, TlvUInt64),
|
|
40
|
+
});
|
|
41
|
+
/** @see {@link MatterCoreSpecificationV1_0} § 11.9.7.4 */
|
|
42
|
+
const TlvSetRegulatoryConfigRequest = TlvObject({
|
|
43
|
+
/** Contains the new regulatory location to be set. */
|
|
44
|
+
newRegulatoryConfig: TlvField(0, TlvEnum()),
|
|
45
|
+
/** Contains a ISO 3166-1 alpha-2 country code*/
|
|
46
|
+
countryCode: TlvField(1, TlvString.bound({ length: 2 })),
|
|
47
|
+
/** Value to atomically set the Breadcrumb attribute on success of this command. */
|
|
48
|
+
breadcrumbStep: TlvField(2, TlvUInt64),
|
|
49
|
+
});
|
|
50
|
+
/**
|
|
51
|
+
* This cluster is used to manage global aspects of the Commissioning flow.
|
|
52
|
+
*
|
|
53
|
+
* @see {@link MatterCoreSpecificationV1_0} § 11.9
|
|
54
|
+
*/
|
|
55
|
+
export const GeneralCommissioningCluster = Cluster({
|
|
56
|
+
id: 0x30,
|
|
57
|
+
name: "General Commissioning",
|
|
58
|
+
revision: 1,
|
|
59
|
+
/** @see {@link MatterCoreSpecificationV1_0} § 11.9.6 */
|
|
60
|
+
attributes: {
|
|
61
|
+
/** Allows for the storage of a client-provided small payload which Administrators and Commissioners MAY write
|
|
62
|
+
* and then subsequently read, to keep track of their own progress.
|
|
63
|
+
*/
|
|
64
|
+
breadcrumb: WritableAttribute(0, TlvUInt64, { default: BigInt(0), writeAcl: 2 /* AccessLevel.Administer */ }),
|
|
65
|
+
/** Describe critical parameters needed at the beginning of commissioning flow. */
|
|
66
|
+
commissioningInfo: Attribute(1, TlvBasicCommissioningInfo),
|
|
67
|
+
/** Indicates the regulatory configuration for the product. */
|
|
68
|
+
regulatoryConfig: Attribute(2, TlvEnum()),
|
|
69
|
+
/** Indicates if this Node needs to be told an exact RegulatoryLocation. */
|
|
70
|
+
locationCapability: Attribute(3, TlvEnum(), { default: 2 /* RegulatoryLocationType.IndoorOutdoor */ }),
|
|
71
|
+
/** Indicates whether this device supports "concurrent connection flow" commissioning mode */
|
|
72
|
+
supportsConcurrentConnections: Attribute(4, TlvBoolean, { default: true }),
|
|
73
|
+
},
|
|
74
|
+
/** @see {@link MatterCoreSpecificationV1_0} § 11.9.7 */
|
|
75
|
+
commands: {
|
|
76
|
+
/** Arms the persistent fail-safe timer with an expiry time of now + ExpiryLengthSeconds using device clock. */
|
|
77
|
+
armFailSafe: Command(0, TlvArmFailSafeRequest, 1, TlvCommissioningSuccessFailureResponse),
|
|
78
|
+
/** Sets or Updates the regulatory configuration to be used during commissioning. */
|
|
79
|
+
setRegulatoryConfig: Command(2, TlvSetRegulatoryConfigRequest, 3, TlvCommissioningSuccessFailureResponse),
|
|
80
|
+
/**
|
|
81
|
+
* Informs that all steps of Commissioning/Reconfiguration needed during the fail-safe period have been
|
|
82
|
+
* completed.
|
|
83
|
+
*/
|
|
84
|
+
commissioningComplete: Command(4, TlvNoArguments, 5, TlvCommissioningSuccessFailureResponse),
|
|
85
|
+
},
|
|
86
|
+
});
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2022 Project CHIP Authors
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { Attribute, Cluster, Command, TlvNoArguments, TlvNoResponse } from "./Cluster.js";
|
|
7
|
+
import { TlvGroupId } from "../common/GroupId.js";
|
|
8
|
+
import { TlvField, TlvObject } from "../tlv/TlvObject.js";
|
|
9
|
+
import { TlvString } from "../tlv/TlvString.js";
|
|
10
|
+
import { TlvBitmap, TlvEnum, TlvUInt8 } from "../tlv/TlvNumber.js";
|
|
11
|
+
import { TlvArray } from "../tlv/TlvArray.js";
|
|
12
|
+
import { TlvNullable } from "../tlv/TlvNullable.js";
|
|
13
|
+
import { BitFlag } from "../schema/BitmapSchema.js";
|
|
14
|
+
/** @see {@link MatterApplicationClusterSpecificationV1_0} § 1.3.7.1 */
|
|
15
|
+
const TlvAddGroupRequest = TlvObject({
|
|
16
|
+
groupId: TlvField(0, TlvGroupId),
|
|
17
|
+
groupName: TlvField(1, TlvString.bound({ maxLength: 16 })),
|
|
18
|
+
});
|
|
19
|
+
/** @see {@link MatterApplicationClusterSpecificationV1_0} § 1.3.7.7 */
|
|
20
|
+
const TlvAddGroupResponse = TlvObject({
|
|
21
|
+
status: TlvField(0, TlvEnum()),
|
|
22
|
+
groupId: TlvField(1, TlvGroupId), /* type: min: 1 */
|
|
23
|
+
});
|
|
24
|
+
/** @see {@link MatterApplicationClusterSpecificationV1_0} § 1.3.7.2 */
|
|
25
|
+
const TlvViewGroupRequest = TlvObject({
|
|
26
|
+
groupId: TlvField(0, TlvGroupId), /* type: min: 1 */
|
|
27
|
+
});
|
|
28
|
+
/** @see {@link MatterApplicationClusterSpecificationV1_0} § 1.3.7.8 */
|
|
29
|
+
const TlvViewGroupResponse = TlvObject({
|
|
30
|
+
status: TlvField(0, TlvEnum()),
|
|
31
|
+
groupId: TlvField(1, TlvGroupId),
|
|
32
|
+
groupName: TlvField(2, TlvString.bound({ maxLength: 16 })),
|
|
33
|
+
});
|
|
34
|
+
/** @see {@link MatterApplicationClusterSpecificationV1_0} § 1.3.7.3 */
|
|
35
|
+
const TlvGetGroupMembershipRequest = TlvObject({
|
|
36
|
+
groupList: TlvField(0, TlvArray(TlvGroupId)), /* groupId min: 1 */
|
|
37
|
+
});
|
|
38
|
+
/** @see {@link MatterApplicationClusterSpecificationV1_0} § 1.3.7.9 */
|
|
39
|
+
const TlvGetGroupMembershipResponse = TlvObject({
|
|
40
|
+
/** contain the remaining capacity of the Group Table of the node. */
|
|
41
|
+
capacity: TlvField(0, TlvNullable(TlvUInt8)),
|
|
42
|
+
groupList: TlvField(1, TlvArray(TlvGroupId)), /* groupId min: 1 */
|
|
43
|
+
});
|
|
44
|
+
/** @see {@link MatterApplicationClusterSpecificationV1_0} § 1.3.7.4 */
|
|
45
|
+
const TlvRemoveGroupRequest = TlvObject({
|
|
46
|
+
groupId: TlvField(0, TlvGroupId), /* min: 1 */
|
|
47
|
+
});
|
|
48
|
+
/** @see {@link MatterApplicationClusterSpecificationV1_0} § 1.3.7.10 */
|
|
49
|
+
const TlvRemoveGroupResponse = TlvObject({
|
|
50
|
+
status: TlvField(0, TlvEnum()),
|
|
51
|
+
groupId: TlvField(1, TlvGroupId), /* min: 1 */
|
|
52
|
+
});
|
|
53
|
+
/**
|
|
54
|
+
* Formally not defined in specs state:
|
|
55
|
+
* If the RemoveAllGroups command was received as unicast and a response is not
|
|
56
|
+
* suppressed, the server SHALL generate a response with the Status field set to SUCCESS.
|
|
57
|
+
*
|
|
58
|
+
* @see {@link MatterApplicationClusterSpecificationV1_0} § 1.3.7.5.1
|
|
59
|
+
*/
|
|
60
|
+
const TlvRemoveAllGroupResponse = TlvObject({
|
|
61
|
+
status: TlvField(0, TlvEnum()),
|
|
62
|
+
});
|
|
63
|
+
/** @see {@link MatterApplicationClusterSpecificationV1_0} § 1.3.7.6 */
|
|
64
|
+
const TlvAddGroupIfIdentifyingRequest = TlvObject({
|
|
65
|
+
groupId: TlvField(0, TlvGroupId),
|
|
66
|
+
groupName: TlvField(1, TlvString.bound({ maxLength: 16 })),
|
|
67
|
+
});
|
|
68
|
+
/** @see {@link MatterApplicationClusterSpecificationV1_0} § 1.3.6.1 */
|
|
69
|
+
const TlvNameSupportBitmap = TlvBitmap(TlvUInt8, {
|
|
70
|
+
groupNames: BitFlag(7),
|
|
71
|
+
});
|
|
72
|
+
/**
|
|
73
|
+
* The Groups cluster manages, per endpoint, the content of the node-wide Group
|
|
74
|
+
* Table that is part of the underlying interaction layer.
|
|
75
|
+
*
|
|
76
|
+
* @see {@link MatterApplicationClusterSpecificationV1_0} § 1.3
|
|
77
|
+
*/
|
|
78
|
+
export const GroupsCluster = Cluster({
|
|
79
|
+
id: 0x04,
|
|
80
|
+
name: "Groups",
|
|
81
|
+
revision: 4,
|
|
82
|
+
features: {
|
|
83
|
+
/** The ability to store a name for a group. */
|
|
84
|
+
groupNames: BitFlag(0),
|
|
85
|
+
},
|
|
86
|
+
/** @see {@link MatterApplicationClusterSpecificationV1_0} § 1.3.6 */
|
|
87
|
+
attributes: {
|
|
88
|
+
/**
|
|
89
|
+
* This attribute provides legacy, read-only access to whether the Group
|
|
90
|
+
* Names feature is supported. The most significant bit, bit 7, SHALL be
|
|
91
|
+
* equal to bit 0 of the FeatureMap attribute. All other bits SHALL be 0.
|
|
92
|
+
*
|
|
93
|
+
* TODO because we (will) support group names we need to set bit 7 to 1, rest is 0
|
|
94
|
+
*/
|
|
95
|
+
nameSupport: Attribute(0, TlvNameSupportBitmap, { default: { groupNames: true } }),
|
|
96
|
+
},
|
|
97
|
+
/** @see {@link MatterApplicationClusterSpecificationV1_0} § 1.3.7 */
|
|
98
|
+
commands: {
|
|
99
|
+
/**
|
|
100
|
+
* The AddGroup command allows a client to add group membership in a particular group for the server endpoint.
|
|
101
|
+
*/
|
|
102
|
+
addGroup: Command(0, TlvAddGroupRequest, 0, TlvAddGroupResponse),
|
|
103
|
+
/**
|
|
104
|
+
* The ViewGroup command allows a client to request that the server responds with a ViewGroupResponse command
|
|
105
|
+
* containing the name string for a particular group.
|
|
106
|
+
*
|
|
107
|
+
*/
|
|
108
|
+
viewGroup: Command(1, TlvViewGroupRequest, 0, TlvViewGroupResponse),
|
|
109
|
+
/**
|
|
110
|
+
* The GetGroupMembership command allows a client to inquire about the group membership of the server endpoint,
|
|
111
|
+
* in a number of ways.
|
|
112
|
+
*/
|
|
113
|
+
getGroupMembership: Command(2, TlvGetGroupMembershipRequest, 2, TlvGetGroupMembershipResponse),
|
|
114
|
+
/**
|
|
115
|
+
* The RemoveGroup command allows a client to request that the server removes the membership for the server
|
|
116
|
+
* endpoint, if any, in a particular group.
|
|
117
|
+
*/
|
|
118
|
+
removeGroup: Command(3, TlvRemoveGroupRequest, 3, TlvRemoveGroupResponse),
|
|
119
|
+
/**
|
|
120
|
+
* The RemoveAllGroups command allows a client to direct the server to remove all group associations for the
|
|
121
|
+
* server endpoint.
|
|
122
|
+
*
|
|
123
|
+
* TODO: According to specs the response might be suppressed:
|
|
124
|
+
* If the RemoveAllGroups command was received as unicast and a response is not suppressed, the server
|
|
125
|
+
* SHALL generate a response with the Status field set to SUCCESS.
|
|
126
|
+
* Else potentially no response?
|
|
127
|
+
*
|
|
128
|
+
*/
|
|
129
|
+
removeAllGroups: Command(4, TlvNoArguments, 4, TlvRemoveAllGroupResponse),
|
|
130
|
+
/**
|
|
131
|
+
* The AddGroupIfIdentifying command allows a client to add group membership in a particular group for the
|
|
132
|
+
* server endpoint, on condition that the endpoint is identifying itself.
|
|
133
|
+
*
|
|
134
|
+
*/
|
|
135
|
+
addGroupIfIdentifying: Command(5, TlvAddGroupIfIdentifyingRequest, 5, TlvNoResponse),
|
|
136
|
+
}
|
|
137
|
+
});
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2022 Project CHIP Authors
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { Attribute, WritableAttribute, Cluster, Command, OptionalCommand, TlvNoResponse, TlvNoArguments } from "./Cluster.js";
|
|
7
|
+
import { TlvField, TlvObject } from "../tlv/TlvObject.js";
|
|
8
|
+
import { TlvEnum, TlvUInt16 } from "../tlv/TlvNumber.js";
|
|
9
|
+
import { BitFlag } from "../schema/BitmapSchema.js";
|
|
10
|
+
/** @see {@link MatterApplicationClusterSpecificationV1_0} § 1.2.6.1 */
|
|
11
|
+
const TlvIdentifyRequest = TlvObject({
|
|
12
|
+
identifyTime: TlvField(0, TlvUInt16),
|
|
13
|
+
});
|
|
14
|
+
/** @see {@link MatterApplicationClusterSpecificationV1_0} § 1.2.6.3 */
|
|
15
|
+
const TlvTriggerEffectRequest = TlvObject({
|
|
16
|
+
effectIdentifier: TlvField(0, TlvEnum()),
|
|
17
|
+
effectVariant: TlvField(1, TlvEnum()),
|
|
18
|
+
});
|
|
19
|
+
/** @see {@link MatterApplicationClusterSpecificationV1_0} § 1.2.6.4 */
|
|
20
|
+
const TlvIdentifyQueryResponse = TlvObject({
|
|
21
|
+
timeout: TlvField(0, TlvUInt16),
|
|
22
|
+
});
|
|
23
|
+
/**
|
|
24
|
+
* Attributes and commands for putting a device into Identification mode (e.g. flashing a light).
|
|
25
|
+
*
|
|
26
|
+
* @see {@link MatterApplicationClusterSpecificationV1_0} § 1.2
|
|
27
|
+
*/
|
|
28
|
+
export const IdentifyCluster = Cluster({
|
|
29
|
+
id: 0x03,
|
|
30
|
+
name: "Identify",
|
|
31
|
+
revision: 4,
|
|
32
|
+
features: {
|
|
33
|
+
/** Replies to multicast / groupcast queries if the identification state is active. */
|
|
34
|
+
query: BitFlag(0),
|
|
35
|
+
},
|
|
36
|
+
/** @see {@link MatterApplicationClusterSpecificationV1_0} § 1.2.5 */
|
|
37
|
+
attributes: {
|
|
38
|
+
/** Specifies the remaining length of time, in seconds, that the endpoint will continue to identify itself. */
|
|
39
|
+
identifyTime: WritableAttribute(0, TlvUInt16, { default: 0 }),
|
|
40
|
+
/** Specifies how the identification state is presented to the user. */
|
|
41
|
+
identifyType: Attribute(1, TlvEnum(), { default: 0 }),
|
|
42
|
+
},
|
|
43
|
+
/** @see {@link MatterApplicationClusterSpecificationV1_0} § 1.2.6 */
|
|
44
|
+
commands: {
|
|
45
|
+
/** Starts or stops the receiving device identifying itself. */
|
|
46
|
+
identify: Command(0, TlvIdentifyRequest, 0, TlvNoResponse),
|
|
47
|
+
/** Request the target or targets to respond if they are currently identifying themselves. */
|
|
48
|
+
identifyQuery: Command(1, TlvNoArguments, 0, TlvIdentifyQueryResponse),
|
|
49
|
+
/** Allows the support of feedback to the user, such as a certain light effect when identifying. */
|
|
50
|
+
triggerEffect: OptionalCommand(0x40, TlvTriggerEffectRequest, 0, TlvNoResponse),
|
|
51
|
+
},
|
|
52
|
+
});
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2022 Project CHIP Authors
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { Attribute, Cluster, WritableAttribute } from "./Cluster.js";
|
|
7
|
+
import { TlvField, TlvObject } from "../tlv/TlvObject.js";
|
|
8
|
+
import { TlvString } from "../tlv/TlvString.js";
|
|
9
|
+
import { TlvArray } from "../tlv/TlvArray.js";
|
|
10
|
+
/**
|
|
11
|
+
* This is a string tuple with strings that are user defined.
|
|
12
|
+
*
|
|
13
|
+
* @see {@link MatterCoreSpecificationV1_0} § 9.7.5.1
|
|
14
|
+
*/
|
|
15
|
+
const TlvLabel = TlvObject({
|
|
16
|
+
/** Contains a string as label without a further defined semantic n this base cluster. */
|
|
17
|
+
label: TlvField(0, TlvString.bound({ length: 16 })),
|
|
18
|
+
/** Contains a string as value without a further defined semantic n this base cluster. */
|
|
19
|
+
value: TlvField(1, TlvString.bound({ length: 16 })), /* default: "" */
|
|
20
|
+
});
|
|
21
|
+
/**
|
|
22
|
+
* This cluster provides a feature to tag an endpoint with zero or more labels.
|
|
23
|
+
* Derived from LabelCluster ({@link MatterCoreSpecificationV1_0} § 9.7)
|
|
24
|
+
*
|
|
25
|
+
* @see {@link MatterCoreSpecificationV1_0} § 9.9
|
|
26
|
+
*/
|
|
27
|
+
export const UserLabelCluster = Cluster({
|
|
28
|
+
id: 0x41,
|
|
29
|
+
name: "User Label",
|
|
30
|
+
revision: 1,
|
|
31
|
+
/** @see {@link MatterCoreSpecificationV1_0} § 9.9.4 */
|
|
32
|
+
attributes: {
|
|
33
|
+
/** An implementation SHALL support at least 4 list entries per node for all User Label cluster instances on the node. */
|
|
34
|
+
labelList: WritableAttribute(0, TlvArray(TlvLabel), { default: [], writeAcl: 1 /* AccessLevel.Manage */ }), /* non-volatile */
|
|
35
|
+
},
|
|
36
|
+
});
|
|
37
|
+
/**
|
|
38
|
+
* This cluster provides a feature for the device to tag an endpoint with zero or more read only labels.
|
|
39
|
+
* Derived from LabelCluster ({@link MatterCoreSpecificationV1_0} § 9.7)
|
|
40
|
+
*
|
|
41
|
+
* @see {@link MatterCoreSpecificationV1_0} § 9.8
|
|
42
|
+
*/
|
|
43
|
+
export const FixedLabelCluster = Cluster({
|
|
44
|
+
id: 0x40,
|
|
45
|
+
name: "Fixed Label",
|
|
46
|
+
revision: 1,
|
|
47
|
+
/** @see {@link MatterCoreSpecificationV1_0} § 9.8.4 */
|
|
48
|
+
attributes: {
|
|
49
|
+
/** List of fixed labels. */
|
|
50
|
+
labelList: Attribute(0, TlvArray(TlvLabel), { default: [] }), /* non-volatile */
|
|
51
|
+
},
|
|
52
|
+
});
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2022 Project CHIP Authors
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { Attribute, Cluster, Command, TlvNoArguments, TlvNoResponse } from "./Cluster.js";
|
|
7
|
+
import { BitFlag } from "../schema/BitmapSchema.js";
|
|
8
|
+
import { TlvBoolean } from "../tlv/TlvBoolean.js";
|
|
9
|
+
/** @see {@link MatterApplicationClusterSpecificationV1_0} § 1.5.7.4.2 */
|
|
10
|
+
// const TlvEffectVariant = TlvUInt8 as TlvSchema<DyingLightEffectVariant | DelayedAllOffEffectVariant>;
|
|
11
|
+
/** @see {@link MatterApplicationClusterSpecificationV1_0} § 1.5.7.4 */
|
|
12
|
+
/* const TlvOffWithEffectRequest = TlvObject({
|
|
13
|
+
effectIdentifier: TlvField(0, TlvEnum<OnOffEffectIdentifier>()),
|
|
14
|
+
effectVariant: TlvField(1, TlvEffectVariant),
|
|
15
|
+
}) as TlvSchema<
|
|
16
|
+
{ effectIdentifier: OnOffEffectIdentifier.DelayedAllOff, effectVariant: DelayedAllOffEffectVariant } |
|
|
17
|
+
{ effectIdentifier: OnOffEffectIdentifier.DyingLight, effectVariant: DyingLightEffectVariant }
|
|
18
|
+
>; */
|
|
19
|
+
/** @see {@link MatterApplicationClusterSpecificationV1_0} § 1.5.7.4.2 */
|
|
20
|
+
/* const TlvOnOffControlBitmap = TlvBitmap(TlvUInt8, {
|
|
21
|
+
acceptOnlyWhenOn: BitFlag(1),
|
|
22
|
+
}) */
|
|
23
|
+
/** @see {@link MatterApplicationClusterSpecificationV1_0} § 1.5.7.6. */
|
|
24
|
+
/* const TlvOnWithTimedOffRequest = TlvObject({
|
|
25
|
+
onOffControl: TlvField(0, TlvOnOffControlBitmap),
|
|
26
|
+
onTime: TlvField(1, TlvNullable(TlvUInt8.bound({ min: 0, max: 254 }))),
|
|
27
|
+
offWaitTime: TlvField(2, TlvNullable(TlvUInt8.bound({ min: 0, max: 254 }))),
|
|
28
|
+
}); */
|
|
29
|
+
/**
|
|
30
|
+
* Attributes and commands for switching devices between 'On' and 'Off' states.
|
|
31
|
+
*
|
|
32
|
+
* @see {@link MatterApplicationClusterSpecificationV1_0} § 1.5
|
|
33
|
+
*/
|
|
34
|
+
export const OnOffCluster = Cluster({
|
|
35
|
+
id: 0x06,
|
|
36
|
+
name: "On/Off",
|
|
37
|
+
revision: 4,
|
|
38
|
+
features: {
|
|
39
|
+
/** Level Control for Lighting - Behavior that supports lighting applications */
|
|
40
|
+
lightingLevelControl: BitFlag(0),
|
|
41
|
+
},
|
|
42
|
+
/** @see {@link MatterApplicationClusterSpecificationV1_0} § 1.5.6 */
|
|
43
|
+
attributes: {
|
|
44
|
+
/** Indicates whether the device type implemented on the endpoint is turned off (false) or turned on (true). */
|
|
45
|
+
onOff: Attribute(0, TlvBoolean, { default: false }), /* reportable: true, scene:true */
|
|
46
|
+
// The following attributes are only needed for "Level Control for Lighting" support
|
|
47
|
+
/** Used to remember if a state is already storednin an old scene to not store one again when sending another Off command */
|
|
48
|
+
//globalSceneControl: OptionalAttribute(0x4000, TlvBoolean, { default: true }),
|
|
49
|
+
/**
|
|
50
|
+
* Specifies the length of time (in 1/10ths second) that the ‘On’ state SHALL be maintained before
|
|
51
|
+
* automatically transitioning to the ‘Off’ state when using the OnWithTimedOff command.
|
|
52
|
+
*/
|
|
53
|
+
//onTime: OptionalWritableAttribute(0x4001, TlvNullable(TlvUInt16)), { default: 0 }), /* unit: 1/10s */
|
|
54
|
+
/**
|
|
55
|
+
* Specifies the length of time (in 1/10ths second) that the ‘Off’ state SHALL be guarded to prevent
|
|
56
|
+
* another OnWithTimedOff command turning the server back to its ‘On’ state
|
|
57
|
+
*/
|
|
58
|
+
//offWaitTime: OptionalWritableAttribute(0x4002, TlvNullable(TlvUInt16), { default: 0 }), /* unit: 1/10s */
|
|
59
|
+
/** Defines the desired startup behavior of a device when it is supplied with power. */
|
|
60
|
+
//startUpOnOff: OptionalWritableAttribute(0x4003, TlvNullable(TlvEnum<StartUpOnOff>()), { writeAcl: AccessLevel.Manage }),
|
|
61
|
+
},
|
|
62
|
+
/** @see {@link MatterApplicationClusterSpecificationV1_0} § 1.5.7 */
|
|
63
|
+
commands: {
|
|
64
|
+
/**
|
|
65
|
+
* On receipt of this command, a device SHALL enter its ‘Off’ state. This state is device dependent, but it is
|
|
66
|
+
* recommended that it is used for power off or similar functions. On receipt of the Off command, the OnTime
|
|
67
|
+
* attribute SHALL be set to 0.
|
|
68
|
+
*/
|
|
69
|
+
off: Command(0, TlvNoArguments, 0, TlvNoResponse),
|
|
70
|
+
/**
|
|
71
|
+
* On receipt of this command, a device SHALL enter its ‘On’ state. This state is device dependent, but it is
|
|
72
|
+
* recommended that it is used for power on or similar functions. On receipt of the On command, if the value
|
|
73
|
+
* of the OnTime attribute is equal to 0, the device SHALL set the OffWaitTime attribute to 0.
|
|
74
|
+
*/
|
|
75
|
+
on: Command(1, TlvNoArguments, 1, TlvNoResponse),
|
|
76
|
+
/**
|
|
77
|
+
* On receipt of this command, if a device is in its ‘Off’ state it SHALL enter its ‘On’ state. Otherwise,
|
|
78
|
+
* if it is in its ‘On’ state it SHALL enter its ‘Off’ state. On receipt of the Toggle command, if the value
|
|
79
|
+
* of the OnOff attribute is equal to FALSE and if the value of the OnTime attribute is equal to 0, the device
|
|
80
|
+
* SHALL set the OffWaitTime attribute to 0. If the value of the OnOff attribute is equal to TRUE, the OnTime
|
|
81
|
+
* attribute SHALL be set to 0.
|
|
82
|
+
*/
|
|
83
|
+
toggle: Command(2, TlvNoArguments, 2, TlvNoResponse),
|
|
84
|
+
// The following attributes are only needed for "Level Control for Lighting" support
|
|
85
|
+
// So we declare them option for now!
|
|
86
|
+
// TODO: Split these out into a separate Cluster Spec that adds "Level Control for Lighting" support
|
|
87
|
+
/**
|
|
88
|
+
* The OffWithEffect command allows devices to be turned off using enhanced ways of fading.
|
|
89
|
+
*/
|
|
90
|
+
//offWithEffect: OptionalCommand(0x40, OffWithEffectRequestT, 0x40, NoResponseT),
|
|
91
|
+
/**
|
|
92
|
+
* The OnWithRecallGlobalScene command allows the recall of the settings when the device was turned off.
|
|
93
|
+
*/
|
|
94
|
+
//onWithRecallGlobalScene: OptionalCommand(0x41, NoArgumentsT, 0x41, NoResponseT),
|
|
95
|
+
/**
|
|
96
|
+
* The OnWithTimedOff command allows devices to be turned on for a specific duration with a guarded off
|
|
97
|
+
* duration so that SHOULD the device be subsequently switched off, further OnWithTimedOff commands, received
|
|
98
|
+
* during this time, are prevented from turning the devices back on.
|
|
99
|
+
*/
|
|
100
|
+
//onWithTimedOff: OptionalCommand(0x42, OnWithTimedOffRequestT, 0x42, NoResponseT),
|
|
101
|
+
},
|
|
102
|
+
});
|