@matter/examples 0.11.0-alpha.0-20241005-e3e4e4a7a
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/LICENSE +201 -0
- package/README.md +274 -0
- package/dist/esm/examples/BridgedDevicesNode.js +138 -0
- package/dist/esm/examples/BridgedDevicesNode.js.map +6 -0
- package/dist/esm/examples/ComposedDeviceNode.js +118 -0
- package/dist/esm/examples/ComposedDeviceNode.js.map +6 -0
- package/dist/esm/examples/ControllerNode.js +191 -0
- package/dist/esm/examples/ControllerNode.js.map +6 -0
- package/dist/esm/examples/DeviceNode.js +130 -0
- package/dist/esm/examples/DeviceNode.js.map +6 -0
- package/dist/esm/examples/DeviceNodeFull.js +259 -0
- package/dist/esm/examples/DeviceNodeFull.js.map +6 -0
- package/dist/esm/examples/IlluminatedRollerShade.js +56 -0
- package/dist/esm/examples/IlluminatedRollerShade.js.map +6 -0
- package/dist/esm/examples/LightDevice.js +34 -0
- package/dist/esm/examples/LightDevice.js.map +6 -0
- package/dist/esm/examples/MultiDeviceNode.js +143 -0
- package/dist/esm/examples/MultiDeviceNode.js.map +6 -0
- package/dist/esm/examples/SensorDeviceNode.js +170 -0
- package/dist/esm/examples/SensorDeviceNode.js.map +6 -0
- package/dist/esm/examples/cluster/DummyThreadNetworkCommissioningServer.js +121 -0
- package/dist/esm/examples/cluster/DummyThreadNetworkCommissioningServer.js.map +6 -0
- package/dist/esm/examples/cluster/DummyWifiNetworkCommissioningServer.js +121 -0
- package/dist/esm/examples/cluster/DummyWifiNetworkCommissioningServer.js.map +6 -0
- package/dist/esm/examples/cluster/MyFancyOwnFunctionality.js +113 -0
- package/dist/esm/examples/cluster/MyFancyOwnFunctionality.js.map +6 -0
- package/dist/esm/package.json +3 -0
- package/dist/esm/tutorial/example01.js +4 -0
- package/dist/esm/tutorial/example01.js.map +6 -0
- package/dist/esm/tutorial/example02.js +6 -0
- package/dist/esm/tutorial/example02.js.map +6 -0
- package/dist/esm/tutorial/example03.js +14 -0
- package/dist/esm/tutorial/example03.js.map +6 -0
- package/dist/esm/tutorial/example04.js +9 -0
- package/dist/esm/tutorial/example04.js.map +6 -0
- package/dist/esm/tutorial/example05.js +13 -0
- package/dist/esm/tutorial/example05.js.map +6 -0
- package/package.json +70 -0
- package/src/examples/BridgedDevicesNode.ts +247 -0
- package/src/examples/ComposedDeviceNode.ts +185 -0
- package/src/examples/ControllerNode.ts +305 -0
- package/src/examples/DeviceNode.ts +198 -0
- package/src/examples/DeviceNodeFull.ts +440 -0
- package/src/examples/IlluminatedRollerShade.ts +89 -0
- package/src/examples/LightDevice.ts +58 -0
- package/src/examples/MultiDeviceNode.ts +205 -0
- package/src/examples/SensorDeviceNode.ts +236 -0
- package/src/examples/cluster/DummyThreadNetworkCommissioningServer.ts +162 -0
- package/src/examples/cluster/DummyWifiNetworkCommissioningServer.ts +160 -0
- package/src/examples/cluster/MyFancyOwnFunctionality.ts +188 -0
- package/src/tsconfig.json +13 -0
- package/src/tsconfig.tsbuildinfo +1 -0
- package/src/tutorial/example01.ts +5 -0
- package/src/tutorial/example02.ts +8 -0
- package/src/tutorial/example03.ts +18 -0
- package/src/tutorial/example04.ts +12 -0
- package/src/tutorial/example05.ts +18 -0
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* @license
|
|
4
|
+
* Copyright 2022-2024 Matter.js Authors
|
|
5
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
6
|
+
*/
|
|
7
|
+
import { Endpoint, EndpointServer, Environment, ServerNode, StorageService, Time } from "@matter/main";
|
|
8
|
+
import { HumiditySensorDevice } from "@matter/main/devices/humidity-sensor";
|
|
9
|
+
import { TemperatureSensorDevice } from "@matter/main/devices/temperature-sensor";
|
|
10
|
+
import { logEndpoint } from "@matter/main/protocol";
|
|
11
|
+
import { DeviceTypeId, VendorId } from "@matter/main/types";
|
|
12
|
+
import { execSync } from "child_process";
|
|
13
|
+
async function main() {
|
|
14
|
+
const {
|
|
15
|
+
isTemperature,
|
|
16
|
+
interval,
|
|
17
|
+
deviceName,
|
|
18
|
+
vendorName,
|
|
19
|
+
passcode,
|
|
20
|
+
discriminator,
|
|
21
|
+
vendorId,
|
|
22
|
+
productName,
|
|
23
|
+
productId,
|
|
24
|
+
port,
|
|
25
|
+
uniqueId
|
|
26
|
+
} = await getConfiguration();
|
|
27
|
+
const server = await ServerNode.create({
|
|
28
|
+
// Required: Give the Node a unique ID which is used to store the state of this node
|
|
29
|
+
id: uniqueId,
|
|
30
|
+
// Provide Network relevant configuration like the port
|
|
31
|
+
// Optional when operating only one device on a host, Default port is 5540
|
|
32
|
+
network: {
|
|
33
|
+
port
|
|
34
|
+
},
|
|
35
|
+
// Provide Commissioning relevant settings
|
|
36
|
+
// Optional for development/testing purposes
|
|
37
|
+
commissioning: {
|
|
38
|
+
passcode,
|
|
39
|
+
discriminator
|
|
40
|
+
},
|
|
41
|
+
// Provide Node announcement settings
|
|
42
|
+
// Optional: If Ommitted some development defaults are used
|
|
43
|
+
productDescription: {
|
|
44
|
+
name: deviceName,
|
|
45
|
+
deviceType: DeviceTypeId(
|
|
46
|
+
isTemperature ? TemperatureSensorDevice.deviceType : HumiditySensorDevice.deviceType
|
|
47
|
+
)
|
|
48
|
+
},
|
|
49
|
+
// Provide defaults for the BasicInformation cluster on the Root endpoint
|
|
50
|
+
// Optional: If Omitted some development defaults are used
|
|
51
|
+
basicInformation: {
|
|
52
|
+
vendorName,
|
|
53
|
+
vendorId: VendorId(vendorId),
|
|
54
|
+
nodeLabel: productName,
|
|
55
|
+
productName,
|
|
56
|
+
productLabel: productName,
|
|
57
|
+
productId,
|
|
58
|
+
serialNumber: `matterjs-${uniqueId}`,
|
|
59
|
+
uniqueId
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
let endpoint;
|
|
63
|
+
if (isTemperature) {
|
|
64
|
+
endpoint = new Endpoint(TemperatureSensorDevice, {
|
|
65
|
+
id: "tempsensor",
|
|
66
|
+
temperatureMeasurement: {
|
|
67
|
+
// Use this to initialize the measuredValue with the most uptodate value.
|
|
68
|
+
// If you do not know the value and also cannot request it, best use "null" (if allowed by the cluster).
|
|
69
|
+
measuredValue: getIntValueFromCommandOrRandom("value")
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
} else {
|
|
73
|
+
endpoint = new Endpoint(HumiditySensorDevice, {
|
|
74
|
+
id: "humsensor",
|
|
75
|
+
relativeHumidityMeasurement: {
|
|
76
|
+
// Use this to initialize the measuredValue with the most uptodate value.
|
|
77
|
+
// If you do not know the value and also cannot request it, best use "null" (if allowed by the cluster).
|
|
78
|
+
measuredValue: getIntValueFromCommandOrRandom("value", false)
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
await server.add(endpoint);
|
|
83
|
+
logEndpoint(EndpointServer.forEndpoint(server));
|
|
84
|
+
const updateInterval = setInterval(() => {
|
|
85
|
+
let setter;
|
|
86
|
+
if (isTemperature) {
|
|
87
|
+
setter = endpoint.set({
|
|
88
|
+
temperatureMeasurement: {
|
|
89
|
+
measuredValue: getIntValueFromCommandOrRandom("value")
|
|
90
|
+
}
|
|
91
|
+
});
|
|
92
|
+
} else {
|
|
93
|
+
setter = endpoint.set({
|
|
94
|
+
relativeHumidityMeasurement: {
|
|
95
|
+
measuredValue: getIntValueFromCommandOrRandom("value", false)
|
|
96
|
+
}
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
setter.catch((error) => console.error("Error updating measured value:", error));
|
|
100
|
+
}, interval * 1e3);
|
|
101
|
+
server.lifecycle.offline.on(() => clearTimeout(updateInterval));
|
|
102
|
+
await server.run();
|
|
103
|
+
}
|
|
104
|
+
main().catch((error) => console.error(error));
|
|
105
|
+
function getIntValueFromCommandOrRandom(scriptParamName, allowNegativeValues = true) {
|
|
106
|
+
const script = Environment.default.vars.string(scriptParamName);
|
|
107
|
+
if (script === void 0) {
|
|
108
|
+
if (!allowNegativeValues) return Math.round(Math.random() * 100);
|
|
109
|
+
return (Math.round(Math.random() * 100) - 50) * 100;
|
|
110
|
+
}
|
|
111
|
+
let result = execSync(script).toString().trim();
|
|
112
|
+
if (result.startsWith("'") && result.endsWith("'") || result.startsWith('"') && result.endsWith('"'))
|
|
113
|
+
result = result.slice(1, -1);
|
|
114
|
+
console.log(`Command result: ${result}`);
|
|
115
|
+
let value = Math.round(parseFloat(result));
|
|
116
|
+
if (!allowNegativeValues && value < 0) value = 0;
|
|
117
|
+
return value;
|
|
118
|
+
}
|
|
119
|
+
async function getConfiguration() {
|
|
120
|
+
const environment = Environment.default;
|
|
121
|
+
const storageService = environment.get(StorageService);
|
|
122
|
+
console.log(`Storage location: ${storageService.location} (Directory)`);
|
|
123
|
+
console.log(
|
|
124
|
+
'Use the parameter "--storage-path=NAME-OR-PATH" to specify a different storage location in this directory, use --storage-clear to start with an empty storage.'
|
|
125
|
+
);
|
|
126
|
+
const deviceStorage = (await storageService.open("device")).createContext("data");
|
|
127
|
+
const isTemperature = await deviceStorage.get("isTemperature", environment.vars.get("type") !== "humidity");
|
|
128
|
+
if (await deviceStorage.has("isTemperature")) {
|
|
129
|
+
console.log(
|
|
130
|
+
`Device type ${isTemperature ? "temperature" : "humidity"} found in storage. --type parameter is ignored.`
|
|
131
|
+
);
|
|
132
|
+
}
|
|
133
|
+
let interval = environment.vars.number("interval") ?? await deviceStorage.get("interval", 60);
|
|
134
|
+
if (interval < 1) {
|
|
135
|
+
console.log(`Invalid Interval ${interval}, set to 60s`);
|
|
136
|
+
interval = 60;
|
|
137
|
+
}
|
|
138
|
+
const deviceName = "Matter test device";
|
|
139
|
+
const vendorName = "matter-node.js";
|
|
140
|
+
const passcode = environment.vars.number("passcode") ?? await deviceStorage.get("passcode", 20202021);
|
|
141
|
+
const discriminator = environment.vars.number("discriminator") ?? await deviceStorage.get("discriminator", 3840);
|
|
142
|
+
const vendorId = environment.vars.number("vendorid") ?? await deviceStorage.get("vendorid", 65521);
|
|
143
|
+
const productName = `node-matter OnOff ${isTemperature ? "Temperature" : "Humidity"}`;
|
|
144
|
+
const productId = environment.vars.number("productid") ?? await deviceStorage.get("productid", 32768);
|
|
145
|
+
const port = environment.vars.number("port") ?? 5540;
|
|
146
|
+
const uniqueId = environment.vars.string("uniqueid") ?? await deviceStorage.get("uniqueid", Time.nowMs().toString());
|
|
147
|
+
await deviceStorage.set({
|
|
148
|
+
passcode,
|
|
149
|
+
discriminator,
|
|
150
|
+
vendorid: vendorId,
|
|
151
|
+
productid: productId,
|
|
152
|
+
interval,
|
|
153
|
+
isTemperature,
|
|
154
|
+
uniqueid: uniqueId
|
|
155
|
+
});
|
|
156
|
+
return {
|
|
157
|
+
isTemperature,
|
|
158
|
+
interval,
|
|
159
|
+
deviceName,
|
|
160
|
+
vendorName,
|
|
161
|
+
passcode,
|
|
162
|
+
discriminator,
|
|
163
|
+
vendorId,
|
|
164
|
+
productName,
|
|
165
|
+
productId,
|
|
166
|
+
port,
|
|
167
|
+
uniqueId
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
//# sourceMappingURL=SensorDeviceNode.js.map
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/examples/SensorDeviceNode.ts"],
|
|
4
|
+
"mappings": "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",
|
|
5
|
+
"names": []
|
|
6
|
+
}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2022-2024 Matter.js Authors
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { Bytes, Logger } from "@matter/main";
|
|
7
|
+
import { GeneralCommissioningBehavior } from "@matter/main/behaviors/general-commissioning";
|
|
8
|
+
import { NetworkCommissioningBehavior } from "@matter/main/behaviors/network-commissioning";
|
|
9
|
+
import { DeviceAdvertiser, DeviceCommissioner } from "@matter/main/protocol";
|
|
10
|
+
import { NetworkCommissioning } from "@matter/types/clusters";
|
|
11
|
+
const firstNetworkId = new Uint8Array(32);
|
|
12
|
+
class DummyThreadNetworkCommissioningServer extends NetworkCommissioningBehavior.with(
|
|
13
|
+
NetworkCommissioning.Feature.ThreadNetworkInterface
|
|
14
|
+
) {
|
|
15
|
+
scanNetworks({
|
|
16
|
+
breadcrumb
|
|
17
|
+
}) {
|
|
18
|
+
console.log(`---> scanNetworks called on NetworkCommissioning cluster: ${breadcrumb}`);
|
|
19
|
+
if (breadcrumb !== void 0) {
|
|
20
|
+
const generalCommissioningCluster = this.agent.get(GeneralCommissioningBehavior);
|
|
21
|
+
generalCommissioningCluster.state.breadcrumb = breadcrumb;
|
|
22
|
+
}
|
|
23
|
+
const networkingStatus = NetworkCommissioning.NetworkCommissioningStatus.Success;
|
|
24
|
+
this.state.lastNetworkingStatus = networkingStatus;
|
|
25
|
+
const threadScanResults = [
|
|
26
|
+
{
|
|
27
|
+
panId: this.env.vars.number("ble.thread.panId"),
|
|
28
|
+
extendedPanId: BigInt(this.env.vars.string("ble.thread.extendedPanId")),
|
|
29
|
+
networkName: this.env.vars.string("ble.thread.networkName"),
|
|
30
|
+
channel: this.env.vars.number("ble.thread.channel"),
|
|
31
|
+
version: 130,
|
|
32
|
+
extendedAddress: Bytes.fromString(
|
|
33
|
+
(this.env.vars.string("ble.thread.address") ?? "000000000000").toLowerCase()
|
|
34
|
+
),
|
|
35
|
+
rssi: -50,
|
|
36
|
+
lqi: 50
|
|
37
|
+
}
|
|
38
|
+
];
|
|
39
|
+
console.log(Logger.toJSON(threadScanResults));
|
|
40
|
+
return {
|
|
41
|
+
networkingStatus,
|
|
42
|
+
threadScanResults
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
addOrUpdateThreadNetwork({
|
|
46
|
+
operationalDataset,
|
|
47
|
+
breadcrumb
|
|
48
|
+
}) {
|
|
49
|
+
console.log(
|
|
50
|
+
`---> addOrUpdateThreadNetwork called on NetworkCommissioning cluster: ${Bytes.toHex(operationalDataset)} ${breadcrumb}`
|
|
51
|
+
);
|
|
52
|
+
this.env.get(DeviceCommissioner).assertFailsafeArmed("Failsafe timer needs to be armed to add or update networks.");
|
|
53
|
+
if (breadcrumb !== void 0) {
|
|
54
|
+
const generalCommissioningCluster = this.agent.get(GeneralCommissioningBehavior);
|
|
55
|
+
generalCommissioningCluster.state.breadcrumb = breadcrumb;
|
|
56
|
+
}
|
|
57
|
+
const networkingStatus = NetworkCommissioning.NetworkCommissioningStatus.Success;
|
|
58
|
+
this.state.lastNetworkingStatus = networkingStatus;
|
|
59
|
+
this.state.lastNetworkId = firstNetworkId;
|
|
60
|
+
return {
|
|
61
|
+
networkingStatus,
|
|
62
|
+
networkIndex: 0
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
removeNetwork({ networkId, breadcrumb }) {
|
|
66
|
+
console.log(
|
|
67
|
+
`---> removeNetwork called on NetworkCommissioning cluster: ${Bytes.toHex(networkId)} ${breadcrumb}`
|
|
68
|
+
);
|
|
69
|
+
this.env.get(DeviceCommissioner).assertFailsafeArmed("Failsafe timer needs to be armed to add or update networks.");
|
|
70
|
+
if (breadcrumb !== void 0) {
|
|
71
|
+
const generalCommissioningCluster = this.agent.get(GeneralCommissioningBehavior);
|
|
72
|
+
generalCommissioningCluster.state.breadcrumb = breadcrumb;
|
|
73
|
+
}
|
|
74
|
+
const networkingStatus = NetworkCommissioning.NetworkCommissioningStatus.Success;
|
|
75
|
+
this.state.lastNetworkingStatus = networkingStatus;
|
|
76
|
+
this.state.lastNetworkId = firstNetworkId;
|
|
77
|
+
return {
|
|
78
|
+
networkingStatus,
|
|
79
|
+
networkIndex: 0
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
async connectNetwork({ networkId, breadcrumb }) {
|
|
83
|
+
console.log(
|
|
84
|
+
`---> connectNetwork called on NetworkCommissioning cluster: ${Bytes.toHex(networkId)} ${breadcrumb}`
|
|
85
|
+
);
|
|
86
|
+
this.env.get(DeviceCommissioner).assertFailsafeArmed("Failsafe timer needs to be armed to add or update networks.");
|
|
87
|
+
if (breadcrumb !== void 0) {
|
|
88
|
+
const generalCommissioningCluster = this.agent.get(GeneralCommissioningBehavior);
|
|
89
|
+
generalCommissioningCluster.state.breadcrumb = breadcrumb;
|
|
90
|
+
}
|
|
91
|
+
this.state.networks[0].connected = true;
|
|
92
|
+
const networkingStatus = NetworkCommissioning.NetworkCommissioningStatus.Success;
|
|
93
|
+
this.state.lastNetworkingStatus = networkingStatus;
|
|
94
|
+
this.state.lastNetworkId = firstNetworkId;
|
|
95
|
+
this.state.lastConnectErrorValue = null;
|
|
96
|
+
await this.env.get(DeviceAdvertiser).startAdvertising();
|
|
97
|
+
return {
|
|
98
|
+
networkingStatus,
|
|
99
|
+
errorValue: null
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
reorderNetwork({ networkId, networkIndex, breadcrumb }) {
|
|
103
|
+
console.log(
|
|
104
|
+
`---> reorderNetwork called on NetworkCommissioning cluster: ${Bytes.toHex(networkId)} ${networkIndex} ${breadcrumb}`
|
|
105
|
+
);
|
|
106
|
+
if (breadcrumb !== void 0) {
|
|
107
|
+
const generalCommissioningCluster = this.agent.get(GeneralCommissioningBehavior);
|
|
108
|
+
generalCommissioningCluster.state.breadcrumb = breadcrumb;
|
|
109
|
+
}
|
|
110
|
+
const networkingStatus = NetworkCommissioning.NetworkCommissioningStatus.Success;
|
|
111
|
+
this.state.lastNetworkingStatus = networkingStatus;
|
|
112
|
+
return {
|
|
113
|
+
networkingStatus,
|
|
114
|
+
networkIndex: 0
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
export {
|
|
119
|
+
DummyThreadNetworkCommissioningServer
|
|
120
|
+
};
|
|
121
|
+
//# sourceMappingURL=DummyThreadNetworkCommissioningServer.js.map
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/examples/cluster/DummyThreadNetworkCommissioningServer.ts"],
|
|
4
|
+
"mappings": "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",
|
|
5
|
+
"names": []
|
|
6
|
+
}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2022-2024 Matter.js Authors
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { Bytes } from "@matter/main";
|
|
7
|
+
import { GeneralCommissioningBehavior } from "@matter/main/behaviors/general-commissioning";
|
|
8
|
+
import { NetworkCommissioningBehavior } from "@matter/main/behaviors/network-commissioning";
|
|
9
|
+
import { DeviceAdvertiser, DeviceCommissioner } from "@matter/main/protocol";
|
|
10
|
+
import { NetworkCommissioning } from "@matter/types/clusters/network-commissioning";
|
|
11
|
+
const firstNetworkId = new Uint8Array(32);
|
|
12
|
+
class DummyWifiNetworkCommissioningServer extends NetworkCommissioningBehavior.with(
|
|
13
|
+
NetworkCommissioning.Feature.WiFiNetworkInterface
|
|
14
|
+
) {
|
|
15
|
+
scanNetworks({ ssid, breadcrumb }) {
|
|
16
|
+
console.log(
|
|
17
|
+
`---> scanNetworks called on NetworkCommissioning cluster: ${ssid ? Bytes.toHex(ssid) : void 0} ${breadcrumb}`
|
|
18
|
+
);
|
|
19
|
+
if (breadcrumb !== void 0) {
|
|
20
|
+
const generalCommissioningCluster = this.agent.get(GeneralCommissioningBehavior);
|
|
21
|
+
generalCommissioningCluster.state.breadcrumb = breadcrumb;
|
|
22
|
+
}
|
|
23
|
+
const networkingStatus = NetworkCommissioning.NetworkCommissioningStatus.Success;
|
|
24
|
+
this.state.lastNetworkingStatus = networkingStatus;
|
|
25
|
+
return {
|
|
26
|
+
networkingStatus,
|
|
27
|
+
wiFiScanResults: [
|
|
28
|
+
{
|
|
29
|
+
security: {
|
|
30
|
+
unencrypted: false,
|
|
31
|
+
wep: false,
|
|
32
|
+
wpaPersonal: false,
|
|
33
|
+
wpa2Personal: true,
|
|
34
|
+
wpa3Personal: true
|
|
35
|
+
},
|
|
36
|
+
ssid: ssid || Bytes.fromString(this.env.vars.get("ble.wifi.scanSsid") ?? "TestSSID"),
|
|
37
|
+
// Set a valid existing local Wi-Fi SSID here
|
|
38
|
+
bssid: Bytes.fromString(this.env.vars.get("ble.wifi.scanBssid") ?? "00:00:00:00:00:00"),
|
|
39
|
+
channel: 1
|
|
40
|
+
}
|
|
41
|
+
]
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
addOrUpdateWiFiNetwork({
|
|
45
|
+
ssid,
|
|
46
|
+
credentials,
|
|
47
|
+
breadcrumb
|
|
48
|
+
}) {
|
|
49
|
+
console.log(
|
|
50
|
+
`---> addOrUpdateWiFiNetwork called on NetworkCommissioning cluster: ${Bytes.toHex(ssid)} ${Bytes.toHex(credentials)} ${breadcrumb}`
|
|
51
|
+
);
|
|
52
|
+
this.env.get(DeviceCommissioner).assertFailsafeArmed("Failsafe timer needs to be armed to add or update networks.");
|
|
53
|
+
if (breadcrumb !== void 0) {
|
|
54
|
+
const generalCommissioningCluster = this.agent.get(GeneralCommissioningBehavior);
|
|
55
|
+
generalCommissioningCluster.state.breadcrumb = breadcrumb;
|
|
56
|
+
}
|
|
57
|
+
const networkingStatus = NetworkCommissioning.NetworkCommissioningStatus.Success;
|
|
58
|
+
this.state.lastNetworkingStatus = networkingStatus;
|
|
59
|
+
this.state.lastNetworkId = firstNetworkId;
|
|
60
|
+
return {
|
|
61
|
+
networkingStatus,
|
|
62
|
+
networkIndex: 0
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
removeNetwork({ networkId, breadcrumb }) {
|
|
66
|
+
console.log(
|
|
67
|
+
`---> removeNetwork called on NetworkCommissioning cluster: ${Bytes.toHex(networkId)} ${breadcrumb}`
|
|
68
|
+
);
|
|
69
|
+
this.env.get(DeviceCommissioner).assertFailsafeArmed("Failsafe timer needs to be armed to add or update networks.");
|
|
70
|
+
if (breadcrumb !== void 0) {
|
|
71
|
+
const generalCommissioningCluster = this.agent.get(GeneralCommissioningBehavior);
|
|
72
|
+
generalCommissioningCluster.state.breadcrumb = breadcrumb;
|
|
73
|
+
}
|
|
74
|
+
const networkingStatus = NetworkCommissioning.NetworkCommissioningStatus.Success;
|
|
75
|
+
this.state.lastNetworkingStatus = networkingStatus;
|
|
76
|
+
this.state.lastNetworkId = firstNetworkId;
|
|
77
|
+
return {
|
|
78
|
+
networkingStatus,
|
|
79
|
+
networkIndex: 0
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
async connectNetwork({ networkId, breadcrumb }) {
|
|
83
|
+
console.log(
|
|
84
|
+
`---> connectNetwork called on NetworkCommissioning cluster: ${Bytes.toHex(networkId)} ${breadcrumb}`
|
|
85
|
+
);
|
|
86
|
+
this.env.get(DeviceCommissioner).assertFailsafeArmed("Failsafe timer needs to be armed to add or update networks.");
|
|
87
|
+
if (breadcrumb !== void 0) {
|
|
88
|
+
const generalCommissioningCluster = this.agent.get(GeneralCommissioningBehavior);
|
|
89
|
+
generalCommissioningCluster.state.breadcrumb = breadcrumb;
|
|
90
|
+
}
|
|
91
|
+
this.state.networks[0].connected = true;
|
|
92
|
+
const networkingStatus = NetworkCommissioning.NetworkCommissioningStatus.Success;
|
|
93
|
+
this.state.lastNetworkingStatus = networkingStatus;
|
|
94
|
+
this.state.lastNetworkId = firstNetworkId;
|
|
95
|
+
this.state.lastConnectErrorValue = null;
|
|
96
|
+
await this.env.get(DeviceAdvertiser).startAdvertising();
|
|
97
|
+
return {
|
|
98
|
+
networkingStatus,
|
|
99
|
+
errorValue: null
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
reorderNetwork({ networkId, networkIndex, breadcrumb }) {
|
|
103
|
+
console.log(
|
|
104
|
+
`---> reorderNetwork called on NetworkCommissioning cluster: ${Bytes.toHex(networkId)} ${networkIndex} ${breadcrumb}`
|
|
105
|
+
);
|
|
106
|
+
if (breadcrumb !== void 0) {
|
|
107
|
+
const generalCommissioningCluster = this.agent.get(GeneralCommissioningBehavior);
|
|
108
|
+
generalCommissioningCluster.state.breadcrumb = breadcrumb;
|
|
109
|
+
}
|
|
110
|
+
const networkingStatus = NetworkCommissioning.NetworkCommissioningStatus.Success;
|
|
111
|
+
this.state.lastNetworkingStatus = networkingStatus;
|
|
112
|
+
return {
|
|
113
|
+
networkingStatus,
|
|
114
|
+
networkIndex: 0
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
export {
|
|
119
|
+
DummyWifiNetworkCommissioningServer
|
|
120
|
+
};
|
|
121
|
+
//# sourceMappingURL=DummyWifiNetworkCommissioningServer.js.map
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/examples/cluster/DummyWifiNetworkCommissioningServer.ts"],
|
|
4
|
+
"mappings": "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",
|
|
5
|
+
"names": []
|
|
6
|
+
}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2022-2024 Matter.js Authors
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { ClusterBehavior, ClusterId, VendorId } from "@matter/main";
|
|
7
|
+
import {
|
|
8
|
+
AttributeElement,
|
|
9
|
+
ClusterElement,
|
|
10
|
+
ClusterModel,
|
|
11
|
+
CommandElement,
|
|
12
|
+
EventElement,
|
|
13
|
+
FieldElement
|
|
14
|
+
} from "@matter/main/model";
|
|
15
|
+
import {
|
|
16
|
+
Attribute,
|
|
17
|
+
ClusterRegistry,
|
|
18
|
+
Command,
|
|
19
|
+
Event,
|
|
20
|
+
EventPriority,
|
|
21
|
+
MutableCluster,
|
|
22
|
+
TlvField,
|
|
23
|
+
TlvInt16,
|
|
24
|
+
TlvNullable,
|
|
25
|
+
TlvObject,
|
|
26
|
+
TlvString
|
|
27
|
+
} from "@matter/main/types";
|
|
28
|
+
const myFancyClusterId = ClusterId.buildVendorSpecific(VendorId(65524), 64512);
|
|
29
|
+
var MyFancyOwnFunctionality;
|
|
30
|
+
((MyFancyOwnFunctionality2) => {
|
|
31
|
+
MyFancyOwnFunctionality2.TlvMyFancyCommandRequest = TlvObject({ value: TlvField(0, TlvString) });
|
|
32
|
+
MyFancyOwnFunctionality2.TlvMyFancyCommandResponse = TlvObject({ response: TlvField(0, TlvString) });
|
|
33
|
+
MyFancyOwnFunctionality2.TlvMyFancyEvent = TlvObject({ eventValue: TlvField(0, TlvString) });
|
|
34
|
+
MyFancyOwnFunctionality2.ClusterInstance = MutableCluster({
|
|
35
|
+
id: myFancyClusterId,
|
|
36
|
+
name: "MyFancyOwnFunctionality",
|
|
37
|
+
revision: 1,
|
|
38
|
+
attributes: {
|
|
39
|
+
/** My fancy attribute */
|
|
40
|
+
myFancyValue: Attribute(0, TlvNullable(TlvInt16))
|
|
41
|
+
},
|
|
42
|
+
commands: {
|
|
43
|
+
/** My fancy command */
|
|
44
|
+
myFancyCommand: Command(1, MyFancyOwnFunctionality2.TlvMyFancyCommandRequest, 2, MyFancyOwnFunctionality2.TlvMyFancyCommandResponse)
|
|
45
|
+
},
|
|
46
|
+
events: {
|
|
47
|
+
/** My fancy event */
|
|
48
|
+
myFancyEvent: Event(5, EventPriority.Info, MyFancyOwnFunctionality2.TlvMyFancyEvent)
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
MyFancyOwnFunctionality2.Cluster = MyFancyOwnFunctionality2.ClusterInstance;
|
|
52
|
+
MyFancyOwnFunctionality2.Complete = MyFancyOwnFunctionality2.Cluster;
|
|
53
|
+
})(MyFancyOwnFunctionality || (MyFancyOwnFunctionality = {}));
|
|
54
|
+
const MyFancyOwnFunctionalityCluster = MyFancyOwnFunctionality.Cluster;
|
|
55
|
+
ClusterRegistry.register(MyFancyOwnFunctionality.Complete);
|
|
56
|
+
const MyFancySchema = ClusterElement({
|
|
57
|
+
name: "MyFancyOwnFunctionality",
|
|
58
|
+
id: myFancyClusterId,
|
|
59
|
+
classification: "application",
|
|
60
|
+
description: "My Fancy Functionality",
|
|
61
|
+
children: [
|
|
62
|
+
AttributeElement({ name: "ClusterRevision", id: 65533, type: "ClusterRevision", default: 1 }),
|
|
63
|
+
AttributeElement({
|
|
64
|
+
name: "MyFancyValue",
|
|
65
|
+
id: 0,
|
|
66
|
+
type: "int16",
|
|
67
|
+
access: "R V",
|
|
68
|
+
conformance: "M",
|
|
69
|
+
quality: "X"
|
|
70
|
+
}),
|
|
71
|
+
CommandElement({
|
|
72
|
+
name: "MyFancyCommand",
|
|
73
|
+
id: 1,
|
|
74
|
+
access: "O",
|
|
75
|
+
conformance: "M",
|
|
76
|
+
direction: "request",
|
|
77
|
+
response: "MyFancyCommandResponse",
|
|
78
|
+
children: [FieldElement({ name: "value", id: 0, type: "string", conformance: "M" })]
|
|
79
|
+
}),
|
|
80
|
+
CommandElement({
|
|
81
|
+
name: "MyFancyCommandResponse",
|
|
82
|
+
id: 2,
|
|
83
|
+
conformance: "M",
|
|
84
|
+
direction: "request",
|
|
85
|
+
children: [FieldElement({ name: "response", id: 0, type: "string", conformance: "M" })]
|
|
86
|
+
}),
|
|
87
|
+
EventElement({
|
|
88
|
+
name: "MyFancyEvent",
|
|
89
|
+
id: 5,
|
|
90
|
+
access: "V",
|
|
91
|
+
conformance: "O",
|
|
92
|
+
priority: "info",
|
|
93
|
+
children: [
|
|
94
|
+
FieldElement({
|
|
95
|
+
name: "EventValue",
|
|
96
|
+
id: 0,
|
|
97
|
+
type: "string",
|
|
98
|
+
conformance: "M"
|
|
99
|
+
})
|
|
100
|
+
]
|
|
101
|
+
})
|
|
102
|
+
]
|
|
103
|
+
});
|
|
104
|
+
const MyFancyOwnFunctionalityBehavior = ClusterBehavior.withInterface().for(
|
|
105
|
+
MyFancyOwnFunctionality.Cluster,
|
|
106
|
+
new ClusterModel(MyFancySchema)
|
|
107
|
+
);
|
|
108
|
+
export {
|
|
109
|
+
MyFancyOwnFunctionality,
|
|
110
|
+
MyFancyOwnFunctionalityBehavior,
|
|
111
|
+
MyFancyOwnFunctionalityCluster
|
|
112
|
+
};
|
|
113
|
+
//# sourceMappingURL=MyFancyOwnFunctionality.js.map
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/examples/cluster/MyFancyOwnFunctionality.ts"],
|
|
4
|
+
"mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,SAAS,iBAAiB,WAAmC,gBAAgB;AAC7E;AAAA,EACI;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACG;AACP;AAAA,EACI;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAEG;AAGP,MAAM,mBAAmB,UAAU,oBAAoB,SAAS,KAAM,GAAG,KAAM;AAUxE,IAAU;AAAA,CAAV,CAAUA,6BAAV;AAII,EAAMA,yBAAA,2BAA2B,UAAU,EAAE,OAAO,SAAS,GAAG,SAAS,EAAE,CAAC;AAK5E,EAAMA,yBAAA,4BAA4B,UAAU,EAAE,UAAU,SAAS,GAAG,SAAS,EAAE,CAAC;AAKhF,EAAMA,yBAAA,kBAAkB,UAAU,EAAE,YAAY,SAAS,GAAG,SAAS,EAAE,CAAC;AAKxE,EAAMA,yBAAA,kBAAkB,eAAe;AAAA,IAC1C,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,UAAU;AAAA,IAEV,YAAY;AAAA;AAAA,MAER,cAAc,UAAU,GAAK,YAAY,QAAQ,CAAC;AAAA,IACtD;AAAA,IAEA,UAAU;AAAA;AAAA,MAEN,gBAAgB,QAAQ,GAAKA,yBAAA,0BAA0B,GAAKA,yBAAA,yBAAyB;AAAA,IACzF;AAAA,IAEA,QAAQ;AAAA;AAAA,MAEJ,cAAc,MAAM,GAAK,cAAc,MAAMA,yBAAA,eAAe;AAAA,IAChE;AAAA,EACJ,CAAC;AASM,EAAMA,yBAAA,UAAmBA,yBAAA;AAEzB,EAAMA,yBAAA,WAAWA,yBAAA;AAAA,GAjDX;AAqDV,MAAM,iCAAiC,wBAAwB;AACtE,gBAAgB,SAAS,wBAAwB,QAAQ;AAMzD,MAAM,gBAAgB,eAAe;AAAA,EACjC,MAAM;AAAA,EACN,IAAI;AAAA,EACJ,gBAAgB;AAAA,EAChB,aAAa;AAAA,EAEb,UAAU;AAAA,IACN,iBAAiB,EAAE,MAAM,mBAAmB,IAAI,OAAQ,MAAM,mBAAmB,SAAS,EAAE,CAAC;AAAA,IAE7F,iBAAiB;AAAA,MACb,MAAM;AAAA,MACN,IAAI;AAAA,MACJ,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,aAAa;AAAA,MACb,SAAS;AAAA,IACb,CAAC;AAAA,IAED,eAAe;AAAA,MACX,MAAM;AAAA,MACN,IAAI;AAAA,MACJ,QAAQ;AAAA,MACR,aAAa;AAAA,MACb,WAAW;AAAA,MACX,UAAU;AAAA,MAEV,UAAU,CAAC,aAAa,EAAE,MAAM,SAAS,IAAI,GAAK,MAAM,UAAU,aAAa,IAAI,CAAC,CAAC;AAAA,IACzF,CAAC;AAAA,IACD,eAAe;AAAA,MACX,MAAM;AAAA,MACN,IAAI;AAAA,MACJ,aAAa;AAAA,MACb,WAAW;AAAA,MAEX,UAAU,CAAC,aAAa,EAAE,MAAM,YAAY,IAAI,GAAK,MAAM,UAAU,aAAa,IAAI,CAAC,CAAC;AAAA,IAC5F,CAAC;AAAA,IAED,aAAa;AAAA,MACT,MAAM;AAAA,MACN,IAAI;AAAA,MACJ,QAAQ;AAAA,MACR,aAAa;AAAA,MACb,UAAU;AAAA,MACV,UAAU;AAAA,QACN,aAAa;AAAA,UACT,MAAM;AAAA,UACN,IAAI;AAAA,UACJ,MAAM;AAAA,UACN,aAAa;AAAA,QACjB,CAAC;AAAA,MACL;AAAA,IACJ,CAAC;AAAA,EACL;AACJ,CAAC;AAuBM,MAAM,kCAAkC,gBAAgB,cAAgD,EAAE;AAAA,EAC7G,wBAAwB;AAAA,EACxB,IAAI,aAAa,aAAa;AAClC;",
|
|
5
|
+
"names": ["MyFancyOwnFunctionality"]
|
|
6
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { ServerNode } from "@matter/main";
|
|
2
|
+
import { OnOffLightDevice, OnOffLightRequirements } from "@matter/main/devices/on-off-light";
|
|
3
|
+
class MyOnOffServer extends OnOffLightRequirements.OnOffServer {
|
|
4
|
+
on() {
|
|
5
|
+
console.log("Turning on");
|
|
6
|
+
}
|
|
7
|
+
off() {
|
|
8
|
+
console.log("Turning off");
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
const node = await ServerNode.create();
|
|
12
|
+
await node.add(OnOffLightDevice.with(MyOnOffServer));
|
|
13
|
+
await node.run();
|
|
14
|
+
//# sourceMappingURL=example03.js.map
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/tutorial/example03.ts"],
|
|
4
|
+
"mappings": "AAAA,SAAS,kBAAkB;AAC3B,SAAS,kBAAkB,8BAA8B;AAEzD,MAAM,sBAAsB,uBAAuB,YAAY;AAAA,EAClD,KAAK;AACV,YAAQ,IAAI,YAAY;AAAA,EAC5B;AAAA,EAES,MAAM;AACX,YAAQ,IAAI,aAAa;AAAA,EAC7B;AACJ;AAEA,MAAM,OAAO,MAAM,WAAW,OAAO;AAErC,MAAM,KAAK,IAAI,iBAAiB,KAAK,aAAa,CAAC;AAEnD,MAAM,KAAK,IAAI;",
|
|
5
|
+
"names": []
|
|
6
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { ServerNode } from "@matter/main";
|
|
2
|
+
import { OnOffLightDevice } from "@matter/main/devices/on-off-light";
|
|
3
|
+
const node = await ServerNode.create();
|
|
4
|
+
const light = await node.add(OnOffLightDevice);
|
|
5
|
+
light.events.onOff.onOff$Changed.on((newValue) => {
|
|
6
|
+
console.log(`Light is ${newValue ? "on" : "off"}`);
|
|
7
|
+
});
|
|
8
|
+
await node.run();
|
|
9
|
+
//# sourceMappingURL=example04.js.map
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/tutorial/example04.ts"],
|
|
4
|
+
"mappings": "AAAA,SAAS,kBAAkB;AAC3B,SAAS,wBAAwB;AAEjC,MAAM,OAAO,MAAM,WAAW,OAAO;AAErC,MAAM,QAAQ,MAAM,KAAK,IAAI,gBAAgB;AAE7C,MAAM,OAAO,MAAM,cAAc,GAAG,cAAY;AAC5C,UAAQ,IAAI,YAAY,WAAW,OAAO,KAAK,EAAE;AACrD,CAAC;AAED,MAAM,KAAK,IAAI;",
|
|
5
|
+
"names": []
|
|
6
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { ServerNode } from "@matter/main";
|
|
2
|
+
import { OnOffLightDevice } from "@matter/main/devices/on-off-light";
|
|
3
|
+
const node = await ServerNode.create();
|
|
4
|
+
const light = await node.add(OnOffLightDevice);
|
|
5
|
+
await node.start();
|
|
6
|
+
await light.act(async (agent) => {
|
|
7
|
+
await agent.onOff.toggle();
|
|
8
|
+
console.log("On/off state after first toggle", agent.onOff.state);
|
|
9
|
+
await agent.onOff.toggle();
|
|
10
|
+
console.log("On/off state after second toggle", agent.onOff.state);
|
|
11
|
+
});
|
|
12
|
+
await node.close();
|
|
13
|
+
//# sourceMappingURL=example05.js.map
|