UNPKG

autostrom-client

Version:

STROMDAO Autostrom ist ein Stromprodukt, welches netzdienlichen Aufladen mit einer Prämie belohnt.

123 lines (109 loc) 4.04 kB
var StromDAOBO = require("stromdao-businessobject"); var request = require('then-request'); const vorpal = require('vorpal')(); module.exports = { getGSI:function(plz,node,callback) { request('GET',"https://stromdao.de/crm/service/gsi/?plz="+plz).then(function(data) { var json=JSON.parse(data.getBody()); // Validate Signature if(json.hash!=node.hash(json.data)) { vorpal.log("ERR: Hash check failed"); throw "ERR"; } if(json.by!=node.verify(json.signature)) { vorpal.log("ERR: Signer check failed"); throw "ERR"; } if(json.by!="0xEe5D4A98Ca5A77b5245Af9F235Eab4CB405be185") { vorpal.log("ERR: Wrong Signer"); throw "ERR"; } node.storage.setItemSync("gsi",data.getBody().toString()); if(typeof callback != "undefined") { callback(json); } }); }, account:function(args,callback) { var node = new StromDAOBO.Node({external_id:args.user_id,testMode:true,rpc:global.rpcprovider}); vorpal.log("Address:",node.wallet.address); vorpal.log("Private Key:",node.wallet.privateKey); callback(); }, startSession:function (args,callback) { var node = new StromDAOBO.Node({external_id:args.user_id,testMode:true,rpc:global.rpcprovider}); autostrom.getGSI(args.plz,node,function(json) { node.mpr().then(function(mpr) { mpr.storeReading(args.reading).then(function(o) { var gsi = JSON.parse(json.data.gsi); var now = new Date().getTime()/1000; vorpal.log("Netzdienlichkeitprämie Autostrom"); for(var i=0;i<gsi.length;i++) { if(gsi[i].epochtime>now) { vorpal.log(new Date(gsi[i].epochtime*1000).toLocaleString(),(gsi[i].value/1000000000).toLocaleString(undefined, { minimumFractionDigits:2, maximumFractionDigits:2 })); } } callback(); }); }); }); }, stopSession:function(args,callback) { var node = new StromDAOBO.Node({external_id:args.user_id,testMode:true,rpc:global.rpcprovider}); var receipt={}; receipt.start = {}; receipt.start.gsi=node.storage.getItemSync("gsi"); node.mpr().then(function(mpr) { mpr.readings(node.wallet.address).then(function(last_reading) { receipt.start.time = last_reading.time.toString(); receipt.start.power = last_reading.power.toString(); receipt.end={}; mpr.storeReading(args.reading).then(function(o) { mpr.readings(node.wallet.address).then(function(o) { receipt.end.time=o.time.toString(); receipt.end.power=o.power.toString(); autostrom.getGSI(args.plz,node,function(gsi_end) { var gsi_start=JSON.parse(JSON.parse(receipt.start.gsi).data.gsi); receipt.end.gsi=gsi_end; var ee_val=gsi_start[0].value; var ee_cnt=1; for(var i=0;i<gsi_start.length;i++) { var b=gsi_start[i]; if(b.epochtime<last_reading.time) { start_ee=b; } else { if(b.epochtime<o.time.toString()) { ee_val+=b.value; ee_cnt++; } } } var ee_prm=0; if(ee_cnt!=0) ee_prm=((ee_val/ee_cnt)*(args.charged_energy/1000))/100; receipt.value = {}; receipt.value.power=args.charged_energy; receipt.value.ee = ee_val; receipt.value.bonus = ee_prm; receipt.value.cnt = ee_cnt; var msg={}; msg.by=node.wallet.address; msg.data=JSON.stringify(receipt); msg.hash=node.hash(msg.data); msg.signature=node.sign(msg.data); var FormData = request.FormData; var data = new FormData(); data.append('json', JSON.stringify(msg)); request('POST',"https://stromdao.de/crm/service/gsi/receipt/", {form: data}).then(function(d) { node.storage.setItemSync("gsi",null); var resp=JSON.parse(d.getBody().toString()); vorpal.log("https://www.stromkonto.net/?account="+node.wallet.address+"&sc="+resp.blg); callback(); }); }); }); }); }); }); } }; autostrom = module.exports;