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