homebridge-eufy-security 2.3.1-beta.2 → 2.3.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.
Files changed (129) hide show
  1. package/CHANGELOG.md +134 -0
  2. package/README.md +2 -2
  3. package/dist/accessories/BaseAccessory.d.ts +37 -0
  4. package/dist/accessories/BaseAccessory.d.ts.map +1 -0
  5. package/dist/accessories/BaseAccessory.js +177 -0
  6. package/dist/accessories/BaseAccessory.js.map +1 -0
  7. package/dist/accessories/CameraAccessory.d.ts +27 -43
  8. package/dist/accessories/CameraAccessory.d.ts.map +1 -1
  9. package/dist/accessories/CameraAccessory.js +365 -273
  10. package/dist/accessories/CameraAccessory.js.map +1 -1
  11. package/dist/accessories/Device.d.ts +14 -16
  12. package/dist/accessories/Device.d.ts.map +1 -1
  13. package/dist/accessories/Device.js +55 -69
  14. package/dist/accessories/Device.js.map +1 -1
  15. package/dist/accessories/EntrySensorAccessory.d.ts +2 -6
  16. package/dist/accessories/EntrySensorAccessory.d.ts.map +1 -1
  17. package/dist/accessories/EntrySensorAccessory.js +14 -40
  18. package/dist/accessories/EntrySensorAccessory.js.map +1 -1
  19. package/dist/accessories/LockAccessory.d.ts +16 -0
  20. package/dist/accessories/LockAccessory.d.ts.map +1 -0
  21. package/dist/accessories/LockAccessory.js +135 -0
  22. package/dist/accessories/LockAccessory.js.map +1 -0
  23. package/dist/accessories/MotionSensorAccessory.d.ts +2 -6
  24. package/dist/accessories/MotionSensorAccessory.d.ts.map +1 -1
  25. package/dist/accessories/MotionSensorAccessory.js +14 -40
  26. package/dist/accessories/MotionSensorAccessory.js.map +1 -1
  27. package/dist/accessories/StationAccessory.d.ts +53 -17
  28. package/dist/accessories/StationAccessory.d.ts.map +1 -1
  29. package/dist/accessories/StationAccessory.js +226 -201
  30. package/dist/accessories/StationAccessory.js.map +1 -1
  31. package/dist/config.d.ts +1 -2
  32. package/dist/config.d.ts.map +1 -1
  33. package/dist/controller/LocalLivestreamManager.d.ts +7 -8
  34. package/dist/controller/LocalLivestreamManager.d.ts.map +1 -1
  35. package/dist/controller/LocalLivestreamManager.js +6 -47
  36. package/dist/controller/LocalLivestreamManager.js.map +1 -1
  37. package/dist/controller/SnapshotManager.d.ts +4 -9
  38. package/dist/controller/SnapshotManager.d.ts.map +1 -1
  39. package/dist/controller/SnapshotManager.js +48 -130
  40. package/dist/controller/SnapshotManager.js.map +1 -1
  41. package/dist/controller/recordingDelegate.d.ts +28 -0
  42. package/dist/controller/recordingDelegate.d.ts.map +1 -0
  43. package/dist/controller/recordingDelegate.js +186 -0
  44. package/dist/controller/recordingDelegate.js.map +1 -0
  45. package/dist/controller/streamingDelegate.d.ts +8 -4
  46. package/dist/controller/streamingDelegate.d.ts.map +1 -1
  47. package/dist/controller/streamingDelegate.js +21 -60
  48. package/dist/controller/streamingDelegate.js.map +1 -1
  49. package/dist/index.d.ts +1 -1
  50. package/dist/index.d.ts.map +1 -1
  51. package/dist/platform.d.ts +6 -1
  52. package/dist/platform.d.ts.map +1 -1
  53. package/dist/platform.js +213 -104
  54. package/dist/platform.js.map +1 -1
  55. package/dist/utils/EufyClientInteractor.d.ts +35 -0
  56. package/dist/utils/EufyClientInteractor.d.ts.map +1 -0
  57. package/dist/utils/EufyClientInteractor.js +357 -0
  58. package/dist/utils/EufyClientInteractor.js.map +1 -0
  59. package/dist/utils/Talkback.d.ts +1 -0
  60. package/dist/utils/Talkback.d.ts.map +1 -1
  61. package/dist/utils/configTypes.d.ts +14 -6
  62. package/dist/utils/configTypes.d.ts.map +1 -1
  63. package/dist/utils/experimental.d.ts +4 -0
  64. package/dist/utils/experimental.d.ts.map +1 -0
  65. package/dist/utils/experimental.js +49 -0
  66. package/dist/utils/experimental.js.map +1 -0
  67. package/dist/utils/ffmpeg.d.ts +37 -5
  68. package/dist/utils/ffmpeg.d.ts.map +1 -1
  69. package/dist/utils/ffmpeg.js +322 -30
  70. package/dist/utils/ffmpeg.js.map +1 -1
  71. package/dist/utils/interfaces.d.ts +13 -0
  72. package/dist/utils/interfaces.d.ts.map +1 -0
  73. package/dist/utils/interfaces.js +12 -0
  74. package/dist/utils/interfaces.js.map +1 -0
  75. package/dist/utils/utils.d.ts +2 -2
  76. package/dist/utils/utils.d.ts.map +1 -1
  77. package/dist/utils/utils.js.map +1 -1
  78. package/homebridge-ui/configui/app/accessory.d.ts +1 -1
  79. package/homebridge-ui/configui/app/accessory.d.ts.map +1 -1
  80. package/homebridge-ui/configui/app/util/types.d.ts +2 -2
  81. package/homebridge-ui/configui/app/util/types.d.ts.map +1 -1
  82. package/homebridge-ui/plugin/utils/EufyClientInteractor.d.ts +35 -0
  83. package/homebridge-ui/plugin/utils/EufyClientInteractor.d.ts.map +1 -0
  84. package/homebridge-ui/plugin/utils/EufyClientInteractor.js +357 -0
  85. package/homebridge-ui/plugin/utils/EufyClientInteractor.js.map +1 -0
  86. package/homebridge-ui/plugin/utils/experimental.d.ts +4 -0
  87. package/homebridge-ui/plugin/utils/experimental.d.ts.map +1 -0
  88. package/homebridge-ui/plugin/utils/experimental.js +49 -0
  89. package/homebridge-ui/plugin/utils/experimental.js.map +1 -0
  90. package/homebridge-ui/plugin/utils/interfaces.d.ts +13 -0
  91. package/homebridge-ui/plugin/utils/interfaces.d.ts.map +1 -0
  92. package/homebridge-ui/plugin/utils/interfaces.js +12 -0
  93. package/homebridge-ui/plugin/utils/interfaces.js.map +1 -0
  94. package/homebridge-ui/public/3rdpartylicenses.txt +175 -22
  95. package/homebridge-ui/public/assets/devices/4g_lte_starlight_large.jpg +0 -0
  96. package/homebridge-ui/public/assets/devices/eufycam3_large.jpg +0 -0
  97. package/homebridge-ui/public/assets/devices/eufycam3c_large.jpg +0 -0
  98. package/homebridge-ui/public/assets/devices/garage_camera_t8452_large.jpg +0 -0
  99. package/homebridge-ui/public/assets/devices/homebase3_large.jpg +0 -0
  100. package/homebridge-ui/public/assets/devices/smartdrop_t8790_large.jpg +0 -0
  101. package/homebridge-ui/public/assets/devices/smartsafe_s10_t7400_large.jpg +0 -0
  102. package/homebridge-ui/public/assets/devices/smartsafe_s12_t7401_large.jpg +0 -0
  103. package/homebridge-ui/public/assets/devices/walllight_s100_large.jpg +0 -0
  104. package/homebridge-ui/public/index.html +2 -2
  105. package/homebridge-ui/public/main.c40b1db5eceb9425.js +1 -0
  106. package/homebridge-ui/public/polyfills.cdb21ff95fdea645.js +1 -0
  107. package/homebridge-ui/public/styles.68268876f5e65c91.css +5 -0
  108. package/homebridge-ui/server.js +71 -14
  109. package/homebridge-ui/server.js.map +1 -1
  110. package/package.json +48 -59
  111. package/dist/accessories/DoorbellCameraAccessory.d.ts +0 -17
  112. package/dist/accessories/DoorbellCameraAccessory.d.ts.map +0 -1
  113. package/dist/accessories/DoorbellCameraAccessory.js +0 -47
  114. package/dist/accessories/DoorbellCameraAccessory.js.map +0 -1
  115. package/dist/accessories/KeypadAccessory.d.ts +0 -24
  116. package/dist/accessories/KeypadAccessory.d.ts.map +0 -1
  117. package/dist/accessories/KeypadAccessory.js +0 -52
  118. package/dist/accessories/KeypadAccessory.js.map +0 -1
  119. package/dist/accessories/SmartLockAccessory.d.ts +0 -24
  120. package/dist/accessories/SmartLockAccessory.d.ts.map +0 -1
  121. package/dist/accessories/SmartLockAccessory.js +0 -99
  122. package/dist/accessories/SmartLockAccessory.js.map +0 -1
  123. package/dist/utils/logger.d.ts +0 -12
  124. package/dist/utils/logger.d.ts.map +0 -1
  125. package/dist/utils/logger.js +0 -36
  126. package/dist/utils/logger.js.map +0 -1
  127. package/homebridge-ui/public/main.d9308c6d7457a79d.js +0 -1
  128. package/homebridge-ui/public/polyfills.6050693665c0e882.js +0 -1
  129. package/homebridge-ui/public/styles.9ec071e4734414fd.css +0 -6
