thing-it-device-enocean-ip
Version:
[thing-it-node] Device Plugin for EnOcean IP products.
120 lines (108 loc) • 3.14 kB
JavaScript
module.exports = {
metadata: {
plugin: "pressureSwitch",
label: "Differential Pressure Switch",
role: "actor",
family: "pressureSwitch",
deviceTypes: ["enocean-ip/gateway"],
services: [],
state: [{
label: 'Last Operation',
id: 'lastOperation',
type:{
id: "string"
}
}, {
label: 'Pressed',
id: 'pressed',
type:{
id: "boolean"
}
}, {
label: 'Last Operation Timestamp',
id: 'lastOperationTimestamp'
}],
events: [{
label: 'Button Pressed',
id: 'buttonPressed'
}, {
label: 'Button Released',
id: 'buttonReleased'
}],
configuration: [{
label: "Device ID",
id: "deviceId",
type: {
id: "string"
}
}]
},
create: function () {
return new PressureSwitch();
}
};
var q = require('q');
var moment = require('moment');
/**
*
*/
function PressureSwitch() {
/**
*
*/
PressureSwitch.prototype.start = function () {
var deferred = q.defer();
this.state = {};
if (this.isSimulated()) {
deferred.resolve();
}
else {
var dataArray = [];
this.device.adapter.listeners.push(telegram => {
if (telegram.deviceId === this.configuration.deviceId) {
this.logDebug('Device ' + telegram.friendlyId + ' is processing ', telegram.functions);
dataArray = telegram.telegramInfo.data.match(/.{1,2}/g);
//console.log("Data bits: ", dataArray[2]);
if(dataArray[2] === "11") {
this.state.lastOperation = "Button Pressed";
this.state.pressed = true;
this.state.lastOperationTimestamp = moment().toISOString();
console.log(this.state);
this.publishEvent('buttonPressed', {});
}
else{
this.state.lastOperation = "Button Released";
this.state.pressed = false;
this.state.lastOperationTimestamp = moment().toISOString();
console.log(this.state);
this.publishEvent('buttonReleased', {});
}
this.publishStateChange();
}
});
deferred.resolve();
}
return deferred.promise;
};
/**
*
*/
PressureSwitch.prototype.getState = function () {
return this.state;
};
/**
*
*/
PressureSwitch.prototype.setState = function (state) {
};
/**
*
*/
PressureSwitch.prototype.stop = function () {
if (this.isSimulated()) {
if (this.interval) {
clearInterval(this.interval);
}
}
}
}