Datalogging on a Woodstove
By request, I have been putting together a logging and notification system for a Woodmaster wood burning stove. This has turned out to be a relatively straightforward task, though there have been a few initial hiccups. There are plenty of off-the-shelf data logging solutions that would work without much fuss, but I feel that this is an excellent opportunity to get familiar with the IoT tools I have laying around.
This particular stove was initially equipped with a Dixell XR30C temperature controller, which is pretty straightforward to set up and use, but lacks the ability to communicate with my monitoring system directly. Fortunately, the XR30CX is pretty much a drop-in replacement (Pinout is the same, control face is different but similar) and features the ability to communicate via Modbus-RTU. To facilitate this, the device needs an XJ485CX serial interface. This gets us halfway there. Connect this two wire RS-485 serial interface to a $5 USB RS-485 serial interface, and we're there! Now the device can speak to pretty much anything with a USB port. For this stove, I've installed a Raspberry Pi 3 Model B.
The stove itself doesn't offer a ready solution to power the pi, so I clipped the mains power circuit for the temperature controller and attached a 120v plug in parallel. Hacky, sure, but there's enough lee-way in the power here for a 2.5a Raspberry Pi power supply. It's crucial that the power supply be able to put out enough power, as initial testing with a cheaper power-supply led to failures of the USB. If your serial interface draws more power than your pi can supply, the Pi's OS may shut off access to the USB entirely. Now that everything is wired up, the stove's control panel can be screwed back into place. Fortunately, this does not seem to affect the Pi's ability to communicate over wifi. This stove sits approximately 150 feet from the nearest access point, so while it is not particularly fast, it is generally more than sufficient for my needs.
At this point, you can test the Pi and Temperature Controller's ability to communicate. I have leveraged pymodbus extensively, which comes with a handy REPL for interacting with RS-485 devices.
pymodbus.console serial --port="/dev/ttyUSB0" client.read_holding_register unit=42 address=256
Assuming everything works, this will return the temperature reported from Probe 1 on the stove.