Konfiguration
let targetUrl = „http://deine-server-ip.de“; Die URL, die aufgerufen werden soll
let log = 1; Auf 1 setzen, um Ausgaben in der Konsole zu sehen
let energyReturnedWs = 0.0;
let energyConsumedWs = 0.0;
function callExternalUrl(type, amount) {
let url = targetUrl + type + „&value=“ + JSON.stringify(amount);
if (log > 0) print(„Rufe URL auf: “, url);
Shelly.call(„HTTP.GET“, { url: url }, function(res, err, msg) {
if (err !== 0) print(„Fehler beim Aufruf: “, msg);
});
}
function timerHandler() {
let em = Shelly.getComponentStatus(„em“, 0);
if (typeof em.total_act_power !== 'undefined') {
let power = em.total_act_power;
Energieintegration (Leistung * 0.5 Sekunden)
if (power >= 0) {
energyConsumedWs += power * 0.5;
} else {
energyReturnedWs -= power * 0.5;
}
Prüfung auf volle Wattstunde (Bezug)
let fullWhConsumed = Math.floor(energyConsumedWs / 3600);
if (fullWhConsumed > 0) {
if (log > 0) print(„1 Wh Bezug erkannt!“);
callExternalUrl(„consumed“, fullWhConsumed);
energyConsumedWs -= fullWhConsumed * 3600; Rest behalten
}
Prüfung auf volle Wattstunde (Einspeisung)
let fullWhReturned = Math.floor(energyReturnedWs / 3600);
if (fullWhReturned > 0) {
if (log > 0) print(„1 Wh Einspeisung erkannt!“);
callExternalUrl(„returned“, fullWhReturned);
energyReturnedWs -= fullWhReturned * 3600; Rest behalten
}
}
}
Timer alle 500ms ausführen
Timer.set(500, true, timerHandler);
Optional: Endpoint behalten, um aktuellen Stand im RAM abzufragen
HTTPServer.registerEndpoint(„energy_status“, function(req, res) {
res.code = 200;
res.body = JSON.stringify({
current_consumed_ws: energyConsumedWs,
current_returned_ws: energyReturnedWs
});
res.send();
});