PelletMon - IoT for central heating / boiler.

Monitor pellet boiler status via CAN bus, measure fuel usage - RE + engineering = profit !

Similar projects worth following


Our old boiler was previously connected to my IoT system. After replacing the boiler with a new one, we no longer have this option. So why not introduce it to a new boiler?


The goal of the project is to reverse engineer the CAN communication of the new boiler and expose real-time data to the IoT. By the way, the HC-SR04 sensor will measure the fuel level in the tank.


The project will have its own PCB. Communication with the outside world will be carried out using ESP32 and fuel level measurement using HC-SR04. The SN65HVD230 chip will be used as the CAN transceiver. The software will be written in the Arduino environment in C ++ and will be powered with my IoT framework - ksIotFrameworkLib.

  • Latest changes

    h4rdc0der06/22/2023 at 18:42 0 comments

    CAN issues have been resolved over the last few months.

    It turned out that the problem was in the software and was related to CAN frame collisions.
    The issue has been eliminated and I have returned to the native TWAI interface.

  • Version 2: PCBs arrived & assembled

    h4rdc0der02/06/2023 at 20:41 0 comments

    A few days ago, the PCBs arrived. Soldering under the microscope was even pleasant, however, the ESP32 module did not want to cooperate. After a few hours, however, everything worked and the board started working.

    Currently, the module has been permanently mounted and has replaced the previous version.

    It is worth noting that due to problems with the TWAI component, I was forced to write my own CAN handling library (based on other available on the network).

    More details about the library soon :)

  • Version 2B

    h4rdc0der01/11/2023 at 20:38 0 comments

    I'm currently working on upgraded board version, which features:

    • Decreased power consumption
    • ESD protection / EMC improvements
    • Better connectors

    I've removed fuel sensor support (never used).

  • Elektronika Praktyczna spotted my project!

    h4rdc0der11/25/2022 at 23:06 0 comments

    I've discovered this small note in Elektronika Praktyczna written in polish about PelletMon project (11/2021). They've previously spotted another project - Energy Monitor. It's always good to read about own project in brand press. Thanks!Brak dostępnego opisu zdjęcia.

  • Everything now runs on VideNet protocol

    h4rdc0der07/30/2021 at 05:47 0 comments

    Great success!

    Few days ago I've finished CAN component that is able to handle VideNet protocol. Adding new request takes only few lines of code.

    Currently supported features are:

    • Ability to turn on / turn off controller.
    • Ability to read / set hot water mode.
    • Ability to read / set central heating mode.
    • Ability to read kettle temperature.
    • Ability to read hot water temperature.
    • Ability to read burner power (%).
    • Ability to read fuel usage sum (kg).

    Special thanks going to:

  • Introducing remote control

    h4rdc0der07/09/2021 at 07:40 0 comments

    I've found Vide-Net protocol specification (VideNet is an original RC module). With that knowledge remote control is now possible!

  • Fixed and working!

    h4rdc0der03/06/2021 at 10:36 0 comments

    After removing the terminating resistor, the problems with the boiler disappeared. The device has been working continuously for several days without any problems.

    Final mounting - transparent enclosure, SMA antenna:

  • Bad things happened

    h4rdc0der03/03/2021 at 21:31 0 comments

    It looks like with 120 ohm resistor, I have introduced excessive termination that led to errors in CAN transmissions. I had to unsolder termination resistor from my board and trim my cables to work properly as CAN stub.

    Enclosure arrived today, so I have mounted everything inside.

    It requires more testing this time, but I hope that issue is fixed.

  • Testing

    h4rdc0der02/28/2021 at 20:44 0 comments

    Today I prepared the cables and prototype software to retrieve data, then connected everything to the heating boiler CAN-bus and communication with MQTT worked properly.

    Example dasbhoard:

    Testing connection and current consumption.

    What's next?

    I need to route everything properly, get an enclosure and add fuel level sensor. It will take few days as I have to order cable organizers etc.

  • Tests done, everything works!

    h4rdc0der02/26/2021 at 12:56 0 comments

    Before connecting my device to the boiler, I made sure that all interfaces were working. 

    There was a problem with the R1 resistor, which made the CAN bus not working, but it turned out that it was enough to correct the weld. There is working two-way communication between the two PCBs. The fuel level sensor leads have also been tested and everything is fine.

    Now all that's left is programming and installation on the boiler :)

