casa-corrently
Version:
Casa Corrently EcoSystem - Standalone and Node-RED
60 lines (55 loc) • 3.71 kB
JavaScript
module.exports = async function(payload,meterinfo,config,productionData) {
if(typeof payload.values.energy !== "undefined") {
payload.values.energy_wh = Math.round(payload.values.energy/10000000);
}
if(typeof payload.values.energyOut !== "undefined") {
payload.values.energyOut_wh = Math.round(payload.values.energyOut/10000000) - config.firstReadingOut;
}
if(typeof productionData.values !== "undefined") {
if(productionData.values.energy < productionData.values.energyOut) {
productionData.values.energy = productionData.values.energyOut;
}
payload.values.energyProd = productionData.values.energy;
payload.values.energyProd_wh = Math.round(payload.values.energyProd/10000000) - config.firstReadingProd;
if(config.isProduction == false) {
meterinfo.messkonzept = "Messkonzept 2";
payload.values.energySelf_wh = (payload.values.energyProd_wh - config.firstReadingProd) - (payload.values.energyOut_wh - config.firstReadingOut);
} else {
meterinfo.messkonzept = "Messkonzept 1";
payload.values.energySelf_wh=0;
payload.values.energyOut_wh = payload.values.energyProd_wh;
}
payload.values.consumption_wh = payload.values.energySelf_wh + payload.values.energy_wh;
} else { payload.values.energySelf_wh = 0; payload.values.consumption_wh = payload.values.energy_wh;}
if(typeof payload.values.power1 !== "undefined") {
payload.values.power1_w = Math.round(payload.values.power1/1000);
payload.values.power2_w = Math.round(payload.values.power2/1000);
payload.values.power3_w = Math.round(payload.values.power3/1000);
}
if(typeof payload.values.power !== "undefined") {
payload.values.power_w = Math.round(payload.values.power/1000);
}
if((typeof meterinfo !== "undefined") && (meterinfo !== null) && (typeof meterinfo.yearlyBasePrice !== 'undefined')) {
if(typeof meterinfo.lastMeasurementTime == 'undefined') meterinfo.lastMeasurementTime = new Date().getTime();
console.log("Debug - Fabian",meterinfo);
let deltayears = (meterinfo.lastMeasurementTime - meterinfo.firstMeasurementTime) / (365*86400000);
console.log("Debug - DeltaYears",deltayears);
payload.values.baseCosts = Math.round(meterinfo.yearlyBasePrice * deltayears * 100)/100;
payload.values.amortization = Math.round(config.amortization * deltayears * 100)/100;
payload.values.energyCost = Math.round(meterinfo.energyPriceWh * (payload.values.energy_wh-config.firstReading)*100)/100;
payload.values.energyRevenue = (Math.round(config.revenue * payload.values.energyOut_wh)/1000);
payload.values.energyIncome = payload.values.energyRevenue;
payload.values.energySavingsSelf = Math.round((meterinfo.energyPriceWh-(config.revenue/1000)) * payload.values.energySelf_wh *100)/100;
payload.values.energyRevenue += payload.values.energySavingsSelf;
payload.values.energySpendings = payload.values.energyCost + payload.values.baseCosts + payload.values.amortization;
payload.values.incomeSaldo = Math.round((payload.values.energyRevenue - ( payload.values.energyCost + payload.values.baseCosts + payload.values.amortization ))*100)/100;
payload.values.energySaldo_wh = (payload.values.energyOut_wh - payload.values.energy_wh);
payload.values.yield = Math.round(((payload.values.energyRevenue / payload.values.energySpendings)-1)*100);
payload.values.energyPrice_kwh = Math.round((payload.values.incomeSaldo / (payload.values.consumption_wh/1000))*10000)/-10000;
payload.meterinfo = meterinfo;
}
// map .values to .latest
payload.latest = payload.values;
delete payload.values;
return payload;
};