diff --git a/plugins/coral/src/main.py b/plugins/coral/src/main.py index 4fc0b82ae..9be655d71 100644 --- a/plugins/coral/src/main.py +++ b/plugins/coral/src/main.py @@ -181,6 +181,7 @@ class CoralPlugin(scrypted_sdk.ScryptedDeviceBase, ObjectDetection): score_threshold = -float('inf') duration = None detection_id = None + detection_session = None if session: detection_id = session.get('detectionId', -float('inf')) diff --git a/plugins/objectdetector/src/main.ts b/plugins/objectdetector/src/main.ts index 7dd0c5528..b64a6ac79 100644 --- a/plugins/objectdetector/src/main.ts +++ b/plugins/objectdetector/src/main.ts @@ -18,7 +18,8 @@ const defaultDetectionTimeout = 10; class ObjectDetectionMixin extends SettingsMixinDeviceBase implements ObjectDetector, Settings { released = false; - registerMotion: EventListenerRegister; + motionListener: EventListenerRegister; + detectionListener: EventListenerRegister; detections = new Map(); realDevice: ScryptedDevice & Camera & VideoCamera & ObjectDetector & MotionSensor; minConfidence = parseFloat(this.storage.getItem('minConfidence')) || defaultMinConfidence; @@ -30,7 +31,6 @@ class ObjectDetectionMixin extends SettingsMixinDeviceBase imple currentPeople: DenoisedDetectionEntry[] = []; objectDetection: ObjectDetection & ScryptedDevice; detectionId = randomBytes(8).toString('hex'); - detectionListener: EventListenerRegister; constructor(mixinDevice: VideoCamera & Settings, mixinDeviceInterfaces: ScryptedInterface[], mixinDeviceState: { [key: string]: any }, public objectDetectionPlugin: ObjectDetectionPlugin) { super(mixinDevice, mixinDeviceState, { @@ -84,18 +84,18 @@ class ObjectDetectionMixin extends SettingsMixinDeviceBase imple return; } - this.objectDetection.listen({ + this.detectionListener = this.objectDetection.listen({ event: ScryptedInterface.ObjectDetection, watch: false, }, (eventSource, eventDetails, eventData: ObjectsDetected) => { if (eventData?.detectionId !== this.detectionId) return; this.objectsDetected(eventData) - }) + }); } async register() { - this.registerMotion = this.realDevice.listen(ScryptedInterface.MotionSensor, async () => { + this.motionListener = this.realDevice.listen(ScryptedInterface.MotionSensor, async () => { if (!this.realDevice.motionDetected) return; this.resetDetectionTimeout(); @@ -316,9 +316,11 @@ class ObjectDetectionMixin extends SettingsMixinDeviceBase imple } release() { + super.release(); this.released = true; this.clearDetectionTimeout(); - this.registerMotion?.removeListener(); + this.motionListener?.removeListener(); + this.detectionListener?.removeListener(); this.objectDetection?.detectObjects(undefined, { detectionId: this.detectionId, });