@switchbot/openapi-cli 1.1.0 → 1.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 +174 -18
- package/dist/api/client.d.ts +7 -1
- package/dist/api/client.js +44 -8
- package/dist/api/client.js.map +1 -1
- package/dist/commands/batch.d.ts +2 -0
- package/dist/commands/batch.js +252 -0
- package/dist/commands/batch.js.map +1 -0
- package/dist/commands/cache.d.ts +2 -0
- package/dist/commands/cache.js +108 -0
- package/dist/commands/cache.js.map +1 -0
- package/dist/commands/capabilities.d.ts +2 -0
- package/dist/commands/capabilities.js +91 -0
- package/dist/commands/capabilities.js.map +1 -0
- package/dist/commands/catalog.d.ts +2 -0
- package/dist/commands/catalog.js +291 -0
- package/dist/commands/catalog.js.map +1 -0
- package/dist/commands/config.js +123 -10
- package/dist/commands/config.js.map +1 -1
- package/dist/commands/devices.js +234 -147
- package/dist/commands/devices.js.map +1 -1
- package/dist/commands/doctor.d.ts +2 -0
- package/dist/commands/doctor.js +147 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/events.d.ts +15 -0
- package/dist/commands/events.js +188 -0
- package/dist/commands/events.js.map +1 -0
- package/dist/commands/explain.d.ts +2 -0
- package/dist/commands/explain.js +137 -0
- package/dist/commands/explain.js.map +1 -0
- package/dist/commands/history.d.ts +2 -0
- package/dist/commands/history.js +104 -0
- package/dist/commands/history.js.map +1 -0
- package/dist/commands/mcp.d.ts +4 -0
- package/dist/commands/mcp.js +386 -0
- package/dist/commands/mcp.js.map +1 -0
- package/dist/commands/plan.d.ts +37 -0
- package/dist/commands/plan.js +344 -0
- package/dist/commands/plan.js.map +1 -0
- package/dist/commands/quota.d.ts +2 -0
- package/dist/commands/quota.js +77 -0
- package/dist/commands/quota.js.map +1 -0
- package/dist/commands/scenes.js +19 -13
- package/dist/commands/scenes.js.map +1 -1
- package/dist/commands/schema.d.ts +2 -0
- package/dist/commands/schema.js +77 -0
- package/dist/commands/schema.js.map +1 -0
- package/dist/commands/watch.d.ts +2 -0
- package/dist/commands/watch.js +161 -0
- package/dist/commands/watch.js.map +1 -0
- package/dist/commands/webhook.js +37 -22
- package/dist/commands/webhook.js.map +1 -1
- package/dist/config.d.ts +11 -0
- package/dist/config.js +32 -6
- package/dist/config.js.map +1 -1
- package/dist/devices/cache.d.ts +50 -0
- package/dist/devices/cache.js +152 -1
- package/dist/devices/cache.js.map +1 -1
- package/dist/devices/catalog.d.ts +49 -0
- package/dist/devices/catalog.js +362 -92
- package/dist/devices/catalog.js.map +1 -1
- package/dist/index.js +31 -1
- package/dist/index.js.map +1 -1
- package/dist/lib/devices.d.ts +144 -0
- package/dist/lib/devices.js +329 -0
- package/dist/lib/devices.js.map +1 -0
- package/dist/lib/scenes.d.ts +7 -0
- package/dist/lib/scenes.js +11 -0
- package/dist/lib/scenes.js.map +1 -0
- package/dist/utils/audit.d.ts +13 -0
- package/dist/utils/audit.js +43 -0
- package/dist/utils/audit.js.map +1 -0
- package/dist/utils/filter.d.ts +45 -0
- package/dist/utils/filter.js +96 -0
- package/dist/utils/filter.js.map +1 -0
- package/dist/utils/flags.d.ts +42 -0
- package/dist/utils/flags.js +108 -0
- package/dist/utils/flags.js.map +1 -1
- package/dist/utils/format.d.ts +9 -0
- package/dist/utils/format.js +109 -0
- package/dist/utils/format.js.map +1 -0
- package/dist/utils/output.d.ts +11 -0
- package/dist/utils/output.js +37 -6
- package/dist/utils/output.js.map +1 -1
- package/dist/utils/quota.d.ts +48 -0
- package/dist/utils/quota.js +144 -0
- package/dist/utils/quota.js.map +1 -0
- package/dist/utils/retry.d.ts +23 -0
- package/dist/utils/retry.js +60 -0
- package/dist/utils/retry.js.map +1 -0
- package/package.json +4 -1
package/dist/commands/devices.js
CHANGED
|
@@ -1,7 +1,12 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import { getCachedDevice
|
|
1
|
+
import { printTable, printKeyValue, printJson, isJsonMode, handleError, UsageError } from '../utils/output.js';
|
|
2
|
+
import { resolveFormat, resolveFields, renderRows } from '../utils/format.js';
|
|
3
|
+
import { findCatalogEntry, getEffectiveCatalog } from '../devices/catalog.js';
|
|
4
|
+
import { getCachedDevice } from '../devices/cache.js';
|
|
5
|
+
import { fetchDeviceList, fetchDeviceStatus, executeCommand, describeDevice, validateCommand, isDestructiveCommand, getDestructiveReason, buildHubLocationMap, DeviceNotFoundError, } from '../lib/devices.js';
|
|
6
|
+
import { registerBatchCommand } from './batch.js';
|
|
7
|
+
import { registerWatchCommand } from './watch.js';
|
|
8
|
+
import { registerExplainCommand } from './explain.js';
|
|
9
|
+
import { isDryRun } from '../utils/flags.js';
|
|
5
10
|
export function registerDevicesCommand(program) {
|
|
6
11
|
const devices = program
|
|
7
12
|
.command('devices')
|
|
@@ -31,9 +36,12 @@ Run any subcommand with --help for its own flags and examples.
|
|
|
31
36
|
.command('list')
|
|
32
37
|
.description('List all physical devices and IR remote devices on the account')
|
|
33
38
|
.addHelpText('after', `
|
|
34
|
-
|
|
39
|
+
Default columns: deviceId, deviceName, type, category
|
|
40
|
+
Pass --wide for the full operator view: + controlType, family, roomID, room, hub, cloud
|
|
41
|
+
--fields accepts any subset of all column names (exit 2 on unknown names).
|
|
35
42
|
|
|
36
|
-
type - physical deviceType (e.g. "Bot", "Curtain") or
|
|
43
|
+
type - physical deviceType (e.g. "Bot", "Curtain") or IR remoteType (e.g. "TV")
|
|
44
|
+
category - "physical" or "ir"
|
|
37
45
|
controlType - functional classification from the API (e.g. "Bot", "Switch",
|
|
38
46
|
"TV") — may differ from 'type' and groups devices by behavior
|
|
39
47
|
family - home/family name (IR remotes inherit this from their bound Hub)
|
|
@@ -50,26 +58,33 @@ the table; --json returns the raw API body unchanged.)
|
|
|
50
58
|
|
|
51
59
|
Examples:
|
|
52
60
|
$ switchbot devices list
|
|
61
|
+
$ switchbot devices list --wide
|
|
62
|
+
$ switchbot devices list --format tsv --fields deviceId,deviceName,type,category
|
|
53
63
|
$ switchbot devices list --json | jq '.deviceList[] | select(.familyName == "家里")'
|
|
54
64
|
$ switchbot devices list --json | jq '[.deviceList[], .infraredRemoteList[]] | group_by(.familyName)'
|
|
55
65
|
`)
|
|
56
|
-
.
|
|
66
|
+
.option('--wide', 'Show all columns (controlType, family, roomID, room, hub, cloud)')
|
|
67
|
+
.action(async (options) => {
|
|
57
68
|
try {
|
|
58
|
-
const
|
|
59
|
-
const
|
|
60
|
-
const
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
printJson(res.data.body);
|
|
69
|
+
const body = await fetchDeviceList();
|
|
70
|
+
const { deviceList, infraredRemoteList } = body;
|
|
71
|
+
const fmt = resolveFormat();
|
|
72
|
+
if (fmt === 'json' && process.argv.includes('--json')) {
|
|
73
|
+
printJson(body);
|
|
64
74
|
return;
|
|
65
75
|
}
|
|
66
76
|
const hubLocation = buildHubLocationMap(deviceList);
|
|
77
|
+
const narrowHeaders = ['deviceId', 'deviceName', 'type', 'category'];
|
|
78
|
+
const wideHeaders = ['deviceId', 'deviceName', 'type', 'category', 'controlType', 'family', 'roomID', 'room', 'hub', 'cloud'];
|
|
79
|
+
const userFields = resolveFields();
|
|
80
|
+
const headers = userFields ? wideHeaders : (options.wide ? wideHeaders : narrowHeaders);
|
|
67
81
|
const rows = [];
|
|
68
82
|
for (const d of deviceList) {
|
|
69
83
|
rows.push([
|
|
70
84
|
d.deviceId,
|
|
71
85
|
d.deviceName,
|
|
72
86
|
d.deviceType || '—',
|
|
87
|
+
'physical',
|
|
73
88
|
d.controlType || '—',
|
|
74
89
|
d.familyName || '—',
|
|
75
90
|
d.roomID || '—',
|
|
@@ -83,7 +98,8 @@ Examples:
|
|
|
83
98
|
rows.push([
|
|
84
99
|
d.deviceId,
|
|
85
100
|
d.deviceName,
|
|
86
|
-
|
|
101
|
+
d.remoteType,
|
|
102
|
+
'ir',
|
|
87
103
|
d.controlType || '—',
|
|
88
104
|
inherited?.family || '—',
|
|
89
105
|
inherited?.roomID || '—',
|
|
@@ -92,13 +108,15 @@ Examples:
|
|
|
92
108
|
null,
|
|
93
109
|
]);
|
|
94
110
|
}
|
|
95
|
-
if (rows.length === 0) {
|
|
111
|
+
if (rows.length === 0 && fmt === 'table') {
|
|
96
112
|
console.log('No devices found');
|
|
97
113
|
return;
|
|
98
114
|
}
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
115
|
+
renderRows(wideHeaders, rows, fmt, userFields ?? (options.wide ? undefined : narrowHeaders));
|
|
116
|
+
if (fmt === 'table') {
|
|
117
|
+
console.log(`\nTotal: ${deviceList.length} physical device(s), ${infraredRemoteList.length} IR remote device(s)`);
|
|
118
|
+
console.log(`Tip: 'switchbot devices describe <deviceId>' shows a device's supported commands.`);
|
|
119
|
+
}
|
|
102
120
|
}
|
|
103
121
|
catch (error) {
|
|
104
122
|
handleError(error);
|
|
@@ -110,33 +128,36 @@ Examples:
|
|
|
110
128
|
.description('Query the real-time status of a specific device')
|
|
111
129
|
.argument('<deviceId>', 'Device ID from "devices list" (physical devices only; IR remotes have no status)')
|
|
112
130
|
.addHelpText('after', `
|
|
113
|
-
|
|
114
|
-
returns temperature/humidity/battery, Curtain returns slidePosition/moving,
|
|
115
|
-
Color Bulb returns brightness/color/colorTemperature, etc.
|
|
131
|
+
Status fields vary by device type. To discover them without a live call:
|
|
116
132
|
|
|
117
|
-
|
|
118
|
-
API, use the offline catalog:
|
|
133
|
+
switchbot devices commands <type> (prints the "Status fields" section)
|
|
119
134
|
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
IR remote devices cannot be queried — the SwitchBot API returns no status
|
|
123
|
-
channel for them. Use 'devices list' to confirm a deviceId is a physical
|
|
124
|
-
device (not in the 'infraredRemoteList').
|
|
135
|
+
For --fields: run the command once with --format yaml (no --fields) to see
|
|
136
|
+
all field names returned by your specific device, then narrow with --fields.
|
|
125
137
|
|
|
126
138
|
Examples:
|
|
127
139
|
$ switchbot devices status ABC123DEF456
|
|
128
140
|
$ switchbot devices status ABC123DEF456 --json
|
|
141
|
+
$ switchbot devices status ABC123DEF456 --format yaml
|
|
142
|
+
$ switchbot devices status ABC123DEF456 --format tsv --fields power,battery
|
|
129
143
|
$ switchbot devices status ABC123DEF456 --json | jq '.battery'
|
|
130
144
|
`)
|
|
131
145
|
.action(async (deviceId) => {
|
|
132
146
|
try {
|
|
133
|
-
const
|
|
134
|
-
const
|
|
135
|
-
if (
|
|
136
|
-
printJson(
|
|
147
|
+
const body = await fetchDeviceStatus(deviceId);
|
|
148
|
+
const fmt = resolveFormat();
|
|
149
|
+
if (fmt === 'json' && process.argv.includes('--json')) {
|
|
150
|
+
printJson(body);
|
|
137
151
|
return;
|
|
138
152
|
}
|
|
139
|
-
|
|
153
|
+
if (fmt !== 'table') {
|
|
154
|
+
const allHeaders = Object.keys(body);
|
|
155
|
+
const allRows = [Object.values(body)];
|
|
156
|
+
const fields = resolveFields();
|
|
157
|
+
renderRows(allHeaders, allRows, fmt, fields);
|
|
158
|
+
return;
|
|
159
|
+
}
|
|
160
|
+
printKeyValue(body);
|
|
140
161
|
}
|
|
141
162
|
catch (error) {
|
|
142
163
|
handleError(error);
|
|
@@ -150,6 +171,7 @@ Examples:
|
|
|
150
171
|
.argument('<cmd>', 'Command name, e.g. turnOn, turnOff, setColor, setBrightness, setAll, startClean')
|
|
151
172
|
.argument('[parameter]', 'Command parameter. Omit for commands like turnOn/turnOff (defaults to "default"). Format depends on the command (see below).')
|
|
152
173
|
.option('--type <commandType>', 'Command type: "command" for built-in commands (default), "customize" for user-defined IR buttons', 'command')
|
|
174
|
+
.option('--yes', 'Confirm a destructive command (Smart Lock unlock, Garage open, …). --dry-run is always allowed without --yes.')
|
|
153
175
|
.addHelpText('after', `
|
|
154
176
|
────────────────────────────────────────────────────────────────────────
|
|
155
177
|
For the full list of commands a specific device supports — and their
|
|
@@ -182,17 +204,72 @@ Common errors:
|
|
|
182
204
|
161 device offline (BLE devices need a Hub bridge)
|
|
183
205
|
171 hub offline
|
|
184
206
|
|
|
207
|
+
Safety:
|
|
208
|
+
Destructive commands (Smart Lock unlock, Garage Door Opener turnOn/turnOff,
|
|
209
|
+
Keypad createKey/deleteKey, …) are blocked by default. Pass --yes to confirm,
|
|
210
|
+
or --dry-run to preview without sending.
|
|
211
|
+
|
|
185
212
|
Examples:
|
|
186
213
|
$ switchbot devices command ABC123 turnOn
|
|
187
214
|
$ switchbot devices command ABC123 setColor "255:0:0"
|
|
188
215
|
$ switchbot devices command ABC123 setAll "26,1,3,on"
|
|
189
216
|
$ switchbot devices command ABC123 startClean '{"action":"sweep","param":{"fanLevel":2,"times":1}}'
|
|
190
217
|
$ switchbot devices command ABC123 "MyButton" --type customize
|
|
218
|
+
$ switchbot devices command <lockId> unlock --yes
|
|
191
219
|
`)
|
|
192
220
|
.action(async (deviceId, cmd, parameter, options) => {
|
|
193
|
-
|
|
221
|
+
const validation = validateCommand(deviceId, cmd, parameter, options.type);
|
|
222
|
+
if (!validation.ok) {
|
|
223
|
+
const err = validation.error;
|
|
224
|
+
if (isJsonMode()) {
|
|
225
|
+
const obj = { code: 2, kind: 'usage', message: err.message };
|
|
226
|
+
if (err.hint)
|
|
227
|
+
obj.hint = err.hint;
|
|
228
|
+
obj.context = { validationKind: err.kind };
|
|
229
|
+
console.error(JSON.stringify({ error: obj }));
|
|
230
|
+
}
|
|
231
|
+
else {
|
|
232
|
+
console.error(`Error: ${err.message}`);
|
|
233
|
+
if (err.hint)
|
|
234
|
+
console.error(err.hint);
|
|
235
|
+
if (err.kind === 'unknown-command') {
|
|
236
|
+
const cached = getCachedDevice(deviceId);
|
|
237
|
+
if (cached) {
|
|
238
|
+
console.error(`Run 'switchbot devices commands ${JSON.stringify(cached.type)}' for parameter formats and descriptions.`);
|
|
239
|
+
console.error(`(If the catalog is out of date, run 'switchbot devices list' to refresh the local cache, or pass --type customize for custom IR buttons.)`);
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
process.exit(2);
|
|
244
|
+
}
|
|
245
|
+
const cachedForGuard = getCachedDevice(deviceId);
|
|
246
|
+
if (!options.yes &&
|
|
247
|
+
!isDryRun() &&
|
|
248
|
+
isDestructiveCommand(cachedForGuard?.type, cmd, options.type)) {
|
|
249
|
+
const typeLabel = cachedForGuard?.type ?? 'unknown';
|
|
250
|
+
const reason = getDestructiveReason(cachedForGuard?.type, cmd, options.type);
|
|
251
|
+
if (isJsonMode()) {
|
|
252
|
+
console.error(JSON.stringify({
|
|
253
|
+
error: {
|
|
254
|
+
code: 2,
|
|
255
|
+
kind: 'guard',
|
|
256
|
+
message: `"${cmd}" on ${typeLabel} is destructive and requires --yes.`,
|
|
257
|
+
hint: reason
|
|
258
|
+
? `Re-run with --yes to confirm. Reason: ${reason}`
|
|
259
|
+
: 'Re-run with --yes to confirm, or --dry-run to preview without sending.',
|
|
260
|
+
context: { command: cmd, deviceType: typeLabel, deviceId, ...(reason ? { destructiveReason: reason } : {}) },
|
|
261
|
+
},
|
|
262
|
+
}));
|
|
263
|
+
}
|
|
264
|
+
else {
|
|
265
|
+
console.error(`Refusing to run destructive command "${cmd}" on ${typeLabel} without --yes.`);
|
|
266
|
+
if (reason)
|
|
267
|
+
console.error(`Reason: ${reason}`);
|
|
268
|
+
console.error(`Re-run with --yes to confirm, or --dry-run to preview without sending.`);
|
|
269
|
+
}
|
|
270
|
+
process.exit(2);
|
|
271
|
+
}
|
|
194
272
|
try {
|
|
195
|
-
const client = createClient();
|
|
196
273
|
// parameter may be a JSON object string (e.g. S10 startClean) or a plain string
|
|
197
274
|
let parsedParam = parameter ?? 'default';
|
|
198
275
|
if (parameter) {
|
|
@@ -203,19 +280,14 @@ Examples:
|
|
|
203
280
|
// keep as string
|
|
204
281
|
}
|
|
205
282
|
}
|
|
206
|
-
const body =
|
|
207
|
-
command: cmd,
|
|
208
|
-
parameter: parsedParam,
|
|
209
|
-
commandType: options.type,
|
|
210
|
-
};
|
|
211
|
-
const res = await client.post(`/v1.1/devices/${deviceId}/commands`, body);
|
|
283
|
+
const body = await executeCommand(deviceId, cmd, parsedParam, options.type);
|
|
212
284
|
if (isJsonMode()) {
|
|
213
|
-
printJson(
|
|
285
|
+
printJson(body);
|
|
214
286
|
return;
|
|
215
287
|
}
|
|
216
288
|
console.log(`✓ Command sent: ${cmd}`);
|
|
217
|
-
if (
|
|
218
|
-
printKeyValue(
|
|
289
|
+
if (body && typeof body === 'object' && Object.keys(body).length > 0) {
|
|
290
|
+
printKeyValue(body);
|
|
219
291
|
}
|
|
220
292
|
}
|
|
221
293
|
catch (error) {
|
|
@@ -235,18 +307,28 @@ Examples:
|
|
|
235
307
|
$ switchbot devices types --json
|
|
236
308
|
`)
|
|
237
309
|
.action(() => {
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
310
|
+
try {
|
|
311
|
+
const catalog = getEffectiveCatalog();
|
|
312
|
+
const fmt = resolveFormat();
|
|
313
|
+
if (fmt === 'json') {
|
|
314
|
+
printJson(catalog);
|
|
315
|
+
return;
|
|
316
|
+
}
|
|
317
|
+
const headers = ['type', 'category', 'commands', 'aliases'];
|
|
318
|
+
const rows = catalog.map((e) => [
|
|
319
|
+
e.type,
|
|
320
|
+
e.category,
|
|
321
|
+
String(e.commands.length),
|
|
322
|
+
(e.aliases ?? []).join(', ') || '—',
|
|
323
|
+
]);
|
|
324
|
+
renderRows(headers, rows, fmt, resolveFields());
|
|
325
|
+
if (fmt === 'table') {
|
|
326
|
+
console.log(`\nTotal: ${catalog.length} device type(s)`);
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
catch (error) {
|
|
330
|
+
handleError(error);
|
|
241
331
|
}
|
|
242
|
-
const rows = DEVICE_CATALOG.map((e) => [
|
|
243
|
-
e.type,
|
|
244
|
-
e.category,
|
|
245
|
-
String(e.commands.length),
|
|
246
|
-
(e.aliases ?? []).join(', ') || '—',
|
|
247
|
-
]);
|
|
248
|
-
printTable(['type', 'category', 'commands', 'aliases'], rows);
|
|
249
|
-
console.log(`\nTotal: ${DEVICE_CATALOG.length} device type(s)`);
|
|
250
332
|
});
|
|
251
333
|
// switchbot devices commands <type>
|
|
252
334
|
devices
|
|
@@ -270,65 +352,76 @@ Examples:
|
|
|
270
352
|
`)
|
|
271
353
|
.action((typeParts) => {
|
|
272
354
|
const type = typeParts.join(' ');
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
355
|
+
try {
|
|
356
|
+
const match = findCatalogEntry(type);
|
|
357
|
+
if (!match) {
|
|
358
|
+
throw new UsageError(`No device type matches "${type}". Try 'switchbot devices types' to see the full list.`);
|
|
359
|
+
}
|
|
360
|
+
if (Array.isArray(match)) {
|
|
361
|
+
const types = match.map((m) => m.type).join(', ');
|
|
362
|
+
throw new UsageError(`"${type}" matches multiple types: ${types}. Be more specific.`);
|
|
363
|
+
}
|
|
364
|
+
if (isJsonMode()) {
|
|
365
|
+
printJson(match);
|
|
366
|
+
return;
|
|
367
|
+
}
|
|
368
|
+
renderCatalogEntry(match);
|
|
284
369
|
}
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
return;
|
|
370
|
+
catch (error) {
|
|
371
|
+
handleError(error);
|
|
288
372
|
}
|
|
289
|
-
renderCatalogEntry(match);
|
|
290
373
|
});
|
|
291
374
|
// switchbot devices describe <deviceId>
|
|
292
375
|
devices
|
|
293
376
|
.command('describe')
|
|
294
377
|
.description('Describe a device by ID: metadata + supported commands + status fields (1 API call)')
|
|
295
378
|
.argument('<deviceId>', 'Target device ID from "devices list"')
|
|
379
|
+
.option('--live', 'Also fetch live status values and merge them into capabilities (costs 1 extra API call)')
|
|
296
380
|
.addHelpText('after', `
|
|
297
|
-
Makes a
|
|
298
|
-
|
|
299
|
-
|
|
381
|
+
Makes a GET /v1.1/devices call to look up the device's type, then prints its
|
|
382
|
+
metadata alongside the matching catalog entry (supported commands + parameter
|
|
383
|
+
formats + status field names). With --live, makes a second call to fetch the
|
|
384
|
+
current status values and merges them into the output.
|
|
300
385
|
|
|
301
|
-
|
|
386
|
+
JSON output shape (--json):
|
|
387
|
+
{
|
|
388
|
+
device: <raw API fields>,
|
|
389
|
+
controlType: <string|null>,
|
|
390
|
+
catalog: <catalog entry, or null>,
|
|
391
|
+
capabilities: {
|
|
392
|
+
role: <functional role>,
|
|
393
|
+
readOnly: <boolean>,
|
|
394
|
+
commands: [{command, parameter, description, idempotent?, destructive?, exampleParams?}],
|
|
395
|
+
statusFields: [<name>],
|
|
396
|
+
liveStatus: <status payload when --live was passed>
|
|
397
|
+
},
|
|
398
|
+
source: "catalog" | "live" | "catalog+live" | "none",
|
|
399
|
+
suggestedActions: [{command, parameter?, description}]
|
|
400
|
+
}
|
|
302
401
|
|
|
303
402
|
Examples:
|
|
304
403
|
$ switchbot devices describe ABC123DEF456
|
|
404
|
+
$ switchbot devices describe ABC123DEF456 --live
|
|
305
405
|
$ switchbot devices describe ABC123DEF456 --json
|
|
406
|
+
$ switchbot devices describe <lockId> --json | jq '.capabilities.commands[] | select(.destructive)'
|
|
306
407
|
`)
|
|
307
|
-
.action(async (deviceId) => {
|
|
408
|
+
.action(async (deviceId, options) => {
|
|
308
409
|
try {
|
|
309
|
-
const
|
|
310
|
-
const
|
|
311
|
-
const { deviceList, infraredRemoteList } = res.data.body;
|
|
312
|
-
updateCacheFromDeviceList(res.data.body);
|
|
313
|
-
const physical = deviceList.find((d) => d.deviceId === deviceId);
|
|
314
|
-
const ir = infraredRemoteList.find((d) => d.deviceId === deviceId);
|
|
315
|
-
if (!physical && !ir) {
|
|
316
|
-
console.error(`No device with id "${deviceId}" found on this account.`);
|
|
317
|
-
console.error(`Try 'switchbot devices list' to see the full list.`);
|
|
318
|
-
process.exit(1);
|
|
319
|
-
}
|
|
320
|
-
const typeName = physical ? (physical.deviceType ?? '') : ir.remoteType;
|
|
321
|
-
const match = typeName ? findCatalogEntry(typeName) : null;
|
|
322
|
-
const catalogEntry = !match || Array.isArray(match) ? null : match;
|
|
410
|
+
const result = await describeDevice(deviceId, options);
|
|
411
|
+
const { device, isPhysical, typeName, controlType, catalog, capabilities, source, suggestedActions: picks } = result;
|
|
323
412
|
if (isJsonMode()) {
|
|
324
413
|
printJson({
|
|
325
|
-
device
|
|
326
|
-
controlType
|
|
327
|
-
catalog
|
|
414
|
+
device,
|
|
415
|
+
controlType,
|
|
416
|
+
catalog,
|
|
417
|
+
capabilities,
|
|
418
|
+
source,
|
|
419
|
+
suggestedActions: picks,
|
|
328
420
|
});
|
|
329
421
|
return;
|
|
330
422
|
}
|
|
331
|
-
if (
|
|
423
|
+
if (isPhysical) {
|
|
424
|
+
const physical = device;
|
|
332
425
|
printKeyValue({
|
|
333
426
|
deviceId: physical.deviceId,
|
|
334
427
|
deviceName: physical.deviceName,
|
|
@@ -341,8 +434,9 @@ Examples:
|
|
|
341
434
|
cloudService: physical.enableCloudService,
|
|
342
435
|
});
|
|
343
436
|
}
|
|
344
|
-
else
|
|
345
|
-
const
|
|
437
|
+
else {
|
|
438
|
+
const ir = device;
|
|
439
|
+
const inherited = result.inheritedLocation;
|
|
346
440
|
printKeyValue({
|
|
347
441
|
deviceId: ir.deviceId,
|
|
348
442
|
deviceName: ir.deviceName,
|
|
@@ -354,66 +448,51 @@ Examples:
|
|
|
354
448
|
hub: ir.hubDeviceId || '—',
|
|
355
449
|
});
|
|
356
450
|
}
|
|
451
|
+
const liveStatus = capabilities && 'liveStatus' in capabilities ? capabilities.liveStatus : undefined;
|
|
357
452
|
console.log('');
|
|
358
|
-
if (!
|
|
453
|
+
if (!catalog) {
|
|
359
454
|
console.log(`(Type "${typeName}" is not in the built-in catalog — no command reference available.)`);
|
|
360
|
-
|
|
455
|
+
if (isPhysical) {
|
|
456
|
+
console.log(`Try 'switchbot devices status ${deviceId}' to see what this device reports.`);
|
|
457
|
+
}
|
|
458
|
+
else {
|
|
459
|
+
console.log(`Send custom IR buttons with: switchbot devices command ${deviceId} "<buttonName>" --type customize`);
|
|
460
|
+
}
|
|
461
|
+
if (liveStatus) {
|
|
462
|
+
console.log('\nLive status:');
|
|
463
|
+
printKeyValue(liveStatus);
|
|
464
|
+
}
|
|
361
465
|
return;
|
|
362
466
|
}
|
|
363
|
-
renderCatalogEntry(
|
|
467
|
+
renderCatalogEntry(catalog);
|
|
468
|
+
if (liveStatus) {
|
|
469
|
+
console.log('\nLive status:');
|
|
470
|
+
printKeyValue(liveStatus);
|
|
471
|
+
}
|
|
364
472
|
}
|
|
365
473
|
catch (error) {
|
|
474
|
+
if (error instanceof DeviceNotFoundError) {
|
|
475
|
+
console.error(error.message);
|
|
476
|
+
console.error(`Try 'switchbot devices list' to see the full list.`);
|
|
477
|
+
process.exit(1);
|
|
478
|
+
}
|
|
366
479
|
handleError(error);
|
|
367
480
|
}
|
|
368
481
|
});
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
map.set(d.deviceId, {
|
|
376
|
-
family: d.familyName ?? undefined,
|
|
377
|
-
room: d.roomName ?? undefined,
|
|
378
|
-
roomID: d.roomID ?? undefined,
|
|
379
|
-
});
|
|
380
|
-
}
|
|
381
|
-
return map;
|
|
382
|
-
}
|
|
383
|
-
function validateCommandAgainstCache(deviceId, cmd, parameter, commandType) {
|
|
384
|
-
// Custom IR buttons have arbitrary names — skip validation.
|
|
385
|
-
if (commandType === 'customize')
|
|
386
|
-
return;
|
|
387
|
-
const cached = getCachedDevice(deviceId);
|
|
388
|
-
if (!cached)
|
|
389
|
-
return;
|
|
390
|
-
const match = findCatalogEntry(cached.type);
|
|
391
|
-
if (!match || Array.isArray(match))
|
|
392
|
-
return;
|
|
393
|
-
const entry = match;
|
|
394
|
-
const builtinCommands = entry.commands.filter((c) => c.commandType !== 'customize');
|
|
395
|
-
if (builtinCommands.length === 0)
|
|
396
|
-
return;
|
|
397
|
-
const spec = builtinCommands.find((c) => c.command === cmd);
|
|
398
|
-
if (!spec) {
|
|
399
|
-
const unique = [...new Set(builtinCommands.map((c) => c.command))];
|
|
400
|
-
console.error(`Error: "${cmd}" is not a supported command for ${cached.name} (${cached.type}).`);
|
|
401
|
-
console.error(`Supported commands: ${unique.join(', ')}`);
|
|
402
|
-
console.error(`Run 'switchbot devices commands ${JSON.stringify(cached.type)}' for parameter formats and descriptions.`);
|
|
403
|
-
console.error(`(If the catalog is out of date, run 'switchbot devices list' to refresh the local cache, or pass --type customize for custom IR buttons.)`);
|
|
404
|
-
process.exit(2);
|
|
405
|
-
}
|
|
406
|
-
const noParamExpected = spec.parameter === '—';
|
|
407
|
-
const userProvidedParam = parameter !== undefined && parameter !== 'default';
|
|
408
|
-
if (noParamExpected && userProvidedParam) {
|
|
409
|
-
console.error(`Error: "${cmd}" takes no parameter, but one was provided: "${parameter}".`);
|
|
410
|
-
console.error(`Try: switchbot devices command ${deviceId} ${cmd}`);
|
|
411
|
-
process.exit(2);
|
|
412
|
-
}
|
|
482
|
+
// switchbot devices batch <command> ...
|
|
483
|
+
registerBatchCommand(devices);
|
|
484
|
+
// switchbot devices watch <id...>
|
|
485
|
+
registerWatchCommand(devices);
|
|
486
|
+
// switchbot devices explain <id>
|
|
487
|
+
registerExplainCommand(devices);
|
|
413
488
|
}
|
|
414
489
|
function renderCatalogEntry(entry) {
|
|
415
490
|
console.log(`Type: ${entry.type}`);
|
|
416
491
|
console.log(`Category: ${entry.category === 'ir' ? 'IR remote' : 'Physical device'}`);
|
|
492
|
+
if (entry.role)
|
|
493
|
+
console.log(`Role: ${entry.role}`);
|
|
494
|
+
if (entry.readOnly)
|
|
495
|
+
console.log(`ReadOnly: yes (status-only device, no control commands)`);
|
|
417
496
|
if (entry.aliases && entry.aliases.length > 0) {
|
|
418
497
|
console.log(`Aliases: ${entry.aliases.join(', ')}`);
|
|
419
498
|
}
|
|
@@ -422,12 +501,20 @@ function renderCatalogEntry(entry) {
|
|
|
422
501
|
}
|
|
423
502
|
else {
|
|
424
503
|
console.log('\nCommands:');
|
|
425
|
-
const rows = entry.commands.map((c) =>
|
|
426
|
-
|
|
427
|
-
c.
|
|
428
|
-
|
|
429
|
-
|
|
504
|
+
const rows = entry.commands.map((c) => {
|
|
505
|
+
const flags = [];
|
|
506
|
+
if (c.commandType === 'customize')
|
|
507
|
+
flags.push('customize');
|
|
508
|
+
if (c.destructive)
|
|
509
|
+
flags.push('!destructive');
|
|
510
|
+
const label = flags.length > 0 ? `${c.command} [${flags.join(', ')}]` : c.command;
|
|
511
|
+
return [label, c.parameter, c.description];
|
|
512
|
+
});
|
|
430
513
|
printTable(['command', 'parameter', 'description'], rows);
|
|
514
|
+
const hasDestructive = entry.commands.some((c) => c.destructive);
|
|
515
|
+
if (hasDestructive) {
|
|
516
|
+
console.log('\n[!destructive] commands have hard-to-reverse real-world effects — confirm before issuing.');
|
|
517
|
+
}
|
|
431
518
|
}
|
|
432
519
|
if (entry.statusFields && entry.statusFields.length > 0) {
|
|
433
520
|
console.log('\nStatus fields (from "devices status"):');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"devices.js","sourceRoot":"","sources":["../../src/commands/devices.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"devices.js","sourceRoot":"","sources":["../../src/commands/devices.ts"],"names":[],"mappings":"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"}
|