View all 15 project logs

Enjoy this project?



nuxeh wrote 03/13/2024 at 19:37 point

Can I just say that this is one of the most beautiful PCB designs i've ever seen

  Are you sure? yes | no

h4rdc0der wrote 03/13/2024 at 20:09 point

Thank you :) Still some room for improvement :)

  Are you sure? yes | no

Piotr Antosik wrote 02/07/2024 at 18:23 point

Hi, project repo is archived? GH show 404 error

  Are you sure? yes | no

h4rdc0der wrote 02/08/2024 at 07:29 point

ATM yes, github repo is hidden as I don't like ppl to copy this board without consideration of things like the need of isolation or lack of CMC for filtering. I plan to respawn the repository with autoreleased binaries soon.

  Are you sure? yes | no

imsa8800 wrote 04/29/2023 at 20:19 point

great work !
I have built it and it did work out of the box. (NodeMCU Board + CAN Module).

Have now integratet my kettle with MQTT into loxone automation !!

Greetings from Austria

  Are you sure? yes | no

h4rdc0der wrote 06/22/2023 at 18:40 point

Cool, happy to see that it's useful for people!! Greetings from Poland.

  Are you sure? yes | no

piomark wrote 01/05/2023 at 22:03 point

Hi, first of all great project!
How is SR04 sensor working? I was trying to use same sensor type for pellet level monitoring as well but unfortunately it's not that stable. It looks like when the level goes down uneven surface of the pellets, and the container walls, are causing some interference which in turn leads to incorrect readings. I've tried VL53L0 but it burned after a while :(

  Are you sure? yes | no

h4rdc0der wrote 01/12/2023 at 09:23 point

Hi, thanks a lot :).

When it comes to measuring the pellet level using an ultrasonic sensor, it turned out that the implementation was unnecessary. Why? Simply, because there's enough info transmitted over CAN bus.

What's more, there are no resistors and ESD protection for the pins on the board. It is therefore possible that long wires would induce transmission line phenomena, which in itself could cause problems.

The new revision of the board does not have outputs for the HC-SR04 at all.

  Are you sure? yes | no

Krzysztof wrote 01/13/2023 at 11:05 point

How does your furnace measure the level of pellet? Mine only has "fuel low" ultrasonic sensor (binary info, either "over reserve" or "under reserve"), but when it detects low level, it is configured to interpret that as "10kg left" and then just counts down usage based on feeder.

  Are you sure? yes | no

h4rdc0der wrote 01/13/2023 at 19:12 point

There's no "real"/sensor based measurement, it just knows how long the feeder was active. Then (using some HMI input) is simply able to calculate real usage.

  Are you sure? yes | no

helge wrote 06/09/2022 at 09:26 point

The large corporate logo suggests this is a sponsored project.

  Are you sure? yes | no

h4rdc0der wrote 06/09/2022 at 09:44 point

You mean JLC logo or Viteco? Not sponsored in any way :)

  Are you sure? yes | no

Michael Lytzen Hansen wrote 05/27/2022 at 18:36 point

Cool project -I have just started on a similar one :)

Where did you find the VideNet protocol specification?

  Are you sure? yes | no

h4rdc0der wrote 06/09/2022 at 09:04 point


At first I have tried to sniff CAN packets. The device outputs some data, but it's only raw Module-To-Module data. You can read some interesting info from that, but no control over parameters is possible. To reverse engineer communication, you must pair original VideNet module.

I've found research done by Kem Klattrup at This repository is linked in firmware on pelletmon's github. There is almost complete protocol specification ( I've talked with Kem to exchange some info about my kettle specification, because there are little differences in handling error (alarm) messages.

  Are you sure? yes | no

Michael Lytzen Hansen wrote 06/19/2022 at 16:30 point

Super - Thank you!

  Are you sure? yes | no

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates