rpi-pin-events
Version:
Bathroom helper extraordinaire
67 lines (58 loc) • 1.2 kB
JavaScript
var Gpio = require('onoff').Gpio;
var EventEmitter = require('events');
function exit() {
pir.unexport();
process.exit();
}
const CHANGE_EVENT = 'change';
class PinInputEvents extends EventEmitter
{
super({ pin = 15, changeListeners = [], minimumInterval = 0 })
{
this.pin = pin;
listeners.forEach((changeListeners)=>
{
this.addChangeListener(changeListener);
});
this.deviceIO = new Gpio(pin, 'in', 'both');
this.deviceIO.watch(this.dispatchGPIOEvent);
}
dispatchGPIOEvent (error, value)
{
if(error)
{
console.error('error ->', error);
exit();
}
this.emitChange(CHANGE_EVENT, value);
}
/**
* adds a listener in the form function(err, value){}
*/
onChange ( listener )
{
this.on(CHANGE_EVENT, listener);
}
/**
* removes specified listener
**/
removeChangeListener ( listener )
{
this.removeListener(CHANGE_EVENT, listener);
};
}
let pirSignal = new PinInputEvents(
{
pin : 15,
minimumInterval : 1000,
changeListeners :
[
(value)=>
{
console.log('change listener detected value ->', value);
}
]
});
console.log('pirSignal ->', pirSignal);
pirSignal.onChange((value)=>console.log('value'));
console.log('watching');