er liefert nur was in der app angezeigt wird
hab es jetzt per Script berechnet
/**
* -----------------------------------------------------------------------------
* Fronius SolarWeb Autarkiegrad
* -----------------------------------------------------------------------------
* Version: 1.0.0
* Author: Christian Wimmer
* Copyright: (c) 2026 Christian Wimmer
* License: MIT
*
* Description:
* Berechnet den aktuellen Autarkiegrad anhand der kumulierten Monatswerte
* des Fronius SolarWeb Adapters und schreibt das Ergebnis nach:
*
* 0_userdata.0.Fronius.Autarkiegrad
*
* Formel:
* (EnergyDirectConsumption + EnergyBattDischarge)
* / EnergyConsumptionTotal * 100
*
* Voraussetzungen:
* - ioBroker JavaScript Adapter
* - ioBroker Fronius SolarWeb Adapter
*
* Changelog:
* v1.0.0
* - Erste Veröffentlichung
* -----------------------------------------------------------------------------
*/
const VERSION = '1.0.0';
const AUTHOR = 'Christian Wimmer';
const base = 'fronius-solarweb.0.6f41428b-0208-4f01-ab38-c11b57543b46.day';
const dpResult = '0_userdata.0.Fronius.Autarkiegrad';
log(`Fronius Autarkiegrad v${VERSION} gestartet`, 'info');
// Datenpunkt anlegen falls nicht vorhanden
if (!existsState(dpResult)) {
createState(dpResult, 0, {
name: 'PV Autarkiegrad',
type: 'number',
role: 'value.percent',
unit: '%',
read: true,
write: false
});
}
/**
* Liest einen Datenpunkt.
* Existiert der Datenpunkt nicht oder enthält keinen gültigen Wert,
* wird 0 zurückgegeben.
*/
function getValue(dp) {
if (!existsState(dp)) {
return 0;
}
const state = getState(dp);
if (!state || state.val === null || state.val === undefined) {
return 0;
}
const val = parseFloat(state.val);
return isNaN(val) ? 0 : val;
}
/**
* Berechnet den aktuellen Autarkiegrad.
*/
function calculateAutarkie() {
const day = new Date().getDate();
const consumption = getValue(`${base}.EnergyConsumptionTotal.values.${day}`);
const direct = getValue(`${base}.EnergyDirectConsumption.values.${day}`);
const battery = getValue(`${base}.EnergyBattDischarge.values.${day}`);
let autarkie = 0;
if (consumption > 0) {
autarkie = ((direct + battery) / consumption) * 100;
}
autarkie = Math.round(autarkie * 10) / 10;
setState(dpResult, autarkie, true);
log(
`Autarkiegrad: ${autarkie}% | Verbrauch=${consumption} | Direktverbrauch=${direct} | Batterie=${battery}`,
'info'
);
}
// Alle 15 Minuten aktualisieren
schedule('*/15 * * * *', calculateAutarkie);
// Beim Start sofort berechnen
calculateAutarkie();