all files / Insteon/ Meter.js

71.05% Statements 27/38
50% Branches 2/4
37.5% Functions 3/8
71.05% Lines 27/38
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94                                                                                                                                      
var util = require('util');
var Q = require('q');
var events = require('events');
// var debug = require('debug')('home-controller:insteon:meter');
 
function Meter(id, insteon) {
  this.id = id;
  this.insteon = insteon;
}
 
util.inherits(Meter, events.EventEmitter);
 
Meter.prototype.statusAndReset = function (next) {
 
  var meter = this;
 
  var deferred = Q.defer();
 
  deferred.resolve(
    meter.status()
    .then(function (details) {
      return meter.reset()
      .then(function () {
        return details;
      });
    })
  );
 
  return deferred.promise.nodeify(next);
 
};
 
Meter.prototype.reset = function (next) {
  var cmd = {
    cmd1: '80',
    cmd2: '00'
  };
 
  return this.insteon.directCommand(this.id, cmd, next);
 
};
 
Meter.prototype.status = function (next) {
 
  var cmd = {
    cmd1: '82',
    cmd2: '00',
    waitForExtended: true
  };
 
  var insteon = this.insteon;
  var id = this.id;
 
 
  var details = {};
  var data;
 
  var deferred = Q.defer();
 
  deferred.resolve(
    insteon.directCommand(id, cmd)
    .then(function (status) {
      data = status.response.extended.userData;
 
      Iif(parseInt(data[8], 16) >= 254){
        details.energy = 0;
      } else {
        details.energy = parseInt(data[8] + data[9] + data[10] + data[11], 16);
      }
 
      // Convert Accumulated Energy value into kW-h
      details.energy = details.energy* 65535 / (1000 * 60 * 60 * 60);
 
      // Watts
      details.power = parseInt(data[6] + data[7], 16);
 
      Iif(details.power > 32767){
        details.power = details.power - 65535;
      }
      return details;
    })
 
  );
 
  return deferred.promise.nodeify(next);
 
};
 
Meter.prototype.cancelPending = function() {
  this.insteon.cancelPending(this.id);
};
 
module.exports = Meter;