package/CHANGELOG.md CHANGED
@@ -2,6 +2,140 @@
2
2
 
3
3
  You can find the complete detailled changelog for every beta release [here](https://github.com/homebridge-eufy-security/plugin/releases).
4
4
 
5
+ ### Changelog 2.2.21
6
+
7
+ #### Added
8
+ - Unlocked the app-guard-modes-mapping component in the UI for station configuration options.
9
+ - Added helper functions for better configuration value selection in StationAccessory.ts.
10
+ - Modified and improved the convertHKtoEufy and convertEufytoHK methods to throw errors on invalid mode conversion.
11
+
12
+ #### Updated
13
+ - Update libs and dep
14
+ - Better handling push notification for Doorbell ring events
15
+ - Refactoring the code
16
+
17
+ #### Fixed
18
+ - Pruning characteristics wasn't correctly handled
19
+
20
+ ### Changelog 2.2.20
21
+
22
+ #### Added
23
+ - New feature to display HomeKit switch for indoor chime on/off
24
+
25
+ #### Fixed
26
+ - Updated systeminformation from 5.21.4 to 5.21.8 to address vulnerabilities
27
+
28
+ ### Changelog 2.2.19
29
+
30
+ #### Bug Fixes
31
+
32
+ - Fixing getter and setter for camera properties
33
+
34
+ #### Credits
35
+
36
+ - @cixio, @julien94800 and @zhodd on issue #420 and #365
37
+
38
+ ### Changelog 2.2.18
39
+
40
+ #### Updated
41
+ - `BaseAccessory.ts`:
42
+ - Extended `getValue` and `setValue` to also accept `characteristic` and `service` as arguments.
43
+ - Removed some unnecessary lines of code.
44
+ - `CameraAccessory.ts`:
45
+ - Changed the method signatures for `getCameraPropertyValue` and `setCameraPropertyValue` to accommodate new characteristic arguments.
46
+ - Simplified and optimized logging and value updating processes.
47
+
48
+ ### Changelog 2.2.17
49
+
50
+ #### Added
51
+ - New approach to handling `propertyName` in `CameraAccessory.ts` for more flexibility.
52
+
53
+ #### Updated
54
+ - Improved logging formats across `BaseAccessory.ts`, `platform.ts`, and `server.ts`.
55
+ - Fine-tuned execution delays in `BaseAccessory.ts`, `platform.ts`, and `server.ts` for better performance.
56
+ - `BaseAccessory.ts` to make `getValue` optional, allowing for more versatile accessory handling.
57
+
58
+ #### Fixed
59
+ - Switch-light issue in `CameraAccessory.ts`.
60
+
61
+ #### Removed
62
+ - `LockControlPoint` getter because it is not requested by Apple HomeKit Framework.
63
+
64
+ ### Changelog 2.2.16
65
+
66
+ #### Bug Fixes
67
+
68
+ - **Found Issue #407 Conversion Error**
69
+ - Commit: bac87bb
70
+ - Author: Lenoxys
71
+ - Date: Sun Sep 10 20:37:01 2023 +0200
72
+ - Description: Fixed double conversion which led to an error.
73
+
74
+ #### New Features
75
+
76
+ - **Enhanced Lock Management Characteristics**
77
+ - Commit: 913ed54
78
+ - Author: Lenoxys
79
+ - Date: Sun Sep 10 14:17:50 2023 +0200
80
+ - Description: Added missing characteristics to Lock Management service.
81
+
82
+ #### Code Changes
83
+
84
+ - **LockAccessory.ts**
85
+ - Refactored Lock Management characteristics to adhere to Apple guidelines.
86
+ - Introduced new characteristics like `Version`, `LockManagementAutoSecurityTimeout`, `AdministratorOnlyAccess`, and `LockControlPoint`.
87
+ - Optimized code related to lock status updates.
88
+
89
+ ### Changelog 2.2.15
90
+
91
+ #### New Features
92
+
93
+ - **Added Debug Logs for Lock Status**
94
+ - Commit: 7d5d9e5
95
+ - Author: Lenoxys
96
+ - Date: Sun Sep 10 12:35:18 2023 +0200
97
+ - Description: Added extra debug information to understand lock status callbacks.
98
+
99
+ #### Code Changes
100
+
101
+ - **BaseAccessory.ts**
102
+ - Additional logging for `ON` state of characteristics.
103
+
104
+ - **LockAccessory.ts**
105
+ - Enhanced error message to include more details on lock state and errors.
106
+ - Minor comment update for clarity on lock status.
107
+
108
+ ### Changelog 2.2.14
109
+
110
+ #### Updates
111
+
112
+ - **Update libs**
113
+ - Commit: 711a966
114
+ - Author: Lenoxys
115
+ - Date: Fri Sep 8 21:28:15 2023 +0200
116
+ - Description: Libraries updated for improved performance and stability.
117
+
118
+ #### Fixes
119
+
120
+ - **Issue #407: Lock Property Error**
121
+ - Commit: 16dbb9f
122
+ - Author: Lenoxys
123
+ - Date: Fri Sep 8 21:25:48 2023 +0200
124
+ - Description: Fixed incorrect property set in the lock function.
125
+ - Credits: @InquisitorBR, @zhodd
126
+
127
+ #### Removals
128
+
129
+ - **Removed Reboot Loop**
130
+ - Commit: 7d58590
131
+ - Author: Lenoxys
132
+ - Date: Fri Sep 8 21:21:22 2023 +0200
133
+ - Description: Removed 'throw' causing a reboot loop, replaced with error message.
134
+
135
+ ## 2.2.13
136
+ ### Changed
137
+ - Refactored comments to better explain the purpose of the initial delay in device setup.
138
+
5
139
  ## 2.1.4 (2022-12-24)
6
140
 
7
141
  ### Changed
package/README.md CHANGED
@@ -25,9 +25,9 @@ Homebridge plugin to control certain Eufy Security devices
25
25
 
26
26
  ### Prerequisites
27
27
 
28
- - To use this plugin, you will need to already have [Homebridge](https://homebridge.io) (at least v1.4.1) installed. Refer to the links for more information and installation instructions.
28
+ - To use this plugin, you will need to already have [Homebridge](https://homebridge.io) (at least v1.6.1) installed. Refer to the links for more information and installation instructions.
29
29
  - For configuration Homebridge UI is recommenend. If you have 2FA enabled it is mandatory.
30
- - It is recommended to use the current LTS version of Node, currently v16.
30
+ - It is recommended to use the current LTS version of Node, currently v18.
31
31
 
32
32
  #### Setup
33
33
  * [Installation](https://github.com/homebridge-eufy-security/plugin/wiki/Installation-and-Configuration#installation)
@@ -0,0 +1,37 @@
1
+ /// <reference types="node" />
2
+ import { PlatformAccessory, Characteristic, CharacteristicValue, Service, WithUUID } from 'homebridge';
3
+ import { EufySecurityPlatform } from '../platform';
4
+ import { DeviceEvents, PropertyValue, StationEvents } from 'eufy-security-client';
5
+ import { EventEmitter } from 'events';
6
+ export type CharacteristicType = WithUUID<{
7
+ new (): Characteristic;
8
+ }>;
9
+ export type ServiceType = WithUUID<typeof Service> | Service;
10
+ export declare abstract class BaseAccessory extends EventEmitter {
11
+ protected platform: EufySecurityPlatform;
12
+ protected accessory: PlatformAccessory;
13
+ protected device: any;
14
+ protected servicesInUse: Service[];
15
+ protected SN: string;
16
+ constructor(platform: EufySecurityPlatform, accessory: PlatformAccessory, device: any);
17
+ private logPropertyKeys;
18
+ protected handleRawPropertyChange(device: any, type: number, value: string): void;
19
+ protected handlePropertyChange(device: any, name: string, value: PropertyValue): void;
20
+ protected registerCharacteristic({ characteristicType, serviceType, getValue, setValue, onValue, onSimpleValue, onMultipleValue, name, serviceSubType, setValueDebounceTime, }: {
21
+ characteristicType: CharacteristicType;
22
+ serviceType: ServiceType;
23
+ serviceSubType?: string;
24
+ name?: string;
25
+ getValue?: (data: any, characteristic?: Characteristic, service?: Service) => any;
26
+ setValue?: (value: any, characteristic?: Characteristic, service?: Service) => any;
27
+ onValue?: (service: Service, characteristic: Characteristic) => any;
28
+ onSimpleValue?: any;
29
+ onMultipleValue?: (keyof DeviceEvents | StationEvents)[];
30
+ setValueDebounceTime?: number;
31
+ }): void;
32
+ protected getService(serviceType: ServiceType, name?: string, subType?: string): Service;
33
+ protected pruneUnusedServices(): void;
34
+ protected handleDummyEventGet(serviceName: string): Promise<CharacteristicValue>;
35
+ protected handleDummyEventSet(serviceName: string, value: CharacteristicValue): void;
36
+ }
37
+ //# sourceMappingURL=BaseAccessory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BaseAccessory.d.ts","sourceRoot":"","sources":["../../src/plugin/accessories/BaseAccessory.ts"],"names":[],"mappings":";AAAA,OAAO,EACL,iBAAiB,EACjB,cAAc,EACd,mBAAmB,EACnB,OAAO,EACP,QAAQ,EACT,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAc,YAAY,EAAE,aAAa,EAAmB,aAAa,EAAgB,MAAM,sBAAsB,CAAC;AAC7H,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAStC,MAAM,MAAM,kBAAkB,GAAG,QAAQ,CAAC;IAAE,QAAO,cAAc,CAAA;CAAE,CAAC,CAAC;AACrE,MAAM,MAAM,WAAW,GAAG,QAAQ,CAAC,OAAO,OAAO,CAAC,GAAG,OAAO,CAAC;AAE7D,8BAAsB,aAAc,SAAQ,YAAY;IAMpD,SAAS,CAAC,QAAQ,EAAE,oBAAoB;IACxC,SAAS,CAAC,SAAS,EAAE,iBAAiB;IAEtC,SAAS,CAAC,MAAM,EAAE,GAAG;IAPvB,SAAS,CAAC,aAAa,EAAE,OAAO,EAAE,CAAM;IACxC,SAAS,CAAC,EAAE,EAAE,MAAM,CAAC;gBAGT,QAAQ,EAAE,oBAAoB,EAC9B,SAAS,EAAE,iBAAiB,EAE5B,MAAM,EAAE,GAAG;IAwDvB,OAAO,CAAC,eAAe;IAOvB,SAAS,CAAC,uBAAuB,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAKjF,SAAS,CAAC,oBAAoB,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,GAAG,IAAI;IAIrF,SAAS,CAAC,sBAAsB,CAAC,EAC/B,kBAAkB,EAClB,WAAW,EACX,QAAQ,EACR,QAAQ,EACR,OAAO,EACP,aAAa,EACb,eAAe,EACf,IAAI,EACJ,cAAc,EACd,oBAAwB,GACzB,EAAE;QACD,kBAAkB,EAAE,kBAAkB,CAAC;QACvC,WAAW,EAAE,WAAW,CAAC;QACzB,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,IAAI,CAAC,EAAE,MAAM,CAAC;QAEd,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,cAAc,CAAC,EAAE,cAAc,EAAE,OAAO,CAAC,EAAE,OAAO,KAAK,GAAG,CAAC;QAElF,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,cAAc,CAAC,EAAE,cAAc,EAAE,OAAO,CAAC,EAAE,OAAO,KAAK,GAAG,CAAC;QAEnF,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,cAAc,KAAK,GAAG,CAAC;QAEpE,aAAa,CAAC,EAAE,GAAG,CAAC;QACpB,eAAe,CAAC,EAAE,CAAC,MAAM,YAAY,GAAG,aAAa,CAAC,EAAE,CAAC;QACzD,oBAAoB,CAAC,EAAE,MAAM,CAAC;KAC/B;IAoED,SAAS,CAAC,UAAU,CAClB,WAAW,EAAE,WAAW,EACxB,IAAI,SAA6B,EACjC,OAAO,CAAC,EAAE,MAAM,GACf,OAAO;IA4BV,SAAS,CAAC,mBAAmB;IAiB7B,SAAS,CAAC,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAgBhF,SAAS,CAAC,mBAAmB,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,mBAAmB;CAG9E"}
@@ -0,0 +1,177 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BaseAccessory = void 0;
4
+ const eufy_security_client_1 = require("eufy-security-client");
5
+ const events_1 = require("events");
6
+ function isServiceInstance(serviceType) {
7
+ // eslint-disable-next-line
8
+ return typeof serviceType === 'object';
9
+ }
10
+ class BaseAccessory extends events_1.EventEmitter {
11
+ constructor(platform, accessory,
12
+ // eslint-disable-next-line
13
+ device) {
14
+ super();
15
+ this.platform = platform;
16
+ this.accessory = accessory;
17
+ this.device = device;
18
+ this.servicesInUse = [];
19
+ this.platform = platform;
20
+ this.accessory = accessory;
21
+ this.device = device;
22
+ this.SN = this.device.getSerial();
23
+ this.registerCharacteristic({
24
+ serviceType: this.platform.Service.AccessoryInformation,
25
+ characteristicType: this.platform.Characteristic.Manufacturer,
26
+ getValue: (data) => 'Eufy',
27
+ });
28
+ this.registerCharacteristic({
29
+ serviceType: this.platform.Service.AccessoryInformation,
30
+ characteristicType: this.platform.Characteristic.Name,
31
+ getValue: (data) => this.accessory.displayName || 'Unknowm',
32
+ });
33
+ this.registerCharacteristic({
34
+ serviceType: this.platform.Service.AccessoryInformation,
35
+ characteristicType: this.platform.Characteristic.Model,
36
+ getValue: (data) => eufy_security_client_1.DeviceType[this.device.getDeviceType()] || 'Unknowm',
37
+ });
38
+ this.registerCharacteristic({
39
+ serviceType: this.platform.Service.AccessoryInformation,
40
+ characteristicType: this.platform.Characteristic.SerialNumber,
41
+ getValue: (data) => this.SN || 'Unknowm',
42
+ });
43
+ this.registerCharacteristic({
44
+ serviceType: this.platform.Service.AccessoryInformation,
45
+ characteristicType: this.platform.Characteristic.FirmwareRevision,
46
+ getValue: (data) => this.device.getSoftwareVersion() || 'Unknowm',
47
+ });
48
+ this.registerCharacteristic({
49
+ serviceType: this.platform.Service.AccessoryInformation,
50
+ characteristicType: this.platform.Characteristic.HardwareRevision,
51
+ getValue: (data) => this.device.getHardwareVersion() || 'Unknowm',
52
+ });
53
+ if (this.platform.config.enableDetailedLogging) {
54
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
55
+ this.device.on('raw property changed', (device, type, value) => this.handleRawPropertyChange(device, type, value));
56
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
57
+ this.device.on('property changed', (device, name, value) => this.handlePropertyChange(device, name, value));
58
+ }
59
+ this.logPropertyKeys();
60
+ }
61
+ // Function to extract and log keys
62
+ logPropertyKeys() {
63
+ const properties = this.device.getProperties();
64
+ const keys = Object.keys(properties).join(', ');
65
+ this.platform.log.debug(`${this.accessory.displayName} Property Keys: ${keys}`);
66
+ }
67
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
68
+ handleRawPropertyChange(device, type, value) {
69
+ this.platform.log.debug(`${this.accessory.displayName} Raw Property Changes: ${type} ${value}`);
70
+ }
71
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
72
+ handlePropertyChange(device, name, value) {
73
+ this.platform.log.debug(`${this.accessory.displayName} Property Changes: ${name} ${value}`);
74
+ }
75
+ registerCharacteristic({ characteristicType, serviceType, getValue, setValue, onValue, onSimpleValue, onMultipleValue, name, serviceSubType, setValueDebounceTime = 0, }) {
76
+ // eslint-disable-next-line max-len
77
+ this.platform.log.debug(`${this.accessory.displayName} REGISTER CHARACTERISTIC '${serviceType.name} / ${characteristicType.name}`);
78
+ const service = this.getService(serviceType, name, serviceSubType);
79
+ const characteristic = service.getCharacteristic(characteristicType);
80
+ // eslint-disable-next-line max-len
81
+ this.platform.log.debug(`${this.accessory.displayName} REGISTER CHARACTERISTIC '(${service.UUID}) / (${characteristic.UUID})`);
82
+ if (getValue) {
83
+ characteristic.onGet(async (data) => {
84
+ const value = getValue(data, characteristic, service);
85
+ this.platform.log.debug(`${this.accessory.displayName} GET '${serviceType.name} / ${characteristicType.name}': ${value}`);
86
+ return value;
87
+ });
88
+ }
89
+ if (setValue && setValueDebounceTime) {
90
+ let timeoutId = null;
91
+ characteristic.onSet(async (value) => {
92
+ if (timeoutId) {
93
+ clearTimeout(timeoutId);
94
+ }
95
+ timeoutId = setTimeout(() => {
96
+ timeoutId = null;
97
+ setValue(value, characteristic, service);
98
+ }, setValueDebounceTime);
99
+ });
100
+ }
101
+ else if (setValue) {
102
+ characteristic.onSet(async (value) => {
103
+ Promise.resolve(setValue(value, characteristic, service));
104
+ });
105
+ }
106
+ if (onSimpleValue) {
107
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
108
+ this.device.on(onSimpleValue, (device, value) => {
109
+ // eslint-disable-next-line max-len
110
+ this.platform.log.info(`${this.accessory.displayName} ON '${serviceType.name} / ${characteristicType.name} / ${onSimpleValue}': ${value}`);
111
+ characteristic.updateValue(value);
112
+ });
113
+ }
114
+ if (onValue) {
115
+ this.platform.log.debug(`${this.accessory.displayName} ON '${serviceType.name} / ${characteristicType.name}'`);
116
+ onValue(service, characteristic);
117
+ }
118
+ if (onMultipleValue) {
119
+ // Attach the common event handler to each event type
120
+ onMultipleValue.forEach(eventType => {
121
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
122
+ this.device.on(eventType, (device, value) => {
123
+ // eslint-disable-next-line max-len
124
+ this.platform.log.info(`${this.accessory.displayName} ON '${serviceType.name} / ${characteristicType.name} / ${eventType}': ${value}`);
125
+ characteristic.updateValue(value);
126
+ });
127
+ });
128
+ }
129
+ }
130
+ getService(serviceType, name = this.accessory.displayName, subType) {
131
+ if (isServiceInstance(serviceType)) {
132
+ return serviceType;
133
+ }
134
+ const existingService = subType ? this.accessory.getServiceById(serviceType, subType) : this.accessory.getService(serviceType);
135
+ const service = existingService ||
136
+ this.accessory.addService(serviceType, name, subType);
137
+ if (existingService &&
138
+ existingService.displayName &&
139
+ name !== existingService.displayName) {
140
+ throw new Error(`Overlapping services for device ${this.accessory.displayName} - ${name} != ${existingService.displayName} - ${serviceType}`);
141
+ }
142
+ if (!this.servicesInUse.includes(service)) {
143
+ this.servicesInUse.push(service);
144
+ }
145
+ return service;
146
+ }
147
+ pruneUnusedServices() {
148
+ const safeServiceUUIDs = [
149
+ this.platform.Service.CameraRTPStreamManagement.UUID,
150
+ ];
151
+ this.accessory.services.forEach((service) => {
152
+ if (!this.servicesInUse.includes(service) &&
153
+ !safeServiceUUIDs.includes(service.UUID)) {
154
+ // eslint-disable-next-line max-len
155
+ this.platform.log.debug(`${this.accessory.displayName} Pruning unused service ${service.UUID} ${service.displayName || service.name}`);
156
+ this.accessory.removeService(service);
157
+ }
158
+ });
159
+ }
160
+ handleDummyEventGet(serviceName) {
161
+ const characteristicValues = {
162
+ 'EventSnapshotsActive': this.platform.Characteristic.EventSnapshotsActive.DISABLE,
163
+ 'HomeKitCameraActive': this.platform.Characteristic.HomeKitCameraActive.OFF,
164
+ };
165
+ const currentValue = characteristicValues[serviceName];
166
+ if (currentValue === undefined) {
167
+ throw new Error(`Invalid serviceName: ${serviceName}`);
168
+ }
169
+ this.platform.log.debug(`${this.accessory.displayName} IGNORE GET ${serviceName}: ${currentValue}`);
170
+ return Promise.resolve(currentValue);
171
+ }
172
+ handleDummyEventSet(serviceName, value) {
173
+ this.platform.log.debug(`${this.accessory.displayName} IGNORE SET ${serviceName}: ${value}`);
174
+ }
175
+ }
176
+ exports.BaseAccessory = BaseAccessory;
177
+ //# sourceMappingURL=BaseAccessory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BaseAccessory.js","sourceRoot":"","sources":["../../src/plugin/accessories/BaseAccessory.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,9 @@
1
- import { Service, PlatformAccessory, CharacteristicValue } from 'homebridge';
1
+ import { PlatformAccessory, CharacteristicValue } from 'homebridge';
2
2
  import { EufySecurityPlatform } from '../platform';
3
3
  import { DeviceAccessory } from './Device';
4
- import { Camera } from 'eufy-security-client';
4
+ import { Camera, PropertyName } from 'eufy-security-client';
5
5
  import { StreamingDelegate } from '../controller/streamingDelegate';
6
+ import { RecordingDelegate } from '../controller/recordingDelegate';
6
7
  import { CameraConfig } from '../utils/configTypes';
7
8
  /**
8
9
  * Platform Accessory
@@ -10,52 +11,35 @@ import { CameraConfig } from '../utils/configTypes';
10
11
  * Each accessory may expose multiple services of different service types.
11
12
  */
12
13
  export declare class CameraAccessory extends DeviceAccessory {
13
- protected service: Service;
14
- protected CameraService: Service;
14
+ protected cameraStatus: {
15
+ isEnabled: boolean;
16
+ timestamp: number;
17
+ };
18
+ private notificationTimeout;
15
19
  readonly cameraConfig: CameraConfig;
16
20
  protected streamingDelegate: StreamingDelegate | null;
17
- private motionTimeout?;
18
- constructor(platform: EufySecurityPlatform, accessory: PlatformAccessory, eufyDevice: Camera);
21
+ protected recordingDelegate?: RecordingDelegate | null;
22
+ private eventTypesToHandle;
23
+ private resolutions;
24
+ constructor(platform: EufySecurityPlatform, accessory: PlatformAccessory, device: Camera);
25
+ private setupCamera;
26
+ private getCameraControllerOptions;
27
+ private setupButtonService;
28
+ protected setupSwitchService(serviceName: string, serviceType: 'switch' | 'lightbulb' | 'outlet', propertyName: PropertyName): void;
29
+ private setupEnableButton;
30
+ private setupMotionButton;
31
+ private setupLightButton;
32
+ private setupChimeButton;
19
33
  private getCameraConfig;
20
34
  private cameraFunction;
21
- handleEventSnapshotsActiveGet(): Promise<CharacteristicValue>;
35
+ private setupMotionFunction;
36
+ protected getCameraPropertyValue(characteristic: any, propertyName: PropertyName): CharacteristicValue;
37
+ protected setCameraPropertyValue(characteristic: any, propertyName: PropertyName, value: CharacteristicValue): Promise<void>;
22
38
  /**
23
- * Handle requests to set the "Event Snapshots Active" characteristic
39
+ * Handle push notifications for a doorbell device.
40
+ * Mute subsequent notifications within a timeout period.
41
+ * @param characteristic - The Characteristic to update for HomeKit.
24
42
  */
25
- handleEventSnapshotsActiveSet(value: any): void;
26
- /**
27
- * Handle requests to get the current value of the "HomeKit Camera Active" characteristic
28
- */
29
- handleHomeKitCameraActiveGet(): Promise<CharacteristicValue>;
30
- /**
31
- * Handle requests to set the "HomeKit Camera Active" characteristic
32
- */
33
- handleHomeKitCameraActiveSet(value: any): void;
34
- /**
35
- * Handle requests to get the current value of the "HomeKit Camera Active" characteristic
36
- */
37
- handleHomeKitCameraOperatingModeIndicatorGet(): Promise<CharacteristicValue>;
38
- /**
39
- * Handle requests to set the "HomeKit Camera Active" characteristic
40
- */
41
- handleHomeKitCameraOperatingModeIndicatorSet(value: any): Promise<void>;
42
- /**
43
- * Handle requests to get the current value of the "HomeKit Camera Active" characteristic
44
- */
45
- handleHomeKitNightVisionGet(): Promise<CharacteristicValue>;
46
- /**
47
- * Handle requests to set the "HomeKit Camera Active" characteristic
48
- */
49
- handleHomeKitNightVisionSet(value: any): Promise<void>;
50
- private motionFunction;
51
- handleMotionDetectedGet(): Promise<CharacteristicValue>;
52
- private onDeviceMotionDetectedPushNotification;
53
- handleEnableGet(): Promise<CharacteristicValue>;
54
- handleManuallyDisabledGet(): Promise<CharacteristicValue>;
55
- handleEnableSet(value: CharacteristicValue): Promise<void>;
56
- handleMotionOnGet(): Promise<CharacteristicValue>;
57
- handleMotionOnSet(value: CharacteristicValue): Promise<void>;
58
- handleLightOnGet(): Promise<CharacteristicValue>;
59
- handleLightOnSet(value: CharacteristicValue): Promise<void>;
43
+ private onDeviceRingsPushNotification;
60
44
  }
61
45
  //# sourceMappingURL=CameraAccessory.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"CameraAccessory.d.ts","sourceRoot":"","sources":["../../src/plugin/accessories/CameraAccessory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAE7E,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAM3C,OAAO,EAAE,MAAM,EAAiD,MAAM,sBAAsB,CAAC;AAC7F,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AAEpE,OAAO,EAAE,YAAY,EAAe,MAAM,sBAAsB,CAAC;AAEjE;;;;GAIG;AACH,qBAAa,eAAgB,SAAQ,eAAe;IAElD,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC;IAC3B,SAAS,CAAC,aAAa,EAAE,OAAO,CAAC;IAEjC,SAAgB,YAAY,EAAE,YAAY,CAAC;IAE3C,SAAS,CAAC,iBAAiB,EAAE,iBAAiB,GAAG,IAAI,CAAQ;IAE7D,OAAO,CAAC,aAAa,CAAC,CAAiB;gBAGrC,QAAQ,EAAE,oBAAoB,EAC9B,SAAS,EAAE,iBAAiB,EAC5B,UAAU,EAAE,MAAM;IAmHpB,OAAO,CAAC,eAAe;IAqCvB,OAAO,CAAC,cAAc;IAiDtB,6BAA6B,IAAI,OAAO,CAAC,mBAAmB,CAAC;IAM7D;;OAEG;IACH,6BAA6B,CAAC,KAAK,KAAA;IAInC;;OAEG;IACH,4BAA4B,IAAI,OAAO,CAAC,mBAAmB,CAAC;IAM5D;;OAEG;IACH,4BAA4B,CAAC,KAAK,KAAA;IAIlC;;OAEG;IACG,4CAA4C,IAAI,OAAO,CAAC,mBAAmB,CAAC;IAWlF;;OAEG;IACG,4CAA4C,CAAC,KAAK,KAAA;IAOxD;;OAEG;IACG,2BAA2B,IAAI,OAAO,CAAC,mBAAmB,CAAC;IAWjE;;OAEG;IACG,2BAA2B,CAAC,KAAK,KAAA;IAOvC,OAAO,CAAC,cAAc;IA+BhB,uBAAuB,IAAI,OAAO,CAAC,mBAAmB,CAAC;IAW7D,OAAO,CAAC,sCAAsC;IAyBxC,eAAe,IAAI,OAAO,CAAC,mBAAmB,CAAC;IAW/C,yBAAyB,IAAI,OAAO,CAAC,mBAAmB,CAAC;IAWzD,eAAe,CAAC,KAAK,EAAE,mBAAmB;IAS1C,iBAAiB,IAAI,OAAO,CAAC,mBAAmB,CAAC;IAWjD,iBAAiB,CAAC,KAAK,EAAE,mBAAmB;IAM5C,gBAAgB,IAAI,OAAO,CAAC,mBAAmB,CAAC;IAWhD,gBAAgB,CAAC,KAAK,EAAE,mBAAmB;CAKlD"}
1
+ {"version":3,"file":"CameraAccessory.d.ts","sourceRoot":"","sources":["../../src/plugin/accessories/CameraAccessory.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,iBAAiB,EAEjB,mBAAmB,EASpB,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAI3C,OAAO,EAAE,MAAM,EAAwB,YAAY,EAAe,MAAM,sBAAsB,CAAC;AAC/F,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AAEpE,OAAO,EAAE,YAAY,EAAe,MAAM,sBAAsB,CAAC;AAEjE;;;;GAIG;AACH,qBAAa,eAAgB,SAAQ,eAAe;IAGlD,SAAS,CAAC,YAAY,EAAE;QAAE,SAAS,EAAE,OAAO,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IAClE,OAAO,CAAC,mBAAmB,CAA+B;IAE1D,SAAgB,YAAY,EAAE,YAAY,CAAC;IAE3C,SAAS,CAAC,iBAAiB,EAAE,iBAAiB,GAAG,IAAI,CAAQ;IAC7D,SAAS,CAAC,iBAAiB,CAAC,EAAE,iBAAiB,GAAG,IAAI,CAAQ;IAG9D,OAAO,CAAC,kBAAkB,CASxB;IAEF,OAAO,CAAC,WAAW,CAYjB;gBAGA,QAAQ,EAAE,oBAAoB,EAC9B,SAAS,EAAE,iBAAiB,EAC5B,MAAM,EAAE,MAAM;IAgChB,OAAO,CAAC,WAAW;IA6CnB,OAAO,CAAC,0BAA0B;IAqFlC,OAAO,CAAC,kBAAkB;IAsB1B,SAAS,CAAC,kBAAkB,CAC1B,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,QAAQ,GAAG,WAAW,GAAG,QAAQ,EAC9C,YAAY,EAAE,YAAY;YAkBd,iBAAiB;YAIjB,iBAAiB;YAIjB,gBAAgB;YAIhB,gBAAgB;IAI9B,OAAO,CAAC,eAAe;IAoCvB,OAAO,CAAC,cAAc;IAqItB,OAAO,CAAC,mBAAmB;IAyB3B,SAAS,CAAC,sBAAsB,CAAC,cAAc,EAAE,GAAG,EAAE,YAAY,EAAE,YAAY,GAAG,mBAAmB;cAqCtF,sBAAsB,CAAC,cAAc,EAAE,GAAG,EAAE,YAAY,EAAE,YAAY,EAAE,KAAK,EAAE,mBAAmB;IAyBlH;;;;OAIG;IACH,OAAO,CAAC,6BAA6B;CAStC"}