# Calculating kWh based on changing Watt input

**URL:** https://discourse.nodered.org/t/calculating-kwh-based-on-changing-watt-input/100268
**Category:** Share Your Projects
**Created:** [29 January 2026 09:06 UTC](https://discourse.nodered.org/t/calculating-kwh-based-on-changing-watt-input/100268 "2026-01-29T09:06:41Z")
**Posts on this page:** 4
**Page:** 1

<div class="post-metadata">

### Author: ![juntiedt](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/juntiedt/32/58357_2.png) [@juntiedt](https://discourse.nodered.org/u/juntiedt)
#### Post date: [29 January 2026 09:06 UTC](https://discourse.nodered.org/t/calculating-kwh-based-on-changing-watt-input/100268/1 "2026-01-29T09:06:41Z")

</div>

```auto
// Initialisiere die Variablen beim ersten Start
let lastTime = context.get('lastTime') || Date.now();
let lastPower = context.get('lastPower') || msg.payload; // msg.payload ist die aktuelle Leistung in Watt
let totalEnergyWh = context.get('totalEnergyWh',"persistent") || 0;

let currentTime = Date.now();
let durationHours = (currentTime - lastTime) / (1000 * 60 * 60); // Zeit in Stunden

// Riemann-Summe (Trapezregel): Durchschnitt der Leistung * Zeit
let energyDiffWh = ((lastPower + msg.payload) / 2) * durationHours;

totalEnergyWh += energyDiffWh;

// Werte für den nächsten Durchlauf speichern
context.set('lastTime', currentTime);
context.set('lastPower', msg.payload);
context.set('totalEnergyWh', totalEnergyWh, "persistent");

// Ausgabe in kWh (auf 2 Stellen gerundet)
msg.payload = parseFloat((totalEnergyWh / 1000).toFixed(2));
status(msg.payload);
return msg;

function status(data){
    let time = new Date(Date.now()).toLocaleString('de-DE');
    node.status({ fill: "green", shape: "dot", text: (time + " : " + data + " kWh") }); 
}

```

---

<div class="post-metadata">

### Author: ![Buckskin](https://avatars.discourse-cdn.com/v4/letter/b/b9e5f3/32.png) [@Buckskin](https://discourse.nodered.org/u/Buckskin)
#### Post date: [29 January 2026 18:50 UTC](https://discourse.nodered.org/t/calculating-kwh-based-on-changing-watt-input/100268/2 "2026-01-29T18:50:23Z")

</div>

You could also use the node `node-red-contrib-watt2kwh`

---

<div class="post-metadata">

### Author: ![jw\_te\_r](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/jw_te_r/32/69700_2.png) [@jw\_te\_r](https://discourse.nodered.org/u/jw_te_r)
#### Post date: [29 January 2026 19:19 UTC](https://discourse.nodered.org/t/calculating-kwh-based-on-changing-watt-input/100268/3 "2026-01-29T19:19:21Z")

</div>

Ok, but where is the fun in that?

---

<div class="post-metadata">

### Author: ![Buckskin](https://avatars.discourse-cdn.com/v4/letter/b/b9e5f3/32.png) [@Buckskin](https://discourse.nodered.org/u/Buckskin)
#### Post date: [29 January 2026 19:38 UTC](https://discourse.nodered.org/t/calculating-kwh-based-on-changing-watt-input/100268/4 "2026-01-29T19:38:06Z")

</div>

😁 I agree, I wrote my own watt 2 kW function before using the node but it was there ...
