homebridge-eufy-security 4.4.2-beta.2 → 4.4.2-beta.20
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 +1 -1
- package/FUNDING.yml +1 -0
- package/README.md +14 -17
- package/dist/accessories/AutoSyncStationAccessory.js +26 -30
- package/dist/accessories/AutoSyncStationAccessory.js.map +1 -1
- package/dist/accessories/BaseAccessory.js +33 -46
- package/dist/accessories/BaseAccessory.js.map +1 -1
- package/dist/accessories/CameraAccessory.js +92 -167
- package/dist/accessories/CameraAccessory.js.map +1 -1
- package/dist/accessories/Device.js +11 -15
- package/dist/accessories/Device.js.map +1 -1
- package/dist/accessories/EntrySensorAccessory.js +7 -12
- package/dist/accessories/EntrySensorAccessory.js.map +1 -1
- package/dist/accessories/LockAccessory.js +20 -24
- package/dist/accessories/LockAccessory.js.map +1 -1
- package/dist/accessories/MotionSensorAccessory.js +7 -12
- package/dist/accessories/MotionSensorAccessory.js.map +1 -1
- package/dist/accessories/StationAccessory.js +40 -45
- package/dist/accessories/StationAccessory.js.map +1 -1
- package/dist/config.js +1 -4
- package/dist/config.js.map +1 -1
- package/dist/controller/LocalLivestreamManager.js +85 -89
- package/dist/controller/LocalLivestreamManager.js.map +1 -1
- package/dist/controller/recordingDelegate.js +116 -108
- package/dist/controller/recordingDelegate.js.map +1 -1
- package/dist/controller/snapshotDelegate.js +379 -0
- package/dist/controller/snapshotDelegate.js.map +1 -0
- package/dist/controller/streamingDelegate.js +202 -207
- package/dist/controller/streamingDelegate.js.map +1 -1
- package/dist/index.js +9 -7
- package/dist/index.js.map +1 -1
- package/dist/interfaces.js +1 -2
- package/dist/interfaces.js.map +1 -1
- package/dist/platform.js +145 -165
- package/dist/platform.js.map +1 -1
- package/dist/settings.js +26 -19
- package/dist/settings.js.map +1 -1
- package/dist/utils/Talkback.js +9 -13
- package/dist/utils/Talkback.js.map +1 -1
- package/dist/utils/configTypes.js +12 -7
- package/dist/utils/configTypes.js.map +1 -1
- package/dist/utils/ffmpeg.js +44 -52
- package/dist/utils/ffmpeg.js.map +1 -1
- package/dist/utils/interfaces.js +1 -5
- package/dist/utils/interfaces.js.map +1 -1
- package/dist/utils/utils.js +32 -134
- package/dist/utils/utils.js.map +1 -1
- package/dist/version.js +1 -4
- package/dist/version.js.map +1 -1
- package/eslint.config.mjs +25 -47
- package/homebridge-eufy-security.png +0 -0
- package/homebridge-ui/public/app.js +221 -0
- package/homebridge-ui/public/assets/devices/eufycam3pro_large.png +0 -0
- package/homebridge-ui/public/assets/devices/homebase3_large.png +0 -0
- package/homebridge-ui/public/assets/devices/homebasemini_large.jpg +0 -0
- package/homebridge-ui/public/assets/devices/indoorcamC210_large.png +0 -0
- package/homebridge-ui/public/assets/devices/indoorcamC220_large.png +0 -0
- package/homebridge-ui/public/assets/devices/indoorcamE30_large.png +0 -0
- package/homebridge-ui/public/assets/devices/solocamc35_large.png +0 -0
- package/homebridge-ui/public/assets/devices/solocame30_large.png +0 -0
- package/homebridge-ui/public/components/device-card.js +141 -0
- package/homebridge-ui/public/components/guard-modes.js +88 -0
- package/homebridge-ui/public/components/number-input.js +121 -0
- package/homebridge-ui/public/components/select.js +73 -0
- package/homebridge-ui/public/components/toggle.js +68 -0
- package/homebridge-ui/public/index.html +24 -14
- package/homebridge-ui/public/services/api.js +129 -0
- package/homebridge-ui/public/services/config.js +144 -0
- package/homebridge-ui/public/style.css +705 -0
- package/homebridge-ui/public/utils/countries.js +73 -0
- package/homebridge-ui/public/utils/device-images.js +69 -0
- package/homebridge-ui/public/utils/helpers.js +47 -0
- package/homebridge-ui/public/views/dashboard.js +211 -0
- package/homebridge-ui/public/views/device-detail.js +631 -0
- package/homebridge-ui/public/views/login.js +625 -0
- package/homebridge-ui/public/views/settings.js +389 -0
- package/homebridge-ui/public/views/unsupported-detail.js +216 -0
- package/homebridge-ui/server.js +567 -450
- package/package.json +19 -59
- package/dist/accessories/AutoSyncStationAccessory.d.ts +0 -42
- package/dist/accessories/AutoSyncStationAccessory.d.ts.map +0 -1
- package/dist/accessories/BaseAccessory.d.ts +0 -56
- package/dist/accessories/BaseAccessory.d.ts.map +0 -1
- package/dist/accessories/CameraAccessory.d.ts +0 -84
- package/dist/accessories/CameraAccessory.d.ts.map +0 -1
- package/dist/accessories/Device.d.ts +0 -19
- package/dist/accessories/Device.d.ts.map +0 -1
- package/dist/accessories/EntrySensorAccessory.d.ts +0 -25
- package/dist/accessories/EntrySensorAccessory.d.ts.map +0 -1
- package/dist/accessories/LockAccessory.d.ts +0 -45
- package/dist/accessories/LockAccessory.d.ts.map +0 -1
- package/dist/accessories/MotionSensorAccessory.d.ts +0 -25
- package/dist/accessories/MotionSensorAccessory.d.ts.map +0 -1
- package/dist/accessories/StationAccessory.d.ts +0 -86
- package/dist/accessories/StationAccessory.d.ts.map +0 -1
- package/dist/config.d.ts +0 -31
- package/dist/config.d.ts.map +0 -1
- package/dist/controller/LocalLivestreamManager.d.ts +0 -31
- package/dist/controller/LocalLivestreamManager.d.ts.map +0 -1
- package/dist/controller/SnapshotManager.d.ts +0 -64
- package/dist/controller/SnapshotManager.d.ts.map +0 -1
- package/dist/controller/SnapshotManager.js +0 -434
- package/dist/controller/SnapshotManager.js.map +0 -1
- package/dist/controller/recordingDelegate.d.ts +0 -27
- package/dist/controller/recordingDelegate.d.ts.map +0 -1
- package/dist/controller/streamingDelegate.d.ts +0 -52
- package/dist/controller/streamingDelegate.d.ts.map +0 -1
- package/dist/index.d.ts +0 -7
- package/dist/index.d.ts.map +0 -1
- package/dist/interfaces.d.ts +0 -15
- package/dist/interfaces.d.ts.map +0 -1
- package/dist/platform.d.ts +0 -94
- package/dist/platform.d.ts.map +0 -1
- package/dist/settings.d.ts +0 -23
- package/dist/settings.d.ts.map +0 -1
- package/dist/utils/Talkback.d.ts +0 -21
- package/dist/utils/Talkback.d.ts.map +0 -1
- package/dist/utils/configTypes.d.ts +0 -68
- package/dist/utils/configTypes.d.ts.map +0 -1
- package/dist/utils/ffmpeg.d.ts +0 -111
- package/dist/utils/ffmpeg.d.ts.map +0 -1
- package/dist/utils/interfaces.d.ts +0 -8
- package/dist/utils/interfaces.d.ts.map +0 -1
- package/dist/utils/utils.d.ts +0 -35
- package/dist/utils/utils.d.ts.map +0 -1
- package/dist/version.d.ts +0 -2
- package/dist/version.d.ts.map +0 -1
- package/homebridge-ui/configui/app/util/types.d.ts +0 -65
- package/homebridge-ui/configui/app/util/types.d.ts.map +0 -1
- package/homebridge-ui/configui/app/util/types.js +0 -18
- package/homebridge-ui/configui/app/util/types.js.map +0 -1
- package/homebridge-ui/public/3rdpartylicenses.txt +0 -561
- package/homebridge-ui/public/assets/devices/homebase2_large.jpg +0 -0
- package/homebridge-ui/public/assets/devices/homebase3_large.jpg +0 -0
- package/homebridge-ui/public/assets/images/homebridge-eufy-security.png +0 -0
- package/homebridge-ui/public/favicon.ico +0 -0
- package/homebridge-ui/public/main.f6423287e0411c87.js +0 -1
- package/homebridge-ui/public/polyfills.efa2f09ba3e49167.js +0 -1
- package/homebridge-ui/public/runtime.ccde331d62c423b3.js +0 -1
- package/homebridge-ui/public/styles.13e635bf7a488639.css +0 -5
- package/homebridge-ui/server.d.ts +0 -2
- package/homebridge-ui/server.d.ts.map +0 -1
- package/homebridge-ui/server.js.map +0 -1
- package/homebridge-ui/version.d.ts +0 -2
- package/homebridge-ui/version.d.ts.map +0 -1
- package/homebridge-ui/version.js +0 -5
- package/homebridge-ui/version.js.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# Change Log
|
|
2
2
|
|
|
3
|
-
You can find the complete detailled changelog for every release [here](https://github.com/homebridge-eufy-security/
|
|
3
|
+
You can find the complete detailled changelog for every release [here](https://github.com/homebridge-plugins/homebridge-eufy-security/releases).
|
|
4
4
|
|
|
5
5
|
Before transitioning to a major version, it's strongly advised to back up your configuration and begin anew. Major updates have the potential to disrupt automation setups and bridge/unbridge accessory functionalities.
|
package/FUNDING.yml
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
github: [lenoxys]
|
package/README.md
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<p align="center">
|
|
2
|
-
<a href="https://github.com/homebridge-eufy-security
|
|
2
|
+
<a href="https://github.com/homebridge-plugins/homebridge-eufy-security"><img src="https://raw.githubusercontent.com/wiki/homebridge-eufy-security/plugin/img/homebridge-eufy-security.png" width="456px"></a>
|
|
3
3
|
</p>
|
|
4
4
|
<span align="center">
|
|
5
5
|
|
|
@@ -8,12 +8,9 @@
|
|
|
8
8
|
Homebridge plugin to control certain Eufy Security devices
|
|
9
9
|
|
|
10
10
|
[](https://www.npmjs.com/package/homebridge-eufy-security)
|
|
11
|
+
[](https://github.com/homebridge-plugins/homebridge-eufy-security/wiki/Special-Version-(BETA---RC---HKSV))
|
|
11
12
|
[](https://github.com/homebridge/homebridge/wiki/Verified-Plugins)
|
|
12
13
|
[](https://www.npmjs.com/package/homebridge-eufy-security)
|
|
13
|
-
|
|
14
|
-
[](https://github.com/homebridge-eufy-security/plugin/wiki/Special-Version-(BETA---RC---HKSV))
|
|
15
|
-
[](https://github.com/homebridge-eufy-security/plugin/wiki/Special-Version-(BETA---RC---HKSV))
|
|
16
|
-
[](https://github.com/homebridge-eufy-security/plugin/wiki/Special-Version-(BETA---RC---HKSV))
|
|
17
14
|
[](https://discord.com/channels/432663330281226270/876907345962229791)
|
|
18
15
|
|
|
19
16
|
</span>
|
|
@@ -30,24 +27,24 @@ Homebridge plugin to control certain Eufy Security devices
|
|
|
30
27
|
- For configuration Homebridge UI is recommenend. If you have 2FA enabled it is mandatory.
|
|
31
28
|
|
|
32
29
|
### ⚠️ Warning
|
|
33
|
-
Starting from Node.js versions `18.19.1`, `20.11.1`, and `21.6.2`, the removal of `RSA_PKCS1_PADDING` support breaks Eufy Security's livestream/P2P functionality. We advise against using Node.js versions beyond **v20.11.0** until compatibility with the plugin has been confirmed. If you encounter any issues, consider reverting to the recommended LTS version within the **v20** branch. See [here](https://github.com/homebridge-eufy-security/
|
|
30
|
+
Starting from Node.js versions `18.19.1`, `20.11.1`, and `21.6.2`, the removal of `RSA_PKCS1_PADDING` support breaks Eufy Security's livestream/P2P functionality. We advise against using Node.js versions beyond **v20.11.0** until compatibility with the plugin has been confirmed. If you encounter any issues, consider reverting to the recommended LTS version within the **v20** branch. See [here](https://github.com/homebridge-plugins/homebridge-eufy-security/wiki/Node.js-Compatibility-with-Eufy-Security-Plugin) for more information.
|
|
34
31
|
|
|
35
32
|
#### Setup
|
|
36
|
-
* [Installation](https://github.com/homebridge-eufy-security/
|
|
37
|
-
* [Configuration](https://github.com/homebridge-eufy-security/
|
|
38
|
-
* [Bridged and Unbridged Mode](https://github.com/homebridge-eufy-security/
|
|
39
|
-
* [Beta Version](https://github.com/homebridge-eufy-security/
|
|
40
|
-
* [Uninstallation](https://github.com/homebridge-eufy-security/
|
|
33
|
+
* [Installation](https://github.com/homebridge-plugins/homebridge-eufy-security/wiki/Installation-and-Configuration#installation)
|
|
34
|
+
* [Configuration](https://github.com/homebridge-plugins/homebridge-eufy-security/wiki/Installation-and-Configuration#configuration)
|
|
35
|
+
* [Bridged and Unbridged Mode](https://github.com/homebridge-plugins/homebridge-eufy-security/wiki/Bridged-and-Unbridged-Mode-and-Problems)
|
|
36
|
+
* [Beta Version](https://github.com/homebridge-plugins/homebridge-eufy-security/wiki/Special-Version-(BETA---RC---HKSV))
|
|
37
|
+
* [Uninstallation](https://github.com/homebridge-plugins/homebridge-eufy-security/wiki/Uninstallation)
|
|
41
38
|
|
|
42
39
|
#### Features
|
|
43
|
-
* [Streaming](https://github.com/homebridge-eufy-security/
|
|
44
|
-
* [HomeKit Secure Video](https://github.com/homebridge-eufy-security/
|
|
40
|
+
* [Streaming](https://github.com/homebridge-plugins/homebridge-eufy-security/wiki/Streaming-Settings)
|
|
41
|
+
* [HomeKit Secure Video](https://github.com/homebridge-plugins/homebridge-eufy-security/wiki/HomeKit-Secure-Video)
|
|
45
42
|
|
|
46
43
|
#### Help
|
|
47
|
-
* [Basic Troubleshooting](https://github.com/homebridge-eufy-security/
|
|
48
|
-
* [Common Issues](https://github.com/homebridge-eufy-security/
|
|
49
|
-
* [Support Request](https://github.com/homebridge-eufy-security/
|
|
50
|
-
* [Changelog](https://github.com/homebridge-eufy-security/
|
|
44
|
+
* [Basic Troubleshooting](https://github.com/homebridge-plugins/homebridge-eufy-security/wiki/Basic-Troubleshooting)
|
|
45
|
+
* [Common Issues](https://github.com/homebridge-plugins/homebridge-eufy-security/wiki/Common-Issues)
|
|
46
|
+
* [Support Request](https://github.com/homebridge-plugins/homebridge-eufy-security/issues/new/choose)
|
|
47
|
+
* [Changelog](https://github.com/homebridge-plugins/homebridge-eufy-security/blob/master/CHANGELOG.md)
|
|
51
48
|
|
|
52
49
|
### Supporting
|
|
53
50
|
|
|
@@ -1,15 +1,12 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
const eufy_security_client_1 = require("eufy-security-client");
|
|
5
|
-
const StationAccessory_1 = require("./StationAccessory");
|
|
6
|
-
const utils_1 = require("../utils/utils");
|
|
1
|
+
import { AlarmEvent, GuardMode } from 'eufy-security-client';
|
|
2
|
+
import { StationAccessory } from './StationAccessory.js';
|
|
3
|
+
import { CHAR, SERV, log } from '../utils/utils.js';
|
|
7
4
|
/**
|
|
8
5
|
* Platform Auto Accessory
|
|
9
6
|
* An instance of this class is created for each accessory your platform registers
|
|
10
7
|
* Each accessory may expose multiple services of different service types.
|
|
11
8
|
*/
|
|
12
|
-
class AutoSyncStationAccessory {
|
|
9
|
+
export class AutoSyncStationAccessory {
|
|
13
10
|
accessory;
|
|
14
11
|
device;
|
|
15
12
|
static first = true;
|
|
@@ -32,14 +29,14 @@ class AutoSyncStationAccessory {
|
|
|
32
29
|
// if it's the first we do create a full station accessory and then store it
|
|
33
30
|
// if not we need to fire event from Eufy to push to HK and vice versa
|
|
34
31
|
if (first) {
|
|
35
|
-
|
|
32
|
+
log.debug(`${this.accessory.displayName} Constructed First Station`);
|
|
36
33
|
// Create the Station accessory
|
|
37
|
-
AutoSyncStationAccessory.first_station = new
|
|
34
|
+
AutoSyncStationAccessory.first_station = new StationAccessory(platform, accessory, device);
|
|
38
35
|
this.device.on('guard mode', this.changeModeToAllChilds.bind(this));
|
|
39
36
|
this.device.on('alarm event', this.fireAlarmToAllChilds.bind(this));
|
|
40
37
|
}
|
|
41
38
|
else {
|
|
42
|
-
|
|
39
|
+
log.debug(`${this.accessory.displayName} Constructed Child Station`);
|
|
43
40
|
// Register to Eufy event of all childs
|
|
44
41
|
this.initChildEventRegister();
|
|
45
42
|
}
|
|
@@ -49,18 +46,18 @@ class AutoSyncStationAccessory {
|
|
|
49
46
|
initChildEventRegister() {
|
|
50
47
|
const first_station = AutoSyncStationAccessory.first_station;
|
|
51
48
|
this.device.on('current mode', (station, currentMode) => {
|
|
52
|
-
|
|
49
|
+
log.debug(`FWD ${this.name} 'current mode' TO clearTimeout (${currentMode})`);
|
|
53
50
|
if (this.guardModeChangeTimeout.timeout) {
|
|
54
51
|
// If there's an existing timeout, clear it
|
|
55
52
|
clearTimeout(this.guardModeChangeTimeout.timeout);
|
|
56
53
|
}
|
|
57
54
|
});
|
|
58
55
|
this.device.on('alarm arm delay event', (station, armDelay) => {
|
|
59
|
-
|
|
56
|
+
log.debug(`FWD ${this.name} 'alarm arm delay event' TO ${first_station.name}`);
|
|
60
57
|
first_station.onStationAlarmDelayedEvent(station, armDelay);
|
|
61
58
|
});
|
|
62
59
|
this.device.on('alarm armed event', () => {
|
|
63
|
-
|
|
60
|
+
log.debug(`FWD ${this.name} 'alarm armed event' TO ${first_station.name}`);
|
|
64
61
|
first_station.onStationAlarmArmedEvent();
|
|
65
62
|
});
|
|
66
63
|
this.device.on('alarm event', this.fireAlarmToAllChilds.bind(this));
|
|
@@ -69,7 +66,7 @@ class AutoSyncStationAccessory {
|
|
|
69
66
|
* Handle requests to set the 'Security System Target State' to all childs
|
|
70
67
|
*/
|
|
71
68
|
changeModeToAllChilds(station, guardMode) {
|
|
72
|
-
|
|
69
|
+
log.info(`FWD ${this.name} 'guard mode (${GuardMode[guardMode]})' TO all the childs`);
|
|
73
70
|
AutoSyncStationAccessory.childs.forEach((child, index) => {
|
|
74
71
|
if (index === 0) {
|
|
75
72
|
return;
|
|
@@ -86,7 +83,7 @@ class AutoSyncStationAccessory {
|
|
|
86
83
|
const first_station = AutoSyncStationAccessory.first_station;
|
|
87
84
|
const manualAlarmSeconds = first_station.stationConfig.manualAlarmSeconds;
|
|
88
85
|
// Log the received alarm event
|
|
89
|
-
|
|
86
|
+
log.debug(`RECEIVED ${this.name} 'alarm event' REASON ${AlarmEvent[alarmEvent]}`);
|
|
90
87
|
// Prevent looping with multiple received events
|
|
91
88
|
// Reinit after manualAlarmSeconds * 4 / 5
|
|
92
89
|
if (AutoSyncStationAccessory.alarmFired) {
|
|
@@ -94,26 +91,26 @@ class AutoSyncStationAccessory {
|
|
|
94
91
|
}
|
|
95
92
|
else {
|
|
96
93
|
AutoSyncStationAccessory.alarmFired = true;
|
|
97
|
-
|
|
94
|
+
log.debug(`SET TIMEOUT ${this.name} 'alarm event' REASON ${AlarmEvent[alarmEvent]} FOR ${manualAlarmSeconds * 4 / 5}sec`);
|
|
98
95
|
AutoSyncStationAccessory.alarmFiredTimeout.timeout = setTimeout(() => {
|
|
99
96
|
AutoSyncStationAccessory.alarmFired = false;
|
|
100
|
-
|
|
97
|
+
log.debug(`TIMEOUT ${this.name} 'alarm event' REASON ${AlarmEvent[alarmEvent]}`);
|
|
101
98
|
}, manualAlarmSeconds * 4 / 5 * 1000);
|
|
102
99
|
}
|
|
103
100
|
// List of alarm events fired to stop alarm
|
|
104
101
|
const pluginFiredAlarmStopEvents = [
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
102
|
+
AlarmEvent.HUB_STOP,
|
|
103
|
+
AlarmEvent.HUB_STOP_BY_APP,
|
|
104
|
+
AlarmEvent.HUB_STOP_BY_HAND,
|
|
105
|
+
AlarmEvent.HUB_STOP_BY_KEYPAD,
|
|
106
|
+
AlarmEvent.DEV_STOP
|
|
110
107
|
];
|
|
111
108
|
// Check if the alarm event is a plugin-fired alarm stop event
|
|
112
109
|
if (pluginFiredAlarmStopEvents.includes(alarmEvent)) {
|
|
113
110
|
return;
|
|
114
111
|
}
|
|
115
|
-
const characteristic = first_station.getService(
|
|
116
|
-
.getCharacteristic(
|
|
112
|
+
const characteristic = first_station.getService(SERV.SecuritySystem)
|
|
113
|
+
.getCharacteristic(CHAR.SecuritySystemCurrentState);
|
|
117
114
|
first_station.onStationAlarmEventPushNotification(characteristic, alarmEvent);
|
|
118
115
|
// Iterate over child stations to synchronize the alarm event
|
|
119
116
|
AutoSyncStationAccessory.childs.forEach(child => {
|
|
@@ -122,7 +119,7 @@ class AutoSyncStationAccessory {
|
|
|
122
119
|
return; // Already fired by itself so do nothing for him
|
|
123
120
|
}
|
|
124
121
|
// Log the forwarded alarm event along with the reason and duration
|
|
125
|
-
|
|
122
|
+
log.debug(`FWD ${this.name} 'alarm event' TO ${child.name} REASON ${AlarmEvent[alarmEvent]} FOR ${manualAlarmSeconds}sec`);
|
|
126
123
|
// Trigger the alarm sound on the child station with the specified duration
|
|
127
124
|
child.device.triggerStationAlarmSound(manualAlarmSeconds);
|
|
128
125
|
});
|
|
@@ -132,29 +129,28 @@ class AutoSyncStationAccessory {
|
|
|
132
129
|
*/
|
|
133
130
|
handleSecuritySystemTargetStateSet(mode) {
|
|
134
131
|
try {
|
|
135
|
-
|
|
132
|
+
log.debug(`${this.name} SET StationGuardMode Eufy: ${GuardMode[mode]}(${mode})`);
|
|
136
133
|
// Call the device's setGuardMode method to initiate the action
|
|
137
134
|
this.device.setGuardMode(mode);
|
|
138
135
|
// Set a new timeout
|
|
139
136
|
this.guardModeChangeTimeout.timeout = setTimeout(() => {
|
|
140
137
|
// This code is executed when the timeout elapses, indicating that the action may not have completed yet.
|
|
141
138
|
// You can include a message indicating that the action is being retried.
|
|
142
|
-
|
|
139
|
+
log.warn(`${this.accessory.displayName} Changing guard mode to ${GuardMode[mode]} did not complete. Retry...'`);
|
|
143
140
|
// Call the device's setGuardMode method to initiate the action
|
|
144
141
|
this.device.setGuardMode(mode);
|
|
145
142
|
// Set a secondary timeout for retry, if needed
|
|
146
143
|
const retryTimeout = setTimeout(() => {
|
|
147
144
|
// This code is executed if the retry also times out, indicating a failure.
|
|
148
|
-
|
|
145
|
+
log.error(`${this.accessory.displayName} Changing guard mode to ${GuardMode[mode]} timed out!`);
|
|
149
146
|
}, this.guardModeChangeTimeout.delay);
|
|
150
147
|
// Store the retry timeout as part of guardModeChangeTimeout
|
|
151
148
|
this.guardModeChangeTimeout.timeout = retryTimeout;
|
|
152
149
|
}, this.guardModeChangeTimeout.delay);
|
|
153
150
|
}
|
|
154
151
|
catch (error) {
|
|
155
|
-
|
|
152
|
+
log.error(`${this.name} Error Setting security mode! ${error}`);
|
|
156
153
|
}
|
|
157
154
|
}
|
|
158
155
|
}
|
|
159
|
-
exports.AutoSyncStationAccessory = AutoSyncStationAccessory;
|
|
160
156
|
//# sourceMappingURL=AutoSyncStationAccessory.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AutoSyncStationAccessory.js","sourceRoot":"","sources":["../../src/
|
|
1
|
+
{"version":3,"file":"AutoSyncStationAccessory.js","sourceRoot":"","sources":["../../src/accessories/AutoSyncStationAccessory.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
const eufy_security_client_1 = require("eufy-security-client");
|
|
5
|
-
const events_1 = require("events");
|
|
6
|
-
const utils_1 = require("../utils/utils");
|
|
1
|
+
import { DeviceType } from 'eufy-security-client';
|
|
2
|
+
import { EventEmitter } from 'events';
|
|
3
|
+
import { CHAR, SERV, log } from '../utils/utils.js';
|
|
7
4
|
/**
|
|
8
5
|
* Determine if the serviceType is an instance of Service.
|
|
9
6
|
*
|
|
@@ -11,10 +8,9 @@ const utils_1 = require("../utils/utils");
|
|
|
11
8
|
* @returns {boolean} Returns true if the serviceType is an instance of Service, otherwise false.
|
|
12
9
|
*/
|
|
13
10
|
function isServiceInstance(serviceType) {
|
|
14
|
-
// eslint-disable-next-line
|
|
15
11
|
return typeof serviceType === 'object';
|
|
16
12
|
}
|
|
17
|
-
class BaseAccessory extends
|
|
13
|
+
export class BaseAccessory extends EventEmitter {
|
|
18
14
|
platform;
|
|
19
15
|
accessory;
|
|
20
16
|
device;
|
|
@@ -22,9 +18,7 @@ class BaseAccessory extends events_1.EventEmitter {
|
|
|
22
18
|
SN;
|
|
23
19
|
name;
|
|
24
20
|
log;
|
|
25
|
-
constructor(platform, accessory,
|
|
26
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
27
|
-
device) {
|
|
21
|
+
constructor(platform, accessory, device) {
|
|
28
22
|
super();
|
|
29
23
|
this.platform = platform;
|
|
30
24
|
this.accessory = accessory;
|
|
@@ -32,40 +26,45 @@ class BaseAccessory extends events_1.EventEmitter {
|
|
|
32
26
|
this.device = device;
|
|
33
27
|
this.SN = this.device.getSerial();
|
|
34
28
|
this.name = this.device.getName();
|
|
35
|
-
this.log =
|
|
29
|
+
this.log = log.getSubLogger({
|
|
36
30
|
name: '',
|
|
37
31
|
prefix: [this.name],
|
|
38
32
|
});
|
|
39
33
|
this.registerCharacteristic({
|
|
40
|
-
serviceType:
|
|
41
|
-
characteristicType:
|
|
34
|
+
serviceType: SERV.AccessoryInformation,
|
|
35
|
+
characteristicType: CHAR.Manufacturer,
|
|
42
36
|
getValue: () => 'Eufy',
|
|
43
37
|
});
|
|
44
38
|
this.registerCharacteristic({
|
|
45
|
-
serviceType:
|
|
46
|
-
characteristicType:
|
|
39
|
+
serviceType: SERV.AccessoryInformation,
|
|
40
|
+
characteristicType: CHAR.Name,
|
|
47
41
|
getValue: () => this.name || 'Unknowm',
|
|
48
42
|
});
|
|
49
43
|
this.registerCharacteristic({
|
|
50
|
-
serviceType:
|
|
51
|
-
characteristicType:
|
|
52
|
-
getValue: () =>
|
|
44
|
+
serviceType: SERV.AccessoryInformation,
|
|
45
|
+
characteristicType: CHAR.Model,
|
|
46
|
+
getValue: () => DeviceType[this.device.getDeviceType()] || 'Unknowm',
|
|
53
47
|
});
|
|
54
48
|
this.registerCharacteristic({
|
|
55
|
-
serviceType:
|
|
56
|
-
characteristicType:
|
|
49
|
+
serviceType: SERV.AccessoryInformation,
|
|
50
|
+
characteristicType: CHAR.SerialNumber,
|
|
57
51
|
getValue: () => this.SN || 'Unknowm',
|
|
58
52
|
});
|
|
59
53
|
this.registerCharacteristic({
|
|
60
|
-
serviceType:
|
|
61
|
-
characteristicType:
|
|
54
|
+
serviceType: SERV.AccessoryInformation,
|
|
55
|
+
characteristicType: CHAR.FirmwareRevision,
|
|
62
56
|
getValue: () => this.device.getSoftwareVersion() || 'Unknowm',
|
|
63
57
|
});
|
|
64
58
|
this.registerCharacteristic({
|
|
65
|
-
serviceType:
|
|
66
|
-
characteristicType:
|
|
59
|
+
serviceType: SERV.AccessoryInformation,
|
|
60
|
+
characteristicType: CHAR.HardwareRevision,
|
|
67
61
|
getValue: () => this.device.getHardwareVersion() || 'Unknowm',
|
|
68
62
|
});
|
|
63
|
+
// Cameras accumulate many listeners (property changes, events, snapshots, streaming).
|
|
64
|
+
// Raise limit to prevent MaxListenersExceededWarning in Node 22+.
|
|
65
|
+
if (typeof this.device.setMaxListeners === 'function') {
|
|
66
|
+
this.device.setMaxListeners(30);
|
|
67
|
+
}
|
|
69
68
|
if (this.platform.config.enableDetailedLogging) {
|
|
70
69
|
this.device.on('raw property changed', this.handleRawPropertyChange.bind(this));
|
|
71
70
|
this.device.on('property changed', this.handlePropertyChange.bind(this));
|
|
@@ -76,11 +75,9 @@ class BaseAccessory extends events_1.EventEmitter {
|
|
|
76
75
|
logPropertyKeys() {
|
|
77
76
|
this.log.debug(`Property Keys:`, this.device.getProperties());
|
|
78
77
|
}
|
|
79
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
80
78
|
handleRawPropertyChange(device, type, value) {
|
|
81
79
|
this.log.debug(`Raw Property Changes:`, type, value);
|
|
82
80
|
}
|
|
83
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
84
81
|
handlePropertyChange(device, name, value) {
|
|
85
82
|
this.log.debug(`Property Changes:`, name, value);
|
|
86
83
|
}
|
|
@@ -122,7 +119,6 @@ class BaseAccessory extends events_1.EventEmitter {
|
|
|
122
119
|
});
|
|
123
120
|
}
|
|
124
121
|
if (onSimpleValue) {
|
|
125
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
126
122
|
this.device.on(onSimpleValue, (device, value) => {
|
|
127
123
|
this.log.info(`ON '${serviceType.name} / ${characteristicType.name} / ${onSimpleValue}':`, value);
|
|
128
124
|
characteristic.updateValue(value);
|
|
@@ -135,7 +131,6 @@ class BaseAccessory extends events_1.EventEmitter {
|
|
|
135
131
|
if (onMultipleValue) {
|
|
136
132
|
// Attach the common event handler to each event type
|
|
137
133
|
onMultipleValue.forEach(eventType => {
|
|
138
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
139
134
|
this.device.on(eventType, (device, value) => {
|
|
140
135
|
this.log.info(`ON '${serviceType.name} / ${characteristicType.name} / ${eventType}':`, value);
|
|
141
136
|
characteristic.updateValue(value);
|
|
@@ -170,8 +165,16 @@ class BaseAccessory extends events_1.EventEmitter {
|
|
|
170
165
|
return service;
|
|
171
166
|
}
|
|
172
167
|
pruneUnusedServices() {
|
|
168
|
+
// Services managed by CameraController must never be pruned.
|
|
169
|
+
// CameraController creates these automatically during configureController()
|
|
170
|
+
// and they are not tracked in servicesInUse.
|
|
173
171
|
const safeServiceUUIDs = [
|
|
174
|
-
|
|
172
|
+
SERV.CameraRTPStreamManagement.UUID, // 00000110
|
|
173
|
+
'0000021A-0000-1000-8000-0026BB765291', // CameraOperatingMode (HKSV)
|
|
174
|
+
'00000204-0000-1000-8000-0026BB765291', // CameraRecordingManagement (HKSV)
|
|
175
|
+
'00000129-0000-1000-8000-0026BB765291', // DataStreamTransportManagement (HKSV)
|
|
176
|
+
SERV.Microphone.UUID, // 00000112 (created by CameraController)
|
|
177
|
+
SERV.Speaker.UUID, // 00000113 (created by CameraController)
|
|
175
178
|
];
|
|
176
179
|
this.accessory.services.forEach((service) => {
|
|
177
180
|
if (!this.servicesInUse.includes(service) &&
|
|
@@ -181,21 +184,5 @@ class BaseAccessory extends events_1.EventEmitter {
|
|
|
181
184
|
}
|
|
182
185
|
});
|
|
183
186
|
}
|
|
184
|
-
handleDummyEventGet(serviceName) {
|
|
185
|
-
const characteristicValues = {
|
|
186
|
-
'EventSnapshotsActive': utils_1.CHAR.EventSnapshotsActive.DISABLE,
|
|
187
|
-
'HomeKitCameraActive': utils_1.CHAR.HomeKitCameraActive.OFF,
|
|
188
|
-
};
|
|
189
|
-
const currentValue = characteristicValues[serviceName];
|
|
190
|
-
if (currentValue === undefined) {
|
|
191
|
-
throw new Error(`Invalid serviceName: ${serviceName}`);
|
|
192
|
-
}
|
|
193
|
-
this.log.debug(`IGNORE GET ${serviceName}: ${currentValue}`);
|
|
194
|
-
return Promise.resolve(currentValue);
|
|
195
|
-
}
|
|
196
|
-
handleDummyEventSet(serviceName, value) {
|
|
197
|
-
this.log.debug(`IGNORE SET ${serviceName}: ${value}`);
|
|
198
|
-
}
|
|
199
187
|
}
|
|
200
|
-
exports.BaseAccessory = BaseAccessory;
|
|
201
188
|
//# sourceMappingURL=BaseAccessory.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BaseAccessory.js","sourceRoot":"","sources":["../../src/
|
|
1
|
+
{"version":3,"file":"BaseAccessory.js","sourceRoot":"","sources":["../../src/accessories/BaseAccessory.ts"],"names":[],"mappings":"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"}
|