@pmouli/isy-matter-server
Version:
Service to expose an ISY device as a Matter Border router
44 lines (38 loc) • 1.5 kB
text/typescript
import { ISY, type Family } from '../../ISY.js';
import type { NodeInfo } from '../../Model/NodeInfo.js';
import 'winston';
import { Pir2844 } from './Generated/Pir2844.js';
import type { Pir2844c } from './Generated/Pir2844c.js';
import { Pir2844OnOff } from './Generated/Pir2844OnOff.js';
import { InsteonDeviceNode } from './InsteonBaseDevice.js';
export class InsteonMotionSensorDevice extends Pir2844OnOff.Node {
private _isMotionDetected: boolean;
constructor(isy: ISY, deviceNode: NodeInfo<Family.Insteon>) {
super(isy, deviceNode);
this._isMotionDetected = false;
}
public override handleControlTrigger(controlName: keyof Pir2844OnOff.Commands.Type) {
if (controlName === 'DON') {
this.logger('Motion detected.');
this._isMotionDetected = true;
this.emit('controlTriggered', controlName);
this.emit('propertyChanged', 'motionDetected', true, false, 'true');
setTimeout(() => {
this.logger('No motion detected in last 30 seconds.');
this._isMotionDetected = false;
this.emit('propertyChanged', 'motionDetected', false, true, 'false'); /*Included for compatiblity purposes*/
}, 30000);
return true;
} else if (controlName === 'DOF') {
this._isMotionDetected = false;
this.logger('No motion detected.');
this.emit('controlTriggered', controlName);
this.emit('propertyChanged', 'motionDetected', false, true, 'false');
return true;
}
return false;
}
get motionDetected(): boolean {
return this._isMotionDetected;
}
}