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(); });