iobroker.mcp 0.1.4 → 0.2.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/README.md +52 -24
- package/build/lib/devices.d.ts +127 -0
- package/build/lib/iob-uri.d.ts +20 -0
- package/build/lib/mcp-server.d.ts +125 -0
- package/{dist → build}/lib/mcp-server.js +400 -17
- package/build/lib/mcp-server.js.map +1 -0
- package/build/lib/types.d.ts +20 -0
- package/build/main.d.ts +2 -0
- package/{dist → build}/main.js +3 -0
- package/build/main.js.map +1 -0
- package/io-package.json +27 -1
- package/manifest.json +224 -6
- package/package.json +15 -3
- package/dist/lib/mcp-server.js.map +0 -1
- package/dist/main.js.map +0 -1
- /package/{dist → build}/lib/devices.js +0 -0
- /package/{dist → build}/lib/devices.js.map +0 -0
- /package/{dist → build}/lib/iob-uri.js +0 -0
- /package/{dist → build}/lib/iob-uri.js.map +0 -0
- /package/{dist → build}/lib/types.js +0 -0
- /package/{dist → build}/lib/types.js.map +0 -0
package/README.md
CHANGED
|
@@ -47,9 +47,11 @@ The adapter can be configured through the ioBroker admin interface using JSONCon
|
|
|
47
47
|
When running as a web extension and no user is set here, the host `web` instance's default user is used.
|
|
48
48
|
|
|
49
49
|
### Permissions
|
|
50
|
-
- **Allow setting states**: Allow MCP clients to write state values (the `set_state`
|
|
51
|
-
|
|
52
|
-
|
|
50
|
+
- **Allow setting states**: Allow MCP clients to write state values (the `set_state` and `set_states` tools).
|
|
51
|
+
Default: **on**.
|
|
52
|
+
- **Allow object/file changes**: Allow MCP clients to create/modify/delete objects and files (the `set_object`,
|
|
53
|
+
`delete_object`, `create_state`, `create_scene`, `write_file`, `delete_file`, `rename_file` and `mkdir`
|
|
54
|
+
tools). Default: **off**. When off, these tools are not exposed at all.
|
|
53
55
|
|
|
54
56
|
### SSL/TLS Configuration
|
|
55
57
|
- **Enable HTTPS**: Enable HTTPS/SSL for secure connections
|
|
@@ -67,27 +69,37 @@ state (tracked via the `Mcp-Session-Id` header). Point your MCP client at:
|
|
|
67
69
|
|
|
68
70
|
### Available tools
|
|
69
71
|
|
|
70
|
-
| Tool | Description
|
|
71
|
-
|
|
72
|
-
| `get_states` | Retrieve the current value of one or multiple states
|
|
73
|
-
| `get_object` | Read a single object by its ID
|
|
74
|
-
| `search_objects` | Search objects/states by keyword
|
|
75
|
-
| `list_devices` | List detected devices grouped by room (uses the ioBroker type-detector to expose functional devices with named controls); optional `language` and `room` filter
|
|
76
|
-
| `list_instances` | List adapter instances with their status
|
|
77
|
-
| `
|
|
78
|
-
| `
|
|
79
|
-
| `
|
|
80
|
-
| `
|
|
81
|
-
| `
|
|
82
|
-
| `
|
|
83
|
-
| `
|
|
84
|
-
| `
|
|
85
|
-
| `
|
|
86
|
-
| `
|
|
87
|
-
| `
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
72
|
+
| Tool | Description |
|
|
73
|
+
|------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
|
74
|
+
| `get_states` | Retrieve the current value of one or multiple states; IDs may contain wildcards (e.g. `hue.0.*.brightness`) |
|
|
75
|
+
| `get_object` | Read a single object by its ID |
|
|
76
|
+
| `search_objects` | Search objects/states by keyword (matched against ID and name); optional filters for object `type`, `role`, `room` and source `adapter` instance |
|
|
77
|
+
| `list_devices` | List detected devices grouped by room (uses the ioBroker type-detector to expose functional devices with named controls); optional `language` and `room` filter |
|
|
78
|
+
| `list_instances` | List adapter instances with their status |
|
|
79
|
+
| `list_adapters` | List installed adapters with metadata (version, title, description, keywords) |
|
|
80
|
+
| `list_hosts` | List ioBroker hosts with their status |
|
|
81
|
+
| `list_rooms` | List rooms (`enum.rooms.*`) with localized names and member details; optional `language` and `withIcons` |
|
|
82
|
+
| `list_functions` | List functions (`enum.functions.*`) with localized names and member details; optional `language` and `withIcons` |
|
|
83
|
+
| `history_query` | Query historical values (requires a history adapter); aggregations: `raw`, `min`, `max`, `avg`, `sum`, `count`, `minmax`, `percentile`, `quantile`, `integral` |
|
|
84
|
+
| `read_file` | Read a file from an adapter file storage (optional base64) |
|
|
85
|
+
| `list_files` | List a directory in an adapter file storage |
|
|
86
|
+
| `file_exists` | Check whether a file exists in an adapter file storage |
|
|
87
|
+
| `get_logs` | Retrieve system logs |
|
|
88
|
+
| `write_log` | Write a message to the ioBroker log |
|
|
89
|
+
| `system_info` | Get system and js-controller information |
|
|
90
|
+
| `set_state` | Set the value of a state (value coerced to the state type) — requires *Allow setting states* |
|
|
91
|
+
| `set_states` | Set multiple states in one call (for scenes/group actions like "all lights off") — requires *Allow setting states* |
|
|
92
|
+
| `set_object` | Create/update an object (merges common/native) — requires *Allow object/file changes* |
|
|
93
|
+
| `delete_object` | Delete an object, optionally with all children — requires *Allow object/file changes* |
|
|
94
|
+
| `create_state` | Create a new state object with type/role/unit/min/max and optional initial value — requires *Allow object/file changes* |
|
|
95
|
+
| `create_scene` | Create or update a scene for the ioBroker `scenes` adapter (state/value pairs applied together) — requires *Allow object/file changes* |
|
|
96
|
+
| `write_file` | Write a file to an adapter file storage — requires *Allow object/file changes* |
|
|
97
|
+
| `delete_file` | Delete a file from an adapter file storage — requires *Allow object/file changes* |
|
|
98
|
+
| `rename_file` | Rename/move a file within the same adapter file storage — requires *Allow object/file changes* |
|
|
99
|
+
| `mkdir` | Create a directory in an adapter file storage — requires *Allow object/file changes* |
|
|
100
|
+
|
|
101
|
+
All object/state access runs with the permissions of the configured **Default User**. The write tools are only
|
|
102
|
+
registered when their respective permission option is enabled.
|
|
91
103
|
|
|
92
104
|
### Resources & live updates (SSE)
|
|
93
105
|
|
|
@@ -121,6 +133,22 @@ tools rather than as subscribable resources.)
|
|
|
121
133
|
Placeholder for the next version (at the beginning of the line):
|
|
122
134
|
### **WORK IN PROGRESS**
|
|
123
135
|
-->
|
|
136
|
+
### 0.2.2 (2026-06-11)
|
|
137
|
+
* (@GermanBluefox) Supported direct import of MCP server
|
|
138
|
+
|
|
139
|
+
### 0.2.0 (2026-06-11)
|
|
140
|
+
* (@GermanBluefox) Many changes: see the previous changelog entry
|
|
141
|
+
|
|
142
|
+
### 0.1.5 (2026-06-11)
|
|
143
|
+
* (@GermanBluefox) Added wildcard support to `get_states` (e.g. `hue.0.*.brightness`)
|
|
144
|
+
* (@GermanBluefox) Added `set_states` for writing multiple states in one call (scenes/group actions)
|
|
145
|
+
* (@GermanBluefox) Added `delete_object` and `create_state` tools (gated by *Allow object/file changes*)
|
|
146
|
+
* (@GermanBluefox) Added `create_scene` tool that creates scenes for the ioBroker `scenes` adapter
|
|
147
|
+
* (@GermanBluefox) Added file management tools: `list_files`, `file_exists`, `delete_file`, `rename_file`, `mkdir`
|
|
148
|
+
* (@GermanBluefox) Added `list_adapters` to list installed adapters with metadata
|
|
149
|
+
* (@GermanBluefox) Extended `search_objects` with `type` and `adapter` filters; the keyword now also matches object names
|
|
150
|
+
* (@GermanBluefox) Extended `history_query` with the aggregations `count`, `minmax`, `percentile`, `quantile` and `integral`
|
|
151
|
+
|
|
124
152
|
### 0.1.4 (2026-05-28)
|
|
125
153
|
* (@GermanBluefox) Initial development
|
|
126
154
|
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Device detection utilities, ported from the ioBroker n8n nodes
|
|
3
|
+
* (`IoBrokerNodes/DevicesUtils.ts`).
|
|
4
|
+
*
|
|
5
|
+
* Uses the ioBroker type detector (https://github.com/ioBroker/ioBroker.type-detector)
|
|
6
|
+
* to turn raw states/channels/devices into "controls" (functional devices) and groups
|
|
7
|
+
* them into an AI-friendly structure of rooms -> devices -> named controls.
|
|
8
|
+
*
|
|
9
|
+
* All object reads accept an optional `{ user }` so the detection respects the ACLs of
|
|
10
|
+
* the configured default user (see McpServer).
|
|
11
|
+
*/
|
|
12
|
+
import { type ExternalDetectorState, Types } from '@iobroker/type-detector';
|
|
13
|
+
/** Read options passed through to `getObjectViewAsync` (currently only the ACL user). */
|
|
14
|
+
export interface ReadOptions {
|
|
15
|
+
user?: `system.user.${string}`;
|
|
16
|
+
}
|
|
17
|
+
export type SmartNameObject = {
|
|
18
|
+
[lang in ioBroker.Languages]?: string;
|
|
19
|
+
} & {
|
|
20
|
+
smartType?: string | null;
|
|
21
|
+
byON?: string | null;
|
|
22
|
+
toggle?: boolean;
|
|
23
|
+
};
|
|
24
|
+
export type SmartName = null | false | string | SmartNameObject;
|
|
25
|
+
/** Detector state enriched with the concrete object id, smart name and common metadata. */
|
|
26
|
+
export interface IotExternalDetectorState extends ExternalDetectorState {
|
|
27
|
+
id: string;
|
|
28
|
+
smartName: SmartName | undefined;
|
|
29
|
+
common: {
|
|
30
|
+
min?: number;
|
|
31
|
+
max?: number;
|
|
32
|
+
unit?: string;
|
|
33
|
+
type?: ioBroker.CommonType;
|
|
34
|
+
states?: {
|
|
35
|
+
[value: string]: string;
|
|
36
|
+
};
|
|
37
|
+
role?: string;
|
|
38
|
+
name?: ioBroker.StringOrTranslated;
|
|
39
|
+
icon?: string;
|
|
40
|
+
color?: string;
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
export interface IotExternalPatternControl {
|
|
44
|
+
states: IotExternalDetectorState[];
|
|
45
|
+
type: Types;
|
|
46
|
+
enumRequired?: boolean;
|
|
47
|
+
object?: {
|
|
48
|
+
id: string;
|
|
49
|
+
type: ioBroker.ObjectType;
|
|
50
|
+
common: ioBroker.StateCommon | ioBroker.ChannelCommon | ioBroker.DeviceCommon;
|
|
51
|
+
autoDetected: boolean;
|
|
52
|
+
toggle?: boolean;
|
|
53
|
+
smartName?: SmartName;
|
|
54
|
+
};
|
|
55
|
+
groupNames: string[];
|
|
56
|
+
room?: {
|
|
57
|
+
id: string;
|
|
58
|
+
common: ioBroker.EnumCommon;
|
|
59
|
+
};
|
|
60
|
+
functionality?: {
|
|
61
|
+
id: string;
|
|
62
|
+
common: ioBroker.EnumCommon;
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Checks whether the provided value is a valid smart name.
|
|
67
|
+
*
|
|
68
|
+
* @param smartName The value to check
|
|
69
|
+
* @param lang Configured language
|
|
70
|
+
* @returns True if a valid smart name, false - otherwise.
|
|
71
|
+
*/
|
|
72
|
+
export declare function isValidSmartName(smartName: SmartName | undefined, lang: ioBroker.Languages): boolean;
|
|
73
|
+
/**
|
|
74
|
+
* Inspects all objects (states, channels and devices) and tries to identify so-called 'controls'
|
|
75
|
+
*
|
|
76
|
+
* To identify the controls, the ioBroker type detector library is used (https://github.com/ioBroker/ioBroker.type-detector).
|
|
77
|
+
*
|
|
78
|
+
* @param adapter The adapter instance
|
|
79
|
+
* @param lang language
|
|
80
|
+
* @param options read options (ACL user)
|
|
81
|
+
* @returns An array containing the detected controls
|
|
82
|
+
*/
|
|
83
|
+
export declare function controls(adapter: ioBroker.Adapter, lang: ioBroker.Languages, options?: ReadOptions): Promise<IotExternalPatternControl[]>;
|
|
84
|
+
type RoomName = string;
|
|
85
|
+
type FunctionalityName = string;
|
|
86
|
+
type ControlType = 'power' | 'dimmer' | 'blindPosition' | 'stop' | 'openedClosed' | 'alarm' | 'color' | 'colorRed' | 'colorGreen' | 'colorBlue' | 'colorWhite' | 'colorTemperature' | 'openClose' | 'open' | 'close' | 'fanSpeed' | 'boostMode' | 'swingPosition' | 'saturation' | 'swingOnOff' | 'actualTemperature' | 'humidity' | 'illuminance' | 'level' | 'volume' | 'targetTemperature' | 'lock' | 'valve';
|
|
87
|
+
type ControlInDevice = {
|
|
88
|
+
stateId: string;
|
|
89
|
+
controlType: ControlType;
|
|
90
|
+
ioBrokerValueType: ioBroker.CommonType;
|
|
91
|
+
writable: boolean;
|
|
92
|
+
readable: boolean;
|
|
93
|
+
min?: number;
|
|
94
|
+
max?: number;
|
|
95
|
+
unit?: string;
|
|
96
|
+
states?: {
|
|
97
|
+
[value: string]: string;
|
|
98
|
+
};
|
|
99
|
+
role?: string;
|
|
100
|
+
};
|
|
101
|
+
export interface Device {
|
|
102
|
+
deviceName: string | ioBroker.StringOrTranslated | undefined;
|
|
103
|
+
deviceType: Types;
|
|
104
|
+
friendlyDeviceNames: string[];
|
|
105
|
+
room?: RoomName;
|
|
106
|
+
functionality?: FunctionalityName;
|
|
107
|
+
controls: {
|
|
108
|
+
[controlType: string]: ControlInDevice;
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
export interface Room {
|
|
112
|
+
roomName: RoomName;
|
|
113
|
+
devicesInRoom: Device[];
|
|
114
|
+
}
|
|
115
|
+
export interface Functionality {
|
|
116
|
+
functionalityName: FunctionalityName;
|
|
117
|
+
devicesInFunctionality: Device[];
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Build an AI-friendly structure of rooms -> devices -> named controls.
|
|
121
|
+
*
|
|
122
|
+
* @param adapter The adapter instance
|
|
123
|
+
* @param lang language
|
|
124
|
+
* @param options read options (ACL user)
|
|
125
|
+
*/
|
|
126
|
+
export declare function getAiFriendlyStructure(adapter: ioBroker.Adapter, lang: ioBroker.Languages, options?: ReadOptions): Promise<Room[]>;
|
|
127
|
+
export {};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Canonical ioBroker URI helpers, ported from `@iobroker/adapter-react-v5` (`Components/IobUri`).
|
|
3
|
+
*
|
|
4
|
+
* - state: `iobstate://<id>[/<attr>]` (attr: val, ts, lc, ack, q, from, ...)
|
|
5
|
+
* - object: `iobobject://<id>[/<attr.path>]` (attr.path: common.enabled, native.x, ...)
|
|
6
|
+
* - file: `iobfile://<adapter>/<dir>/<file>`
|
|
7
|
+
* - http: `http(s)://...`
|
|
8
|
+
* - base64: `data:...`
|
|
9
|
+
*/
|
|
10
|
+
export type IobUriType = 'object' | 'state' | 'file' | 'http' | 'base64';
|
|
11
|
+
export interface IobUriParsed {
|
|
12
|
+
type: IobUriType;
|
|
13
|
+
address: string;
|
|
14
|
+
path?: string;
|
|
15
|
+
}
|
|
16
|
+
export declare function iobUriToString(uri: IobUriParsed): string;
|
|
17
|
+
/** Parse an ioBroker URI. */
|
|
18
|
+
export declare function iobUriParse(uri: string): IobUriParsed;
|
|
19
|
+
/** Read a nested attribute from an object by a dotted path (e.g. ["common","enabled"]). */
|
|
20
|
+
export declare function getAttrInObject(obj: Record<string, any> | null | undefined, path: string[] | undefined): any;
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import { type Express } from 'express';
|
|
2
|
+
import type { Server as HttpServer } from 'node:http';
|
|
3
|
+
import type { Server as HttpsServer } from 'node:https';
|
|
4
|
+
export default class McpServer {
|
|
5
|
+
private readonly adapter;
|
|
6
|
+
private readonly app;
|
|
7
|
+
/** Active sessions keyed by session id. */
|
|
8
|
+
private readonly sessions;
|
|
9
|
+
/** Ref-count of adapter-level subscriptions across all sessions, keyed by "<type>:<address>" or "log". */
|
|
10
|
+
private readonly subscriptionCounts;
|
|
11
|
+
/** Recent log lines kept for `ioblog://` resource reads (filled while there are log subscribers). */
|
|
12
|
+
private readonly logBuffer;
|
|
13
|
+
private config;
|
|
14
|
+
private readonly namespace;
|
|
15
|
+
private readonly extension;
|
|
16
|
+
private readonly routerPrefix;
|
|
17
|
+
/** The ioBroker user whose permissions every MCP request runs with. */
|
|
18
|
+
private readonly defaultUser;
|
|
19
|
+
/** Default language used to localize device/room/function names. */
|
|
20
|
+
private readonly language;
|
|
21
|
+
constructor(server: HttpServer | HttpsServer, webSettings: {
|
|
22
|
+
secure: boolean;
|
|
23
|
+
port: number | string;
|
|
24
|
+
defaultUser?: `system.user.${string}`;
|
|
25
|
+
auth?: boolean;
|
|
26
|
+
language?: ioBroker.Languages;
|
|
27
|
+
}, adapter: ioBroker.Adapter, instanceSettings: ioBroker.InstanceObject | null, app: Express);
|
|
28
|
+
private initRoutes;
|
|
29
|
+
/**
|
|
30
|
+
* Called by the ioBroker web adapter to list this extension on its welcome/intro page.
|
|
31
|
+
* Only relevant when running embedded.
|
|
32
|
+
*/
|
|
33
|
+
welcomePage(): {
|
|
34
|
+
link: string;
|
|
35
|
+
name: string;
|
|
36
|
+
img: string;
|
|
37
|
+
color: string;
|
|
38
|
+
order: number;
|
|
39
|
+
pro: boolean;
|
|
40
|
+
};
|
|
41
|
+
/** Handle client -> server messages (initialize, tools/call, ...). */
|
|
42
|
+
private handleMcpPost;
|
|
43
|
+
/** Handle server -> client SSE stream (GET) and session termination (DELETE). */
|
|
44
|
+
private handleMcpSessionRequest;
|
|
45
|
+
/**
|
|
46
|
+
* Forward an ioBroker state change to subscribed sessions.
|
|
47
|
+
*
|
|
48
|
+
* Called by our own adapter (standalone) or by the host web adapter (extension mode), which
|
|
49
|
+
* invokes `stateChange` on every web extension that defines it.
|
|
50
|
+
*/
|
|
51
|
+
stateChange(id: string, _state: ioBroker.State | null | undefined): void;
|
|
52
|
+
/**
|
|
53
|
+
* Forward an ioBroker object change to subscribed sessions. Called by our own adapter
|
|
54
|
+
* (standalone) or automatically by the host web adapter (extension mode).
|
|
55
|
+
*/
|
|
56
|
+
objectChange(id: string, _obj: ioBroker.Object | null | undefined): void;
|
|
57
|
+
/** Push `resources/updated` to every session subscribed to the given state/object id. */
|
|
58
|
+
private notifySubscribers;
|
|
59
|
+
/** Receive an ioBroker log line: buffer it and push `resources/updated` to ioblog subscribers. */
|
|
60
|
+
private onLog;
|
|
61
|
+
/** Classify a resource URI into its subscription kind, address and ref-count key. */
|
|
62
|
+
private uriKind;
|
|
63
|
+
/** Add an adapter-level subscription, subscribing on the adapter only on the first reference. */
|
|
64
|
+
private refSubscribe;
|
|
65
|
+
/** Drop an adapter-level subscription, unsubscribing on the adapter when the last reference goes. */
|
|
66
|
+
private refUnsubscribe;
|
|
67
|
+
/** Release all subscriptions held by a session (on close). */
|
|
68
|
+
private cleanupSession;
|
|
69
|
+
/**
|
|
70
|
+
* Create a new MCP SDK server with all ioBroker tools registered.
|
|
71
|
+
*
|
|
72
|
+
* @param subscriptions the per-session set of subscribed state ids (mutated by subscribe/unsubscribe)
|
|
73
|
+
*/
|
|
74
|
+
private createServer;
|
|
75
|
+
/** Build the result entry for one state. */
|
|
76
|
+
private static stateEntry;
|
|
77
|
+
private getStates;
|
|
78
|
+
/** Write multiple states; failures of single states are reported per item and do not abort the rest. */
|
|
79
|
+
private setStates;
|
|
80
|
+
private getLogs;
|
|
81
|
+
private getSystemInfo;
|
|
82
|
+
private searchObjects;
|
|
83
|
+
private listDevices;
|
|
84
|
+
private historyQuery;
|
|
85
|
+
private listInstances;
|
|
86
|
+
/** List installed adapters (system.adapter.<name> objects, no instances). */
|
|
87
|
+
private listAdapters;
|
|
88
|
+
private listHosts;
|
|
89
|
+
/**
|
|
90
|
+
* Read the rooms/functions enums with localized names and details about each member object
|
|
91
|
+
* (ported from the ioBroker n8n node's `readIobEnums`).
|
|
92
|
+
*/
|
|
93
|
+
private readEnums;
|
|
94
|
+
/** Write a state, coercing the value to the state's declared type (boolean/number/string). */
|
|
95
|
+
private setState;
|
|
96
|
+
/** Coerce an arbitrary value to the given ioBroker state type. */
|
|
97
|
+
private static coerceValue;
|
|
98
|
+
/** Read a file from an adapter file storage. */
|
|
99
|
+
private readFile;
|
|
100
|
+
/** Write a file to an adapter file storage. */
|
|
101
|
+
private writeFile;
|
|
102
|
+
/** List a directory in an adapter file storage. */
|
|
103
|
+
private listFiles;
|
|
104
|
+
/** Rename/move a file within the same adapter file storage. */
|
|
105
|
+
private renameFile;
|
|
106
|
+
/** Create or update an object, merging common/native into an existing object (n8n `setIobObject`). */
|
|
107
|
+
private setObject;
|
|
108
|
+
/** Split a file path "<adapter>/<dir>/<file>" into adapter name and file name. */
|
|
109
|
+
private static parseFilePath;
|
|
110
|
+
/** Split a directory path "<adapter>[/<dir>]" into adapter name and (possibly empty) directory. */
|
|
111
|
+
private static parseDirPath;
|
|
112
|
+
/** Delete an object, optionally with all its children. */
|
|
113
|
+
private deleteObject;
|
|
114
|
+
/** Create a new state object; refuses to overwrite an existing object. */
|
|
115
|
+
private createState;
|
|
116
|
+
/** Create or update a scene object for the ioBroker "scenes" adapter. */
|
|
117
|
+
private createScene;
|
|
118
|
+
/** Resolve the member ids of a room/function enum matched by id or (localized) name. */
|
|
119
|
+
private getEnumMembers;
|
|
120
|
+
/** Normalize an ioBroker name (string or {en, de, ...}) to a plain string. */
|
|
121
|
+
private getName;
|
|
122
|
+
/** Parse an interval like "15m", "1h", "30s" into milliseconds. */
|
|
123
|
+
private parseInterval;
|
|
124
|
+
unload(): void;
|
|
125
|
+
}
|