@coffeerunhobby/mcp-ha-connect 2.5.0 → 2.5.2
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/.env.example +9 -1
- package/README.md +41 -16
- package/dist/config.d.ts +6 -0
- package/dist/config.js +16 -0
- package/dist/config.js.map +1 -1
- package/dist/net/adapters/omada.d.ts +3 -1
- package/dist/net/adapters/omada.js +18 -0
- package/dist/net/adapters/omada.js.map +1 -1
- package/dist/net/adapters/ruijie.d.ts +30 -5
- package/dist/net/adapters/ruijie.js +150 -13
- package/dist/net/adapters/ruijie.js.map +1 -1
- package/dist/net/model.d.ts +29 -1
- package/dist/net/model.js.map +1 -1
- package/dist/ruijieClient/index.d.ts +23 -1
- package/dist/ruijieClient/index.js +73 -14
- package/dist/ruijieClient/index.js.map +1 -1
- package/dist/server/http.d.ts +9 -0
- package/dist/server/http.js +23 -8
- package/dist/server/http.js.map +1 -1
- package/dist/tools/net/index.d.ts +6 -0
- package/dist/tools/net/index.js +26 -1
- package/dist/tools/net/index.js.map +1 -1
- package/dist/upstreams.js +3 -0
- package/dist/upstreams.js.map +1 -1
- package/dist/utils/tlsDispatcher.d.ts +12 -0
- package/dist/utils/tlsDispatcher.js +34 -1
- package/dist/utils/tlsDispatcher.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +1 -1
package/.env.example
CHANGED
|
@@ -190,6 +190,14 @@ MCP_AUTH_SECRET=replace-with-a-random-secret-at-least-32-characters
|
|
|
190
190
|
# The admin password (the username is always admin). A refused login is never retried:
|
|
191
191
|
# wrong passwords lock the router's login.
|
|
192
192
|
# RUIJIE_PASSWORD=
|
|
193
|
-
#
|
|
193
|
+
# Recommended: pin the router's self-signed certificate by its SHA-256 fingerprint (https only).
|
|
194
|
+
# Exactly that certificate is trusted; any other ends the connection before the password is sent.
|
|
195
|
+
# openssl s_client -connect 192.168.110.1:443 </dev/null | openssl x509 -noout -fingerprint -sha256
|
|
196
|
+
# RUIJIE_CERT_SHA256=
|
|
197
|
+
# Without a pin: false accepts any certificate (for this client only).
|
|
194
198
|
# RUIJIE_STRICT_SSL=false
|
|
199
|
+
# true: every change through the tools is refused (reads only).
|
|
200
|
+
# RUIJIE_READ_ONLY=false
|
|
201
|
+
# false: firmware is listed, but net_upgradeFirmware is refused.
|
|
202
|
+
# RUIJIE_FIRMWARE_UPGRADE=true
|
|
195
203
|
# RUIJIE_TIMEOUT=15000
|
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# MCP-HA-Connect
|
|
2
2
|
|
|
3
|
-
A production-ready Model Context Protocol (MCP) server for Home Assistant integration with AI assistants like Claude and LM Studio.
|
|
3
|
+
A production-ready Model Context Protocol (MCP) server for Home Assistant integration with AI assistants like Claude and LM Studio, with network management for TP-Link Omada and Ruijie / Reyee routers through one vendor-neutral set of `net_` tools.
|
|
4
4
|
|
|
5
5
|
[](https://www.npmjs.com/package/@coffeerunhobby/mcp-ha-connect)
|
|
6
6
|
[](https://github.com/coffeerunhobby/mcp-ha-connect/pkgs/container/mcp-ha-connect)
|
|
@@ -73,11 +73,24 @@ high-value questions an LLM can actually answer about your network:
|
|
|
73
73
|
- **Client management** — list/inspect connected clients, traffic activity, and apply
|
|
74
74
|
rate-limit profiles, with presence correlation against Home Assistant device trackers.
|
|
75
75
|
|
|
76
|
+
### Vendor-neutral network management (`net_` tools)
|
|
77
|
+
|
|
78
|
+
- **One model for every vendor** — networks (VLANs, DHCP), Wi-Fi, rules between networks, clients and the network
|
|
79
|
+
each is on, switch ports, the mDNS repeater and firmware, the same way on TP-Link Omada and Ruijie / Reyee routers.
|
|
80
|
+
- **Safe changes** — every change has a dry run; anything that would cut devices off needs the dry run's `basis`
|
|
81
|
+
and `allowLockout`, and is refused if the network changed in between. The controller's and this server's own
|
|
82
|
+
connections are protected.
|
|
83
|
+
- **Firmware** — what each device runs and is offered; on Ruijie, the upgrade itself (ADMIN only).
|
|
84
|
+
|
|
76
85
|
> A discoverable resource-graph mode (`MCP_TOOL_REGISTRATION_MODE=graph`) exposes all of the
|
|
77
86
|
> above through two tools — `omada_browse` + `omada_read` — keeping the tool-schema budget
|
|
78
87
|
> small for low-context models. See the Omada tool tables below for the full eager surface.
|
|
79
88
|
|
|
80
|
-
## Available Tools (
|
|
89
|
+
## Available Tools (112 Total)
|
|
90
|
+
|
|
91
|
+
With every plugin on in the default eager mode: Home Assistant 38 (including the 3 owner-question tools, when
|
|
92
|
+
`MCP_OWNER_QUESTIONS_ENABLED` is on), Omada 49, `net_` 23, AI 1 and `invokeAction` 1 (only with `MCP_REST_ACTIONS`).
|
|
93
|
+
In graph mode the Omada reads collapse into `omada_browse` + `omada_read` (Omada 26, 89 in total).
|
|
81
94
|
|
|
82
95
|
### Home Assistant Tools (38)
|
|
83
96
|
|
|
@@ -251,7 +264,7 @@ Lets the controller enforce a schedule itself (e.g. a curfew) instead of a daily
|
|
|
251
264
|
| `omada_getSiteNtpStatus` | Get the site's NTP server configuration and status |
|
|
252
265
|
| `omada_setSiteNtpServers` | Replace the site's NTP server list (needs `CONFIGURE`; `dryRun` previews the change) |
|
|
253
266
|
|
|
254
|
-
### Vendor-neutral Network Tools (
|
|
267
|
+
### Vendor-neutral Network Tools (23)
|
|
255
268
|
|
|
256
269
|
The `net_` tools describe networks the same way for every controller vendor: one shared model, with an adapter per
|
|
257
270
|
vendor (TP-Link Omada, and Ruijie / Reyee routers read-only since 2.5.0; UniFi and MikroTik are planned). Each adapter
|
|
@@ -279,6 +292,8 @@ one is set in the controller's web UI. Reads need `QUERY`, changes `CONFIGURE`.
|
|
|
279
292
|
| `net_listPorts` | Switch ports: the networks each carries (untagged and tagged), its profile, the online devices on it, uplinks, and why a port is protected |
|
|
280
293
|
| `net_assignPort` | Set the networks a switch port carries: its untagged network (e.g. a wired IoT device's port on "IoT") and optionally tagged ones (`all`, `none` or a list); its other settings keep following its profile. Uplinks (from the controller's topology: the switch's own uplink and every network device below it), the ports the controller and this server are on (`MCP_SERVER_ADDRESSES`), link aggregation ports and ports with their own settings are refused, whatever `allowLockout` says. While where the controller or this server is can't be told, ports with devices on them are left alone. Devices that would lose their network need `allowLockout` |
|
|
281
294
|
| `net_getMdnsRepeater` / `net_setMdnsRepeater` | Whether mDNS (Bonjour) discovery is repeated between networks; switch it on or off, or change the networks (e.g. so Home Assistant discovers IoT devices). Discovery only: traffic still follows the rules |
|
|
295
|
+
| `net_listFirmware` | The firmware each network device runs and, when the vendor offers one, the newer version with its release notes and whether `net_upgradeFirmware` can install it |
|
|
296
|
+
| `net_upgradeFirmware` | **ADMIN.** Install the version the vendor offers for a device, only from the vendor's own download server; the device restarts keeping its settings, so everything behind it is offline for a few minutes (always needs a dry run first, then `allowLockout` and its `basis`). Ruijie routers only for now; on Omada firmware is listed, upgrades stay in the controller web UI |
|
|
282
297
|
|
|
283
298
|
On Omada, a network isolation flag (use a block rule instead), a "guest" network type, switching IPv6 on, and WPA2/WPA3
|
|
284
299
|
mixed mode are not available through the API and are refused. Rules are gateway ACLs (the gateway routes between the
|
|
@@ -295,9 +310,11 @@ its LAN networks, the devices it sees on its LAN right now (named by their addre
|
|
|
295
310
|
ports (the WAN port as the protected uplink) and its access-control rules; rules the model can't say faithfully (a
|
|
296
311
|
source "anywhere", source ports, IPv6, user groups, schedules, only some connection states, an interface restriction the
|
|
297
312
|
model can't carry, ports for TCP or UDP only) are shown as `foreign`.
|
|
298
|
-
Every change
|
|
299
|
-
|
|
300
|
-
|
|
313
|
+
Every change but a firmware upgrade (2.5.1: the version the router itself is offered, the same as its page's Online
|
|
314
|
+
Upgrade) is refused for now: reservations and rules come next, then networks. It talks to the router's local web
|
|
315
|
+
API with its admin password; use `https://` with `RUIJIE_CERT_SHA256` (the router's own login page hides the password
|
|
316
|
+
with a key that is shipped in the page, so only HTTPS really protects it, and the router's self-signed certificate is
|
|
317
|
+
best pinned: the RG-EG105G-V3 ships OpenSSL's sample identity, valid until 2122, likely the same on every unit). A refused login is never retried, because wrong passwords lock
|
|
301
318
|
the router's login: the Ruijie tools then refuse until the setting is fixed and the server restarted.
|
|
302
319
|
|
|
303
320
|
### AI Tools (1)
|
|
@@ -306,6 +323,12 @@ the router's login: the Ruijie tools then refuse until the setting is fixed and
|
|
|
306
323
|
|------|-------------|
|
|
307
324
|
| `analyzeSensors` | Analyze sensor data using AI (Ollama) to detect issues and provide recommendations |
|
|
308
325
|
|
|
326
|
+
### Infrastructure Tools (1)
|
|
327
|
+
|
|
328
|
+
| Tool | Description |
|
|
329
|
+
|------|-------------|
|
|
330
|
+
| `invokeAction` | **ADMIN.** Fire one of the REST actions pre-registered in `MCP_REST_ACTIONS` (e.g. a deploy webhook), each with its own cooldown; registered only when that setting has actions. Not on the chat face |
|
|
331
|
+
|
|
309
332
|
### MCP Resources
|
|
310
333
|
|
|
311
334
|
| Resource URI | Description |
|
|
@@ -318,8 +341,8 @@ the router's login: the Ruijie tools then refuse until the setting is fixed and
|
|
|
318
341
|
|
|
319
342
|
## Prerequisites
|
|
320
343
|
|
|
321
|
-
- **Node.js 20+** (
|
|
322
|
-
- **npm 10.8+**
|
|
344
|
+
- **Node.js 20+** (CI tests Node 20, 22, 24 and 26; the Docker image runs Node 24) - for npm/npx methods
|
|
345
|
+
- **npm 10.8+** - for npm/npx methods
|
|
323
346
|
- **Docker** (optional) - for Docker method
|
|
324
347
|
- Home Assistant instance with long-lived access token
|
|
325
348
|
- Network access to your Home Assistant instance
|
|
@@ -370,12 +393,13 @@ the router's login: the Ruijie tools then refuse until the setting is fixed and
|
|
|
370
393
|
| `MCP_HTTP_ENABLE_HEALTHCHECK` | `true` | Enable health check endpoint |
|
|
371
394
|
| `MCP_HTTP_HEALTHCHECK_PATH` | `/health` | Health check path |
|
|
372
395
|
| `MCP_HTTP_ALLOW_CORS` | `true` | Enable CORS |
|
|
373
|
-
| `MCP_HTTP_ALLOWED_ORIGINS` | `127.0.0.1
|
|
396
|
+
| `MCP_HTTP_ALLOWED_ORIGINS` | `http://localhost:<port>,http://127.0.0.1:<port>` | Allowed origins (and hosts) for CORS and DNS-rebinding protection; list both the bare host and the `https://` form of a public domain |
|
|
374
397
|
|
|
375
398
|
### Optional - Chat face (OpenAPI/REST surface)
|
|
376
399
|
|
|
377
400
|
The server also serves an OpenAPI/REST face (`/openapi.json` + `/api/*`) for chat UIs
|
|
378
|
-
like Open WebUI.
|
|
401
|
+
like Open WebUI. `/openapi.json` needs no token, so it is served on the LAN only: a request that came through
|
|
402
|
+
Cloudflare (it carries `CF-Connecting-IP` or `CF-Ray`) gets a 404, so point the chat UI at the server's LAN address. By default it exposes the classic 8 Home Assistant tools. Tools marked
|
|
379
403
|
chat-eligible in code can be activated per category with read/write granularity:
|
|
380
404
|
|
|
381
405
|
| Variable | Default | Description |
|
|
@@ -480,7 +504,7 @@ Clients only see the tools they may use: `tools/list` is filtered by the caller'
|
|
|
480
504
|
| `AI_PLUGIN_ENABLED` | `true` | Enable AI plugin |
|
|
481
505
|
| `AI_PROVIDER` | `ollama` | AI provider: `ollama`, `openai`, or `none` |
|
|
482
506
|
| `AI_URL` | `http://localhost:11434` | AI server URL (Ollama) |
|
|
483
|
-
| `AI_MODEL` | `
|
|
507
|
+
| `AI_MODEL` | `qwen3:14b` | AI model name |
|
|
484
508
|
| `AI_TIMEOUT` | `60000` | AI request timeout (ms) |
|
|
485
509
|
|
|
486
510
|
### Optional - Omada Network Controller
|
|
@@ -504,7 +528,10 @@ Clients only see the tools they may use: `tools/list` is filtered by the caller'
|
|
|
504
528
|
| `RUIJIE_PLUGIN_ENABLED` | `false` | Enable the Ruijie router (its `net_` tools take `controller: "ruijie"`) |
|
|
505
529
|
| `RUIJIE_BASE_URL` | - | The router's management address, e.g. `https://192.168.110.1` (use https: over plain http its password can be read on the wire) |
|
|
506
530
|
| `RUIJIE_PASSWORD` | - | The router's admin password (the username is always `admin`). Never retried when refused: wrong passwords lock the router's login |
|
|
507
|
-
| `
|
|
531
|
+
| `RUIJIE_CERT_SHA256` | - | **Recommended.** The router certificate's SHA-256 fingerprint (colons allowed): exactly that certificate is trusted instead of a CA, and any other ends the connection before the password is sent. Needs an `https://` address; replaces `RUIJIE_STRICT_SSL`. Get it with `openssl s_client -connect <router>:443 </dev/null \| openssl x509 -noout -fingerprint -sha256` |
|
|
532
|
+
| `RUIJIE_STRICT_SSL` | `true` | Validate the router's certificate against the system CAs; `false` accepts any certificate (this client only). Routers ship a self-signed one: prefer `RUIJIE_CERT_SHA256` |
|
|
533
|
+
| `RUIJIE_READ_ONLY` | `false` | `true`: every change through the tools is refused (reads only) |
|
|
534
|
+
| `RUIJIE_FIRMWARE_UPGRADE` | `true` | `false`: firmware is still listed, but `net_upgradeFirmware` is refused |
|
|
508
535
|
| `RUIJIE_TIMEOUT` | `15000` | Request timeout (ms) |
|
|
509
536
|
|
|
510
537
|
## Advanced Configuration Examples
|
|
@@ -522,7 +549,7 @@ Clients only see the tools they may use: `tools/list` is filtered by the caller'
|
|
|
522
549
|
"HA_TOKEN": "your_token",
|
|
523
550
|
"AI_PROVIDER": "ollama",
|
|
524
551
|
"AI_URL": "http://ollama.10.0.0.17.nip.io:11434",
|
|
525
|
-
"AI_MODEL": "
|
|
552
|
+
"AI_MODEL": "qwen3:14b"
|
|
526
553
|
}
|
|
527
554
|
}
|
|
528
555
|
}
|
|
@@ -635,8 +662,6 @@ docker run -d --name mcp-ha-connect \
|
|
|
635
662
|
### Mode 4: Docker Compose
|
|
636
663
|
|
|
637
664
|
```yaml
|
|
638
|
-
version: '3.8'
|
|
639
|
-
|
|
640
665
|
services:
|
|
641
666
|
mcp-ha-connect:
|
|
642
667
|
image: ghcr.io/coffeerunhobby/mcp-ha-connect:latest
|
|
@@ -858,7 +883,7 @@ Add host gateway:
|
|
|
858
883
|
### AI Analysis Not Working
|
|
859
884
|
|
|
860
885
|
1. **Verify Ollama is running** - `curl http://your-ollama-url:11434/api/tags`
|
|
861
|
-
2. **Check model is available** - Ensure model is pulled: `ollama pull
|
|
886
|
+
2. **Check model is available** - Ensure the model in `AI_MODEL` (default `qwen3:14b`) is pulled: `ollama pull qwen3:14b`
|
|
862
887
|
3. **Set AI_PROVIDER** - Must be set to `ollama` (not `none`)
|
|
863
888
|
|
|
864
889
|
## Development
|
package/dist/config.d.ts
CHANGED
|
@@ -23,6 +23,12 @@ export interface EnvironmentConfig {
|
|
|
23
23
|
ruijieBaseUrl?: string;
|
|
24
24
|
ruijiePassword?: string;
|
|
25
25
|
ruijieStrictSsl: boolean;
|
|
26
|
+
/** The router certificate's SHA-256 fingerprint: trusted exactly, instead of a CA (https only). */
|
|
27
|
+
ruijieCertSha256?: string;
|
|
28
|
+
/** Every change through the Ruijie adapter refused. */
|
|
29
|
+
ruijieReadOnly: boolean;
|
|
30
|
+
/** Whether net_upgradeFirmware may install firmware on the Ruijie router. */
|
|
31
|
+
ruijieFirmwareUpgrade: boolean;
|
|
26
32
|
ruijieTimeout?: number;
|
|
27
33
|
aiProvider: AIProviderType;
|
|
28
34
|
aiUrl: string;
|
package/dist/config.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
import { isValidBindAddress, isValidOrigin, isLoopbackAddress } from './utils/config-validations.js';
|
|
3
3
|
import { parsePermissionsConfig } from './permissions/index.js';
|
|
4
|
+
import { normalizeFingerprint } from './utils/tlsDispatcher.js';
|
|
4
5
|
import { parseRestActions } from './tools/infra/actions.js';
|
|
5
6
|
import { parseChatTools } from './server/chatSlice.js';
|
|
6
7
|
import { logger } from './utils/logger.js';
|
|
@@ -43,6 +44,12 @@ const envSchema = z
|
|
|
43
44
|
ruijieBaseUrl: z.string().url({ message: 'RUIJIE_BASE_URL must be a valid URL' }).optional(),
|
|
44
45
|
ruijiePassword: z.string().min(1).optional(),
|
|
45
46
|
ruijieStrictSsl: createBooleanStringSchema(true),
|
|
47
|
+
ruijieCertSha256: z
|
|
48
|
+
.string()
|
|
49
|
+
.optional()
|
|
50
|
+
.refine((v) => v === undefined || normalizeFingerprint(v) !== undefined, { message: 'RUIJIE_CERT_SHA256 must be a SHA-256 fingerprint (64 hex digits, colons allowed)' }),
|
|
51
|
+
ruijieReadOnly: createBooleanStringSchema(false),
|
|
52
|
+
ruijieFirmwareUpgrade: createBooleanStringSchema(true),
|
|
46
53
|
ruijieTimeout: numericStringSchema,
|
|
47
54
|
// Pre-registered REST actions for the invokeAction tool (optional; raw JSON,
|
|
48
55
|
// parsed + validated by parseRestActions after the env parse)
|
|
@@ -108,6 +115,9 @@ const envSchema = z
|
|
|
108
115
|
// zod 4 removed refine()'s message-as-function form; superRefine reports the same
|
|
109
116
|
// message and path, naming the first invalid origin.
|
|
110
117
|
.superRefine((data, ctx) => {
|
|
118
|
+
if (data.ruijieCertSha256 !== undefined && !data.ruijieBaseUrl?.toLowerCase().startsWith('https:')) {
|
|
119
|
+
ctx.addIssue({ code: 'custom', message: 'RUIJIE_CERT_SHA256 needs an https:// RUIJIE_BASE_URL (a pin checks the TLS certificate)', path: ['ruijieCertSha256'] });
|
|
120
|
+
}
|
|
111
121
|
const invalidOrigin = data.httpAllowedOrigins?.find((origin) => !isValidOrigin(origin));
|
|
112
122
|
if (invalidOrigin !== undefined) {
|
|
113
123
|
ctx.addIssue({
|
|
@@ -177,6 +187,9 @@ export function loadConfig(env = process.env) {
|
|
|
177
187
|
ruijieBaseUrl: env.RUIJIE_BASE_URL,
|
|
178
188
|
ruijiePassword: env.RUIJIE_PASSWORD,
|
|
179
189
|
ruijieStrictSsl: env.RUIJIE_STRICT_SSL,
|
|
190
|
+
ruijieCertSha256: env.RUIJIE_CERT_SHA256,
|
|
191
|
+
ruijieReadOnly: env.RUIJIE_READ_ONLY,
|
|
192
|
+
ruijieFirmwareUpgrade: env.RUIJIE_FIRMWARE_UPGRADE,
|
|
180
193
|
ruijieTimeout: env.RUIJIE_TIMEOUT,
|
|
181
194
|
// Pre-registered REST actions
|
|
182
195
|
restActions: env.MCP_REST_ACTIONS,
|
|
@@ -267,6 +280,9 @@ export function loadConfig(env = process.env) {
|
|
|
267
280
|
ruijieBaseUrl: parsed.data.ruijieBaseUrl?.replace(/\/$/, ''),
|
|
268
281
|
ruijiePassword: parsed.data.ruijiePassword,
|
|
269
282
|
ruijieStrictSsl: parsed.data.ruijieStrictSsl,
|
|
283
|
+
ruijieCertSha256: parsed.data.ruijieCertSha256 === undefined ? undefined : normalizeFingerprint(parsed.data.ruijieCertSha256),
|
|
284
|
+
ruijieReadOnly: parsed.data.ruijieReadOnly,
|
|
285
|
+
ruijieFirmwareUpgrade: parsed.data.ruijieFirmwareUpgrade,
|
|
270
286
|
ruijieTimeout: parsed.data.ruijieTimeout,
|
|
271
287
|
// Pre-registered REST actions (throws on malformed JSON — config typos fail loudly)
|
|
272
288
|
restActions: parseRestActions(parsed.data.restActions),
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
* - Omada lists every SSID again under a pseudo WLAN group "gateway" without detail.
|
|
16
16
|
*/
|
|
17
17
|
import type { OmadaClient } from '../../omadaClient/index.js';
|
|
18
|
-
import { type ApplyResult, type Capabilities, type Change, type Client, type Group, type MdnsRepeater, type Network, type NetworkController, type Plan, type Port, type PortProfile, type PortRef, type ProtectedResources, type Reservation, type Rule, type Wifi } from '../model.js';
|
|
18
|
+
import { type ApplyResult, type Capabilities, type Change, type Client, type Group, type Firmware, type MdnsRepeater, type Network, type NetworkController, type Plan, type Port, type PortProfile, type PortRef, type ProtectedResources, type Reservation, type Rule, type Wifi } from '../model.js';
|
|
19
19
|
export interface OmadaAdapterOptions {
|
|
20
20
|
siteId?: string;
|
|
21
21
|
/** The controller's host name or address (host of OMADA_BASE_URL): its network is protected. */
|
|
@@ -64,6 +64,8 @@ export declare class OmadaNetworkController implements NetworkController {
|
|
|
64
64
|
listPorts(device?: PortRef['device']): Promise<Port[]>;
|
|
65
65
|
listRules(): Promise<Rule[]>;
|
|
66
66
|
listGroups(kind?: Group['kind']): Promise<Group[]>;
|
|
67
|
+
/** The running firmware of every adopted device; whether a newer one exists isn't read here (the controller has to check first). */
|
|
68
|
+
listFirmware(): Promise<Firmware[]>;
|
|
67
69
|
getMdnsRepeater(): Promise<MdnsRepeater>;
|
|
68
70
|
private portWorld;
|
|
69
71
|
/** For each network, the devices whose ports carry it. */
|
|
@@ -112,6 +112,7 @@ export class OmadaNetworkController {
|
|
|
112
112
|
groups: { address: 'unsupported', mac: 'unsupported' },
|
|
113
113
|
reservations: 'native',
|
|
114
114
|
mdnsRepeater: 'native',
|
|
115
|
+
firmware: 'unsupported',
|
|
115
116
|
};
|
|
116
117
|
}
|
|
117
118
|
// ---- reads -----------------------------------------------------------------------
|
|
@@ -336,6 +337,20 @@ export class OmadaNetworkController {
|
|
|
336
337
|
}));
|
|
337
338
|
return kind === 'address' ? address : kind === 'mac' ? mac : [...address, ...mac];
|
|
338
339
|
}
|
|
340
|
+
/** The running firmware of every adopted device; whether a newer one exists isn't read here (the controller has to check first). */
|
|
341
|
+
async listFirmware() {
|
|
342
|
+
const devices = await this.client.listDevices(this.client.resolveSiteId(this.options.siteId));
|
|
343
|
+
return devices.map((d) => {
|
|
344
|
+
const raw = d;
|
|
345
|
+
return {
|
|
346
|
+
device: { mac: formatMac(String(raw.mac)) },
|
|
347
|
+
...(typeof raw.name === 'string' ? { name: raw.name } : {}),
|
|
348
|
+
...(typeof raw.model === 'string' ? { model: raw.model } : {}),
|
|
349
|
+
current: String(raw.firmwareVersion ?? 'unknown'),
|
|
350
|
+
upgradable: false,
|
|
351
|
+
};
|
|
352
|
+
});
|
|
353
|
+
}
|
|
339
354
|
async getMdnsRepeater() {
|
|
340
355
|
return toMdns(await this.client.networkConfig.listMdnsRules(this.options.siteId)).repeater;
|
|
341
356
|
}
|
|
@@ -657,6 +672,9 @@ export class OmadaNetworkController {
|
|
|
657
672
|
throw unsupported('creating or deleting port profiles here (do it in the controller web UI)', 'ports.profiles');
|
|
658
673
|
case 'mdnsRepeater':
|
|
659
674
|
return await this.buildMdnsSet(change.enabled, change.networks, snap);
|
|
675
|
+
case 'firmware':
|
|
676
|
+
// The Open API can (start-online-upgrade), but it isn't live-tested here yet.
|
|
677
|
+
throw new NetError('UNSUPPORTED', 'Upgrading Omada firmware through the net_ tools is not available yet; use the controller web UI (Devices > upgrade).', { capability: 'firmware' });
|
|
660
678
|
case 'rule':
|
|
661
679
|
if (change.op === 'create')
|
|
662
680
|
return this.buildRuleCreate(change.value, snap);
|