thing-it-device-smart-meter
Version:
[thing-it-node] Device Plugin to demo Smart Meter functionality.
117 lines (97 loc) • 2.36 kB
JavaScript
module.exports = {
metadata: {
family: 'smartMeter',
plugin: 'smartMeter',
label: 'Generic Smart Meter',
manufacturer: 'Generic',
discoverable: false,
tangible: true,
additionalSoftware: [],
actorTypes: [],
sensorTypes: [],
state: [{
id: "energyConsumption",
label: "Energy Consumption",
type: {
id: "decimal"
},
unit: 'kWh'
}, {
id: "lastReset",
label: "Last Reset",
type: {
id: "time"
}
}],
services: [{
id: "reset", label: "Reset", parameters: []
}],
configuration: []
},
create: function () {
return new SmartMeter();
},
discovery: function () {
return new SmartMeterDiscovery();
}
};
var q = require('q');
var _ = require('lodash');
function SmartMeterDiscovery() {
SmartMeterDiscovery.prototype.start = function () {
};
SmartMeterDiscovery.prototype.stop = function () {
};
}
/**
*
* @constructor
*/
function SmartMeter() {
SmartMeter.prototype.start = function () {
var deferred = q.defer();
this.state = {energyConsumption: 0};
if (this.isSimulated()) {
this.interval = setInterval(function () {
this.state.energyConsumption += 0.01 + 0.001 * new Date().getTime() % 5;
this.publishStateChange();
}.bind(this), 10000);
deferred.resolve();
} else {
deferred.resolve();
}
return deferred.promise;
};
/**
*
*/
SmartMeter.prototype.stop = function () {
var deferred = q.defer();
if (this.isSimulated()) {
if (this.interval) {
clearInterval(this.interval);
}
} else {
}
deferred.resolve();
return deferred.promise;
};
/**
*
*/
SmartMeter.prototype.reset = function () {
this.state.energyConsumption = 0;
this.publishStateChange();
};
/**
*
*/
SmartMeter.prototype.getState = function () {
return this.state;
};
/**
*
*/
SmartMeter.prototype.setState = function () {
};
}