@matter/examples 0.12.0-alpha.0-20241231-9ac20db97 → 0.12.0-alpha.0-20250103-ba0c01a01
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/dist/esm/device-onoff-advanced/DeviceNodeFull.js +40 -38
- package/dist/esm/device-onoff-advanced/DeviceNodeFull.js.map +1 -1
- package/package.json +5 -5
- package/src/device-onoff/README.md +0 -6
- package/src/device-onoff-advanced/DeviceNodeFull.ts +50 -50
- package/src/device-onoff-advanced/README.md +25 -1
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
* SPDX-License-Identifier: Apache-2.0
|
|
6
6
|
*/
|
|
7
7
|
import {
|
|
8
|
+
Bytes,
|
|
8
9
|
DeviceTypeId,
|
|
9
10
|
Endpoint,
|
|
10
11
|
EndpointServer,
|
|
@@ -18,7 +19,7 @@ import {
|
|
|
18
19
|
logLevelFromString,
|
|
19
20
|
singleton
|
|
20
21
|
} from "@matter/main";
|
|
21
|
-
import {
|
|
22
|
+
import { OnOffServer } from "@matter/main/behaviors";
|
|
22
23
|
import { NetworkCommissioning } from "@matter/main/clusters";
|
|
23
24
|
import { OnOffLightDevice, OnOffPlugInUnitDevice } from "@matter/main/devices";
|
|
24
25
|
import { RootRequirements } from "@matter/main/endpoints";
|
|
@@ -102,6 +103,7 @@ class OnOffShellExecServer extends OnOffServer {
|
|
|
102
103
|
class TestGeneralDiagnosticsServer extends RootRequirements.GeneralDiagnosticsServer {
|
|
103
104
|
initialize() {
|
|
104
105
|
this.state.testEventTriggersEnabled = true;
|
|
106
|
+
this.state.deviceTestEnableKey = Bytes.fromHex("0102030405060708090a0b0c0d0e0f10");
|
|
105
107
|
super.initialize();
|
|
106
108
|
}
|
|
107
109
|
testEventTrigger({ enableKey, eventTrigger }) {
|
|
@@ -120,25 +122,8 @@ class MyFancyOwnFunctionalityServer extends MyFancyOwnFunctionalityBehavior {
|
|
|
120
122
|
this.state.myFancyValue = -1;
|
|
121
123
|
}
|
|
122
124
|
}
|
|
123
|
-
const OnOffDevice = isSocket ?
|
|
124
|
-
|
|
125
|
-
let wifiOrThreadAdded = false;
|
|
126
|
-
let threadAdded = false;
|
|
127
|
-
if (Ble.enabled) {
|
|
128
|
-
if (environment.vars.has("ble.wifi.fake")) {
|
|
129
|
-
RootEndpoint = RootEndpoint.with(DummyWifiNetworkCommissioningServer);
|
|
130
|
-
wifiOrThreadAdded = true;
|
|
131
|
-
} else if (environment.vars.has("ble.thread.fake")) {
|
|
132
|
-
RootEndpoint = RootEndpoint.with(DummyThreadNetworkCommissioningServer);
|
|
133
|
-
wifiOrThreadAdded = true;
|
|
134
|
-
threadAdded = true;
|
|
135
|
-
}
|
|
136
|
-
} else {
|
|
137
|
-
RootEndpoint = RootEndpoint.with(
|
|
138
|
-
NetworkCommissioningServer.with(NetworkCommissioning.Feature.EthernetNetworkInterface)
|
|
139
|
-
);
|
|
140
|
-
}
|
|
141
|
-
const networkId = new Uint8Array(32);
|
|
125
|
+
const OnOffDevice = isSocket ? OnOffPlugInUnitDevice.with(OnOffShellExecServer) : OnOffLightDevice.with(OnOffShellExecServer);
|
|
126
|
+
const RootEndpoint = ServerNode.RootEndpoint.with(TestGeneralDiagnosticsServer);
|
|
142
127
|
const server = await ServerNode.create(RootEndpoint, {
|
|
143
128
|
id: uniqueId,
|
|
144
129
|
network: {
|
|
@@ -167,26 +152,43 @@ const server = await ServerNode.create(RootEndpoint, {
|
|
|
167
152
|
productId,
|
|
168
153
|
serialNumber: `node-matter-${uniqueId}`,
|
|
169
154
|
uniqueId
|
|
170
|
-
},
|
|
171
|
-
// @ts-expect-error ... TS do not see the types because both next clusters was added conditionally
|
|
172
|
-
networkCommissioning: {
|
|
173
|
-
maxNetworks: 1,
|
|
174
|
-
interfaceEnabled: true,
|
|
175
|
-
lastConnectErrorValue: 0,
|
|
176
|
-
lastNetworkId: wifiOrThreadAdded ? null : networkId,
|
|
177
|
-
lastNetworkingStatus: wifiOrThreadAdded ? null : NetworkCommissioning.NetworkCommissioningStatus.Success,
|
|
178
|
-
networks: [{ networkId, connected: !wifiOrThreadAdded }],
|
|
179
|
-
scanMaxTimeSeconds: wifiOrThreadAdded ? 3 : void 0,
|
|
180
|
-
connectMaxTimeSeconds: wifiOrThreadAdded ? 3 : void 0,
|
|
181
|
-
supportedWifiBands: wifiOrThreadAdded && !threadAdded ? [NetworkCommissioning.WiFiBand["2G4"]] : void 0,
|
|
182
|
-
supportedThreadFeatures: wifiOrThreadAdded && threadAdded ? { isFullThreadDevice: true } : void 0,
|
|
183
|
-
threadVersion: wifiOrThreadAdded && threadAdded ? 4 : void 0
|
|
184
|
-
// means: Thread 1.3
|
|
185
|
-
},
|
|
186
|
-
myFancyFunctionality: {
|
|
187
|
-
myFancyValue: 0
|
|
188
155
|
}
|
|
189
156
|
});
|
|
157
|
+
const networkId = new Uint8Array(32);
|
|
158
|
+
if (Ble.enabled) {
|
|
159
|
+
if (environment.vars.has("ble.wifi.fake")) {
|
|
160
|
+
server.behaviors.require(DummyWifiNetworkCommissioningServer, {
|
|
161
|
+
maxNetworks: 1,
|
|
162
|
+
interfaceEnabled: true,
|
|
163
|
+
lastConnectErrorValue: 0,
|
|
164
|
+
lastNetworkId: networkId,
|
|
165
|
+
lastNetworkingStatus: null,
|
|
166
|
+
networks: [{ networkId, connected: false }],
|
|
167
|
+
scanMaxTimeSeconds: 3,
|
|
168
|
+
connectMaxTimeSeconds: 3,
|
|
169
|
+
supportedWiFiBands: [NetworkCommissioning.WiFiBand["2G4"]]
|
|
170
|
+
});
|
|
171
|
+
} else if (environment.vars.has("ble.thread.fake")) {
|
|
172
|
+
server.behaviors.require(DummyThreadNetworkCommissioningServer, {
|
|
173
|
+
maxNetworks: 1,
|
|
174
|
+
interfaceEnabled: true,
|
|
175
|
+
lastConnectErrorValue: 0,
|
|
176
|
+
lastNetworkId: null,
|
|
177
|
+
lastNetworkingStatus: null,
|
|
178
|
+
networks: [{ networkId, connected: false }],
|
|
179
|
+
scanMaxTimeSeconds: 3,
|
|
180
|
+
connectMaxTimeSeconds: 3,
|
|
181
|
+
supportedThreadFeatures: { isFullThreadDevice: true },
|
|
182
|
+
threadVersion: 4
|
|
183
|
+
// means: Thread 1.3
|
|
184
|
+
});
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
if (vendorId === 65524) {
|
|
188
|
+
server.behaviors.require(MyFancyOwnFunctionalityServer, {
|
|
189
|
+
myFancyValue: 0
|
|
190
|
+
});
|
|
191
|
+
}
|
|
190
192
|
const endpoint = new Endpoint(OnOffDevice, { id: "onoff" });
|
|
191
193
|
await server.add(endpoint);
|
|
192
194
|
server.lifecycle.commissioned.on(() => console.log("Server was initially commissioned successfully!"));
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/device-onoff-advanced/DeviceNodeFull.ts"],
|
|
4
|
-
"mappings": ";AACA;AAAA;AAAA;AAAA;AAAA;AAqBA;AAAA,EACI;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACG;AACP,SAAS,
|
|
4
|
+
"mappings": "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",
|
|
5
5
|
"names": []
|
|
6
6
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@matter/examples",
|
|
3
|
-
"version": "0.12.0-alpha.0-
|
|
3
|
+
"version": "0.12.0-alpha.0-20250103-ba0c01a01",
|
|
4
4
|
"description": "Matter.js examples and reference implementations",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"iot",
|
|
@@ -52,13 +52,13 @@
|
|
|
52
52
|
"matter-controller": "dist/esm/controller/ControllerNode.js"
|
|
53
53
|
},
|
|
54
54
|
"dependencies": {
|
|
55
|
-
"@matter/main": "0.12.0-alpha.0-
|
|
56
|
-
"@matter/nodejs": "0.12.0-alpha.0-
|
|
57
|
-
"@matter/tools": "0.12.0-alpha.0-
|
|
55
|
+
"@matter/main": "0.12.0-alpha.0-20250103-ba0c01a01",
|
|
56
|
+
"@matter/nodejs": "0.12.0-alpha.0-20250103-ba0c01a01",
|
|
57
|
+
"@matter/tools": "0.12.0-alpha.0-20250103-ba0c01a01",
|
|
58
58
|
"esbuild": "^0.24.2"
|
|
59
59
|
},
|
|
60
60
|
"optionalDependencies": {
|
|
61
|
-
"@matter/nodejs-ble": "0.12.0-alpha.0-
|
|
61
|
+
"@matter/nodejs-ble": "0.12.0-alpha.0-20250103-ba0c01a01"
|
|
62
62
|
},
|
|
63
63
|
"engines": {
|
|
64
64
|
"node": ">=18.0.0"
|
|
@@ -45,17 +45,11 @@ The following parameters are available:
|
|
|
45
45
|
* --uniqueid: a unique ID for this device to be used in naming and to store structure information (default: ms time now)
|
|
46
46
|
* --type: the device type to use for pairing (default: light, alternative value is "socket")
|
|
47
47
|
* --netinterface: limit mdns announcements and scanning to the provided network interface, e.g. "en0" (default: all interfaces available)
|
|
48
|
-
* --ble: enable BLE support (default: false) If this is enabled the device will announce itself _only_ via BLE if not commissioned and also presents a "Wifi only" device for commissioning to show this feature!
|
|
49
|
-
* --ble-hci-id: Optionally, HCI ID to use (Linux only, default 0)
|
|
50
48
|
* --port: the port to listen on for the device (default: 5540)
|
|
51
49
|
* --store: the storage location (directory) to use for storing the pairing information (default: .device-node). Ideally use names starting with a ".". Delete the directory or provide an alternative name to reset the device
|
|
52
50
|
* --on: the command to run when the device is turned on (see example above)
|
|
53
51
|
* --off: the command to run when the device is turned off (see example above)
|
|
54
52
|
|
|
55
|
-
Additionally, there are some Testing parameters:
|
|
56
|
-
* --ble-wifi-scan-ssid: The Wi-Fi SSID returned by the "ScanNetworks" call of the Wifi Network commissioning cluster used when using BLE commissioning (default: "TestSSID"). Ideally use a really existing SSID that also the commissioner (Apple, Alexa, ...) knows to make it easier to commission. Else you could get errors while commissioning.
|
|
57
|
-
* --ble-wifi-scan-bssid: The Wi-Fi BSSID returned by the "ScanNetworks" call of the Wifi Network commissioning cluster used when using BLE commissioning (default: "00:00:00:00:00:00").
|
|
58
|
-
|
|
59
53
|
## Bundling
|
|
60
54
|
|
|
61
55
|
For production environments where space and/or CPU is at a premium, you might consider using a bundler to distribute your application. This project includes an example demonstrating how to create such a bundle using [esbuild](https://esbuild.github.io/).
|
|
@@ -21,6 +21,7 @@
|
|
|
21
21
|
*/
|
|
22
22
|
|
|
23
23
|
import {
|
|
24
|
+
Bytes,
|
|
24
25
|
DeviceTypeId,
|
|
25
26
|
Endpoint,
|
|
26
27
|
EndpointServer,
|
|
@@ -34,7 +35,7 @@ import {
|
|
|
34
35
|
logLevelFromString,
|
|
35
36
|
singleton,
|
|
36
37
|
} from "@matter/main";
|
|
37
|
-
import {
|
|
38
|
+
import { OnOffServer } from "@matter/main/behaviors";
|
|
38
39
|
import { GeneralDiagnostics, NetworkCommissioning } from "@matter/main/clusters";
|
|
39
40
|
import { OnOffLightDevice, OnOffPlugInUnitDevice } from "@matter/main/devices";
|
|
40
41
|
import { RootRequirements } from "@matter/main/endpoints";
|
|
@@ -164,6 +165,7 @@ class OnOffShellExecServer extends OnOffServer {
|
|
|
164
165
|
class TestGeneralDiagnosticsServer extends RootRequirements.GeneralDiagnosticsServer {
|
|
165
166
|
override initialize() {
|
|
166
167
|
this.state.testEventTriggersEnabled = true; // set to true if you support test triggers ...
|
|
168
|
+
this.state.deviceTestEnableKey = Bytes.fromHex("0102030405060708090a0b0c0d0e0f10");
|
|
167
169
|
super.initialize();
|
|
168
170
|
}
|
|
169
171
|
|
|
@@ -205,12 +207,8 @@ class MyFancyOwnFunctionalityServer extends MyFancyOwnFunctionalityBehavior {
|
|
|
205
207
|
// In this case we are using with() to install our On/Off cluster behavior.
|
|
206
208
|
// .with("Lighting") not needed because we always have it in by default because we have default implementation
|
|
207
209
|
const OnOffDevice = isSocket
|
|
208
|
-
?
|
|
209
|
-
|
|
210
|
-
: OnOffPlugInUnitDevice.with(OnOffShellExecServer)
|
|
211
|
-
: vendorId === 0xfff4
|
|
212
|
-
? OnOffLightDevice.with(OnOffShellExecServer, MyFancyOwnFunctionalityServer)
|
|
213
|
-
: OnOffLightDevice.with(OnOffShellExecServer);
|
|
210
|
+
? OnOffPlugInUnitDevice.with(OnOffShellExecServer)
|
|
211
|
+
: OnOffLightDevice.with(OnOffShellExecServer);
|
|
214
212
|
|
|
215
213
|
/**
|
|
216
214
|
* Modify automatically added clusters of the Root endpoint if needed
|
|
@@ -222,32 +220,8 @@ const OnOffDevice = isSocket
|
|
|
222
220
|
*/
|
|
223
221
|
|
|
224
222
|
// We use the Basic Root Endpoint without a NetworkCommissioning cluster
|
|
225
|
-
|
|
223
|
+
const RootEndpoint = ServerNode.RootEndpoint.with(TestGeneralDiagnosticsServer);
|
|
226
224
|
|
|
227
|
-
let wifiOrThreadAdded = false;
|
|
228
|
-
let threadAdded = false;
|
|
229
|
-
if (Ble.enabled) {
|
|
230
|
-
// matter.js will create a Ethernet-only device by default when ut comes to Network Commissioning Features.
|
|
231
|
-
// To offer e.g. a "Wi-Fi only device" (or any other combination) we need to override the Network Commissioning
|
|
232
|
-
// cluster and implement all the need handling here. This is a "static implementation" for pure demonstration
|
|
233
|
-
// purposes and just "simulates" the actions to be done. In a real world implementation this would be done by
|
|
234
|
-
// the device implementor based on the relevant networking stack.
|
|
235
|
-
// The NetworkCommissioningCluster and all logics are described in Matter Core Specifications section 11.8
|
|
236
|
-
if (environment.vars.has("ble.wifi.fake")) {
|
|
237
|
-
RootEndpoint = RootEndpoint.with(DummyWifiNetworkCommissioningServer);
|
|
238
|
-
wifiOrThreadAdded = true;
|
|
239
|
-
} else if (environment.vars.has("ble.thread.fake")) {
|
|
240
|
-
RootEndpoint = RootEndpoint.with(DummyThreadNetworkCommissioningServer);
|
|
241
|
-
wifiOrThreadAdded = true;
|
|
242
|
-
threadAdded = true;
|
|
243
|
-
}
|
|
244
|
-
} else {
|
|
245
|
-
RootEndpoint = RootEndpoint.with(
|
|
246
|
-
NetworkCommissioningServer.with(NetworkCommissioning.Feature.EthernetNetworkInterface),
|
|
247
|
-
);
|
|
248
|
-
}
|
|
249
|
-
|
|
250
|
-
const networkId = new Uint8Array(32);
|
|
251
225
|
// Physical devices appear as "nodes" on a Matter network. As a device implementer you use a NodeServer to bring a
|
|
252
226
|
// device online.
|
|
253
227
|
//
|
|
@@ -281,28 +255,54 @@ const server = await ServerNode.create(RootEndpoint, {
|
|
|
281
255
|
serialNumber: `node-matter-${uniqueId}`,
|
|
282
256
|
uniqueId,
|
|
283
257
|
},
|
|
258
|
+
});
|
|
284
259
|
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
260
|
+
const networkId = new Uint8Array(32);
|
|
261
|
+
if (Ble.enabled) {
|
|
262
|
+
// matter.js will create an Ethernet-only device by default when it comes to Network Commissioning Features.
|
|
263
|
+
// To offer e.g. a "Wi-Fi only device" (or any other combination) we need to override the Network Commissioning
|
|
264
|
+
// cluster and implement all the need handling here. This is a "static implementation" for pure demonstration
|
|
265
|
+
// purposes and just "simulates" the actions to be done. In a real world implementation this would be done by
|
|
266
|
+
// the device implementor based on the relevant networking stack.
|
|
267
|
+
// The NetworkCommissioningCluster and all logics are described in Matter Core Specifications section 11.8
|
|
268
|
+
if (environment.vars.has("ble.wifi.fake")) {
|
|
269
|
+
server.behaviors.require(DummyWifiNetworkCommissioningServer, {
|
|
270
|
+
maxNetworks: 1,
|
|
271
|
+
interfaceEnabled: true,
|
|
272
|
+
lastConnectErrorValue: 0,
|
|
273
|
+
lastNetworkId: networkId,
|
|
274
|
+
lastNetworkingStatus: null,
|
|
275
|
+
networks: [{ networkId: networkId, connected: false }],
|
|
276
|
+
scanMaxTimeSeconds: 3,
|
|
277
|
+
connectMaxTimeSeconds: 3,
|
|
278
|
+
supportedWiFiBands: [NetworkCommissioning.WiFiBand["2G4"]],
|
|
279
|
+
});
|
|
280
|
+
} else if (environment.vars.has("ble.thread.fake")) {
|
|
281
|
+
server.behaviors.require(DummyThreadNetworkCommissioningServer, {
|
|
282
|
+
maxNetworks: 1,
|
|
283
|
+
interfaceEnabled: true,
|
|
284
|
+
lastConnectErrorValue: 0,
|
|
285
|
+
lastNetworkId: null,
|
|
286
|
+
lastNetworkingStatus: null,
|
|
287
|
+
networks: [{ networkId: networkId, connected: false }],
|
|
288
|
+
scanMaxTimeSeconds: 3,
|
|
289
|
+
connectMaxTimeSeconds: 3,
|
|
290
|
+
supportedThreadFeatures: { isFullThreadDevice: true },
|
|
291
|
+
threadVersion: 4, // means: Thread 1.3
|
|
292
|
+
});
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
// Also add our Custom behavior when vendor id is 0xfff4 (just to show how it works)
|
|
297
|
+
if (vendorId === 0xfff4) {
|
|
298
|
+
server.behaviors.require(MyFancyOwnFunctionalityServer, {
|
|
300
299
|
myFancyValue: 0,
|
|
301
|
-
}
|
|
302
|
-
}
|
|
300
|
+
});
|
|
301
|
+
}
|
|
303
302
|
|
|
304
303
|
// Nodes are a composition of endpoints. Add a single endpoint to the node, our example light device.
|
|
305
304
|
const endpoint = new Endpoint(OnOffDevice, { id: "onoff" });
|
|
305
|
+
|
|
306
306
|
await server.add(endpoint);
|
|
307
307
|
|
|
308
308
|
/**
|
|
@@ -317,7 +317,7 @@ server.lifecycle.decommissioned.on(() => console.log("Server was fully decommiss
|
|
|
317
317
|
/** This event is triggered when the device went online. This means that it is discoverable in the network. */
|
|
318
318
|
server.lifecycle.online.on(() => console.log("Server is online"));
|
|
319
319
|
|
|
320
|
-
/** This event is triggered when the device went offline.
|
|
320
|
+
/** This event is triggered when the device went offline. It is no longer discoverable or connectable in the network. */
|
|
321
321
|
server.lifecycle.offline.on(() => console.log("Server is offline"));
|
|
322
322
|
|
|
323
323
|
/**
|
|
@@ -11,10 +11,34 @@ This example shows how to build a simple Device node with just one socket or lig
|
|
|
11
11
|
|
|
12
12
|
For general documentation about the CLI parameters or environment variables that can be used for matter.js please refer to the [Examples README](../../../README.md#cli-usage).
|
|
13
13
|
|
|
14
|
-
The CLI parameter are else documented at the [Device Node Readme](../device-onoff
|
|
14
|
+
The CLI parameter are else documented at the [Device Node Readme](../device-onoff/README.md).
|
|
15
15
|
|
|
16
16
|
This example is not exposed as npm script so starting requires to run the ts file or the build file.
|
|
17
17
|
|
|
18
18
|
```bash
|
|
19
19
|
node .dist/examples/device-onoff-advanced-cli/DeviceNodeFull.js
|
|
20
20
|
```
|
|
21
|
+
|
|
22
|
+
## How to test BLE commissioning
|
|
23
|
+
For this to work you first of all need to enable BLE by using `--ble-enable` to enable the BLE only commissioning. The device simulates that it is not on any IP network for the start.
|
|
24
|
+
Please also make sure you follow the [BLE enablement steps for your operating system](../../../nodejs-ble/README.md#prerequisites-and-limitations).
|
|
25
|
+
|
|
26
|
+
The following parameters are available:
|
|
27
|
+
* --ble-enable: enable BLE support (default: false) If this is enabled the device will announce itself _only_ via BLE if not commissioned and also presents a "Wifi only" device for commissioning to show this feature!
|
|
28
|
+
* --ble-hci-id=...: Optionally, HCI ID to use (Linux only, default 0)
|
|
29
|
+
|
|
30
|
+
Additionally, you need to choose if the device should simulate a Thread or a Wifi enabled device. This can be done by adding `--ble-fake-wifi` or `--ble-fake-thread` to the command line. Then a dummy WifiNetworkCommissioning or ThreadNetworkCommissioning cluster is added to the device node.
|
|
31
|
+
|
|
32
|
+
Depending on the method you chose you probably need to also add additional parameters for either Wifi or thread which are returned when the device is asked to scn for available networks.
|
|
33
|
+
|
|
34
|
+
For Wifi the parameters to use are:
|
|
35
|
+
* --ble-wifi-scanSsid=...: The Wi-Fi SSID returned by the "ScanNetworks" call of the Wifi Network commissioning cluster used when using BLE commissioning (default: "TestSSID"). Ideally use a really existing SSID that also the commissioner (Apple, Alexa, ...) knows to make it easier to commission. Else you could get errors while commissioning.
|
|
36
|
+
* --ble-wifi-scanBssid=...: The Wi-Fi BSSID returned by the "ScanNetworks" call of the Wifi Network commissioning cluster used when using BLE commissioning (default: "00:00:00:00:00:00").
|
|
37
|
+
|
|
38
|
+
For Thread the parameters to use are:
|
|
39
|
+
* --ble.thread.panId=...: The PAN ID to use for the Thread network
|
|
40
|
+
* --ble.thread.extendedPanId=...: The extended PAN ID to use for the Thread network
|
|
41
|
+
* --ble.thread.networkName=...: The network name to use for the Thread network
|
|
42
|
+
* --ble.thread.channel=...: The channel to use for the Thread network
|
|
43
|
+
* --ble.thread.address=...: The address to use for the Thread network
|
|
44
|
+
Thread parameters are as of now only needed when commissioning with Amazon because the others are currently not scanning for Thread networks.
|