@matter/nodejs-shell 0.11.0-alpha.0-20241015-ae8e54af2 → 0.11.0-alpha.0-20241017-fa6aca0e9
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 +16 -0
- package/dist/cjs/MatterNode.js +73 -27
- package/dist/cjs/MatterNode.js.map +1 -1
- package/dist/cjs/app.js +9 -4
- package/dist/cjs/app.js.map +1 -1
- package/dist/cjs/shell/Shell.js +20 -18
- package/dist/cjs/shell/Shell.js.map +1 -1
- package/dist/cjs/shell/cmd_commission.js +13 -3
- package/dist/cjs/shell/cmd_commission.js.map +1 -1
- package/dist/cjs/shell/cmd_nodes.js +9 -11
- package/dist/cjs/shell/cmd_nodes.js.map +1 -1
- package/package.json +6 -6
- package/src/MatterNode.ts +87 -51
- package/src/app.ts +9 -4
- package/src/shell/Shell.ts +23 -22
- package/src/shell/cmd_commission.ts +20 -8
- package/src/shell/cmd_nodes.ts +7 -9
package/README.md
CHANGED
|
@@ -22,6 +22,22 @@ npm shell <nodenum>
|
|
|
22
22
|
```
|
|
23
23
|
|
|
24
24
|
There are other parameters available to enable BLE and define the HCI device to use. See `npm shell -- --help` for more details.
|
|
25
|
+
Please note the extra `--` to separate the npm parameters from the shell parameters!
|
|
26
|
+
|
|
27
|
+
## matter.js v0.11 Storage adjustment!
|
|
28
|
+
In matter.js 0.11 we adjusted the storage to the new environment based one. This means that by default the storage is in the user directory in .matter/shell-XX where XX is the nodeBum you provided as parameter. You can adjust the storage base location with "--storage-path=..." as parameter.
|
|
29
|
+
|
|
30
|
+
To use a former storage you can use "--legacyStorage" and the storage will be in the .matter-shell-XX directory in the local directory as before.
|
|
31
|
+
To manually convert a storage you can follow the following steps. The described steps assume ./.matter-shell-XX is the old storage and ~/.matter/shell-XX is the new storage location.
|
|
32
|
+
|
|
33
|
+
* Stop the shell
|
|
34
|
+
* Copy ./.matter-shell-XX/0.RootCertificateManager.* to ~/.matter/shell-XX/credentials.*
|
|
35
|
+
* Copy ./.matter-shell-XX/0.MatterController.fabric to ~/.matter/shell-XX/credentials.fabric
|
|
36
|
+
* Copy ./.matter-shell-XX/0.MatterController.commissionedNodes to ~/.matter/shell-XX/nodes.commissionedNodes
|
|
37
|
+
* Copy ./.matter-shell-XX/0.SessionManager.* to ~/.matter/shell-XX/sessions.*
|
|
38
|
+
* Copy ./.matter-shell-XX/Node.* to ~/.matter/shell-XX/Node.*
|
|
39
|
+
|
|
40
|
+
All "0.MatterController.node-*" files from the old storage are not needed to be copied, if existing. They are automatically regenerated on next start.
|
|
25
41
|
|
|
26
42
|
## General usage
|
|
27
43
|
|
package/dist/cjs/MatterNode.js
CHANGED
|
@@ -22,9 +22,11 @@ __export(MatterNode_exports, {
|
|
|
22
22
|
});
|
|
23
23
|
module.exports = __toCommonJS(MatterNode_exports);
|
|
24
24
|
var import_general = require("@matter/general");
|
|
25
|
+
var import_node = require("@matter/node");
|
|
25
26
|
var import_nodejs = require("@matter/nodejs");
|
|
26
27
|
var import_matter = require("@project-chip/matter.js");
|
|
27
28
|
var import_datatype = require("@project-chip/matter.js/datatype");
|
|
29
|
+
var import_node_path = require("node:path");
|
|
28
30
|
/**
|
|
29
31
|
* @license
|
|
30
32
|
* Copyright 2022-2024 Matter.js Authors
|
|
@@ -32,25 +34,63 @@ var import_datatype = require("@project-chip/matter.js/datatype");
|
|
|
32
34
|
*/
|
|
33
35
|
const logger = import_general.Logger.get("Node");
|
|
34
36
|
class MatterNode {
|
|
35
|
-
constructor(nodeNum, netInterface) {
|
|
37
|
+
constructor(nodeNum, netInterface, useLegacyStorage = true) {
|
|
36
38
|
this.nodeNum = nodeNum;
|
|
37
39
|
this.netInterface = netInterface;
|
|
40
|
+
if (!useLegacyStorage) {
|
|
41
|
+
this.#environment = import_general.Environment.default;
|
|
42
|
+
}
|
|
38
43
|
}
|
|
39
|
-
storageLocation;
|
|
44
|
+
#storageLocation;
|
|
40
45
|
storage;
|
|
41
46
|
storageManager;
|
|
42
47
|
storageContext;
|
|
48
|
+
#environment;
|
|
43
49
|
commissioningController;
|
|
44
50
|
matterController;
|
|
51
|
+
started = false;
|
|
52
|
+
get storageLocation() {
|
|
53
|
+
return this.#storageLocation;
|
|
54
|
+
}
|
|
45
55
|
async initialize(resetStorage) {
|
|
46
|
-
this
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
56
|
+
if (this.#environment) {
|
|
57
|
+
if (this.netInterface !== void 0) {
|
|
58
|
+
this.#environment.vars.set("mdns.networkinterface", this.netInterface);
|
|
59
|
+
}
|
|
60
|
+
const id = `shell-${this.nodeNum.toString()}`;
|
|
61
|
+
this.commissioningController = new import_matter.CommissioningController({
|
|
62
|
+
environment: {
|
|
63
|
+
environment: this.#environment,
|
|
64
|
+
id
|
|
65
|
+
},
|
|
66
|
+
autoConnect: false
|
|
67
|
+
});
|
|
68
|
+
await this.commissioningController.initializeControllerStore();
|
|
69
|
+
const controllerStore = this.#environment.get(import_node.ControllerStore);
|
|
70
|
+
if (resetStorage) {
|
|
71
|
+
await controllerStore.erase();
|
|
72
|
+
}
|
|
73
|
+
this.storageContext = controllerStore.storage.createContext("Node");
|
|
74
|
+
const storageService = this.#environment.get(import_general.StorageService);
|
|
75
|
+
const baseLocation = storageService.location;
|
|
76
|
+
if (baseLocation !== void 0) {
|
|
77
|
+
this.#storageLocation = (0, import_node_path.join)(baseLocation, id);
|
|
78
|
+
}
|
|
79
|
+
} else {
|
|
80
|
+
this.#storageLocation = `.matter-shell-${this.nodeNum}`;
|
|
81
|
+
this.storage = new import_nodejs.StorageBackendDiskAsync(this.#storageLocation, false);
|
|
82
|
+
logger.info(`Storage location: ${this.#storageLocation} (Directory)`);
|
|
83
|
+
this.storageManager = new import_general.StorageManager(this.storage);
|
|
84
|
+
await this.storageManager.initialize();
|
|
85
|
+
this.storageContext = this.storageManager.createContext("Node");
|
|
86
|
+
if (resetStorage) {
|
|
87
|
+
await this.storage.clearAll([]);
|
|
88
|
+
}
|
|
89
|
+
this.matterController = new import_matter.MatterServer(this.storageManager, { mdnsInterface: this.netInterface });
|
|
90
|
+
this.commissioningController = new import_matter.CommissioningController({
|
|
91
|
+
autoConnect: false
|
|
92
|
+
});
|
|
93
|
+
await this.matterController.addCommissioningController(this.commissioningController);
|
|
54
94
|
}
|
|
55
95
|
}
|
|
56
96
|
get Store() {
|
|
@@ -61,9 +101,9 @@ class MatterNode {
|
|
|
61
101
|
}
|
|
62
102
|
async close() {
|
|
63
103
|
await this.matterController?.close();
|
|
64
|
-
this.closeStorage();
|
|
104
|
+
await this.closeStorage();
|
|
65
105
|
}
|
|
66
|
-
closeStorage() {
|
|
106
|
+
async closeStorage() {
|
|
67
107
|
try {
|
|
68
108
|
this.storage?.close();
|
|
69
109
|
process.exit(0);
|
|
@@ -72,19 +112,18 @@ class MatterNode {
|
|
|
72
112
|
}
|
|
73
113
|
}
|
|
74
114
|
async start() {
|
|
75
|
-
if (this.
|
|
76
|
-
throw new Error("StorageManager not initialized");
|
|
77
|
-
}
|
|
78
|
-
if (this.matterController !== void 0) {
|
|
115
|
+
if (this.started) {
|
|
79
116
|
return;
|
|
80
117
|
}
|
|
81
118
|
logger.info(`matter.js shell controller started for node ${this.nodeNum}`);
|
|
82
|
-
this.matterController
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
119
|
+
if (this.matterController !== void 0) {
|
|
120
|
+
await this.matterController.start();
|
|
121
|
+
} else if (this.commissioningController !== void 0) {
|
|
122
|
+
await this.commissioningController.start();
|
|
123
|
+
} else {
|
|
124
|
+
throw new Error("No controller initialized");
|
|
125
|
+
}
|
|
126
|
+
this.started = true;
|
|
88
127
|
}
|
|
89
128
|
async connectAndGetNodes(nodeIdStr, connectOptions) {
|
|
90
129
|
await this.start();
|
|
@@ -92,13 +131,20 @@ class MatterNode {
|
|
|
92
131
|
if (this.commissioningController === void 0) {
|
|
93
132
|
throw new Error("CommissioningController not initialized");
|
|
94
133
|
}
|
|
95
|
-
let nodes;
|
|
96
134
|
if (nodeId === void 0) {
|
|
97
|
-
|
|
98
|
-
}
|
|
99
|
-
|
|
135
|
+
return await this.commissioningController.connect(connectOptions);
|
|
136
|
+
}
|
|
137
|
+
const node = await this.commissioningController.connectNode(nodeId, connectOptions);
|
|
138
|
+
if (!node.initialized) {
|
|
139
|
+
await node.events.initialized;
|
|
140
|
+
}
|
|
141
|
+
return [node];
|
|
142
|
+
}
|
|
143
|
+
get controller() {
|
|
144
|
+
if (this.commissioningController === void 0) {
|
|
145
|
+
throw new Error("CommissioningController not initialized. Start first");
|
|
100
146
|
}
|
|
101
|
-
return
|
|
147
|
+
return this.commissioningController;
|
|
102
148
|
}
|
|
103
149
|
async iterateNodeDevices(nodes, callback, endpointId) {
|
|
104
150
|
for (const node of nodes) {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/MatterNode.ts"],
|
|
4
|
-
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA,
|
|
4
|
+
"mappings": "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",
|
|
5
5
|
"names": []
|
|
6
6
|
}
|
package/dist/cjs/app.js
CHANGED
|
@@ -105,18 +105,23 @@ async function main() {
|
|
|
105
105
|
description: "Logfile to use to log to. By Default debug loglevel is logged to the file. The provided value will be persisted for future runs.",
|
|
106
106
|
type: "string",
|
|
107
107
|
default: void 0
|
|
108
|
+
},
|
|
109
|
+
legacyStorage: {
|
|
110
|
+
description: "Use legacy storage structure (pre 0.11)",
|
|
111
|
+
type: "boolean",
|
|
112
|
+
default: false
|
|
108
113
|
}
|
|
109
114
|
});
|
|
110
115
|
},
|
|
111
116
|
async (argv) => {
|
|
112
117
|
if (argv.help) return;
|
|
113
|
-
const { nodeNum, ble, bleHciId, nodeType, factoryReset, netInterface, logfile } = argv;
|
|
114
|
-
theNode = new import_MatterNode.MatterNode(nodeNum, netInterface);
|
|
118
|
+
const { nodeNum, ble, bleHciId, nodeType, factoryReset, netInterface, logfile, legacyStorage } = argv;
|
|
119
|
+
theNode = new import_MatterNode.MatterNode(nodeNum, netInterface, legacyStorage);
|
|
115
120
|
await theNode.initialize(factoryReset);
|
|
116
121
|
if (logfile !== void 0) {
|
|
117
122
|
await theNode.Store.set("LogFile", logfile);
|
|
118
123
|
}
|
|
119
|
-
if (theNode.Store.has("LogFile")) {
|
|
124
|
+
if (await theNode.Store.has("LogFile")) {
|
|
120
125
|
const storedLogFileName = await theNode.Store.get("LogFile");
|
|
121
126
|
if (storedLogFileName !== void 0) {
|
|
122
127
|
import_general.Logger.addLogger("file", await (0, import_nodejs.createFileLogger)(storedLogFileName), {
|
|
@@ -139,7 +144,7 @@ async function main() {
|
|
|
139
144
|
);
|
|
140
145
|
}
|
|
141
146
|
console.log(`Started Node #${nodeNum} (Type: ${nodeType}) ${ble ? "with" : "without"} BLE`);
|
|
142
|
-
theShell.start();
|
|
147
|
+
theShell.start(theNode.storageLocation);
|
|
143
148
|
}
|
|
144
149
|
).version(false).scriptName("shell");
|
|
145
150
|
await yargsInstance.wrap(yargsInstance.terminalWidth()).parseAsync();
|
package/dist/cjs/app.js.map
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/app.ts"],
|
|
4
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA,qBAAuD;AACvD,oBAAiC;AACjC,wBAA0B;AAC1B,sBAAoB;AACpB,mBAAkB;AAClB,wBAA2B;AAC3B,mBAAsB;AAZtB;AAAA;AAAA;AAAA;AAAA;AAcA,MAAM,SAAS;AACf,MAAM,SAAS,sBAAO,IAAI,OAAO;AACjC,IAAI,QAAQ,OAAO,MAAO,uBAAO,SAAS,yBAAU;AAEpD,IAAI;AAEG,SAAS,YAAY,YAAoB,OAAqB;AACjE,MAAI,WAAW,wBAAS;AACxB,UAAQ,OAAO;AAAA,IACX,KAAK;AACD,iBAAW,wBAAS;AACpB;AAAA,IACJ,KAAK;AACD,iBAAW,wBAAS;AACpB;AAAA,IACJ,KAAK;AACD,iBAAW,wBAAS;AACpB;AAAA,IACJ,KAAK;AACD,iBAAW,wBAAS;AACpB;AAAA,EACR;AACA,wBAAO,4BAA4B,YAAY,QAAQ;AAC3D;AAKA,eAAe,OAAO;AAClB,QAAM,oBAAgB,aAAAA,SAAM,QAAQ,KAAK,MAAM,CAAC,CAAC,EAC5C;AAAA,IACG;AAAA,IACA;AAAA,IACA,CAAAA,WAAS;AACL,aAAOA,OACF,WAAW,YAAY;AAAA,QACpB,UAAU;AAAA,QACV,SAAS;AAAA,QACT,MAAM;AAAA,MACV,CAAC,EACA,WAAW,aAAa;AAAA,QACrB,UAAU;AAAA,QACV,SAAS,CAAC,YAAY;AAAA,QACtB,SAAS;AAAA,QACT,MAAM;AAAA,MACV,CAAC,EACA,QAAQ;AAAA,QACL,KAAK;AAAA,UACD,aAAa;AAAA,UACb,MAAM;AAAA,QACV;AAAA,QACA,UAAU;AAAA,UACN,aACI;AAAA,UACJ,MAAM;AAAA,UACN,SAAS;AAAA,QACb;AAAA,QACA,cAAc;AAAA,UACV,aAAa;AAAA,UACb,SAAS;AAAA,UACT,MAAM;AAAA,QACV;AAAA,QACA,cAAc;AAAA,UACV,aAAa;AAAA,UACb,MAAM;AAAA,UACN,SAAS;AAAA,QACb;AAAA,QACA,SAAS;AAAA,UACL,aACI;AAAA,UACJ,MAAM;AAAA,UACN,SAAS;AAAA,QACb;AAAA,MACJ,CAAC;AAAA,IACT;AAAA,IACA,OAAM,SAAQ;AACV,UAAI,KAAK,KAAM;AAEf,YAAM,EAAE,SAAS,KAAK,UAAU,UAAU,cAAc,cAAc,
|
|
4
|
+
"mappings": "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",
|
|
5
5
|
"names": ["yargs"]
|
|
6
6
|
}
|
package/dist/cjs/shell/Shell.js
CHANGED
|
@@ -76,29 +76,31 @@ class Shell {
|
|
|
76
76
|
}
|
|
77
77
|
readline;
|
|
78
78
|
writeStream;
|
|
79
|
-
start() {
|
|
79
|
+
start(storageBase) {
|
|
80
80
|
const history = new Array();
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
81
|
+
if (storageBase !== void 0) {
|
|
82
|
+
const fileName = `${storageBase}.history`;
|
|
83
|
+
try {
|
|
84
|
+
const historyData = (0, import_fs.readFileSync)(fileName, "utf8");
|
|
85
|
+
history.push(
|
|
86
|
+
...historyData.split("\n").map((line) => line.trim()).filter((line) => line.length)
|
|
87
|
+
);
|
|
88
|
+
history.splice(0, -MAX_HISTORY_SIZE);
|
|
89
|
+
console.log(`Loaded ${history.length} history entries from ${fileName}`);
|
|
90
|
+
} catch (e) {
|
|
91
|
+
if (e instanceof Error && "code" in e && e.code !== "ENOENT") {
|
|
92
|
+
process.stderr.write(`Error happened during history file read: ${e}
|
|
92
93
|
`);
|
|
94
|
+
}
|
|
93
95
|
}
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
this.writeStream.write(`${history.join("\n")}
|
|
96
|
+
try {
|
|
97
|
+
this.writeStream = (0, import_fs.createWriteStream)(fileName, { flags: "w" });
|
|
98
|
+
this.writeStream.write(`${history.join("\n")}
|
|
98
99
|
`);
|
|
99
|
-
|
|
100
|
-
|
|
100
|
+
} catch (e) {
|
|
101
|
+
process.stderr.write(`Error happened during history file write: ${e}
|
|
101
102
|
`);
|
|
103
|
+
}
|
|
102
104
|
}
|
|
103
105
|
this.readline = import_node_readline.default.createInterface({
|
|
104
106
|
input: process.stdin,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/shell/Shell.ts"],
|
|
4
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,qBAA4B;AAC5B,gBAAgD;AAChD,2BAAqB;AACrB,mBAAkB;AAElB,iBAAqB;AACrB,+BAAkC;AAClC,oCAA0B;AAC1B,kCAAwB;AACxB,gCAAsB;AACtB,4BAA0B;AAC1B,wBAAsB;AACtB,0BAAwB;AACxB,0BAAwB;AACxB,uBAAqB;AACrB,yBAAuB;AACvB,2BAAyB;AACzB,qBAAmB;AAvBnB;AAAA;AAAA;AAAA;AAAA;AAyBA,MAAM,mBAAmB;AAEzB,SAAS,cAAc;AACnB,SAAO;AAAA,IACH,SAAS;AAAA,IACT,UAAU;AAAA,IACV,SAAS,CAAC;AAAA,IACV,SAAS,YAAY;AACjB,cAAQ,IAAI,UAAU;AACtB,gBAAM,iBAAK;AAAA,IACf;AAAA,EACJ;AACJ;AAKO,MAAM,MAAM;AAAA;AAAA;AAAA;AAAA,EAOf,YACW,SACA,SACA,QACT;AAHS;AACA;AACA;AAAA,EACR;AAAA,EAVH;AAAA,EACA;AAAA,EAWA,
|
|
4
|
+
"mappings": "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",
|
|
5
5
|
"names": ["readline", "yargs", "cmdCommission", "cmdConfig", "cmdSession", "cmdNodes", "cmdSubscribe", "cmdIdentify", "cmdDiscover", "cmdAttributes", "cmdEvents", "cmdCommands", "cmdTlv"]
|
|
6
6
|
}
|
|
@@ -220,13 +220,23 @@ function commands(theNode) {
|
|
|
220
220
|
describe: "node id",
|
|
221
221
|
type: "string",
|
|
222
222
|
demandOption: true
|
|
223
|
+
}).options({
|
|
224
|
+
force: {
|
|
225
|
+
describe: "Force unpairing even if node is not online",
|
|
226
|
+
type: "boolean",
|
|
227
|
+
default: false
|
|
228
|
+
}
|
|
223
229
|
});
|
|
224
230
|
},
|
|
225
231
|
async (argv) => {
|
|
226
232
|
await theNode.start();
|
|
227
|
-
const { nodeId } = argv;
|
|
228
|
-
|
|
229
|
-
|
|
233
|
+
const { nodeId, force } = argv;
|
|
234
|
+
if (force) {
|
|
235
|
+
await theNode.controller.removeNode((0, import_datatype.NodeId)(BigInt(nodeId)), !force);
|
|
236
|
+
} else {
|
|
237
|
+
const node = (await theNode.connectAndGetNodes(nodeId, { autoSubscribe: false }))[0];
|
|
238
|
+
await node.decommission();
|
|
239
|
+
}
|
|
230
240
|
}
|
|
231
241
|
),
|
|
232
242
|
handler: async (argv) => {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/shell/cmd_commission.ts"],
|
|
4
|
-
"mappings": "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
|
|
4
|
+
"mappings": "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",
|
|
5
5
|
"names": ["yargs"]
|
|
6
6
|
}
|
|
@@ -124,12 +124,12 @@ function commands(theNode) {
|
|
|
124
124
|
node.logStructure({});
|
|
125
125
|
}
|
|
126
126
|
).command(
|
|
127
|
-
"connect
|
|
127
|
+
"connect [node-id] [min-subscription-interval] [max-subscription-interval]",
|
|
128
128
|
"Connects to one or all commissioned nodes",
|
|
129
129
|
(yargs2) => {
|
|
130
130
|
return yargs2.positional("node-id", {
|
|
131
131
|
describe: "node id to connect. Use 'all' to connect to all nodes.",
|
|
132
|
-
default:
|
|
132
|
+
default: "all",
|
|
133
133
|
type: "string",
|
|
134
134
|
demandOption: true
|
|
135
135
|
}).positional("min-subscription-interval", {
|
|
@@ -165,14 +165,13 @@ function commands(theNode) {
|
|
|
165
165
|
}
|
|
166
166
|
}
|
|
167
167
|
).command(
|
|
168
|
-
"disconnect
|
|
168
|
+
"disconnect [node-id]",
|
|
169
169
|
"Disconnects from one or all nodes",
|
|
170
170
|
(yargs2) => {
|
|
171
171
|
return yargs2.positional("node-id", {
|
|
172
172
|
describe: "node id to disconnect. Use 'all' to disconnect from all nodes.",
|
|
173
|
-
default:
|
|
174
|
-
type: "string"
|
|
175
|
-
demandOption: true
|
|
173
|
+
default: "all",
|
|
174
|
+
type: "string"
|
|
176
175
|
});
|
|
177
176
|
},
|
|
178
177
|
async (argv) => {
|
|
@@ -199,14 +198,13 @@ function commands(theNode) {
|
|
|
199
198
|
}
|
|
200
199
|
}
|
|
201
200
|
).command(
|
|
202
|
-
"status
|
|
201
|
+
"status [node-ids]",
|
|
203
202
|
"Logs the connection status for all or specified nodes",
|
|
204
203
|
(yargs2) => {
|
|
205
204
|
return yargs2.positional("node-ids", {
|
|
206
205
|
describe: "node ids to connect (comma separated list allowed). Use 'all' to log status for all nodes.",
|
|
207
|
-
default:
|
|
208
|
-
type: "string"
|
|
209
|
-
demandOption: true
|
|
206
|
+
default: "all",
|
|
207
|
+
type: "string"
|
|
210
208
|
});
|
|
211
209
|
},
|
|
212
210
|
async (argv) => {
|
|
@@ -230,7 +228,7 @@ function commands(theNode) {
|
|
|
230
228
|
} else {
|
|
231
229
|
const basicInfo = node.basicInformation;
|
|
232
230
|
console.log(
|
|
233
|
-
`Node ${nodeIdToProcess}: Node Status: ${(0, import_general.capitalize)((0, import_general.decamelize)(import_device.NodeStateInformation[node.
|
|
231
|
+
`Node ${nodeIdToProcess}: Node Status: ${(0, import_general.capitalize)((0, import_general.decamelize)(import_device.NodeStateInformation[node.state], " "))}${basicInfo !== void 0 ? ` (${basicInfo.vendorName} ${basicInfo.productName})` : ""}`
|
|
234
232
|
);
|
|
235
233
|
}
|
|
236
234
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/shell/cmd_nodes.ts"],
|
|
4
|
-
"mappings": "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
|
|
4
|
+
"mappings": "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",
|
|
5
5
|
"names": ["yargs"]
|
|
6
6
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@matter/nodejs-shell",
|
|
3
|
-
"version": "0.11.0-alpha.0-
|
|
3
|
+
"version": "0.11.0-alpha.0-20241017-fa6aca0e9",
|
|
4
4
|
"description": "Shell app for Matter controller",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"iot",
|
|
@@ -36,11 +36,11 @@
|
|
|
36
36
|
"#types": "@matter/types"
|
|
37
37
|
},
|
|
38
38
|
"dependencies": {
|
|
39
|
-
"@matter/general": "0.11.0-alpha.0-
|
|
40
|
-
"@matter/nodejs": "0.11.0-alpha.0-
|
|
41
|
-
"@matter/nodejs-ble": "0.11.0-alpha.0-
|
|
42
|
-
"@matter/tools": "0.11.0-alpha.0-
|
|
43
|
-
"@project-chip/matter.js": "0.11.0-alpha.0-
|
|
39
|
+
"@matter/general": "0.11.0-alpha.0-20241017-fa6aca0e9",
|
|
40
|
+
"@matter/nodejs": "0.11.0-alpha.0-20241017-fa6aca0e9",
|
|
41
|
+
"@matter/nodejs-ble": "0.11.0-alpha.0-20241017-fa6aca0e9",
|
|
42
|
+
"@matter/tools": "0.11.0-alpha.0-20241017-fa6aca0e9",
|
|
43
|
+
"@project-chip/matter.js": "0.11.0-alpha.0-20241017-fa6aca0e9",
|
|
44
44
|
"yargs": "^17.7.2"
|
|
45
45
|
},
|
|
46
46
|
"engines": {
|
package/src/MatterNode.ts
CHANGED
|
@@ -5,28 +5,41 @@
|
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
7
|
// Include this first to auto-register Crypto, Network and Time Node.js implementations
|
|
8
|
-
import { Logger, StorageContext, StorageManager } from "@matter/general";
|
|
9
|
-
import {
|
|
8
|
+
import { Environment, Logger, StorageContext, StorageManager, StorageService } from "@matter/general";
|
|
9
|
+
import { ControllerStore } from "@matter/node";
|
|
10
|
+
import { StorageBackendDiskAsync } from "@matter/nodejs";
|
|
10
11
|
import { CommissioningController, MatterServer } from "@project-chip/matter.js";
|
|
11
12
|
import { NodeId } from "@project-chip/matter.js/datatype";
|
|
12
13
|
import { CommissioningControllerNodeOptions, PairedNode } from "@project-chip/matter.js/device";
|
|
13
14
|
import { EndpointInterface } from "@project-chip/matter.js/endpoint";
|
|
15
|
+
import { join } from "node:path";
|
|
14
16
|
|
|
15
17
|
const logger = Logger.get("Node");
|
|
16
18
|
|
|
17
19
|
export class MatterNode {
|
|
18
|
-
|
|
19
|
-
private storage?:
|
|
20
|
+
#storageLocation?: string;
|
|
21
|
+
private storage?: StorageBackendDiskAsync;
|
|
20
22
|
private storageManager?: StorageManager;
|
|
21
23
|
private storageContext?: StorageContext;
|
|
22
24
|
|
|
25
|
+
#environment?: Environment;
|
|
23
26
|
commissioningController?: CommissioningController;
|
|
24
27
|
private matterController?: MatterServer;
|
|
28
|
+
private started = false;
|
|
25
29
|
|
|
26
30
|
constructor(
|
|
27
31
|
private readonly nodeNum: number,
|
|
28
32
|
private readonly netInterface?: string,
|
|
29
|
-
|
|
33
|
+
useLegacyStorage = true,
|
|
34
|
+
) {
|
|
35
|
+
if (!useLegacyStorage) {
|
|
36
|
+
this.#environment = Environment.default;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
get storageLocation() {
|
|
41
|
+
return this.#storageLocation;
|
|
42
|
+
}
|
|
30
43
|
|
|
31
44
|
async initialize(resetStorage: boolean) {
|
|
32
45
|
/**
|
|
@@ -36,14 +49,49 @@ export class MatterNode {
|
|
|
36
49
|
* but you can choose a different storage backend as long as it implements the required API.
|
|
37
50
|
*/
|
|
38
51
|
|
|
39
|
-
this
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
52
|
+
if (this.#environment) {
|
|
53
|
+
if (this.netInterface !== undefined) {
|
|
54
|
+
this.#environment.vars.set("mdns.networkinterface", this.netInterface);
|
|
55
|
+
}
|
|
56
|
+
// Build up the "Not-so-legacy" Controller
|
|
57
|
+
const id = `shell-${this.nodeNum.toString()}`;
|
|
58
|
+
this.commissioningController = new CommissioningController({
|
|
59
|
+
environment: {
|
|
60
|
+
environment: this.#environment,
|
|
61
|
+
id,
|
|
62
|
+
},
|
|
63
|
+
autoConnect: false,
|
|
64
|
+
});
|
|
65
|
+
await this.commissioningController.initializeControllerStore();
|
|
66
|
+
|
|
67
|
+
const controllerStore = this.#environment.get(ControllerStore);
|
|
68
|
+
if (resetStorage) {
|
|
69
|
+
await controllerStore.erase();
|
|
70
|
+
}
|
|
71
|
+
this.storageContext = controllerStore.storage.createContext("Node");
|
|
72
|
+
|
|
73
|
+
const storageService = this.#environment.get(StorageService);
|
|
74
|
+
const baseLocation = storageService.location;
|
|
75
|
+
if (baseLocation !== undefined) {
|
|
76
|
+
this.#storageLocation = join(baseLocation, id);
|
|
77
|
+
}
|
|
78
|
+
} else {
|
|
79
|
+
this.#storageLocation = `.matter-shell-${this.nodeNum}`;
|
|
80
|
+
this.storage = new StorageBackendDiskAsync(this.#storageLocation, false);
|
|
81
|
+
logger.info(`Storage location: ${this.#storageLocation} (Directory)`);
|
|
82
|
+
this.storageManager = new StorageManager(this.storage);
|
|
83
|
+
await this.storageManager.initialize();
|
|
84
|
+
this.storageContext = this.storageManager.createContext("Node");
|
|
85
|
+
if (resetStorage) {
|
|
86
|
+
await this.storage.clearAll([]);
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
// Build up the legacy Controller
|
|
90
|
+
this.matterController = new MatterServer(this.storageManager, { mdnsInterface: this.netInterface });
|
|
91
|
+
this.commissioningController = new CommissioningController({
|
|
92
|
+
autoConnect: false,
|
|
93
|
+
});
|
|
94
|
+
await this.matterController.addCommissioningController(this.commissioningController);
|
|
47
95
|
}
|
|
48
96
|
}
|
|
49
97
|
|
|
@@ -56,10 +104,10 @@ export class MatterNode {
|
|
|
56
104
|
|
|
57
105
|
async close() {
|
|
58
106
|
await this.matterController?.close();
|
|
59
|
-
this.closeStorage();
|
|
107
|
+
await this.closeStorage();
|
|
60
108
|
}
|
|
61
109
|
|
|
62
|
-
closeStorage() {
|
|
110
|
+
async closeStorage() {
|
|
63
111
|
try {
|
|
64
112
|
this.storage?.close();
|
|
65
113
|
process.exit(0);
|
|
@@ -69,41 +117,19 @@ export class MatterNode {
|
|
|
69
117
|
}
|
|
70
118
|
|
|
71
119
|
async start() {
|
|
72
|
-
if (this.
|
|
73
|
-
throw new Error("StorageManager not initialized"); // Should never happen
|
|
74
|
-
}
|
|
75
|
-
if (this.matterController !== undefined) {
|
|
120
|
+
if (this.started) {
|
|
76
121
|
return;
|
|
77
122
|
}
|
|
78
123
|
logger.info(`matter.js shell controller started for node ${this.nodeNum}`);
|
|
79
124
|
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
* The below logic also adds command handlers for commands of clusters that normally are handled internally
|
|
89
|
-
* like testEventTrigger (General Diagnostic Cluster) that can be implemented with the logic when these commands
|
|
90
|
-
* are called.
|
|
91
|
-
*/
|
|
92
|
-
|
|
93
|
-
this.matterController = new MatterServer(this.storageManager, { mdnsInterface: this.netInterface });
|
|
94
|
-
this.commissioningController = new CommissioningController({
|
|
95
|
-
autoConnect: false,
|
|
96
|
-
});
|
|
97
|
-
await this.matterController.addCommissioningController(this.commissioningController);
|
|
98
|
-
|
|
99
|
-
/**
|
|
100
|
-
* Start the Matter Server
|
|
101
|
-
*
|
|
102
|
-
* After everything was plugged together we can start the server. When not delayed announcement is set for the
|
|
103
|
-
* CommissioningServer node then this command also starts the announcement of the device into the network.
|
|
104
|
-
*/
|
|
105
|
-
|
|
106
|
-
await this.matterController.start();
|
|
125
|
+
if (this.matterController !== undefined) {
|
|
126
|
+
await this.matterController.start();
|
|
127
|
+
} else if (this.commissioningController !== undefined) {
|
|
128
|
+
await this.commissioningController.start();
|
|
129
|
+
} else {
|
|
130
|
+
throw new Error("No controller initialized");
|
|
131
|
+
}
|
|
132
|
+
this.started = true;
|
|
107
133
|
}
|
|
108
134
|
|
|
109
135
|
async connectAndGetNodes(nodeIdStr?: string, connectOptions?: CommissioningControllerNodeOptions) {
|
|
@@ -113,13 +139,23 @@ export class MatterNode {
|
|
|
113
139
|
if (this.commissioningController === undefined) {
|
|
114
140
|
throw new Error("CommissioningController not initialized");
|
|
115
141
|
}
|
|
116
|
-
|
|
142
|
+
|
|
117
143
|
if (nodeId === undefined) {
|
|
118
|
-
|
|
119
|
-
}
|
|
120
|
-
|
|
144
|
+
return await this.commissioningController.connect(connectOptions);
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
const node = await this.commissioningController.connectNode(nodeId, connectOptions);
|
|
148
|
+
if (!node.initialized) {
|
|
149
|
+
await node.events.initialized;
|
|
150
|
+
}
|
|
151
|
+
return [node];
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
get controller() {
|
|
155
|
+
if (this.commissioningController === undefined) {
|
|
156
|
+
throw new Error("CommissioningController not initialized. Start first");
|
|
121
157
|
}
|
|
122
|
-
return
|
|
158
|
+
return this.commissioningController;
|
|
123
159
|
}
|
|
124
160
|
|
|
125
161
|
async iterateNodeDevices(
|
package/src/app.ts
CHANGED
|
@@ -86,20 +86,25 @@ async function main() {
|
|
|
86
86
|
type: "string",
|
|
87
87
|
default: undefined,
|
|
88
88
|
},
|
|
89
|
+
legacyStorage: {
|
|
90
|
+
description: "Use legacy storage structure (pre 0.11)",
|
|
91
|
+
type: "boolean",
|
|
92
|
+
default: false,
|
|
93
|
+
},
|
|
89
94
|
});
|
|
90
95
|
},
|
|
91
96
|
async argv => {
|
|
92
97
|
if (argv.help) return;
|
|
93
98
|
|
|
94
|
-
const { nodeNum, ble, bleHciId, nodeType, factoryReset, netInterface, logfile } = argv;
|
|
99
|
+
const { nodeNum, ble, bleHciId, nodeType, factoryReset, netInterface, logfile, legacyStorage } = argv;
|
|
95
100
|
|
|
96
|
-
theNode = new MatterNode(nodeNum, netInterface);
|
|
101
|
+
theNode = new MatterNode(nodeNum, netInterface, legacyStorage);
|
|
97
102
|
await theNode.initialize(factoryReset);
|
|
98
103
|
|
|
99
104
|
if (logfile !== undefined) {
|
|
100
105
|
await theNode.Store.set("LogFile", logfile);
|
|
101
106
|
}
|
|
102
|
-
if (theNode.Store.has("LogFile")) {
|
|
107
|
+
if (await theNode.Store.has("LogFile")) {
|
|
103
108
|
const storedLogFileName = await theNode.Store.get<string>("LogFile");
|
|
104
109
|
if (storedLogFileName !== undefined) {
|
|
105
110
|
Logger.addLogger("file", await createFileLogger(storedLogFileName), {
|
|
@@ -128,7 +133,7 @@ async function main() {
|
|
|
128
133
|
}
|
|
129
134
|
|
|
130
135
|
console.log(`Started Node #${nodeNum} (Type: ${nodeType}) ${ble ? "with" : "without"} BLE`);
|
|
131
|
-
theShell.start();
|
|
136
|
+
theShell.start(theNode.storageLocation);
|
|
132
137
|
},
|
|
133
138
|
)
|
|
134
139
|
.version(false)
|
package/src/shell/Shell.ts
CHANGED
|
@@ -53,31 +53,32 @@ export class Shell {
|
|
|
53
53
|
public prompt: string,
|
|
54
54
|
) {}
|
|
55
55
|
|
|
56
|
-
start() {
|
|
56
|
+
start(storageBase?: string) {
|
|
57
57
|
const history = new Array<string>();
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
58
|
+
if (storageBase !== undefined) {
|
|
59
|
+
const fileName = `${storageBase}.history`;
|
|
60
|
+
try {
|
|
61
|
+
const historyData = readFileSync(fileName, "utf8");
|
|
62
|
+
history.push(
|
|
63
|
+
...historyData
|
|
64
|
+
.split("\n")
|
|
65
|
+
.map(line => line.trim())
|
|
66
|
+
.filter(line => line.length),
|
|
67
|
+
);
|
|
68
|
+
history.splice(0, -MAX_HISTORY_SIZE);
|
|
69
|
+
console.log(`Loaded ${history.length} history entries from ${fileName}`);
|
|
70
|
+
} catch (e) {
|
|
71
|
+
if (e instanceof Error && "code" in e && e.code !== "ENOENT") {
|
|
72
|
+
process.stderr.write(`Error happened during history file read: ${e}\n`);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
try {
|
|
76
|
+
this.writeStream = createWriteStream(fileName, { flags: "w" });
|
|
77
|
+
this.writeStream.write(`${history.join("\n")}\n`);
|
|
78
|
+
} catch (e) {
|
|
79
|
+
process.stderr.write(`Error happened during history file write: ${e}\n`);
|
|
72
80
|
}
|
|
73
81
|
}
|
|
74
|
-
try {
|
|
75
|
-
this.writeStream = createWriteStream(fileName, { flags: "w" });
|
|
76
|
-
this.writeStream.write(`${history.join("\n")}\n`);
|
|
77
|
-
} catch (e) {
|
|
78
|
-
process.stderr.write(`Error happened during history file write: ${e}\n`);
|
|
79
|
-
}
|
|
80
|
-
|
|
81
82
|
this.readline = readline.createInterface({
|
|
82
83
|
input: process.stdin,
|
|
83
84
|
output: process.stdout,
|
|
@@ -253,17 +253,29 @@ export default function commands(theNode: MatterNode) {
|
|
|
253
253
|
"unpair <node-id>",
|
|
254
254
|
"Unpair/Decommission a node",
|
|
255
255
|
yargs => {
|
|
256
|
-
return yargs
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
256
|
+
return yargs
|
|
257
|
+
.positional("node-id", {
|
|
258
|
+
describe: "node id",
|
|
259
|
+
type: "string",
|
|
260
|
+
demandOption: true,
|
|
261
|
+
})
|
|
262
|
+
.options({
|
|
263
|
+
force: {
|
|
264
|
+
describe: "Force unpairing even if node is not online",
|
|
265
|
+
type: "boolean",
|
|
266
|
+
default: false,
|
|
267
|
+
},
|
|
268
|
+
});
|
|
261
269
|
},
|
|
262
270
|
async argv => {
|
|
263
271
|
await theNode.start();
|
|
264
|
-
const { nodeId } = argv;
|
|
265
|
-
|
|
266
|
-
|
|
272
|
+
const { nodeId, force } = argv;
|
|
273
|
+
if (force) {
|
|
274
|
+
await theNode.controller.removeNode(NodeId(BigInt(nodeId)), !force);
|
|
275
|
+
} else {
|
|
276
|
+
const node = (await theNode.connectAndGetNodes(nodeId, { autoSubscribe: false }))[0];
|
|
277
|
+
await node.decommission();
|
|
278
|
+
}
|
|
267
279
|
},
|
|
268
280
|
),
|
|
269
281
|
handler: async (argv: any) => {
|
package/src/shell/cmd_nodes.ts
CHANGED
|
@@ -117,13 +117,13 @@ export default function commands(theNode: MatterNode) {
|
|
|
117
117
|
},
|
|
118
118
|
)
|
|
119
119
|
.command(
|
|
120
|
-
"connect
|
|
120
|
+
"connect [node-id] [min-subscription-interval] [max-subscription-interval]",
|
|
121
121
|
"Connects to one or all commissioned nodes",
|
|
122
122
|
yargs => {
|
|
123
123
|
return yargs
|
|
124
124
|
.positional("node-id", {
|
|
125
125
|
describe: "node id to connect. Use 'all' to connect to all nodes.",
|
|
126
|
-
default:
|
|
126
|
+
default: "all",
|
|
127
127
|
type: "string",
|
|
128
128
|
demandOption: true,
|
|
129
129
|
})
|
|
@@ -166,14 +166,13 @@ export default function commands(theNode: MatterNode) {
|
|
|
166
166
|
},
|
|
167
167
|
)
|
|
168
168
|
.command(
|
|
169
|
-
"disconnect
|
|
169
|
+
"disconnect [node-id]",
|
|
170
170
|
"Disconnects from one or all nodes",
|
|
171
171
|
yargs => {
|
|
172
172
|
return yargs.positional("node-id", {
|
|
173
173
|
describe: "node id to disconnect. Use 'all' to disconnect from all nodes.",
|
|
174
|
-
default:
|
|
174
|
+
default: "all",
|
|
175
175
|
type: "string",
|
|
176
|
-
demandOption: true,
|
|
177
176
|
});
|
|
178
177
|
},
|
|
179
178
|
async argv => {
|
|
@@ -203,15 +202,14 @@ export default function commands(theNode: MatterNode) {
|
|
|
203
202
|
},
|
|
204
203
|
)
|
|
205
204
|
.command(
|
|
206
|
-
"status
|
|
205
|
+
"status [node-ids]",
|
|
207
206
|
"Logs the connection status for all or specified nodes",
|
|
208
207
|
yargs => {
|
|
209
208
|
return yargs.positional("node-ids", {
|
|
210
209
|
describe:
|
|
211
210
|
"node ids to connect (comma separated list allowed). Use 'all' to log status for all nodes.",
|
|
212
|
-
default:
|
|
211
|
+
default: "all",
|
|
213
212
|
type: "string",
|
|
214
|
-
demandOption: true,
|
|
215
213
|
});
|
|
216
214
|
},
|
|
217
215
|
async argv => {
|
|
@@ -236,7 +234,7 @@ export default function commands(theNode: MatterNode) {
|
|
|
236
234
|
} else {
|
|
237
235
|
const basicInfo = node.basicInformation;
|
|
238
236
|
console.log(
|
|
239
|
-
`Node ${nodeIdToProcess}: Node Status: ${capitalize(decamelize(NodeStateInformation[node.
|
|
237
|
+
`Node ${nodeIdToProcess}: Node Status: ${capitalize(decamelize(NodeStateInformation[node.state], " "))}${basicInfo !== undefined ? ` (${basicInfo.vendorName} ${basicInfo.productName})` : ""}`,
|
|
240
238
|
);
|
|
241
239
|
}
|
|
242
240
|
}
|