matterbridge 3.5.0 → 3.5.1-dev-20260122-6461be3
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/CHANGELOG.md +18 -0
- package/README-DOCKER.md +4 -2
- package/README.md +4 -1
- package/bin/mb_coap.js +1 -1
- package/bin/mb_mdns.js +1 -1
- package/dist/broadcastServer.d.ts +0 -115
- package/dist/broadcastServer.js +1 -119
- package/dist/broadcastServerTypes.d.ts +0 -43
- package/dist/broadcastServerTypes.js +0 -24
- package/dist/cli.d.ts +1 -26
- package/dist/cli.js +2 -102
- package/dist/cliEmitter.d.ts +0 -36
- package/dist/cliEmitter.js +0 -37
- package/dist/cliHistory.d.ts +0 -42
- package/dist/cliHistory.js +1 -39
- package/dist/clusters/export.d.ts +0 -1
- package/dist/clusters/export.js +0 -2
- package/dist/deviceManager.d.ts +0 -108
- package/dist/deviceManager.js +2 -114
- package/dist/devices/airConditioner.d.ts +0 -75
- package/dist/devices/airConditioner.js +0 -57
- package/dist/devices/batteryStorage.d.ts +0 -43
- package/dist/devices/batteryStorage.js +1 -48
- package/dist/devices/cooktop.d.ts +0 -55
- package/dist/devices/cooktop.js +0 -56
- package/dist/devices/dishwasher.d.ts +0 -55
- package/dist/devices/dishwasher.js +0 -57
- package/dist/devices/evse.d.ts +0 -57
- package/dist/devices/evse.js +10 -74
- package/dist/devices/export.d.ts +0 -1
- package/dist/devices/export.js +0 -5
- package/dist/devices/extractorHood.d.ts +0 -41
- package/dist/devices/extractorHood.js +0 -43
- package/dist/devices/heatPump.d.ts +0 -43
- package/dist/devices/heatPump.js +2 -50
- package/dist/devices/laundryDryer.d.ts +0 -58
- package/dist/devices/laundryDryer.js +3 -62
- package/dist/devices/laundryWasher.d.ts +0 -64
- package/dist/devices/laundryWasher.js +4 -70
- package/dist/devices/microwaveOven.d.ts +1 -77
- package/dist/devices/microwaveOven.js +5 -88
- package/dist/devices/oven.d.ts +0 -82
- package/dist/devices/oven.js +0 -85
- package/dist/devices/refrigerator.d.ts +0 -100
- package/dist/devices/refrigerator.js +0 -102
- package/dist/devices/roboticVacuumCleaner.d.ts +0 -83
- package/dist/devices/roboticVacuumCleaner.js +9 -100
- package/dist/devices/solarPower.d.ts +0 -36
- package/dist/devices/solarPower.js +0 -38
- package/dist/devices/speaker.d.ts +0 -79
- package/dist/devices/speaker.js +0 -84
- package/dist/devices/temperatureControl.d.ts +0 -21
- package/dist/devices/temperatureControl.js +3 -24
- package/dist/devices/waterHeater.d.ts +0 -74
- package/dist/devices/waterHeater.js +2 -82
- package/dist/frontend.d.ts +4 -187
- package/dist/frontend.js +89 -505
- package/dist/frontendTypes.d.ts +0 -57
- package/dist/frontendTypes.js +0 -45
- package/dist/helpers.d.ts +0 -43
- package/dist/helpers.js +1 -54
- package/dist/index.d.ts +0 -23
- package/dist/index.js +0 -25
- package/dist/jestutils/export.d.ts +0 -1
- package/dist/jestutils/export.js +0 -1
- package/dist/jestutils/jestHelpers.d.ts +0 -255
- package/dist/jestutils/jestHelpers.js +16 -379
- package/dist/logger/export.d.ts +0 -1
- package/dist/logger/export.js +0 -1
- package/dist/matter/behaviors.d.ts +0 -1
- package/dist/matter/behaviors.js +0 -2
- package/dist/matter/clusters.d.ts +0 -1
- package/dist/matter/clusters.js +0 -2
- package/dist/matter/devices.d.ts +0 -1
- package/dist/matter/devices.js +0 -2
- package/dist/matter/endpoints.d.ts +0 -1
- package/dist/matter/endpoints.js +0 -2
- package/dist/matter/export.d.ts +0 -1
- package/dist/matter/export.js +0 -2
- package/dist/matter/types.d.ts +0 -1
- package/dist/matter/types.js +0 -2
- package/dist/matterNode.d.ts +0 -258
- package/dist/matterNode.js +9 -364
- package/dist/matterbridge.d.ts +0 -362
- package/dist/matterbridge.js +75 -864
- package/dist/matterbridgeAccessoryPlatform.d.ts +0 -36
- package/dist/matterbridgeAccessoryPlatform.js +0 -38
- package/dist/matterbridgeBehaviors.d.ts +0 -24
- package/dist/matterbridgeBehaviors.js +5 -68
- package/dist/matterbridgeDeviceTypes.d.ts +0 -649
- package/dist/matterbridgeDeviceTypes.js +6 -673
- package/dist/matterbridgeDynamicPlatform.d.ts +0 -36
- package/dist/matterbridgeDynamicPlatform.js +0 -38
- package/dist/matterbridgeEndpoint.d.ts +2 -1332
- package/dist/matterbridgeEndpoint.js +94 -1459
- package/dist/matterbridgeEndpointHelpers.d.ts +0 -425
- package/dist/matterbridgeEndpointHelpers.js +22 -487
- package/dist/matterbridgeEndpointTypes.d.ts +0 -70
- package/dist/matterbridgeEndpointTypes.js +0 -25
- package/dist/matterbridgePlatform.d.ts +0 -425
- package/dist/matterbridgePlatform.js +2 -453
- package/dist/matterbridgeTypes.d.ts +0 -46
- package/dist/matterbridgeTypes.js +0 -26
- package/dist/mb_coap.d.ts +1 -0
- package/dist/{dgram/mb_coap.js → mb_coap.js} +3 -41
- package/dist/mb_mdns.d.ts +1 -0
- package/dist/{dgram/mb_mdns.js → mb_mdns.js} +47 -81
- package/dist/pluginManager.d.ts +0 -305
- package/dist/pluginManager.js +8 -345
- package/dist/shelly.d.ts +0 -157
- package/dist/shelly.js +7 -178
- package/dist/spawn.d.ts +1 -0
- package/dist/{utils/spawn.js → spawn.js} +3 -73
- package/dist/storage/export.d.ts +0 -1
- package/dist/storage/export.js +0 -1
- package/dist/update.d.ts +0 -75
- package/dist/update.js +7 -100
- package/dist/utils/export.d.ts +1 -13
- package/dist/utils/export.js +1 -13
- package/dist/workerGlobalPrefix.d.ts +0 -24
- package/dist/workerGlobalPrefix.js +6 -40
- package/dist/workerTypes.d.ts +0 -25
- package/dist/workerTypes.js +0 -24
- package/dist/workers.d.ts +0 -61
- package/dist/workers.js +4 -68
- package/npm-shrinkwrap.json +80 -50
- package/package.json +8 -8
- package/dist/broadcastServer.d.ts.map +0 -1
- package/dist/broadcastServer.js.map +0 -1
- package/dist/broadcastServerTypes.d.ts.map +0 -1
- package/dist/broadcastServerTypes.js.map +0 -1
- package/dist/cli.d.ts.map +0 -1
- package/dist/cli.js.map +0 -1
- package/dist/cliEmitter.d.ts.map +0 -1
- package/dist/cliEmitter.js.map +0 -1
- package/dist/cliHistory.d.ts.map +0 -1
- package/dist/cliHistory.js.map +0 -1
- package/dist/clusters/export.d.ts.map +0 -1
- package/dist/clusters/export.js.map +0 -1
- package/dist/deviceManager.d.ts.map +0 -1
- package/dist/deviceManager.js.map +0 -1
- package/dist/devices/airConditioner.d.ts.map +0 -1
- package/dist/devices/airConditioner.js.map +0 -1
- package/dist/devices/batteryStorage.d.ts.map +0 -1
- package/dist/devices/batteryStorage.js.map +0 -1
- package/dist/devices/cooktop.d.ts.map +0 -1
- package/dist/devices/cooktop.js.map +0 -1
- package/dist/devices/dishwasher.d.ts.map +0 -1
- package/dist/devices/dishwasher.js.map +0 -1
- package/dist/devices/evse.d.ts.map +0 -1
- package/dist/devices/evse.js.map +0 -1
- package/dist/devices/export.d.ts.map +0 -1
- package/dist/devices/export.js.map +0 -1
- package/dist/devices/extractorHood.d.ts.map +0 -1
- package/dist/devices/extractorHood.js.map +0 -1
- package/dist/devices/heatPump.d.ts.map +0 -1
- package/dist/devices/heatPump.js.map +0 -1
- package/dist/devices/laundryDryer.d.ts.map +0 -1
- package/dist/devices/laundryDryer.js.map +0 -1
- package/dist/devices/laundryWasher.d.ts.map +0 -1
- package/dist/devices/laundryWasher.js.map +0 -1
- package/dist/devices/microwaveOven.d.ts.map +0 -1
- package/dist/devices/microwaveOven.js.map +0 -1
- package/dist/devices/oven.d.ts.map +0 -1
- package/dist/devices/oven.js.map +0 -1
- package/dist/devices/refrigerator.d.ts.map +0 -1
- package/dist/devices/refrigerator.js.map +0 -1
- package/dist/devices/roboticVacuumCleaner.d.ts.map +0 -1
- package/dist/devices/roboticVacuumCleaner.js.map +0 -1
- package/dist/devices/solarPower.d.ts.map +0 -1
- package/dist/devices/solarPower.js.map +0 -1
- package/dist/devices/speaker.d.ts.map +0 -1
- package/dist/devices/speaker.js.map +0 -1
- package/dist/devices/temperatureControl.d.ts.map +0 -1
- package/dist/devices/temperatureControl.js.map +0 -1
- package/dist/devices/waterHeater.d.ts.map +0 -1
- package/dist/devices/waterHeater.js.map +0 -1
- package/dist/dgram/coap.d.ts +0 -205
- package/dist/dgram/coap.d.ts.map +0 -1
- package/dist/dgram/coap.js +0 -365
- package/dist/dgram/coap.js.map +0 -1
- package/dist/dgram/dgram.d.ts +0 -144
- package/dist/dgram/dgram.d.ts.map +0 -1
- package/dist/dgram/dgram.js +0 -363
- package/dist/dgram/dgram.js.map +0 -1
- package/dist/dgram/mb_coap.d.ts +0 -24
- package/dist/dgram/mb_coap.d.ts.map +0 -1
- package/dist/dgram/mb_coap.js.map +0 -1
- package/dist/dgram/mb_mdns.d.ts +0 -24
- package/dist/dgram/mb_mdns.d.ts.map +0 -1
- package/dist/dgram/mb_mdns.js.map +0 -1
- package/dist/dgram/mdns.d.ts +0 -371
- package/dist/dgram/mdns.d.ts.map +0 -1
- package/dist/dgram/mdns.js +0 -934
- package/dist/dgram/mdns.js.map +0 -1
- package/dist/dgram/multicast.d.ts +0 -67
- package/dist/dgram/multicast.d.ts.map +0 -1
- package/dist/dgram/multicast.js +0 -179
- package/dist/dgram/multicast.js.map +0 -1
- package/dist/dgram/unicast.d.ts +0 -64
- package/dist/dgram/unicast.d.ts.map +0 -1
- package/dist/dgram/unicast.js +0 -100
- package/dist/dgram/unicast.js.map +0 -1
- package/dist/frontend.d.ts.map +0 -1
- package/dist/frontend.js.map +0 -1
- package/dist/frontendTypes.d.ts.map +0 -1
- package/dist/frontendTypes.js.map +0 -1
- package/dist/helpers.d.ts.map +0 -1
- package/dist/helpers.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/jestutils/export.d.ts.map +0 -1
- package/dist/jestutils/export.js.map +0 -1
- package/dist/jestutils/jestHelpers.d.ts.map +0 -1
- package/dist/jestutils/jestHelpers.js.map +0 -1
- package/dist/logger/export.d.ts.map +0 -1
- package/dist/logger/export.js.map +0 -1
- package/dist/matter/behaviors.d.ts.map +0 -1
- package/dist/matter/behaviors.js.map +0 -1
- package/dist/matter/clusters.d.ts.map +0 -1
- package/dist/matter/clusters.js.map +0 -1
- package/dist/matter/devices.d.ts.map +0 -1
- package/dist/matter/devices.js.map +0 -1
- package/dist/matter/endpoints.d.ts.map +0 -1
- package/dist/matter/endpoints.js.map +0 -1
- package/dist/matter/export.d.ts.map +0 -1
- package/dist/matter/export.js.map +0 -1
- package/dist/matter/types.d.ts.map +0 -1
- package/dist/matter/types.js.map +0 -1
- package/dist/matterNode.d.ts.map +0 -1
- package/dist/matterNode.js.map +0 -1
- package/dist/matterbridge.d.ts.map +0 -1
- package/dist/matterbridge.js.map +0 -1
- package/dist/matterbridgeAccessoryPlatform.d.ts.map +0 -1
- package/dist/matterbridgeAccessoryPlatform.js.map +0 -1
- package/dist/matterbridgeBehaviors.d.ts.map +0 -1
- package/dist/matterbridgeBehaviors.js.map +0 -1
- package/dist/matterbridgeDeviceTypes.d.ts.map +0 -1
- package/dist/matterbridgeDeviceTypes.js.map +0 -1
- package/dist/matterbridgeDynamicPlatform.d.ts.map +0 -1
- package/dist/matterbridgeDynamicPlatform.js.map +0 -1
- package/dist/matterbridgeEndpoint.d.ts.map +0 -1
- package/dist/matterbridgeEndpoint.js.map +0 -1
- package/dist/matterbridgeEndpointHelpers.d.ts.map +0 -1
- package/dist/matterbridgeEndpointHelpers.js.map +0 -1
- package/dist/matterbridgeEndpointTypes.d.ts.map +0 -1
- package/dist/matterbridgeEndpointTypes.js.map +0 -1
- package/dist/matterbridgePlatform.d.ts.map +0 -1
- package/dist/matterbridgePlatform.js.map +0 -1
- package/dist/matterbridgeTypes.d.ts.map +0 -1
- package/dist/matterbridgeTypes.js.map +0 -1
- package/dist/pluginManager.d.ts.map +0 -1
- package/dist/pluginManager.js.map +0 -1
- package/dist/shelly.d.ts.map +0 -1
- package/dist/shelly.js.map +0 -1
- package/dist/storage/export.d.ts.map +0 -1
- package/dist/storage/export.js.map +0 -1
- package/dist/update.d.ts.map +0 -1
- package/dist/update.js.map +0 -1
- package/dist/utils/colorUtils.d.ts +0 -101
- package/dist/utils/colorUtils.d.ts.map +0 -1
- package/dist/utils/colorUtils.js +0 -282
- package/dist/utils/colorUtils.js.map +0 -1
- package/dist/utils/commandLine.d.ts +0 -66
- package/dist/utils/commandLine.d.ts.map +0 -1
- package/dist/utils/commandLine.js +0 -123
- package/dist/utils/commandLine.js.map +0 -1
- package/dist/utils/copyDirectory.d.ts +0 -35
- package/dist/utils/copyDirectory.d.ts.map +0 -1
- package/dist/utils/copyDirectory.js +0 -76
- package/dist/utils/copyDirectory.js.map +0 -1
- package/dist/utils/createDirectory.d.ts +0 -34
- package/dist/utils/createDirectory.d.ts.map +0 -1
- package/dist/utils/createDirectory.js +0 -54
- package/dist/utils/createDirectory.js.map +0 -1
- package/dist/utils/createZip.d.ts +0 -39
- package/dist/utils/createZip.d.ts.map +0 -1
- package/dist/utils/createZip.js +0 -114
- package/dist/utils/createZip.js.map +0 -1
- package/dist/utils/deepCopy.d.ts +0 -32
- package/dist/utils/deepCopy.d.ts.map +0 -1
- package/dist/utils/deepCopy.js +0 -79
- package/dist/utils/deepCopy.js.map +0 -1
- package/dist/utils/deepEqual.d.ts +0 -54
- package/dist/utils/deepEqual.d.ts.map +0 -1
- package/dist/utils/deepEqual.js +0 -129
- package/dist/utils/deepEqual.js.map +0 -1
- package/dist/utils/error.d.ts +0 -45
- package/dist/utils/error.d.ts.map +0 -1
- package/dist/utils/error.js +0 -54
- package/dist/utils/error.js.map +0 -1
- package/dist/utils/export.d.ts.map +0 -1
- package/dist/utils/export.js.map +0 -1
- package/dist/utils/format.d.ts +0 -53
- package/dist/utils/format.d.ts.map +0 -1
- package/dist/utils/format.js +0 -78
- package/dist/utils/format.js.map +0 -1
- package/dist/utils/hex.d.ts +0 -89
- package/dist/utils/hex.d.ts.map +0 -1
- package/dist/utils/hex.js +0 -242
- package/dist/utils/hex.js.map +0 -1
- package/dist/utils/inspector.d.ts +0 -87
- package/dist/utils/inspector.d.ts.map +0 -1
- package/dist/utils/inspector.js +0 -268
- package/dist/utils/inspector.js.map +0 -1
- package/dist/utils/isValid.d.ts +0 -103
- package/dist/utils/isValid.d.ts.map +0 -1
- package/dist/utils/isValid.js +0 -162
- package/dist/utils/isValid.js.map +0 -1
- package/dist/utils/network.d.ts +0 -141
- package/dist/utils/network.d.ts.map +0 -1
- package/dist/utils/network.js +0 -314
- package/dist/utils/network.js.map +0 -1
- package/dist/utils/spawn.d.ts +0 -33
- package/dist/utils/spawn.d.ts.map +0 -1
- package/dist/utils/spawn.js.map +0 -1
- package/dist/utils/tracker.d.ts +0 -108
- package/dist/utils/tracker.d.ts.map +0 -1
- package/dist/utils/tracker.js +0 -264
- package/dist/utils/tracker.js.map +0 -1
- package/dist/utils/wait.d.ts +0 -54
- package/dist/utils/wait.d.ts.map +0 -1
- package/dist/utils/wait.js +0 -125
- package/dist/utils/wait.js.map +0 -1
- package/dist/workerGlobalPrefix.d.ts.map +0 -1
- package/dist/workerGlobalPrefix.js.map +0 -1
- package/dist/workerTypes.d.ts.map +0 -1
- package/dist/workerTypes.js.map +0 -1
- package/dist/workers.d.ts.map +0 -1
- package/dist/workers.js.map +0 -1
package/dist/shelly.d.ts
CHANGED
|
@@ -1,97 +1,14 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* This file contains the shelly api functions.
|
|
3
|
-
*
|
|
4
|
-
* @file shelly.ts
|
|
5
|
-
* @author Luca Liguori
|
|
6
|
-
* @created 2025-02-19
|
|
7
|
-
* @version 1.2.1
|
|
8
|
-
* @license Apache-2.0
|
|
9
|
-
*
|
|
10
|
-
* Copyright 2025, 2026, 2027 Luca Liguori.
|
|
11
|
-
*
|
|
12
|
-
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
13
|
-
* you may not use this file except in compliance with the License.
|
|
14
|
-
* You may obtain a copy of the License at
|
|
15
|
-
*
|
|
16
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
|
17
|
-
*
|
|
18
|
-
* Unless required by applicable law or agreed to in writing, software
|
|
19
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
20
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
21
|
-
* See the License for the specific language governing permissions and
|
|
22
|
-
* limitations under the License.
|
|
23
|
-
*/
|
|
24
1
|
import { AnsiLogger } from 'node-ansi-logger';
|
|
25
2
|
import { Matterbridge } from './matterbridge.js';
|
|
26
3
|
import { BroadcastServer } from './broadcastServer.js';
|
|
27
4
|
import { SharedMatterbridge } from './matterbridgeTypes.js';
|
|
28
|
-
/**
|
|
29
|
-
* Sets the interval for verification in seconds.
|
|
30
|
-
*
|
|
31
|
-
* @param {number} seconds - The interval in seconds.
|
|
32
|
-
* @returns {void}
|
|
33
|
-
*/
|
|
34
5
|
export declare function setVerifyIntervalSecs(seconds: number): void;
|
|
35
|
-
/**
|
|
36
|
-
* Sets the timeout for verification in seconds.
|
|
37
|
-
*
|
|
38
|
-
* @param {number} seconds - The timeout in seconds.
|
|
39
|
-
* @returns {void}
|
|
40
|
-
*/
|
|
41
6
|
export declare function setVerifyTimeoutSecs(seconds: number): void;
|
|
42
|
-
/**
|
|
43
|
-
* Fetches Shelly system updates. If available: logs the result, sends a snackbar message, and broadcasts the message.
|
|
44
|
-
*
|
|
45
|
-
* @param {SharedMatterbridge} matterbridge - The Matterbridge instance.
|
|
46
|
-
* @param {AnsiLogger} log - The logger instance.
|
|
47
|
-
* @param {BroadcastServer} server - The broadcast server instance.
|
|
48
|
-
* @returns {Promise<void>} A promise that resolves when the operation is complete.
|
|
49
|
-
*/
|
|
50
7
|
export declare function getShellySysUpdate(matterbridge: SharedMatterbridge, log: AnsiLogger, server: BroadcastServer): Promise<void>;
|
|
51
|
-
/**
|
|
52
|
-
* Triggers Shelly system updates.
|
|
53
|
-
*
|
|
54
|
-
* @param {Matterbridge} matterbridge - The Matterbridge instance.
|
|
55
|
-
* @returns {Promise<void>} A promise that resolves when the operation is complete.
|
|
56
|
-
*/
|
|
57
8
|
export declare function triggerShellySysUpdate(matterbridge: Matterbridge): Promise<void>;
|
|
58
|
-
/**
|
|
59
|
-
* Fetches Shelly main updates. If available: logs the result, sends a snackbar message, and broadcasts the message.
|
|
60
|
-
*
|
|
61
|
-
* @param {SharedMatterbridge} matterbridge - The Matterbridge instance.
|
|
62
|
-
* @param {AnsiLogger} log - The logger instance.
|
|
63
|
-
* @param {BroadcastServer} server - The broadcast server instance.
|
|
64
|
-
* @returns {Promise<void>} A promise that resolves when the operation is complete.
|
|
65
|
-
*/
|
|
66
9
|
export declare function getShellyMainUpdate(matterbridge: SharedMatterbridge, log: AnsiLogger, server: BroadcastServer): Promise<void>;
|
|
67
|
-
/**
|
|
68
|
-
* Triggers Shelly main updates.
|
|
69
|
-
*
|
|
70
|
-
* @param {Matterbridge} matterbridge - The Matterbridge instance.
|
|
71
|
-
* @returns {Promise<void>} A promise that resolves when the operation is complete.
|
|
72
|
-
*/
|
|
73
10
|
export declare function triggerShellyMainUpdate(matterbridge: Matterbridge): Promise<void>;
|
|
74
|
-
/**
|
|
75
|
-
* Verifies Shelly update.
|
|
76
|
-
*
|
|
77
|
-
* @param {Matterbridge} matterbridge - The Matterbridge instance.
|
|
78
|
-
* @param {string} api - The api to call: /api/updates/sys/status or /api/updates/main/status
|
|
79
|
-
* @param {string} name - The name of the update.
|
|
80
|
-
* @returns {Promise<void>} A promise that resolves when the operation is complete.
|
|
81
|
-
*/
|
|
82
11
|
export declare function verifyShellyUpdate(matterbridge: Matterbridge, api: string, name: string): Promise<void>;
|
|
83
|
-
/**
|
|
84
|
-
* Triggers Shelly change network configuration.
|
|
85
|
-
*
|
|
86
|
-
* @param {Matterbridge} matterbridge - The Matterbridge instance.
|
|
87
|
-
* @param {object} config - The network configuration.
|
|
88
|
-
* @param {string} config.type - The type of network configuration, either 'static' or 'dhcp'.
|
|
89
|
-
* @param {string} config.ip - The IP address to set (required for static configuration).
|
|
90
|
-
* @param {string} config.subnet - The subnet mask to set (required for static configuration).
|
|
91
|
-
* @param {string} config.gateway - The gateway to set (required for static configuration).
|
|
92
|
-
* @param {string} config.dns - The DNS server to set (required for static configuration).
|
|
93
|
-
* @returns {Promise<void>} A promise that resolves when the operation is complete.
|
|
94
|
-
*/
|
|
95
12
|
export declare function triggerShellyChangeIp(matterbridge: Matterbridge, config: {
|
|
96
13
|
type: 'static' | 'dhcp';
|
|
97
14
|
ip: string;
|
|
@@ -99,83 +16,9 @@ export declare function triggerShellyChangeIp(matterbridge: Matterbridge, config
|
|
|
99
16
|
gateway: string;
|
|
100
17
|
dns: string;
|
|
101
18
|
}): Promise<void>;
|
|
102
|
-
/**
|
|
103
|
-
* Triggers Shelly system reboot.
|
|
104
|
-
*
|
|
105
|
-
* @param {Matterbridge} matterbridge - The Matterbridge instance.
|
|
106
|
-
* @returns {Promise<void>} A promise that resolves when the operation is complete.
|
|
107
|
-
*/
|
|
108
19
|
export declare function triggerShellyReboot(matterbridge: Matterbridge): Promise<void>;
|
|
109
|
-
/**
|
|
110
|
-
* Triggers Shelly soft reset.
|
|
111
|
-
* It will replaces network config with the default one (edn0 on dhcp).
|
|
112
|
-
*
|
|
113
|
-
* @param {Matterbridge} matterbridge - The Matterbridge instance.
|
|
114
|
-
* @returns {Promise<void>} A promise that resolves when the operation is complete.
|
|
115
|
-
*/
|
|
116
20
|
export declare function triggerShellySoftReset(matterbridge: Matterbridge): Promise<void>;
|
|
117
|
-
/**
|
|
118
|
-
* Triggers Shelly hard reset.
|
|
119
|
-
* It will do a hard reset and will remove both directories .matterbridge Matterbridge.
|
|
120
|
-
*
|
|
121
|
-
* @param {Matterbridge} matterbridge - The Matterbridge instance.
|
|
122
|
-
* @returns {Promise<void>} A promise that resolves when the operation is complete.
|
|
123
|
-
*/
|
|
124
21
|
export declare function triggerShellyHardReset(matterbridge: Matterbridge): Promise<void>;
|
|
125
|
-
/**
|
|
126
|
-
* Fetches Shelly system log and write it to shelly.log.
|
|
127
|
-
*
|
|
128
|
-
* @param {Matterbridge} matterbridge - The Matterbridge instance.
|
|
129
|
-
* @returns {Promise<boolean>} A promise that resolves to true if the log was successfully downloaded, false otherwise.
|
|
130
|
-
*/
|
|
131
22
|
export declare function createShellySystemLog(matterbridge: Matterbridge): Promise<boolean>;
|
|
132
|
-
/**
|
|
133
|
-
* Perform a GET to Shelly board apis.
|
|
134
|
-
*
|
|
135
|
-
* @param {string} api - The api to call:
|
|
136
|
-
*
|
|
137
|
-
* /api/updates/sys/check => [{name:string; ...}]
|
|
138
|
-
* /api/updates/sys/perform => {"updatingInProgress":true} or {"updatingInProgress":false}
|
|
139
|
-
* /api/updates/sys/status => {"updatingInProgress":true} or {"updatingInProgress":false}
|
|
140
|
-
* /api/updates/main/check => [{name:string; ...}]
|
|
141
|
-
* /api/updates/main/perform => {"updatingInProgress":true} or {"updatingInProgress":false}
|
|
142
|
-
* /api/updates/main/status => {"updatingInProgress":true} or {"updatingInProgress":false}
|
|
143
|
-
*
|
|
144
|
-
* /api/logs/system => text
|
|
145
|
-
*
|
|
146
|
-
* /api/reset/soft => "ok" Replaces network config with default one (edn0 on dhcp)
|
|
147
|
-
* /api/reset/hard => reboot on success Hard reset makes soft reset + removing both directories .matterbridge Matterbridge + reboot
|
|
148
|
-
*
|
|
149
|
-
*
|
|
150
|
-
* @param {number} [timeout] - The timeout duration in milliseconds (default is 60000ms).
|
|
151
|
-
* @returns {Promise<any>} A promise that resolves to the response.
|
|
152
|
-
* @throws {Error} If the request fails.
|
|
153
|
-
*/
|
|
154
23
|
export declare function getShelly(api: string, timeout?: number): Promise<any>;
|
|
155
|
-
/**
|
|
156
|
-
* Perform a POST request to Shelly board apis.
|
|
157
|
-
*
|
|
158
|
-
* @param {string} api - The api to call:
|
|
159
|
-
*
|
|
160
|
-
* Set static ip
|
|
161
|
-
* /api/network/connection/static -d '{"interface": "end0", "addr": "10.11.12.101", "mask": "255.255.255.0", "gw": "10.11.12.1", "dns": "1.1.1.1"}' => {}
|
|
162
|
-
*
|
|
163
|
-
* Set dhcp
|
|
164
|
-
* /api/network/connection/dynamic -d '{"interface": "end0"}' => {}
|
|
165
|
-
*
|
|
166
|
-
* Reboot
|
|
167
|
-
* /api/system/reboot => {"success":true}
|
|
168
|
-
*
|
|
169
|
-
* curl -H "Content-Type: application/json" -X POST http://127.0.0.1:8101/api/network/connection/dynamic
|
|
170
|
-
* -d '{"interface": "end0"}'
|
|
171
|
-
*
|
|
172
|
-
* curl -H "Content-Type: application/json" -X POST http://127.0.0.1:8101/api/network/connection/static
|
|
173
|
-
* -d '{"interface": "end0", "addr": "192.168.1.64", "mask": "255.255.255.0", "gw": "192.168.1.1", "dns": "192.168.1.1"}'
|
|
174
|
-
*
|
|
175
|
-
* @param {any} data - The data to send in the POST request, typically a JSON object.
|
|
176
|
-
* @param {number} [timeout] - The timeout duration in milliseconds (default is 60000ms).
|
|
177
|
-
* @returns {Promise<any>} A promise that resolves to the response.
|
|
178
|
-
* @throws {Error} If the request fails.
|
|
179
|
-
*/
|
|
180
24
|
export declare function postShelly(api: string, data: any, timeout?: number): Promise<any>;
|
|
181
|
-
//# sourceMappingURL=shelly.d.ts.map
|
package/dist/shelly.js
CHANGED
|
@@ -1,155 +1,74 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* This file contains the shelly api functions.
|
|
3
|
-
*
|
|
4
|
-
* @file shelly.ts
|
|
5
|
-
* @author Luca Liguori
|
|
6
|
-
* @created 2025-02-19
|
|
7
|
-
* @version 1.2.1
|
|
8
|
-
* @license Apache-2.0
|
|
9
|
-
*
|
|
10
|
-
* Copyright 2025, 2026, 2027 Luca Liguori.
|
|
11
|
-
*
|
|
12
|
-
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
13
|
-
* you may not use this file except in compliance with the License.
|
|
14
|
-
* You may obtain a copy of the License at
|
|
15
|
-
*
|
|
16
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
|
17
|
-
*
|
|
18
|
-
* Unless required by applicable law or agreed to in writing, software
|
|
19
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
20
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
21
|
-
* See the License for the specific language governing permissions and
|
|
22
|
-
* limitations under the License.
|
|
23
|
-
*/
|
|
24
1
|
import { debugStringify } from 'node-ansi-logger';
|
|
25
2
|
let verifyIntervalSecs = 15;
|
|
26
3
|
let verifyTimeoutSecs = 600;
|
|
27
|
-
/**
|
|
28
|
-
* Sets the interval for verification in seconds.
|
|
29
|
-
*
|
|
30
|
-
* @param {number} seconds - The interval in seconds.
|
|
31
|
-
* @returns {void}
|
|
32
|
-
*/
|
|
33
4
|
export function setVerifyIntervalSecs(seconds) {
|
|
34
5
|
verifyIntervalSecs = seconds;
|
|
35
6
|
}
|
|
36
|
-
/**
|
|
37
|
-
* Sets the timeout for verification in seconds.
|
|
38
|
-
*
|
|
39
|
-
* @param {number} seconds - The timeout in seconds.
|
|
40
|
-
* @returns {void}
|
|
41
|
-
*/
|
|
42
7
|
export function setVerifyTimeoutSecs(seconds) {
|
|
43
8
|
verifyTimeoutSecs = seconds;
|
|
44
9
|
}
|
|
45
|
-
/**
|
|
46
|
-
* Fetches Shelly system updates. If available: logs the result, sends a snackbar message, and broadcasts the message.
|
|
47
|
-
*
|
|
48
|
-
* @param {SharedMatterbridge} matterbridge - The Matterbridge instance.
|
|
49
|
-
* @param {AnsiLogger} log - The logger instance.
|
|
50
|
-
* @param {BroadcastServer} server - The broadcast server instance.
|
|
51
|
-
* @returns {Promise<void>} A promise that resolves when the operation is complete.
|
|
52
|
-
*/
|
|
53
10
|
export async function getShellySysUpdate(matterbridge, log, server) {
|
|
54
11
|
try {
|
|
55
12
|
const updates = (await getShelly('/api/updates/sys/check'));
|
|
56
13
|
if (updates.length === 0)
|
|
57
14
|
return;
|
|
58
15
|
server.request({ type: 'matterbridge_sys_update', src: server.name, dst: 'matterbridge', params: { available: true } });
|
|
59
|
-
// matterbridge.shellySysUpdate = true;
|
|
60
16
|
server.request({ type: 'frontend_broadcast_message', src: server.name, dst: 'frontend', params: { msg: { id: 0, src: 'Matterbridge', dst: 'Frontend', method: 'shelly_sys_update', success: true, response: { available: true } } } });
|
|
61
|
-
// matterbridge.frontend.wssBroadcastMessage({ id: 0, src: 'Matterbridge', dst: 'Frontend', method: 'shelly_sys_update', success: true, response: { available: true } });
|
|
62
17
|
for (const { name } of updates) {
|
|
63
18
|
if (!name)
|
|
64
19
|
continue;
|
|
65
20
|
log.notice(`Shelly system update available: ${name}`);
|
|
66
21
|
server.request({ type: 'frontend_snackbarmessage', src: server.name, dst: 'frontend', params: { message: `Shelly system update available: ${name}`, timeout: 10 } });
|
|
67
|
-
// matterbridge.frontend.wssSendSnackbarMessage(`Shelly system update available: ${name}`, 10);
|
|
68
22
|
}
|
|
69
23
|
}
|
|
70
24
|
catch (err) {
|
|
71
25
|
log.error(`Error getting Shelly system updates: ${err instanceof Error ? err.message : String(err)}`);
|
|
72
26
|
}
|
|
73
27
|
}
|
|
74
|
-
/**
|
|
75
|
-
* Triggers Shelly system updates.
|
|
76
|
-
*
|
|
77
|
-
* @param {Matterbridge} matterbridge - The Matterbridge instance.
|
|
78
|
-
* @returns {Promise<void>} A promise that resolves when the operation is complete.
|
|
79
|
-
*/
|
|
80
28
|
export async function triggerShellySysUpdate(matterbridge) {
|
|
81
29
|
try {
|
|
82
|
-
// Trigger the update request
|
|
83
30
|
await getShelly('/api/updates/sys/perform');
|
|
84
31
|
matterbridge.log.notice('Installing Shelly system update...');
|
|
85
32
|
matterbridge.shellySysUpdate = false;
|
|
86
33
|
matterbridge.frontend.wssSendSnackbarMessage('Installing Shelly system update...', 15);
|
|
87
34
|
matterbridge.frontend.wssBroadcastMessage({ id: 0, src: 'Matterbridge', dst: 'Frontend', method: 'shelly_sys_update', success: true, response: { available: false } });
|
|
88
|
-
// Begin polling update status
|
|
89
35
|
await verifyShellyUpdate(matterbridge, '/api/updates/sys/status', 'Shelly system update');
|
|
90
36
|
}
|
|
91
37
|
catch (err) {
|
|
92
38
|
matterbridge.log.error(`Error triggering Shelly system update: ${err instanceof Error ? err.message : String(err)}`);
|
|
93
39
|
}
|
|
94
40
|
}
|
|
95
|
-
/**
|
|
96
|
-
* Fetches Shelly main updates. If available: logs the result, sends a snackbar message, and broadcasts the message.
|
|
97
|
-
*
|
|
98
|
-
* @param {SharedMatterbridge} matterbridge - The Matterbridge instance.
|
|
99
|
-
* @param {AnsiLogger} log - The logger instance.
|
|
100
|
-
* @param {BroadcastServer} server - The broadcast server instance.
|
|
101
|
-
* @returns {Promise<void>} A promise that resolves when the operation is complete.
|
|
102
|
-
*/
|
|
103
41
|
export async function getShellyMainUpdate(matterbridge, log, server) {
|
|
104
42
|
try {
|
|
105
43
|
const updates = (await getShelly('/api/updates/main/check'));
|
|
106
44
|
if (updates.length === 0)
|
|
107
45
|
return;
|
|
108
46
|
server.request({ type: 'matterbridge_main_update', src: server.name, dst: 'matterbridge', params: { available: true } });
|
|
109
|
-
// matterbridge.shellyMainUpdate = true;
|
|
110
47
|
server.request({ type: 'frontend_broadcast_message', src: server.name, dst: 'frontend', params: { msg: { id: 0, src: 'Matterbridge', dst: 'Frontend', method: 'shelly_main_update', success: true, response: { available: true } } } });
|
|
111
|
-
// matterbridge.frontend.wssBroadcastMessage({ id: 0, src: 'Matterbridge', dst: 'Frontend', method: 'shelly_main_update', success: true, response: { available: true } });
|
|
112
48
|
for (const { name } of updates) {
|
|
113
49
|
if (!name)
|
|
114
50
|
continue;
|
|
115
51
|
log.notice(`Shelly software update available: ${name}`);
|
|
116
52
|
server.request({ type: 'frontend_snackbarmessage', src: server.name, dst: 'frontend', params: { message: `Shelly software update available: ${name}`, timeout: 10 } });
|
|
117
|
-
// matterbridge.frontend.wssSendSnackbarMessage(`Shelly software update available: ${name}`, 10);
|
|
118
53
|
}
|
|
119
54
|
}
|
|
120
55
|
catch (err) {
|
|
121
56
|
log.error(`Error getting Shelly main updates: ${err instanceof Error ? err.message : String(err)}`);
|
|
122
57
|
}
|
|
123
58
|
}
|
|
124
|
-
/**
|
|
125
|
-
* Triggers Shelly main updates.
|
|
126
|
-
*
|
|
127
|
-
* @param {Matterbridge} matterbridge - The Matterbridge instance.
|
|
128
|
-
* @returns {Promise<void>} A promise that resolves when the operation is complete.
|
|
129
|
-
*/
|
|
130
59
|
export async function triggerShellyMainUpdate(matterbridge) {
|
|
131
60
|
try {
|
|
132
|
-
// Trigger the perform-update request
|
|
133
61
|
await getShelly('/api/updates/main/perform');
|
|
134
62
|
matterbridge.log.notice('Installing Shelly software update...');
|
|
135
63
|
matterbridge.shellyMainUpdate = false;
|
|
136
64
|
matterbridge.frontend.wssSendSnackbarMessage('Installing Shelly software update...', 15);
|
|
137
65
|
matterbridge.frontend.wssBroadcastMessage({ id: 0, src: 'Matterbridge', dst: 'Frontend', method: 'shelly_main_update', success: true, response: { available: false } });
|
|
138
|
-
// Begin polling the update status
|
|
139
66
|
await verifyShellyUpdate(matterbridge, '/api/updates/main/status', 'Shelly software update');
|
|
140
67
|
}
|
|
141
68
|
catch (err) {
|
|
142
69
|
matterbridge.log.error(`Error triggering Shelly main update: ${err instanceof Error ? err.message : String(err)}`);
|
|
143
70
|
}
|
|
144
71
|
}
|
|
145
|
-
/**
|
|
146
|
-
* Verifies Shelly update.
|
|
147
|
-
*
|
|
148
|
-
* @param {Matterbridge} matterbridge - The Matterbridge instance.
|
|
149
|
-
* @param {string} api - The api to call: /api/updates/sys/status or /api/updates/main/status
|
|
150
|
-
* @param {string} name - The name of the update.
|
|
151
|
-
* @returns {Promise<void>} A promise that resolves when the operation is complete.
|
|
152
|
-
*/
|
|
153
72
|
export async function verifyShellyUpdate(matterbridge, api, name) {
|
|
154
73
|
return new Promise((resolve) => {
|
|
155
74
|
const timeout = setTimeout(() => {
|
|
@@ -157,9 +76,9 @@ export async function verifyShellyUpdate(matterbridge, api, name) {
|
|
|
157
76
|
matterbridge.frontend.wssSendCloseSnackbarMessage(`${name} in progress...`);
|
|
158
77
|
clearInterval(interval);
|
|
159
78
|
resolve();
|
|
160
|
-
}, verifyTimeoutSecs * 1000);
|
|
79
|
+
}, verifyTimeoutSecs * 1000);
|
|
161
80
|
const interval = setInterval(() => {
|
|
162
|
-
getShelly(api, 10 * 1000)
|
|
81
|
+
getShelly(api, 10 * 1000)
|
|
163
82
|
.then(async (data) => {
|
|
164
83
|
if (data.updatingInProgress) {
|
|
165
84
|
matterbridge.log.debug(`${name} in progress...`);
|
|
@@ -182,21 +101,9 @@ export async function verifyShellyUpdate(matterbridge, api, name) {
|
|
|
182
101
|
clearTimeout(timeout);
|
|
183
102
|
resolve();
|
|
184
103
|
});
|
|
185
|
-
}, verifyIntervalSecs * 1000);
|
|
104
|
+
}, verifyIntervalSecs * 1000);
|
|
186
105
|
});
|
|
187
106
|
}
|
|
188
|
-
/**
|
|
189
|
-
* Triggers Shelly change network configuration.
|
|
190
|
-
*
|
|
191
|
-
* @param {Matterbridge} matterbridge - The Matterbridge instance.
|
|
192
|
-
* @param {object} config - The network configuration.
|
|
193
|
-
* @param {string} config.type - The type of network configuration, either 'static' or 'dhcp'.
|
|
194
|
-
* @param {string} config.ip - The IP address to set (required for static configuration).
|
|
195
|
-
* @param {string} config.subnet - The subnet mask to set (required for static configuration).
|
|
196
|
-
* @param {string} config.gateway - The gateway to set (required for static configuration).
|
|
197
|
-
* @param {string} config.dns - The DNS server to set (required for static configuration).
|
|
198
|
-
* @returns {Promise<void>} A promise that resolves when the operation is complete.
|
|
199
|
-
*/
|
|
200
107
|
export async function triggerShellyChangeIp(matterbridge, config) {
|
|
201
108
|
const api = config.type === 'static' ? '/api/network/connection/static' : '/api/network/connection/dynamic';
|
|
202
109
|
const data = { interface: 'end0' };
|
|
@@ -219,12 +126,6 @@ export async function triggerShellyChangeIp(matterbridge, config) {
|
|
|
219
126
|
matterbridge.frontend.wssSendSnackbarMessage('Error changing Shelly network configuration', 10, 'error');
|
|
220
127
|
}
|
|
221
128
|
}
|
|
222
|
-
/**
|
|
223
|
-
* Triggers Shelly system reboot.
|
|
224
|
-
*
|
|
225
|
-
* @param {Matterbridge} matterbridge - The Matterbridge instance.
|
|
226
|
-
* @returns {Promise<void>} A promise that resolves when the operation is complete.
|
|
227
|
-
*/
|
|
228
129
|
export async function triggerShellyReboot(matterbridge) {
|
|
229
130
|
matterbridge.log.debug(`Triggering Shelly system reboot`);
|
|
230
131
|
try {
|
|
@@ -242,13 +143,6 @@ export async function triggerShellyReboot(matterbridge) {
|
|
|
242
143
|
matterbridge.frontend.wssSendSnackbarMessage('Error rebooting Shelly board', 10, 'error');
|
|
243
144
|
}
|
|
244
145
|
}
|
|
245
|
-
/**
|
|
246
|
-
* Triggers Shelly soft reset.
|
|
247
|
-
* It will replaces network config with the default one (edn0 on dhcp).
|
|
248
|
-
*
|
|
249
|
-
* @param {Matterbridge} matterbridge - The Matterbridge instance.
|
|
250
|
-
* @returns {Promise<void>} A promise that resolves when the operation is complete.
|
|
251
|
-
*/
|
|
252
146
|
export async function triggerShellySoftReset(matterbridge) {
|
|
253
147
|
matterbridge.log.debug(`Triggering Shelly soft reset`);
|
|
254
148
|
try {
|
|
@@ -266,13 +160,6 @@ export async function triggerShellySoftReset(matterbridge) {
|
|
|
266
160
|
matterbridge.frontend.wssSendSnackbarMessage('Error resetting the network parameters on Shelly board', 10, 'error');
|
|
267
161
|
}
|
|
268
162
|
}
|
|
269
|
-
/**
|
|
270
|
-
* Triggers Shelly hard reset.
|
|
271
|
-
* It will do a hard reset and will remove both directories .matterbridge Matterbridge.
|
|
272
|
-
*
|
|
273
|
-
* @param {Matterbridge} matterbridge - The Matterbridge instance.
|
|
274
|
-
* @returns {Promise<void>} A promise that resolves when the operation is complete.
|
|
275
|
-
*/
|
|
276
163
|
export async function triggerShellyHardReset(matterbridge) {
|
|
277
164
|
matterbridge.log.debug(`Triggering Shelly hard reset`);
|
|
278
165
|
try {
|
|
@@ -290,12 +177,6 @@ export async function triggerShellyHardReset(matterbridge) {
|
|
|
290
177
|
matterbridge.frontend.wssSendSnackbarMessage('Error while factory resetting the Shelly board', 10, 'error');
|
|
291
178
|
}
|
|
292
179
|
}
|
|
293
|
-
/**
|
|
294
|
-
* Fetches Shelly system log and write it to shelly.log.
|
|
295
|
-
*
|
|
296
|
-
* @param {Matterbridge} matterbridge - The Matterbridge instance.
|
|
297
|
-
* @returns {Promise<boolean>} A promise that resolves to true if the log was successfully downloaded, false otherwise.
|
|
298
|
-
*/
|
|
299
180
|
export async function createShellySystemLog(matterbridge) {
|
|
300
181
|
const { promises: fs } = await import('node:fs');
|
|
301
182
|
const path = await import('node:path');
|
|
@@ -312,28 +193,6 @@ export async function createShellySystemLog(matterbridge) {
|
|
|
312
193
|
return false;
|
|
313
194
|
}
|
|
314
195
|
}
|
|
315
|
-
/**
|
|
316
|
-
* Perform a GET to Shelly board apis.
|
|
317
|
-
*
|
|
318
|
-
* @param {string} api - The api to call:
|
|
319
|
-
*
|
|
320
|
-
* /api/updates/sys/check => [{name:string; ...}]
|
|
321
|
-
* /api/updates/sys/perform => {"updatingInProgress":true} or {"updatingInProgress":false}
|
|
322
|
-
* /api/updates/sys/status => {"updatingInProgress":true} or {"updatingInProgress":false}
|
|
323
|
-
* /api/updates/main/check => [{name:string; ...}]
|
|
324
|
-
* /api/updates/main/perform => {"updatingInProgress":true} or {"updatingInProgress":false}
|
|
325
|
-
* /api/updates/main/status => {"updatingInProgress":true} or {"updatingInProgress":false}
|
|
326
|
-
*
|
|
327
|
-
* /api/logs/system => text
|
|
328
|
-
*
|
|
329
|
-
* /api/reset/soft => "ok" Replaces network config with default one (edn0 on dhcp)
|
|
330
|
-
* /api/reset/hard => reboot on success Hard reset makes soft reset + removing both directories .matterbridge Matterbridge + reboot
|
|
331
|
-
*
|
|
332
|
-
*
|
|
333
|
-
* @param {number} [timeout] - The timeout duration in milliseconds (default is 60000ms).
|
|
334
|
-
* @returns {Promise<any>} A promise that resolves to the response.
|
|
335
|
-
* @throws {Error} If the request fails.
|
|
336
|
-
*/
|
|
337
196
|
export async function getShelly(api, timeout = 60000) {
|
|
338
197
|
const http = await import('node:http');
|
|
339
198
|
return new Promise((resolve, reject) => {
|
|
@@ -347,13 +206,12 @@ export async function getShelly(api, timeout = 60000) {
|
|
|
347
206
|
let data = '';
|
|
348
207
|
if (res.statusCode !== 200) {
|
|
349
208
|
clearTimeout(timeoutId);
|
|
350
|
-
res.resume();
|
|
351
|
-
req.destroy();
|
|
209
|
+
res.resume();
|
|
210
|
+
req.destroy();
|
|
352
211
|
reject(new Error(`Failed to fetch data. Status code: ${res.statusCode}`));
|
|
353
212
|
return;
|
|
354
213
|
}
|
|
355
214
|
res.on('data', (chunk) => {
|
|
356
|
-
// console.log(chunk);
|
|
357
215
|
data += chunk;
|
|
358
216
|
});
|
|
359
217
|
res.on('end', () => {
|
|
@@ -368,7 +226,6 @@ export async function getShelly(api, timeout = 60000) {
|
|
|
368
226
|
}
|
|
369
227
|
}
|
|
370
228
|
else {
|
|
371
|
-
// console.log(data);
|
|
372
229
|
resolve(data);
|
|
373
230
|
}
|
|
374
231
|
});
|
|
@@ -379,31 +236,6 @@ export async function getShelly(api, timeout = 60000) {
|
|
|
379
236
|
});
|
|
380
237
|
});
|
|
381
238
|
}
|
|
382
|
-
/**
|
|
383
|
-
* Perform a POST request to Shelly board apis.
|
|
384
|
-
*
|
|
385
|
-
* @param {string} api - The api to call:
|
|
386
|
-
*
|
|
387
|
-
* Set static ip
|
|
388
|
-
* /api/network/connection/static -d '{"interface": "end0", "addr": "10.11.12.101", "mask": "255.255.255.0", "gw": "10.11.12.1", "dns": "1.1.1.1"}' => {}
|
|
389
|
-
*
|
|
390
|
-
* Set dhcp
|
|
391
|
-
* /api/network/connection/dynamic -d '{"interface": "end0"}' => {}
|
|
392
|
-
*
|
|
393
|
-
* Reboot
|
|
394
|
-
* /api/system/reboot => {"success":true}
|
|
395
|
-
*
|
|
396
|
-
* curl -H "Content-Type: application/json" -X POST http://127.0.0.1:8101/api/network/connection/dynamic
|
|
397
|
-
* -d '{"interface": "end0"}'
|
|
398
|
-
*
|
|
399
|
-
* curl -H "Content-Type: application/json" -X POST http://127.0.0.1:8101/api/network/connection/static
|
|
400
|
-
* -d '{"interface": "end0", "addr": "192.168.1.64", "mask": "255.255.255.0", "gw": "192.168.1.1", "dns": "192.168.1.1"}'
|
|
401
|
-
*
|
|
402
|
-
* @param {any} data - The data to send in the POST request, typically a JSON object.
|
|
403
|
-
* @param {number} [timeout] - The timeout duration in milliseconds (default is 60000ms).
|
|
404
|
-
* @returns {Promise<any>} A promise that resolves to the response.
|
|
405
|
-
* @throws {Error} If the request fails.
|
|
406
|
-
*/
|
|
407
239
|
export async function postShelly(api, data, timeout = 60000) {
|
|
408
240
|
const http = await import('node:http');
|
|
409
241
|
return new Promise((resolve, reject) => {
|
|
@@ -424,11 +256,10 @@ export async function postShelly(api, data, timeout = 60000) {
|
|
|
424
256
|
};
|
|
425
257
|
const req = http.request(url, options, (res) => {
|
|
426
258
|
let responseData = '';
|
|
427
|
-
// Check for non-success status codes (e.g., 300+)
|
|
428
259
|
if (res.statusCode && res.statusCode >= 300) {
|
|
429
260
|
clearTimeout(timeoutId);
|
|
430
|
-
res.resume();
|
|
431
|
-
req.destroy();
|
|
261
|
+
res.resume();
|
|
262
|
+
req.destroy();
|
|
432
263
|
return reject(new Error(`Failed to post data. Status code: ${res.statusCode}`));
|
|
433
264
|
}
|
|
434
265
|
res.on('data', (chunk) => {
|
|
@@ -449,9 +280,7 @@ export async function postShelly(api, data, timeout = 60000) {
|
|
|
449
280
|
clearTimeout(timeoutId);
|
|
450
281
|
reject(new Error(`Request failed: ${error instanceof Error ? error.message : error}`));
|
|
451
282
|
});
|
|
452
|
-
// Send the JSON data
|
|
453
283
|
req.write(jsonData);
|
|
454
284
|
req.end();
|
|
455
285
|
});
|
|
456
286
|
}
|
|
457
|
-
//# sourceMappingURL=shelly.js.map
|
package/dist/spawn.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function spawnCommand(command: string, args: string[], packageCommand?: 'install' | 'uninstall', packageName?: string): Promise<boolean>;
|
|
@@ -1,69 +1,28 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @description This file contains the spawn functions.
|
|
3
|
-
* @file spawn.ts
|
|
4
|
-
* @author Luca Liguori
|
|
5
|
-
* @created 2025-02-16
|
|
6
|
-
* @version 1.2.0
|
|
7
|
-
* @license Apache-2.0
|
|
8
|
-
*
|
|
9
|
-
* Copyright 2025, 2026, 2027 Luca Liguori.
|
|
10
|
-
*
|
|
11
|
-
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
12
|
-
* you may not use this file except in compliance with the License.
|
|
13
|
-
* You may obtain a copy of the License at
|
|
14
|
-
*
|
|
15
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
|
16
|
-
*
|
|
17
|
-
* Unless required by applicable law or agreed to in writing, software
|
|
18
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
19
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
20
|
-
* See the License for the specific language governing permissions and
|
|
21
|
-
* limitations under the License.
|
|
22
|
-
*/
|
|
23
1
|
import { AnsiLogger } from 'node-ansi-logger';
|
|
24
|
-
import {
|
|
25
|
-
import {
|
|
26
|
-
/**
|
|
27
|
-
* Spawns a child process with the given command and arguments.
|
|
28
|
-
*
|
|
29
|
-
* @param {string} command - The command to execute.
|
|
30
|
-
* @param {string[]} args - The arguments to pass to the command (default: []).
|
|
31
|
-
* @param {'install' | 'uninstall'} packageCommand - The optional package command being executed (e.g., 'install', 'uninstall').
|
|
32
|
-
* @param {string} [packageName] - The optional name of the package being installed.
|
|
33
|
-
* @returns {Promise<boolean>} A promise that resolves to true if the command executed successfully, false otherwise.
|
|
34
|
-
*/
|
|
2
|
+
import { hasParameter } from '@matterbridge/utils';
|
|
3
|
+
import { BroadcastServer } from './broadcastServer.js';
|
|
35
4
|
export async function spawnCommand(command, args, packageCommand, packageName) {
|
|
36
5
|
const { spawn } = await import('node:child_process');
|
|
37
|
-
/** Broadcast server */
|
|
38
6
|
const debug = hasParameter('debug') || hasParameter('verbose');
|
|
39
7
|
const verbose = hasParameter('verbose');
|
|
40
|
-
const log = new AnsiLogger({ logName: 'Spawn', logTimestampFormat: 4
|
|
8
|
+
const log = new AnsiLogger({ logName: 'Spawn', logTimestampFormat: 4, logLevel: debug ? "debug" : "info" });
|
|
41
9
|
const server = new BroadcastServer('spawn', log);
|
|
42
10
|
const sendLog = (name, message) => {
|
|
43
11
|
try {
|
|
44
12
|
server.request({ type: 'frontend_logmessage', src: 'spawn', dst: 'frontend', params: { level: 'spawn', time: log.now(), name, message } });
|
|
45
13
|
}
|
|
46
14
|
catch (err) {
|
|
47
|
-
// istanbul ignore next cause it's a precaution
|
|
48
15
|
log.debug(`Failed to send log message to frontend: ${err instanceof Error ? err.message : String(err)}`);
|
|
49
16
|
}
|
|
50
17
|
};
|
|
51
18
|
if (verbose)
|
|
52
19
|
log.debug(`Spawning command: ${command} with ${args.join(' ')} ${packageCommand} ${packageName}`);
|
|
53
|
-
/*
|
|
54
|
-
* npm > npm.cmd on windows
|
|
55
|
-
* cmd.exe ['dir'] on windows
|
|
56
|
-
*/
|
|
57
20
|
const cmdLine = command + ' ' + args.join(' ');
|
|
58
21
|
if (process.platform === 'win32' && command === 'npm') {
|
|
59
|
-
// Must be spawn('cmd.exe', ['/c', 'npm -g install <package>']);
|
|
60
22
|
const argstring = 'npm ' + args.join(' ');
|
|
61
23
|
args.splice(0, args.length, '/c', argstring);
|
|
62
24
|
command = 'cmd.exe';
|
|
63
25
|
}
|
|
64
|
-
// Decide when using sudo on linux and macOS
|
|
65
|
-
// When you need sudo: Spawn stderr: npm error Error: EACCES: permission denied
|
|
66
|
-
// When you don't need sudo: Failed to start child process "npm install -g matterbridge-eve-door": spawn sudo ENOENT
|
|
67
26
|
if (hasParameter('sudo') || (process.platform !== 'win32' && command === 'npm' && !hasParameter('docker') && !hasParameter('nosudo'))) {
|
|
68
27
|
args.unshift(command);
|
|
69
28
|
command = 'sudo';
|
|
@@ -119,20 +78,6 @@ export async function spawnCommand(command, args, packageCommand, packageName) {
|
|
|
119
78
|
sendLog('Matterbridge:spawn', line);
|
|
120
79
|
}
|
|
121
80
|
});
|
|
122
|
-
/*
|
|
123
|
-
childProcess.stdout.on('close', () => {
|
|
124
|
-
log.debug(`Spawn output (stdout): closed`);
|
|
125
|
-
resolve(true);
|
|
126
|
-
});
|
|
127
|
-
childProcess.stdout.on('end', () => {
|
|
128
|
-
log.debug(`Spawn output (stdout): ended`);
|
|
129
|
-
resolve(true);
|
|
130
|
-
});
|
|
131
|
-
childProcess.stdout.on('error', () => {
|
|
132
|
-
log.debug(`Spawn output (stdout): error`);
|
|
133
|
-
resolve(true);
|
|
134
|
-
});
|
|
135
|
-
*/
|
|
136
81
|
}
|
|
137
82
|
if (childProcess.stderr) {
|
|
138
83
|
childProcess.stderr.on('data', (data) => {
|
|
@@ -143,23 +88,8 @@ export async function spawnCommand(command, args, packageCommand, packageName) {
|
|
|
143
88
|
sendLog('Matterbridge:spawn', line);
|
|
144
89
|
}
|
|
145
90
|
});
|
|
146
|
-
/*
|
|
147
|
-
childProcess.stderr.on('close', () => {
|
|
148
|
-
log.debug(`Spawn verbose (stderr): closed`);
|
|
149
|
-
resolve(true);
|
|
150
|
-
});
|
|
151
|
-
childProcess.stderr.on('end', () => {
|
|
152
|
-
log.debug(`Spawn verbose (stderr): ended`);
|
|
153
|
-
resolve(true);
|
|
154
|
-
});
|
|
155
|
-
childProcess.stderr.on('error', () => {
|
|
156
|
-
log.debug(`Spawn verbose (stderr): error`);
|
|
157
|
-
resolve(true);
|
|
158
|
-
});
|
|
159
|
-
*/
|
|
160
91
|
}
|
|
161
92
|
});
|
|
162
93
|
server.close();
|
|
163
94
|
return success;
|
|
164
95
|
}
|
|
165
|
-
//# sourceMappingURL=spawn.js.map
|
package/dist/storage/export.d.ts
CHANGED
package/dist/storage/export.js
CHANGED