homebridge-eufy-security 4.4.2-beta.13 → 4.4.2-beta.14

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.
@@ -32,22 +32,20 @@ var __importStar = (this && this.__importStar) || (function () {
32
32
  return result;
33
33
  };
34
34
  })();
35
- var __importDefault = (this && this.__importDefault) || function (mod) {
36
- return (mod && mod.__esModule) ? mod : { "default": mod };
37
- };
38
35
  Object.defineProperty(exports, "__esModule", { value: true });
39
36
  exports.SnapshotManager = void 0;
40
- const stream_1 = require("stream");
37
+ const fs = __importStar(require("fs"));
41
38
  const eufy_security_client_1 = require("eufy-security-client");
42
- const ffmpeg_for_homebridge_1 = __importDefault(require("ffmpeg-for-homebridge"));
43
- const utils_1 = require("../utils/utils");
39
+ const settings_1 = require("../settings");
40
+ const configTypes_1 = require("../utils/configTypes");
44
41
  const ffmpeg_1 = require("../utils/ffmpeg");
45
- const fs = __importStar(require("fs"));
46
- const CameraOffline = require.resolve('../../media/camera-offline.png');
47
- const CameraDisabled = require.resolve('../../media/camera-disabled.png');
48
- const SnapshotBlackPath = require.resolve('../../media/Snapshot-black.png');
49
- const SnapshotUnavailable = require.resolve('../../media/Snapshot-Unavailable.png');
50
- let MINUTES_TO_WAIT_FOR_AUTOMATIC_REFRESH_TO_BEGIN = 1; // should be incremented by 1 for every device
42
+ const utils_1 = require("../utils/utils");
43
+ const PLACEHOLDER_PATHS = {
44
+ offline: require.resolve('../../media/camera-offline.png'),
45
+ disabled: require.resolve('../../media/camera-disabled.png'),
46
+ black: require.resolve('../../media/Snapshot-black.png'),
47
+ unavailable: require.resolve('../../media/Snapshot-Unavailable.png'),
48
+ };
51
49
  /**
52
50
  * possible performance settings:
53
51
  * 1. snapshots as current as possible (weak homebridge performance)
@@ -64,31 +62,36 @@ let MINUTES_TO_WAIT_FOR_AUTOMATIC_REFRESH_TO_BEGIN = 1; // should be incremented
64
62
  *
65
63
  * Drawbacks: elapsed time in homekit might be wrong
66
64
  */
67
- class SnapshotManager extends stream_1.EventEmitter {
65
+ class SnapshotManager {
68
66
  livestreamManager;
69
- platform;
67
+ static instanceCount = 0;
68
+ eufyPath;
70
69
  device;
71
70
  cameraConfig;
72
- videoProcessor = ffmpeg_for_homebridge_1.default || 'ffmpeg';
73
71
  currentSnapshot;
74
- blackSnapshot;
75
- cameraOffline;
76
- cameraDisabled;
77
- unavailableSnapshot;
78
- refreshProcessRunning = false;
79
- lastEvent = 0;
72
+ placeholders = new Map();
73
+ pendingFetch;
80
74
  lastRingEvent = 0;
75
+ isDeviceOffline = false;
81
76
  log;
82
77
  snapshotRefreshTimer;
78
+ snapshotRefreshInterval;
83
79
  constructor(camera, livestreamManager) {
84
- super();
85
80
  this.livestreamManager = livestreamManager;
86
- this.platform = camera.platform;
81
+ this.eufyPath = camera.platform.eufyPath;
87
82
  this.device = camera.device;
88
83
  this.cameraConfig = camera.cameraConfig;
89
84
  this.log = camera.log;
85
+ this.setupEventListeners();
86
+ this.setupAutomaticRefresh();
87
+ this.logSnapshotHandlingMethod();
88
+ this.loadPlaceholderImages();
89
+ this.initializeDeviceState();
90
+ this.loadInitialSnapshot();
91
+ }
92
+ setupEventListeners() {
90
93
  this.device.on('property changed', this.onPropertyValueChanged.bind(this));
91
- const eventTypes = [
94
+ const detectionEvents = [
92
95
  'motion detected',
93
96
  'person detected',
94
97
  'pet detected',
@@ -99,88 +102,131 @@ class SnapshotManager extends stream_1.EventEmitter {
99
102
  'dog lick detected',
100
103
  'dog poop detected',
101
104
  'stranger person detected',
105
+ 'rings',
102
106
  ];
103
- eventTypes.forEach(eventType => {
104
- this.device.on(eventType, this.onEvent.bind(this));
107
+ detectionEvents.forEach(eventType => {
108
+ this.device.on(eventType, this.onDeviceEvent.bind(this, eventType));
105
109
  });
106
- this.device.on('rings', this.onRingEvent.bind(this));
107
- if (this.cameraConfig.refreshSnapshotIntervalMinutes) {
108
- if (this.cameraConfig.refreshSnapshotIntervalMinutes < 5) {
109
- this.log.warn('The interval to automatically refresh snapshots is set too low. Minimum is one minute.');
110
- this.cameraConfig.refreshSnapshotIntervalMinutes = 5;
111
- }
112
- this.log.info('Setting up automatic snapshot refresh every ' + this.cameraConfig.refreshSnapshotIntervalMinutes + ' minutes. This may decrease battery life dramatically. The refresh process should begin in ' + MINUTES_TO_WAIT_FOR_AUTOMATIC_REFRESH_TO_BEGIN + ' minutes.');
113
- setTimeout(() => {
114
- this.automaticSnapshotRefresh();
115
- }, MINUTES_TO_WAIT_FOR_AUTOMATIC_REFRESH_TO_BEGIN * 60 * 1000);
116
- MINUTES_TO_WAIT_FOR_AUTOMATIC_REFRESH_TO_BEGIN++;
110
+ }
111
+ setupAutomaticRefresh() {
112
+ if (!this.cameraConfig.refreshSnapshotIntervalMinutes) {
113
+ return;
114
+ }
115
+ if (this.cameraConfig.refreshSnapshotIntervalMinutes < settings_1.SNAPSHOT_MIN_REFRESH_INTERVAL_MINUTES) {
116
+ this.log.warn(`The interval to automatically refresh snapshots is set too low. Minimum is ${settings_1.SNAPSHOT_MIN_REFRESH_INTERVAL_MINUTES} minutes.`);
117
+ this.cameraConfig.refreshSnapshotIntervalMinutes = settings_1.SNAPSHOT_MIN_REFRESH_INTERVAL_MINUTES;
118
+ }
119
+ const intervalMs = this.cameraConfig.refreshSnapshotIntervalMinutes * 60 * 1000;
120
+ const staggerMs = (++SnapshotManager.instanceCount) * 60 * 1000;
121
+ this.log.info(`Setting up automatic snapshot refresh every ${this.cameraConfig.refreshSnapshotIntervalMinutes}` +
122
+ ` minutes. This may decrease battery life dramatically. First refresh in ~${Math.ceil(staggerMs / 60000)} minute(s).`);
123
+ // Stagger first refresh per instance, then repeat at fixed interval
124
+ this.snapshotRefreshTimer = setTimeout(() => {
125
+ this.doAutomaticRefresh();
126
+ this.snapshotRefreshInterval = setInterval(() => this.doAutomaticRefresh(), intervalMs);
127
+ }, staggerMs);
128
+ }
129
+ doAutomaticRefresh() {
130
+ this.log.debug('Automatic snapshot refresh triggered.');
131
+ this.fetchCurrentCameraSnapshot().catch((error) => this.log.warn('Automatic snapshot refresh failed:', error));
132
+ }
133
+ logSnapshotHandlingMethod() {
134
+ const method = this.cameraConfig.snapshotHandlingMethod;
135
+ switch (method) {
136
+ case configTypes_1.SnapshotHandlingMethod.AlwaysFresh:
137
+ this.log.info('is set to generate new snapshots on events every time. This might reduce homebridge performance and increase power consumption.');
138
+ if (this.cameraConfig.refreshSnapshotIntervalMinutes) {
139
+ this.log.warn('You have enabled automatic snapshot refreshing. It is recommended not to use this setting with forced snapshot refreshing.');
140
+ }
141
+ break;
142
+ case configTypes_1.SnapshotHandlingMethod.Balanced:
143
+ this.log.info('is set to balanced snapshot handling.');
144
+ break;
145
+ case configTypes_1.SnapshotHandlingMethod.CloudOnly:
146
+ this.log.info('is set to handle snapshots with cloud images. Snapshots might be older than they appear.');
147
+ break;
148
+ default:
149
+ this.log.warn('unknown snapshot handling method. Snapshots will not be generated.');
150
+ }
151
+ if (this.cameraConfig.immediateRingNotificationWithoutSnapshot) {
152
+ this.log.info('Empty snapshot will be sent on ring events immediately to speed up homekit notifications.');
117
153
  }
118
- if (this.cameraConfig.snapshotHandlingMethod === 1) {
119
- this.log.info('is set to generate new snapshots on events every time. This might reduce homebridge performance and increase power consumption.');
120
- if (this.cameraConfig.refreshSnapshotIntervalMinutes) {
121
- this.log.warn('You have enabled automatic snapshot refreshing. It is recommened not to use this setting with forced snapshot refreshing.');
154
+ }
155
+ loadPlaceholderImages() {
156
+ for (const [key, path] of Object.entries(PLACEHOLDER_PATHS)) {
157
+ try {
158
+ this.placeholders.set(key, fs.readFileSync(path));
122
159
  }
123
- }
124
- else if (this.cameraConfig.snapshotHandlingMethod === 2) {
125
- this.log.info('is set to balanced snapshot handling.');
126
- }
127
- else if (this.cameraConfig.snapshotHandlingMethod === 3) {
128
- this.log.info('is set to handle snapshots with cloud images. Snapshots might be older than they appear.');
129
- }
130
- else {
131
- this.log.warn('unknown snapshot handling method. SNapshots will not be generated.');
132
- }
133
- try {
134
- this.blackSnapshot = fs.readFileSync(SnapshotBlackPath);
135
- if (this.cameraConfig.immediateRingNotificationWithoutSnapshot) {
136
- this.log.info('Empty snapshot will be sent on ring events immediately to speed up homekit notifications.');
160
+ catch (error) {
161
+ this.log.error(`Could not cache ${key} placeholder for further use: ${error}`);
137
162
  }
138
163
  }
139
- catch (error) {
140
- this.log.error('could not cache black snapshot file for further use: ' + error);
141
- }
142
- try {
143
- this.unavailableSnapshot = fs.readFileSync(SnapshotUnavailable);
144
- }
145
- catch (error) {
146
- this.log.error('could not cache SnapshotUnavailable file for further use: ' + error);
147
- }
148
- try {
149
- this.cameraOffline = fs.readFileSync(CameraOffline);
150
- }
151
- catch (error) {
152
- this.log.error('could not cache CameraOffline file for further use: ' + error);
164
+ }
165
+ getPlaceholder(key) {
166
+ const buf = this.placeholders.get(key);
167
+ if (!buf) {
168
+ throw new Error(`Placeholder image '${key}' is not available.`);
153
169
  }
170
+ return buf;
171
+ }
172
+ initializeDeviceState() {
154
173
  try {
155
- this.cameraDisabled = fs.readFileSync(CameraDisabled);
174
+ const state = this.device.getPropertyValue(eufy_security_client_1.PropertyName.DeviceState);
175
+ this.isDeviceOffline = (state === 0 || state === 3);
176
+ if (this.isDeviceOffline) {
177
+ this.log.info('Device is currently offline (state: ' + state + ').');
178
+ }
156
179
  }
157
180
  catch (error) {
158
- this.log.error('could not cache CameraDisabled file for further use: ' + error);
181
+ this.log.debug('Could not read initial device state: ' + error);
159
182
  }
183
+ }
184
+ loadInitialSnapshot() {
160
185
  try {
161
186
  const picture = this.device.getPropertyValue(eufy_security_client_1.PropertyName.DevicePicture);
162
187
  if (picture && picture.type) {
163
188
  this.storeSnapshotForCache(picture.data, 0);
164
- }
165
- else {
166
- throw new Error('No currentSnapshot');
189
+ return;
167
190
  }
168
191
  }
169
192
  catch (error) {
170
- this.log.error('could not fetch old snapshot: ' + error);
193
+ this.log.debug('Could not fetch snapshot from device property: ' + error);
171
194
  }
195
+ // Fallback: try to load a previously cached snapshot from disk
196
+ this.loadSnapshotFromDisk();
172
197
  }
173
- onRingEvent(device, state) {
174
- if (state) {
175
- this.log.debug('Snapshot handler detected ring event.');
176
- this.lastRingEvent = Date.now();
198
+ loadSnapshotFromDisk() {
199
+ const serial = this.device.getSerial();
200
+ const extensions = ['jpg', 'png', 'bmp'];
201
+ for (const ext of extensions) {
202
+ const filePath = `${this.eufyPath}/${serial}.${ext}`;
203
+ try {
204
+ if (fs.existsSync(filePath)) {
205
+ const data = fs.readFileSync(filePath);
206
+ if (data.length > 0) {
207
+ const mtime = fs.statSync(filePath).mtimeMs;
208
+ this.storeSnapshotForCache(data, mtime);
209
+ this.log.info(`Loaded cached snapshot from disk: ${filePath}`);
210
+ return;
211
+ }
212
+ }
213
+ }
214
+ catch (error) {
215
+ this.log.debug(`Failed to load snapshot from ${filePath}: ${error}`);
216
+ }
177
217
  }
218
+ this.log.warn('No cached snapshot found on disk for device ' + serial);
178
219
  }
179
- onEvent(device, state) {
180
- if (state) {
181
- this.log.debug('Snapshot handler detected event.');
182
- this.lastEvent = Date.now();
220
+ onDeviceEvent(eventType, device, state) {
221
+ if (!state) {
222
+ return;
223
+ }
224
+ this.log.debug(`Snapshot handler detected event: ${eventType}`);
225
+ if (eventType === 'rings') {
226
+ this.lastRingEvent = Date.now();
183
227
  }
228
+ // Pre-fetch a fresh snapshot so it's ready when HomeKit asks
229
+ this.fetchCurrentCameraSnapshot().catch((error) => this.log.debug(`Background snapshot refresh on ${eventType} failed: ${error}`));
184
230
  }
185
231
  storeSnapshotForCache(data, time) {
186
232
  this.currentSnapshot = { timestamp: time ??= Date.now(), image: data };
@@ -189,245 +235,177 @@ class SnapshotManager extends stream_1.EventEmitter {
189
235
  return await this.resizeSnapshot(await this.getSnapshotBuffer(), request);
190
236
  }
191
237
  async getSnapshotBuffer() {
192
- // return a new snapshot if it is recent enough (not more than 15 seconds)
193
- if (this.currentSnapshot) {
194
- const diff = Math.abs((Date.now() - this.currentSnapshot.timestamp) / 1000);
195
- if (diff <= 15) {
196
- return this.currentSnapshot.image;
197
- }
198
- }
199
- // It should never happend since camera is disabled in HK but in case of...
200
238
  if (!this.device.isEnabled()) {
201
- if (this.cameraDisabled) {
202
- return this.cameraDisabled;
203
- }
204
- else {
205
- return Promise.reject('Something wrong with file systems. Looks likes not enought rights!');
206
- }
239
+ this.log.debug('Device is disabled, returning disabled snapshot.');
240
+ return this.getPlaceholder('disabled');
241
+ }
242
+ if (this.isDeviceOffline) {
243
+ this.log.debug('Device is offline, returning offline snapshot.');
244
+ return this.getPlaceholder('offline');
245
+ }
246
+ if (this.isCacheFresh(settings_1.SNAPSHOT_CACHE_FRESH_SECONDS)) {
247
+ return this.currentSnapshot.image;
207
248
  }
208
- const diff = (Date.now() - this.lastRingEvent) / 1000;
209
- if (this.cameraConfig.immediateRingNotificationWithoutSnapshot && diff < 5) {
249
+ const ringAge = (Date.now() - this.lastRingEvent) / 1000;
250
+ if (this.cameraConfig.immediateRingNotificationWithoutSnapshot && ringAge < settings_1.SNAPSHOT_RING_DEBOUNCE_SECONDS) {
210
251
  this.log.debug('Sending empty snapshot to speed up homekit notification for ring event.');
211
- if (this.blackSnapshot) {
212
- return this.blackSnapshot;
213
- }
214
- else {
215
- return Promise.reject('Prioritize ring notification over snapshot request. But could not supply empty snapshot.');
216
- }
252
+ return this.getPlaceholder('black');
217
253
  }
218
- let snapshot = Buffer.from([]);
254
+ return this.resolveByHandlingMethod();
255
+ }
256
+ async resolveByHandlingMethod() {
219
257
  try {
220
- if (this.cameraConfig.snapshotHandlingMethod === 1) {
221
- // return a preferablly most recent snapshot every time
222
- snapshot = await this.getSnapshotFromStream();
258
+ switch (this.cameraConfig.snapshotHandlingMethod) {
259
+ case configTypes_1.SnapshotHandlingMethod.AlwaysFresh:
260
+ return await this.fetchSnapshotFromStream();
261
+ case configTypes_1.SnapshotHandlingMethod.Balanced:
262
+ if (this.isCacheFresh(settings_1.SNAPSHOT_CACHE_BALANCED_SECONDS)) {
263
+ return this.currentSnapshot.image;
264
+ }
265
+ return await this.fetchSnapshotFromStream();
266
+ case configTypes_1.SnapshotHandlingMethod.CloudOnly:
267
+ return this.getCachedOrPlaceholder();
268
+ default:
269
+ throw new Error('No suitable handling method for snapshots defined');
223
270
  }
224
- else if (this.cameraConfig.snapshotHandlingMethod === 2) {
225
- // balanced method
226
- snapshot = await this.getBalancedSnapshot();
227
- }
228
- else if (this.cameraConfig.snapshotHandlingMethod === 3) {
229
- // fastest method with potentially old snapshots
230
- snapshot = await this.getSnapshotFromCache();
231
- }
232
- else {
233
- return Promise.reject('No suitable handling method for snapshots defined');
234
- }
235
- return snapshot;
236
271
  }
237
- catch {
238
- try {
239
- return this.getSnapshotFromCache();
240
- }
241
- catch (error) {
242
- this.log.error(error);
243
- if (this.unavailableSnapshot) {
244
- return this.unavailableSnapshot;
245
- }
246
- else {
247
- throw (error);
248
- }
249
- }
272
+ catch (err) {
273
+ this.log.warn('Snapshot retrieval failed, falling back to cache:', err);
274
+ return this.getCachedOrPlaceholder();
250
275
  }
251
276
  }
252
277
  /**
253
- * Retrieves the newest snapshot buffer asynchronously.
254
- * @returns A Promise resolving to a Buffer containing the newest snapshot image.
278
+ * Fetches a fresh snapshot from a live stream.
255
279
  */
256
- getSnapshotFromStream() {
257
- this.log.info(`Begin live streaming to access the most recent snapshot (significant battery drain on the device)`);
258
- return new Promise((resolve, reject) => {
259
- // Set a timeout for the snapshot request
260
- const requestTimeout = setTimeout(() => {
261
- reject('getSnapshotFromStream timed out');
262
- }, 4 * 1000);
263
- // Define a listener for the 'new snapshot' event
264
- const snapshotListener = () => {
265
- clearTimeout(requestTimeout); // Clear the timeout if the snapshot is received
266
- if (this.currentSnapshot) {
267
- resolve(this.currentSnapshot.image); // Resolve the promise with the snapshot image
268
- }
269
- else {
270
- reject('getSnapshotFromStream error'); // Reject if there's an issue with the snapshot
271
- }
272
- };
273
- // Fetch the current camera snapshot and attach the 'new snapshot' listener
274
- this.fetchCurrentCameraSnapshot()
275
- .then(() => {
276
- this.once('new snapshot', snapshotListener); // Listen for the 'new snapshot' event
277
- })
278
- .catch((error) => {
279
- clearTimeout(requestTimeout); // Clear the timeout if an error occurs during fetching
280
- reject(error); // Reject the promise with the error
281
- });
282
- });
283
- }
284
- /**
285
- * Retrieves the newest cloud snapshot's image data.
286
- * @returns Buffer The image data as a Buffer.
287
- * @throws Error if there's no currentSnapshot available and no fallback image.
288
- */
289
- getSnapshotFromCache() {
290
- // Check if there's a currentSnapshot available
280
+ async fetchSnapshotFromStream() {
281
+ this.log.info('Begin live streaming to access the most recent snapshot (significant battery drain on the device)');
282
+ await this.fetchCurrentCameraSnapshot();
291
283
  if (this.currentSnapshot) {
292
- // If available, return the image data
293
284
  return this.currentSnapshot.image;
294
285
  }
295
- else {
296
- // If not available, try to use the unavailable snapshot image
297
- if (this.unavailableSnapshot) {
298
- this.log.warn('No currentSnapshot available, using fallback unavailable snapshot image');
299
- return this.unavailableSnapshot;
300
- }
301
- else {
302
- // If fallback image is also not available, throw an error
303
- throw new Error('No currentSnapshot available');
304
- }
305
- }
286
+ throw new Error('Snapshot fetch completed but no snapshot stored');
306
287
  }
307
- async getBalancedSnapshot() {
288
+ /**
289
+ * Returns cached snapshot or the unavailable placeholder.
290
+ */
291
+ getCachedOrPlaceholder() {
308
292
  if (this.currentSnapshot) {
309
- const diff = Math.abs((Date.now() - this.currentSnapshot.timestamp) / 1000);
310
- if (diff <= 30) {
311
- return this.currentSnapshot.image;
312
- }
293
+ return this.currentSnapshot.image;
313
294
  }
314
- return this.getSnapshotFromStream();
295
+ this.log.warn('No currentSnapshot available, using fallback unavailable snapshot image');
296
+ return this.getPlaceholder('unavailable');
315
297
  }
316
- automaticSnapshotRefresh() {
317
- this.log.debug('Automatic snapshot refresh triggered.');
318
- this.fetchCurrentCameraSnapshot().catch((error) => this.log.warn(error));
319
- if (this.snapshotRefreshTimer) {
320
- clearTimeout(this.snapshotRefreshTimer);
321
- }
322
- if (this.cameraConfig.refreshSnapshotIntervalMinutes) {
323
- this.snapshotRefreshTimer = setTimeout(() => {
324
- this.automaticSnapshotRefresh();
325
- }, this.cameraConfig.refreshSnapshotIntervalMinutes * 60 * 1000);
326
- }
298
+ isCacheFresh(maxAgeSeconds) {
299
+ return !!this.currentSnapshot &&
300
+ (Date.now() - this.currentSnapshot.timestamp) / 1000 <= maxAgeSeconds;
327
301
  }
328
302
  storeImage(file, image) {
329
- const filePath = `${this.platform.eufyPath}/${file}`;
303
+ const filePath = `${this.eufyPath}/${file}`;
330
304
  try {
331
305
  fs.writeFileSync(filePath, image);
332
306
  this.log.debug(`Stored Image: ${filePath}`);
333
307
  }
334
308
  catch (error) {
335
- this.log.debug(`Error: ${filePath} - ${error}`);
309
+ this.log.warn(`Failed to store image: ${filePath} - ${error}`);
336
310
  }
337
311
  }
338
312
  async onPropertyValueChanged(device, name) {
339
- if (name === 'picture') {
340
- const picture = device.getPropertyValue(eufy_security_client_1.PropertyName.DevicePicture);
341
- if (picture && picture.type) {
342
- this.storeImage(`${device.getSerial()}.${picture.type.ext}`, picture.data);
343
- this.storeSnapshotForCache(picture.data);
344
- this.emit('new snapshot');
313
+ switch (name) {
314
+ case 'picture': {
315
+ const picture = device.getPropertyValue(eufy_security_client_1.PropertyName.DevicePicture);
316
+ if (picture && picture.type) {
317
+ this.storeImage(`${device.getSerial()}.${picture.type.ext}`, picture.data);
318
+ if (this.currentSnapshot && (Date.now() - this.currentSnapshot.timestamp) < settings_1.SNAPSHOT_CLOUD_SKIP_MS) {
319
+ this.log.debug('Skipping cloud snapshot update, a recent stream snapshot already exists.');
320
+ }
321
+ else {
322
+ this.storeSnapshotForCache(picture.data);
323
+ }
324
+ }
325
+ break;
326
+ }
327
+ case 'enabled': {
328
+ const enabled = device.getPropertyValue(eufy_security_client_1.PropertyName.DeviceEnabled);
329
+ this.log.info(`Device enabled state changed to: ${enabled}`);
330
+ if (enabled) {
331
+ this.currentSnapshot = undefined;
332
+ }
333
+ break;
334
+ }
335
+ case 'state': {
336
+ const state = device.getPropertyValue(eufy_security_client_1.PropertyName.DeviceState);
337
+ const wasOffline = this.isDeviceOffline;
338
+ this.isDeviceOffline = (state === 0 || state === 3);
339
+ if (this.isDeviceOffline && !wasOffline) {
340
+ this.log.warn(`Device went offline (state: ${state}).`);
341
+ }
342
+ else if (!this.isDeviceOffline && wasOffline) {
343
+ this.log.info(`Device came back online (state: ${state}).`);
344
+ this.currentSnapshot = undefined;
345
+ }
346
+ break;
345
347
  }
346
348
  }
347
349
  }
350
+ /**
351
+ * Fetches a snapshot from the camera, stores it in cache, and deduplicates concurrent calls.
352
+ */
348
353
  async fetchCurrentCameraSnapshot() {
349
- if (this.refreshProcessRunning) {
350
- return Promise.resolve();
354
+ if (this.pendingFetch) {
355
+ return this.pendingFetch;
351
356
  }
352
- this.refreshProcessRunning = true;
353
- this.log.debug('Locked refresh process.');
354
357
  this.log.debug('Fetching new snapshot from camera.');
355
- try {
356
- const snapshotBuffer = await this.getCurrentCameraSnapshot();
357
- this.refreshProcessRunning = false;
358
- this.log.debug('Unlocked refresh process.');
359
- this.log.debug('store new snapshot from camera in memory. Using this for future use.');
360
- this.storeSnapshotForCache(snapshotBuffer);
361
- this.emit('new snapshot');
362
- return Promise.resolve();
363
- }
364
- catch (error) {
365
- this.refreshProcessRunning = false;
366
- this.log.debug('Unlocked refresh process.');
367
- return Promise.reject(error);
368
- }
369
- }
370
- async getCurrentCameraSnapshot() {
371
- const source = await this.getCameraSource();
372
- if (!source) {
373
- return Promise.reject('No camera source detected.');
374
- }
375
- const parameters = await ffmpeg_1.FFmpegParameters.forSnapshot(this.cameraConfig.videoConfig?.debug);
376
- if (source.url) {
377
- parameters.setInputSource(source.url);
378
- }
379
- else if (source.stream) {
380
- await parameters.setInputStream(source.stream);
381
- }
382
- else {
383
- return Promise.reject('No valid camera source detected.');
384
- }
385
- if (this.cameraConfig.delayCameraSnapshot) {
386
- parameters.setDelayedSnapshot();
387
- }
388
- try {
389
- const ffmpeg = new ffmpeg_1.FFmpeg(`[Snapshot Process]`, parameters);
390
- const buffer = await ffmpeg.getResult();
391
- this.livestreamManager.stopLocalLiveStream();
392
- return Promise.resolve(buffer);
393
- }
394
- catch (error) {
395
- this.livestreamManager.stopLocalLiveStream();
396
- return Promise.reject(error);
397
- }
398
- }
399
- async getCameraSource() {
400
- if ((0, utils_1.is_rtsp_ready)(this.device, this.cameraConfig)) {
358
+ this.pendingFetch = this.withTimeout((async () => {
359
+ const source = await this.getCameraSource();
360
+ const isLocalStream = source.type === 'local';
401
361
  try {
402
- const url = this.device.getPropertyValue(eufy_security_client_1.PropertyName.DeviceRTSPStreamUrl);
403
- this.log.debug('RTSP URL: ' + url);
404
- return {
405
- url: url,
406
- };
362
+ const buffer = await this.runFFmpegSnapshot('[Snapshot Process]', async (params) => {
363
+ if (source.type === 'rtsp') {
364
+ params.setInputSource(source.url);
365
+ }
366
+ else {
367
+ await params.setInputStream(source.stream);
368
+ }
369
+ if (this.cameraConfig.delayCameraSnapshot) {
370
+ params.setDelayedSnapshot();
371
+ }
372
+ });
373
+ this.storeSnapshotForCache(buffer);
407
374
  }
408
- catch (error) {
409
- this.log.warn('Could not get snapshot from rtsp stream!', error);
410
- return null;
411
- }
412
- }
413
- else {
414
- try {
415
- const streamData = await this.livestreamManager.getLocalLivestream();
416
- return {
417
- stream: streamData.videostream,
418
- };
419
- }
420
- catch (error) {
421
- this.log.warn('Could not get snapshot from livestream!', error);
422
- return null;
375
+ finally {
376
+ if (isLocalStream) {
377
+ this.livestreamManager.stopLocalLiveStream();
378
+ }
423
379
  }
380
+ })(), settings_1.SNAPSHOT_FETCH_TIMEOUT_MS).finally(() => {
381
+ this.pendingFetch = undefined;
382
+ });
383
+ return this.pendingFetch;
384
+ }
385
+ async getCameraSource() {
386
+ if ((0, utils_1.is_rtsp_ready)(this.device, this.cameraConfig)) {
387
+ const url = this.device.getPropertyValue(eufy_security_client_1.PropertyName.DeviceRTSPStreamUrl);
388
+ this.log.debug('RTSP URL: ' + url);
389
+ return { type: 'rtsp', url };
424
390
  }
391
+ const streamData = await this.livestreamManager.getLocalLivestream();
392
+ return { type: 'local', stream: streamData.videostream };
393
+ }
394
+ withTimeout(promise, ms) {
395
+ return new Promise((resolve, reject) => {
396
+ const timer = setTimeout(() => reject(new Error(`Snapshot fetch timed out after ${ms}ms`)), ms);
397
+ promise.then(resolve, reject).finally(() => clearTimeout(timer));
398
+ });
425
399
  }
426
400
  async resizeSnapshot(snapshot, request) {
427
- const parameters = await ffmpeg_1.FFmpegParameters.forSnapshot(this.cameraConfig.videoConfig?.debug);
428
- parameters.setup(this.cameraConfig, request);
429
- const ffmpeg = new ffmpeg_1.FFmpeg(`[Snapshot Resize Process]`, parameters);
430
- return ffmpeg.getResult(snapshot);
401
+ return this.runFFmpegSnapshot('[Snapshot Resize]', (params) => {
402
+ params.setup(this.cameraConfig, request);
403
+ }, snapshot);
404
+ }
405
+ async runFFmpegSnapshot(label, configure, input) {
406
+ const params = await ffmpeg_1.FFmpegParameters.forSnapshot(this.cameraConfig.videoConfig?.debug);
407
+ await configure(params);
408
+ return new ffmpeg_1.FFmpeg(label, params).getResult(input);
431
409
  }
432
410
  }
433
411
  exports.SnapshotManager = SnapshotManager;
@@ -1 +1 @@
1
- {"version":3,"file":"SnapshotManager.js","sourceRoot":"","sources":["../../src/controller/SnapshotManager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SnapshotManager.js","sourceRoot":"","sources":["../../src/controller/SnapshotManager.ts"],"names":[],"mappings":"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"}
package/dist/settings.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.SnapshotUnavailablePath = exports.SnapshotBlackPath = exports.PROTECT_TWOWAY_HEARTBEAT_INTERVAL = exports.PROTECT_SNAPSHOT_CACHE_MAXAGE = exports.PROTECT_FFMPEG_AUDIO_FILTER_FFTNR = exports.PROTECT_RPI_GPU_MINIMUM = exports.PROTECT_HOMEKIT_IDR_INTERVAL = exports.PROTECT_HOMEKIT_STREAMING_HEADROOM = exports.PROTECT_HKSV_SEGMENT_RESOLUTION = exports.PROTECT_HKSV_TIMESHIFT_BUFFER_MAXLENGTH = exports.PROTECT_HKSV_MAX_EVENT_ERRORS = exports.PROTECT_HKSV_SEGMENT_LENGTH = exports.PLUGIN_NAME = exports.PLATFORM_NAME = void 0;
3
+ exports.SNAPSHOT_FETCH_TIMEOUT_MS = exports.SNAPSHOT_CLOUD_SKIP_MS = exports.SNAPSHOT_MIN_REFRESH_INTERVAL_MINUTES = exports.SNAPSHOT_RING_DEBOUNCE_SECONDS = exports.SNAPSHOT_CACHE_BALANCED_SECONDS = exports.SNAPSHOT_CACHE_FRESH_SECONDS = exports.SnapshotUnavailablePath = exports.SnapshotBlackPath = exports.PROTECT_TWOWAY_HEARTBEAT_INTERVAL = exports.PROTECT_SNAPSHOT_CACHE_MAXAGE = exports.PROTECT_FFMPEG_AUDIO_FILTER_FFTNR = exports.PROTECT_RPI_GPU_MINIMUM = exports.PROTECT_HOMEKIT_IDR_INTERVAL = exports.PROTECT_HOMEKIT_STREAMING_HEADROOM = exports.PROTECT_HKSV_SEGMENT_RESOLUTION = exports.PROTECT_HKSV_TIMESHIFT_BUFFER_MAXLENGTH = exports.PROTECT_HKSV_MAX_EVENT_ERRORS = exports.PROTECT_HKSV_SEGMENT_LENGTH = exports.PLUGIN_NAME = exports.PLATFORM_NAME = void 0;
4
4
  /**
5
5
  * This is the name of the platform that users will use to register the plugin in the Homebridge config.json
6
6
  */
@@ -31,4 +31,16 @@ exports.PROTECT_SNAPSHOT_CACHE_MAXAGE = 90;
31
31
  exports.PROTECT_TWOWAY_HEARTBEAT_INTERVAL = 3;
32
32
  exports.SnapshotBlackPath = '/media/Snapshot-black.png';
33
33
  exports.SnapshotUnavailablePath = '/media/Snapshot-Unavailable.png';
34
+ // Seconds – cache age threshold for the fast-path snapshot return.
35
+ exports.SNAPSHOT_CACHE_FRESH_SECONDS = 15;
36
+ // Seconds – balanced-mode cache age threshold before fetching a new snapshot.
37
+ exports.SNAPSHOT_CACHE_BALANCED_SECONDS = 30;
38
+ // Seconds – window after a ring event where a black placeholder is sent.
39
+ exports.SNAPSHOT_RING_DEBOUNCE_SECONDS = 5;
40
+ // Minutes – minimum allowed automatic snapshot refresh interval.
41
+ exports.SNAPSHOT_MIN_REFRESH_INTERVAL_MINUTES = 5;
42
+ // Milliseconds – don't overwrite a recent stream snapshot with a cloud image.
43
+ exports.SNAPSHOT_CLOUD_SKIP_MS = 30 * 1000;
44
+ // Milliseconds – maximum time to wait for a snapshot fetch before timing out.
45
+ exports.SNAPSHOT_FETCH_TIMEOUT_MS = 30 * 1000;
34
46
  //# sourceMappingURL=settings.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"settings.js","sourceRoot":"","sources":["../src/settings.ts"],"names":[],"mappings":";;;AAAA;;GAEG;AACU,QAAA,aAAa,GAAG,cAAc,CAAC;AAE5C;;GAEG;AACU,QAAA,WAAW,GAAG,0BAA0B,CAAC;AAEtD,oGAAoG;AACvF,QAAA,2BAA2B,GAAG,IAAI,CAAC;AAEhD,yHAAyH;AAC5G,QAAA,6BAA6B,GAAG,CAAC,CAAC;AAE/C,mJAAmJ;AACtI,QAAA,uCAAuC,GAAG,mCAA2B,GAAG,CAAC,CAAC;AAEvF,kKAAkK;AACrJ,QAAA,+BAA+B,GAAG,GAAG,CAAC;AAEnD,+IAA+I;AAClI,QAAA,kCAAkC,GAAG,EAAE,CAAC;AAErD,mEAAmE;AACtD,QAAA,4BAA4B,GAAG,CAAC,CAAC;AAE9C,2EAA2E;AAC9D,QAAA,uBAAuB,GAAG,GAAG,CAAC;AAE3C,mIAAmI;AACtH,QAAA,iCAAiC,GAAG,EAAE,CAAC;AAEpD,wCAAwC;AAC3B,QAAA,6BAA6B,GAAG,EAAE,CAAC;AAEhD,6JAA6J;AAChJ,QAAA,iCAAiC,GAAG,CAAC,CAAC;AAEtC,QAAA,iBAAiB,GAAG,2BAA2B,CAAC;AAEhD,QAAA,uBAAuB,GAAG,iCAAiC,CAAC"}
1
+ {"version":3,"file":"settings.js","sourceRoot":"","sources":["../src/settings.ts"],"names":[],"mappings":";;;AAAA;;GAEG;AACU,QAAA,aAAa,GAAG,cAAc,CAAC;AAE5C;;GAEG;AACU,QAAA,WAAW,GAAG,0BAA0B,CAAC;AAEtD,oGAAoG;AACvF,QAAA,2BAA2B,GAAG,IAAI,CAAC;AAEhD,yHAAyH;AAC5G,QAAA,6BAA6B,GAAG,CAAC,CAAC;AAE/C,mJAAmJ;AACtI,QAAA,uCAAuC,GAAG,mCAA2B,GAAG,CAAC,CAAC;AAEvF,kKAAkK;AACrJ,QAAA,+BAA+B,GAAG,GAAG,CAAC;AAEnD,+IAA+I;AAClI,QAAA,kCAAkC,GAAG,EAAE,CAAC;AAErD,mEAAmE;AACtD,QAAA,4BAA4B,GAAG,CAAC,CAAC;AAE9C,2EAA2E;AAC9D,QAAA,uBAAuB,GAAG,GAAG,CAAC;AAE3C,mIAAmI;AACtH,QAAA,iCAAiC,GAAG,EAAE,CAAC;AAEpD,wCAAwC;AAC3B,QAAA,6BAA6B,GAAG,EAAE,CAAC;AAEhD,6JAA6J;AAChJ,QAAA,iCAAiC,GAAG,CAAC,CAAC;AAEtC,QAAA,iBAAiB,GAAG,2BAA2B,CAAC;AAEhD,QAAA,uBAAuB,GAAG,iCAAiC,CAAC;AAEzE,mEAAmE;AACtD,QAAA,4BAA4B,GAAG,EAAE,CAAC;AAE/C,8EAA8E;AACjE,QAAA,+BAA+B,GAAG,EAAE,CAAC;AAElD,yEAAyE;AAC5D,QAAA,8BAA8B,GAAG,CAAC,CAAC;AAEhD,iEAAiE;AACpD,QAAA,qCAAqC,GAAG,CAAC,CAAC;AAEvD,8EAA8E;AACjE,QAAA,sBAAsB,GAAG,EAAE,GAAG,IAAI,CAAC;AAEhD,8EAA8E;AACjE,QAAA,yBAAyB,GAAG,EAAE,GAAG,IAAI,CAAC"}
@@ -1,6 +1,15 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.DEFAULT_VIDEOCONFIG_VALUES = exports.DEFAULT_CAMERACONFIG_VALUES = void 0;
3
+ exports.DEFAULT_VIDEOCONFIG_VALUES = exports.DEFAULT_CAMERACONFIG_VALUES = exports.SnapshotHandlingMethod = void 0;
4
+ var SnapshotHandlingMethod;
5
+ (function (SnapshotHandlingMethod) {
6
+ /** Always fetch a fresh snapshot from the camera (highest battery drain) */
7
+ SnapshotHandlingMethod[SnapshotHandlingMethod["AlwaysFresh"] = 1] = "AlwaysFresh";
8
+ /** Return cached snapshot if recent, otherwise fetch fresh */
9
+ SnapshotHandlingMethod[SnapshotHandlingMethod["Balanced"] = 2] = "Balanced";
10
+ /** Always return cached/cloud snapshot (lowest battery drain) */
11
+ SnapshotHandlingMethod[SnapshotHandlingMethod["CloudOnly"] = 3] = "CloudOnly";
12
+ })(SnapshotHandlingMethod || (exports.SnapshotHandlingMethod = SnapshotHandlingMethod = {}));
4
13
  exports.DEFAULT_CAMERACONFIG_VALUES = {
5
14
  name: '',
6
15
  manufacturer: '',
@@ -16,7 +25,7 @@ exports.DEFAULT_CAMERACONFIG_VALUES = {
16
25
  rtsp: false,
17
26
  enableCamera: true,
18
27
  refreshSnapshotIntervalMinutes: 0,
19
- snapshotHandlingMethod: 3,
28
+ snapshotHandlingMethod: SnapshotHandlingMethod.CloudOnly,
20
29
  immediateRingNotificationWithoutSnapshot: false,
21
30
  delayCameraSnapshot: false,
22
31
  indoorChimeButton: false,
@@ -1 +1 @@
1
- {"version":3,"file":"configTypes.js","sourceRoot":"","sources":["../../src/utils/configTypes.ts"],"names":[],"mappings":";;;AA2Ba,QAAA,2BAA2B,GAAiB;IACvD,IAAI,EAAE,EAAE;IACR,YAAY,EAAE,EAAE;IAChB,KAAK,EAAE,EAAE;IACT,YAAY,EAAE,EAAE;IAChB,gBAAgB,EAAE,EAAE;IACpB,YAAY,EAAE,IAAI;IAClB,YAAY,EAAE,IAAI;IAClB,WAAW,EAAE,IAAI;IACjB,QAAQ,EAAE,KAAK;IACf,gBAAgB,EAAE,CAAC;IACnB,oBAAoB,EAAE,EAAE;IACxB,IAAI,EAAE,KAAK;IACX,YAAY,EAAE,IAAI;IAClB,8BAA8B,EAAE,CAAC;IACjC,sBAAsB,EAAE,CAAC;IACzB,wCAAwC,EAAE,KAAK;IAC/C,mBAAmB,EAAE,KAAK;IAC1B,iBAAiB,EAAE,KAAK;CACzB,CAAC;AAgCW,QAAA,0BAA0B,GAAgB;IACrD,SAAS,EAAE,KAAK;IAChB,KAAK,EAAE,IAAI;IACX,MAAM,EAAE,MAAM;IACd,MAAM,EAAE,MAAM;CACf,CAAC"}
1
+ {"version":3,"file":"configTypes.js","sourceRoot":"","sources":["../../src/utils/configTypes.ts"],"names":[],"mappings":";;;AAAA,IAAY,sBAOX;AAPD,WAAY,sBAAsB;IAChC,4EAA4E;IAC5E,iFAAe,CAAA;IACf,8DAA8D;IAC9D,2EAAY,CAAA;IACZ,iEAAiE;IACjE,6EAAa,CAAA;AACf,CAAC,EAPW,sBAAsB,sCAAtB,sBAAsB,QAOjC;AA6BY,QAAA,2BAA2B,GAAiB;IACvD,IAAI,EAAE,EAAE;IACR,YAAY,EAAE,EAAE;IAChB,KAAK,EAAE,EAAE;IACT,YAAY,EAAE,EAAE;IAChB,gBAAgB,EAAE,EAAE;IACpB,YAAY,EAAE,IAAI;IAClB,YAAY,EAAE,IAAI;IAClB,WAAW,EAAE,IAAI;IACjB,QAAQ,EAAE,KAAK;IACf,gBAAgB,EAAE,CAAC;IACnB,oBAAoB,EAAE,EAAE;IACxB,IAAI,EAAE,KAAK;IACX,YAAY,EAAE,IAAI;IAClB,8BAA8B,EAAE,CAAC;IACjC,sBAAsB,EAAE,sBAAsB,CAAC,SAAS;IACxD,wCAAwC,EAAE,KAAK;IAC/C,mBAAmB,EAAE,KAAK;IAC1B,iBAAiB,EAAE,KAAK;CACzB,CAAC;AAgCW,QAAA,0BAA0B,GAAgB;IACrD,SAAS,EAAE,KAAK;IAChB,KAAK,EAAE,IAAI;IACX,MAAM,EAAE,MAAM;IACd,MAAM,EAAE,MAAM;CACf,CAAC"}
package/dist/version.js CHANGED
@@ -1,5 +1,5 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.LIB_VERSION = void 0;
4
- exports.LIB_VERSION = "4.4.2-beta.13";
4
+ exports.LIB_VERSION = "4.4.2-beta.14";
5
5
  //# sourceMappingURL=version.js.map
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "displayName": "Homebridge Eufy Security",
3
3
  "name": "homebridge-eufy-security",
4
- "version": "4.4.2-beta.13",
4
+ "version": "4.4.2-beta.14",
5
5
  "description": "Control Eufy Security from homebridge.",
6
6
  "license": "Apache-2.0",
7
7
  "repository": {