autostrom-client
Version:
STROMDAO Autostrom ist ein Stromprodukt, welches netzdienlichen Aufladen mit einer Prämie belohnt.
322 lines (302 loc) • 11.4 kB
JavaScript
var abilocation="https://cdn.rawgit.com/energychain/StromDAO-BusinessObject/master/smart_contracts/";
var plz="69256";
var last_reading = {};
function resolve(address) {
name=address;
if(window.localStorage.getItem("address_"+address.toLowerCase())!=null) {
name=window.localStorage.getItem("address_"+address.toLowerCase());
}
if(name.length<1) name=address;
if(name.length>17) name=name.substr(0,17)+"...";
return name;
}
$.qparams = function(name){
var results = new RegExp('[\?&]' + name + '=([^&#]*)').exec(window.location.href);
if (results==null){
return null;
}
else{
return decodeURI(results[1]) || 0;
}
}
var extid="fury.network."+Math.random();
if($.qparams("extid")!=null) {
extid=$.qparams("extid");
}
if(window.localStorage.getItem("ext:"+extid)) {
var node = new document.StromDAOBO.Node({external_id:extid,testMode:true,rpc:"https://demo.stromdao.de/rpc",abilocation:"https://cdn.rawgit.com/energychain/StromDAO-BusinessObject/master/smart_contracts/"});
open_username(node);
}
var node = new document.StromDAOBO.Node({external_id:extid,testMode:true,rpc:"https://demo.stromdao.de/rpc",abilocation:"https://cdn.rawgit.com/energychain/StromDAO-BusinessObject/master/smart_contracts/"});
// Fill View (HTML) using JQuery
$('.account').html(node.wallet.address);
function open_username(node) {
$('.account').html(resolve(node.wallet.address));
node.roleLookup().then(function(rl) {
$('#brain_frm').hide();
$('#pk_frm').hide();
$('#app').show();
rl.relations(node.wallet.address,42).then(function(tx) {
document.stromdao_sc=tx;
app("./app_dashboard.html");
});
rl.relations(node.wallet.address,41).then(function(tx) {
document.stromdao_blg=tx;
});
rl.relations(node.wallet.address,45).then(function(tx) {
document.stromdao_cutkn=tx;
});
});
}
$('#open_username').click(function() {
$('#open_username').attr('disabled','disabled');
var account_obj=new document.StromDAOBO.Account($('#username').val(),$('#password').val());
account_obj.wallet().then(function(wallet) {
node.roleLookup().then(function(rl) {
rl.relations(wallet.address,222).then(function(tx) {
if(tx=="0x0000000000000000000000000000000000000000") {
$('#pk_secret').val(node.wallet.privateKey);
$('#brain_frm').hide();
$('#pk_frm').show();
$('#cancel_pk').click(function() {
$('#open_username').removeAttr('disabled');
$('#pk_frm').hide();
$('#brain_frm').show();
});
$('#open_pk').click(function() {
$('#open_pk').attr('disabled','disabled');
$('#cancel_pk').attr('disabled','disabled');
account_obj.encrypt($('#pk_secret').val()).then(function(enc) {
node.stringstoragefactory().then(function(ssf) {
ssf.build(enc).then(function(ss) {
window.localStorage.setItem("ext:"+extid,$('#pk_secret').val());
node = new document.StromDAOBO.Node({external_id:extid,testMode:true,rpc:"https://fury.network/rpc",abilocation:abilocation });
node.roleLookup().then(function(rl2) {
rl2.setRelation(222,ss).then(function(tx) {
open_username(node);
});
});
});
});
});
});
} else {
node.stringstorage(tx).then(function(ss) {
ss.str().then(function(str) {
account_obj.decrypt(str).then(function(pk) {
window.localStorage.setItem("ext:"+extid,pk);
node = new document.StromDAOBO.Node({external_id:extid,testMode:true,rpc:"https://fury.network/rpc",abilocation:abilocation});
$('.account').html(resolve(node.wallet.address));
node.roleLookup().then(function(rl) {
rl.relations(node.wallet.address,42).then(function(tx) {
open_username(node);
});
});
});
});
});
}
});
});
});
});
function refreshGSI() {
$.get("https://stromdao.de/crm/service/gsi/?plz="+plz,function(data) {
var data=JSON.parse(data);
var gsi=JSON.parse(data.data.gsi);
var html="";
var html_t="<tr>";
var html_v="<tr>";
console.log(data.data);
$('#plz').html(data.data.plz);
$('#time').html(new Date(data.data.time).toLocaleString());
var i=0;
$.each(gsi,function(a,b) {
var color="#ffffff";
if(b.eevalue>70) color="#CDECFF";
if(b.value<1) color="#FFDFDF";
if(new Date(b.epochtime*1000).getTime()>new Date().getTime()) {
i++;
if(i<14) {
html_t+="<td style='background-color:"+color+";text-align:right'>";
if((""+new Date(b.epochtime*1000).getHours()).length<2) html_t+="0";
html_t+=new Date(b.epochtime*1000).getHours()+":00</td>";
html_v+="<td style='background-color:"+color+";text-align:right'>"+(b.value/1000000000).toLocaleString(undefined, { minimumFractionDigits:2, maximumFractionDigits:2 })+"</td>";
}
}
});
html_t+="</tr>";
html_v+="</tr>";
html+=html_t;
html+=html_v;
$('#gsi_table').html(html);
});
}
/* Your APP Goes here */
function updateGSI(callback) {
$.get("https://stromdao.de/crm/service/gsi/?plz="+plz,function(data) {
var json=JSON.parse(data);
// Validate Signature
if(json.hash!=node.hash(json.data)) {
console.error("Hash check failed");
return;
}
if(json.by!=node.verify(json.signature)) {
console.error("Signer check failed");
return;
}
if(json.by!="0xEe5D4A98Ca5A77b5245Af9F235Eab4CB405be185") {
console.error("Wrong Signer");
return;
}
node.storage.setItemSync("gsi",data);
console.log("GSI Updated");
if(typeof callback != "undefined") {
callback(json);
}
});
}
function storeReading(gsi) {
$('#sessionmeter').hide();
node.mpr().then(function(mpr) {
mpr.readings(node.wallet.address).then(function(o) {
$('#reading').val(o.power);
last_reading=o;
});
});
$('#go').on('click',function() {
$('#go').attr('disabled','disabled');
node.mpr().then(function(mpr) {
mpr.storeReading($('#reading').val()).then(function(o) {
mpr.readings(node.wallet.address).then(function(o) {
$('#go').removeAttr('disabled');
$('#gridmeter').hide();
if(typeof gsi!="undefined") {
gsi_start=JSON.parse(gsi);
gsi_start=JSON.parse(gsi_start.data.gsi);
$('#reading2').val(0);
$('#carmeter').show();
$('#sessionmeter').hide();
$('#go2').on('click',function() {
$('#carmeter').hide();
$('#sessionmeter').hide();
$('#confirmation').show();
var html="";
html+="<tr><th>Beginn</th><td>"+new Date(last_reading.time*1000).toLocaleString()+"</td></tr>";
html+="<tr><td>Zählerstand</td><td>"+last_reading.power+" Wh</td></tr>";
html+="<tr><th>Ende</th><td>"+new Date(o.time*1000).toLocaleString()+"</td></tr>";
html+="<tr><td>Zählerstand</td><td>"+o.power+" Wh</td></tr>";
html+="<tr><td>Bezogene Energiemenge (Netz)</td><td>"+(o.power-last_reading.power)+" Wh</td></tr>";
html+="<tr><td>Autostrom am Netzanschluss</td><td>"+($('#reading2').val())+" Wh</td></tr>";
var delta_t=(o.time-last_reading.time)/3600;
html+="<tr><td>Dauer</td><td>"+(delta_t).toLocaleString(undefined, { minimumFractionDigits:1, maximumFractionDigits:1 })+" Stunden</td></tr>";
var start_ee=gsi_start[0];
var ee_val=gsi_start[0].value;
var ee_cnt=1;
$.each(gsi_start,function(a,b) {
if(b.epochtime<last_reading.time) {
start_ee=b;
} else {
if(b.epochtime<o.time) {
ee_val+=b.value;
ee_cnt++;
}
}
});
var ee_prm=0;
if(ee_cnt==0) {
html+="<tr><td>Prämie</td><td>Nicht berechtigt</td></tr>";
} else {
ee_prm=((ee_val/ee_cnt)*($('#reading2').val()/1000))/100;
html+="<tr><td>Prämie</td><td>"+(ee_prm/10000000).toLocaleString(undefined, { minimumFractionDigits:4, maximumFractionDigits:4 })+" €</td></tr>";
}
updateGSI(function(gsi_end) {
$('#sessionmeter').hide();
var receipt={};
receipt.start = {};
receipt.start.gsi=gsi;
receipt.start.time = last_reading.time;
receipt.start.power = last_reading.power;
receipt.end={};
receipt.end.gsi=gsi_end;
receipt.end.time=o.time;
receipt.end.power=o.power;
receipt.value = {};
receipt.value.power=$('#reading2').val();
receipt.value.ee = ee_val;
receipt.value.bonus = ee_prm;
receipt.value.cnt = ee_cnt;
node.storage.setItemSync("gsi",null);
console.log("Raw Receipt to sign",receipt);
$('#confirmation_table').html(html);
$('#go3').click(function() {
$('#sessionmeter').hide();
var msg={};
msg.by=node.wallet.address;
msg.data=JSON.stringify(receipt);
msg.hash=node.hash(msg.data);
msg.signature=node.sign(msg.data);
console.log("Signed Receipt",msg);
$('#confirmed').show();
$('#go4').attr('disabled','disabled');
$('#confirmation').hide();
$.post("https://stromdao.de/crm/service/gsi/receipt/",{json:JSON.stringify(msg)},function(d) {
console.log("Quittance",d);
d=JSON.parse(d);
var html="";
html+="<tr><td>IPFS Hash</td><td>"+d.ipfs_hash+"</td></tr>";
html+="<tr><td>Energy Chain</td><td><a href='https://www.stromkonto.net/?account="+node.wallet.address+"&sc="+d.blg+"' target=_blank>"+d.bc+"</a></td></tr>";
html+="<tr><td>Transaktion</td><td>"+d.tx+"</td></tr>";
$('#confirmed_table').html(html);
$('#donemark').html("Vorgang abgeschlossen");
$('#go4').removeAttr('disabled');
$('#go4').click(function() {
$('#confirmed').hide();
$('#sessionmeter').show();
});
});
});
});
});
} else {
$('#sessionmeter').show();
}
});
});
});
});
$('#gridmeter').show();
$('#sessionmeter').hide();
}
function startSession() {
storeReading();
updateGSI(updateState);
}
function endSession() {
var gsi=node.storage.getItemSync("gsi");
node.storage.setItemSync("gsi",null);
updateState();
storeReading(gsi);
}
function updateState() {
if((node.storage.getItemSync("gsi")!=null)&&(node.storage.getItemSync("gsi")!="null")) {
var gsi = JSON.parse(node.storage.getItemSync("gsi"));
if(gsi.data.time<(new Date().getTime())-8640000) {
$('#start_session').removeAttr('disabled');
$('#end_session').attr('disabled','disabled');
} else {
$('#start_session').attr('disabled','disabled');
$('#end_session').removeAttr('disabled');
}
} else {
$('#start_session').removeAttr('disabled');
$('#end_session').attr('disabled','disabled');
}
}
function app() {
refreshGSI();
$('#meterpointaddress').val(node.wallet.address);
$('#start_session').click(startSession);
$('#end_session').click(endSession);
updateState();
}