UNPKG

tplink_kasa_gsi

Version:

GrünstromIndex - Decorator für TP Link Kasa HS110

99 lines (90 loc) 3.72 kB
'use strict'; module.exports = function(config) { const http_request = require("request"); const { login } = require("tplink-cloud-api"); this.config = config; const _getGSI = function(meter) { return new Promise( async function (resolve, reject) { let gsidata = {}; gsidata.zip = meter.location.zip; gsidata.externalAccount = meter.administrationNumber; if((typeof meter.administrationNumber == "undefined") || (meter.administrationNumber == null) || (meter.administrationNumber.length <1)) { gsidata.externalAccount = meter.meterId; } gsidata.energy = meter["1.8.0"]; gsidata["1.8.0"] = gsidata.energy; gsidata.plz = meter.location.zip; gsidata.secret = meter.meterId; gsidata.timeStamp = meter.timeStamp; http_request.post("https://api.corrently.io/core/reading",{form:gsidata},function(e,r,b) { let _gsi = JSON.parse(b); if(typeof _gsi["account"] != "undefined") meter.account = _gsi["account"]; if(typeof _gsi["1.8.1"] != "undefined") meter["1.8.1"] = _gsi["1.8.1"]*1; if(typeof _gsi["1.8.2"] != "undefined") meter["1.8.2"] = _gsi["1.8.2"]*1; resolve(meter); }) }); } this.meters = async function() { let parent = this; return new Promise( async function (resolve, reject) { const tplink = await login(config.TPLINK_ACCOUNT, config.TPLINK_PASSWORD, "TermID"); let deviceList = await tplink.getDeviceList(); let meters = []; for(let i=0;i<deviceList.length;i++) { if( deviceList[i].deviceModel == "HS110(EU)") { let meter = deviceList[i]; let consumption = await tplink.getHS110(meter.alias).getPowerUsage(); meter["1.8.0"] = consumption.total_wh; meter.location = { zip: config.ZIP }; meter.externalAccount = meter.deviceId+"_"+meter.hwId+"_"+meter.deviceMac; meter.meterId = meter.hwId+"_"+meter.deviceMac; meter.timeStamp = new Date().getTime(); deviceList[i] = await _getGSI(meter); meters.push(deviceList[i]); } } resolve(meters); }); } this.switchOn = async function(query) { let parent = this; return new Promise( async function (resolve, reject) { const tplink = await login(config.TPLINK_ACCOUNT, config.TPLINK_PASSWORD, "TermID"); let deviceList = await tplink.getDeviceList(); let meters = []; let res = {switched:false}; for(let i=0;i<deviceList.length;i++) { if( deviceList[i].deviceModel == "HS110(EU)") { let meter = deviceList[i]; let found=false; if(meter.alias == query) found=true; if(meter.deviceId == query) found=true; if(meter.deviceMac == query) found=true; if(meter.hwId == query) found=true; if(meter.oemId == query) found=true; if(found) { await tplink.getHS110(meter.alias).powerOn(); res = {switched:true}; } } } resolve(res); }); } this.meter = async function(query) { let parent = this; return new Promise( async function (resolve, reject) { parent.meters().then(function(meters) { for(let i=0; i< meters.length; i++) { if(meters[i].meterId==query) resolve(meters[i]); if(meters[i].alias==query) resolve(meters[i]); if(meters[i].account==query) resolve(meters[i]); if(meters[i].deviceId==query) resolve(meters[i]); if(meters[i].deviceMac==query) resolve(meters[i]); } }); }); } this.REQUIREDCONFIGS = ["TPLINK_ACCOUNT","TPLINK_PASSWORD","ZIP"]; }