/* jshint -W097 */// jshint strict:false /*jslint node: true */ "use strict"; var request = require('request'); var utils = require(__dirname + '/lib/utils'); // Get common adapter utils var cookieJar = request.jar(); var meters = []; var numMeters; var meter_index = 0; var mid = []; var idx; var midx; var register = []; var regValue = []; var numReg; var adapter = utils.adapter({ name: 'b-control-em', ready: function () { getAuthCookie(getMeters); } }); function getAuthCookie(callback) { adapter.log.info("login on " + adapter.config.host); request.get({ url: 'http://' + adapter.config.host + '/index.php', jar: cookieJar }, function (err, res, body) { if (err) { adapter.log.error('auth failed'); stop(); } else { callback(); } }); } function getMeters(callback) { request.get({ url: 'http://' + adapter.config.host + '/mum-webservice/meters.php', jar: cookieJar }, function (err, res, body) { var sensor = JSON.parse(body); sensor = sensor.meters; if (sensor.authentication === false || sensor.authentication === "false") { adapter.log.error("auth failure"); setTimeout(function () { getAuthCookie(getMeters); }, 60000); return; } adapter.log.info("found " + sensor.length + " sensors"); numMeters = sensor.length; for (var i = 0; i < sensor.length; i++) { var obj = { type: 'state', common: { name: sensor[i].label, unit: 'W', type: 'number', role: 'value.power' }, native: { label: sensor[i].label, serial: sensor[i].serial, model: sensor[i].model, type: sensor[i].type } }; adapter.log.info('add/update object ' + sensor[i].label); adapter.extendObject(sensor[i].label, obj); meters[i] = sensor[i].label; mid[i] = sensor[i].id; midx = mid; } startLoop(); }); } function startLoop() { if (++meter_index >= numMeters) meter_index = 0; getValue(mid[meter_index], function () { setTimeout(startLoop, adapter.config.pause); }); } function getValue(meter_id, callback) { request.post({ jar: cookieJar, url: 'http://' + adapter.config.host + '/mum-webservice/consumption.php?meter_id=' + meter_id }, function (err, res, body) { var sensor = JSON.parse(body); if (sensor.authentication === false || sensor.authentication === "false") { adapter.log.error("auth failure"); getAuthCookie(getMeters); return; } if (meter_id < 10) { idx = ('0' + (meter_id + 1)); if (sensor.hasOwnProperty("registers")) { numReg = sensor.registers.length; for (var i = 0; i < numReg; i++) { if (sensor.registers[i].hasOwnProperty("register")) { if (sensor.registers[i].hasOwnProperty("value")){ // adapter.log.info(sensor.registers[i].register + '::' + sensor.registers[i].value); } } } } else { // adapter.log.info('no Registers found'); } adapter.setState(meters[meter_index], parseFloat((sensor[idx + "_power"] * 1000).toFixed(1))); callback(); } else { idx = (meter_id + 1); if (sensor.hasOwnProperty("registers")) { numReg = sensor.registers.length; for (var i = 0; i < numReg; i++) { if (sensor.registers[i].hasOwnProperty("register")) { if (sensor.registers[i].hasOwnProperty("value")){ //adapter.log.info(sensor.registers[i].register + '::' + sensor.registers[i].value); } } } } else { // adapter.log.info('no Registers found'); } adapter.setState(meters[meter_index], parseFloat((sensor[idx + "_power"] * 1000).toFixed(1))); callback(); } }); } function stop() { adapter.log.info("adapter b-control-em terminating"); process.exit(); } process.on('SIGINT', function () { stop(); }); process.on('SIGTERM', function () { stop(); });