Hier mal ein Java-Script welches die Daten von aktuellen Monat errechnet und in Datenpunkte schreibt.
// =================== KONFIG ===================
const jsonDP = 'tibberlink.0.Homes.xxxxxxxxxxxx.Consumption.jsonDaily';
const resultCostDP = '0_userdata.0.Tibber.SumUnitCostThisMonth'; // Ziel-DP Kosten (Summe)
const resultConsDP = '0_userdata.0.Tibber.SumConsumptionThisMonth'; // Ziel-DP Verbrauch
const resultPriceDP = '0_userdata.0.Tibber.AvgUnitPriceThisMonth'; // Ziel-DP Durchschnittspreis
// =================== FUNKTION ===================
function calcMonthValues() {
try {
const raw = getState(jsonDP).val;
if (!raw) {
log('Keine Daten im JSON-DP vorhanden', 'warn');
return;
}
const data = JSON.parse(raw);
let sumCost = 0;
let sumCons = 0;
// aktuelles Jahr & Monat bestimmen
const now = new Date();
const currentYear = now.getFullYear();
const currentMonth = now.getMonth(); // 0-basiert (0=Jan, 11=Dez)
data.forEach(entry => {
if (!entry.from) return;
const d = new Date(entry.from);
if (d.getFullYear() === currentYear && d.getMonth() === currentMonth) {
if (entry.totalCost !== undefined && !isNaN(entry.totalCost)) {
sumCost += parseFloat(entry.totalCost);
}
if (entry.consumption !== undefined && !isNaN(entry.consumption)) {
sumCons += parseFloat(entry.consumption);
}
}
});
// Durchschnitt berechnen
let avgPrice = sumCost/sumCons;
// Ergebnisse in DP schreiben
setState(resultCostDP, sumCost, true);
setState(resultConsDP, sumCons, true);
setState(resultPriceDP, avgPrice, true);
log(`Summe unitCost (aktueller Monat): ${sumCost.toFixed(4)} €`, 'info');
log(`Summe consumption (aktueller Monat): ${sumCons.toFixed(3)} kWh`, 'info');
log(`Ø unitPrice (aktueller Monat): ${avgPrice.toFixed(4)} €/kWh`, 'info');
} catch (e) {
log(`Fehler beim Verarbeiten des JSON: ${e}`, 'error');
}
}
// =================== TRIGGER ===================
// 1x direkt beim Start
calcMonthValues();
// bei Änderungen des JSON-DPs neu berechnen
on({id: jsonDP, change: 'any'}, () => {
calcMonthValues();
});
// =================== DATENPUNKTE ANLEGEN ===================
createState(resultCostDP, 0, {
name: 'Summe unitCost aktueller Monat (Tibber)',
type: 'number',
unit: '€',
role: 'value'
});
createState(resultConsDP, 0, {
name: 'Summe Verbrauch aktueller Monat (Tibber)',
type: 'number',
unit: 'kWh',
role: 'value'
});
createState(resultPriceDP, 0, {
name: 'Durchschnitt unitPrice aktueller Monat (Tibber)',
type: 'number',
unit: '€/kWh',
role: 'value'
});