@merlin123 von dem hier:
//
// Create chart for Tibber data. To be used with flexcharts.
//
// Sample http request for hourly data chart:
// http://localhost:8082/flexcharts/echarts.html?source=script&message=tibber&chart=hourly
//
// Replace 'MY-TOKEN' with your own token:
const ID_TIBBER = 'tibberLink.0.Homes.MY-TOKEN.Consumption';
const IDS = { hourly: '.jsonHourly', // hourly data
daily: '.jsonDaily', // daily data
weekly: '.jsonWeekly', // weekly data
monthly: '.jsonMonthly' // monthly data
};
onMessage('tibber', (httpParams, callback) => {
// Use hourly data in case of invalid chart type
const id = (httpParams.chart && httpParams.chart in IDS ? ID_TIBBER+IDS[httpParams.chart] : ID_TIBBER+IDS['hourly']);
if (existsState(id)) {
evalTibberData(httpParams.chart, id, result => callback(result));
} else {
console.log('Requested state is not available >>'+id+'<<');
callback({title: { left: "center", textStyle: { color: "#ff0000" }, text: "REQUESTED STATE IS NOT AVAILABLE: >>" + id +"<<" }});
}
});
function evalTibberData(myChart, id, callback) {
const tibber = JSON.parse(getState(id).val); // Read tibber data
const chart = {
tooltip: { trigger: "axis", axisPointer: { type: "cross" }},
legend: { show: true, orient: "horizontal", left: "center", top: 25 },
title: { left: "center", text: "Tibber " },
grid: { right: "20%" },
toolbox: { feature: { dataView: { show: true, readOnly: false }, restore: { show: true }, saveAsImage: { show: true }}},
xAxis: [{ type: "category", axisTick: { alignWithLabel: true }, data: []}],
yAxis: [{ type: "value", position: "left", alignTicks: true, axisLine: { show: true, lineStyle: { color: "#5470C6" }}, axisLabel: { formatter: "{value} kWh" }},
{ type: "value", position: "right", alignTicks: true, axisLine: { show: true, lineStyle: { color: "#91CC75" }}, axisLabel: { formatter: "{value} €" }}],
series: [{ name: "Consumption", type: "bar", yAxisIndex: 0, data: []},
{ name: "Cost", type: "bar", yAxisIndex: 1, data: []}]
};
const xAxis = [];
const yAxis0 = [];
const yAxis1 = [];
for (const data of Object.values(tibber)) {
const isHourly = (myChart == 'hourly'); // Hourly data?
const xValue = (isHourly ? new Date(data.from).toLocaleTimeString() : new Date(data.from).toLocaleDateString());
xAxis.push(xValue);
yAxis0.push((data.consumption ? data.consumption.toFixed(2) : 0)); // push 0 on null values
yAxis1.push((data.cost ? data.cost.toFixed(2) : 0)); // push 0 on null values
}
chart.xAxis[0].data = xAxis; // Set chart x-axis data
chart.series[0].data = yAxis0; // Set chart y-values consumption
chart.series[1].data = yAxis1; // Set chart y-values cost
chart.title.text += myChart; // Add type of chart to title
console.log('Evaluation of tibber '+myChart+' data done.');
callback(chart);
}