Pembacaan Nilai Total Energi PZEM-017 Kembali Nol (Ter-reset)

Sehari yang lalu, nilai pembacaan pada dashboard plts sangat aneh. Sebuah nilai energi yang terbaca minus. Sampai siang coba saya tunggu tidak berubah, karena saya beranggapan karena proses agregasi nilai yang belum sinkron.

Usut punya usut, ternyata nilai pembacaan energi dari pzem nya ter-reset kembali ke nol lagi. Saya tidak tau sebabnya, seharunya nilai 60.000 masih dalam rentang pembacaan, karena nilai maksimalnya adalah 99.999 kalau tidak salah.

Bisa dilihat pada tangkapan layar diatas bagian energy yang dilingkari merah. Pembacaannya kembali nol, sehingga wajar kalau nilai total akumulatifnya jadi minus.

Belajar dari kasus ini, saya ubah penyimpanan datanya di database. Yang sebelumnya menyimpan nilai raw data begitu saja dari device. Saya olah dulu supaya data yang disimpan adalah data total ditambah selisih. Sehingga walaupun reset, data total yang tersimpan akan tetap bertambah.

Sistem saya pakai Node-RED, jadi proses ini bisa dilakukan di Node-Red. Berikut adalah fungsi perantara untuk koreksi datanya.

if (msg.topic = "pzem/battery/energy"){
    let prev = context.get("prev") || 0;
    let total = context.get("total") || 0;

    let curr = msg.payload.energy;
    let delta = curr >= prev ? curr - prev : curr;

    total += delta;

    context.set("prev", curr);
    context.set("total", total);

    msg.payload.energy = total;
}
return msg;

block fungsi ini berada setelah mqtt in dan sebelum set message payload. Jadi kita modifikasi payload yang akan disimpan di database. Berikut kira kira alurnya

mqtt in --> modif function --> set msg.payload --> database

Sejauh ini tampak berhasil, tinggal kita tunggu jika kejadian serupa muncul. Sejak saat ini, semua flow sejenis, saya terapkan modif function ini sebagai middleware.

30 Oct 2025

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.