PuLogger - Cheap DIY monitoring and control for pumidors.
Posted: Sat Dec 16, 2017 9:20 pm
tl;dr is that I'm developing a free open-source GUI for Windows (and probably Linux) that allows users to monitor temp/humidity, log T/RH over time and produce graphs easily, provides alarm functionality for too-high/too-low values and (in future) controlled heating. The devices themselves use inexpensive parts that are readily available and only require basic soldering skills to assemble.
EDIT: Pedant has come across these base stations and sensors which provide most of the functionality I had planned for PuLogger (notably a smartphone app, webserver functionality and phone/email alerts for alarm conditions) and at $80 + $13 per field device, it's nowhere near prohibitively expensive.
Given that humidity and (with a little testing) temperature can be controlled passively and that there seems to be a robust alarm system, this might be an outright superior solution.
Actually, turns out these guys are massive ballbags who brick old hardware to force new purchases.
Pulogger is dead - long live pulogger. (Since I've had questions about this, no, it's not actually - check this blog post)
So I've had a project in the works for the last few weeks that might be of interest to fellow pu'er addicts enthusiasts. I want to store my pu in a reasonably warm and humid environment, without having to monitor it too frequently, but also without risking coming back to a pile of compost and mildew. To that end I've been trying to sort out a wireless temperature/humidity-control system with computer connectivity and alarms, and this is what I've come up with.
For reference, here's my current setup. Later on I'll be mounting the controller, humidity pack and sensor permanently (and adding a sensor so I can measure at the top and bottom of the pumidor.


If you have any questions or suggestions (about features or if you think something could be done better), throw them out here.
The bare-bones GUI currently looks like this

And here's an example of some graphs produced in plot.ly in a couple of minutes (disturbance resulted from opening the door to grab some tea. Eventually I'd like to incorporate live graphing with something like Grafana, but that's pretty high-cost and low-priority at the moment.


The base controller and satellites are Arduino Nano/Pro Mini microprocessors running nRF24L01+ radio modules and should be easily capable of running for long periods on 2xAA batteries. The base station interfaces with a PC via USB serial connection and sends data to the PC as CSVs. Software on the PC interprets the CSVs and provides monitoring and alarm functionality through a GUI, and generates CSV datalogs (for easy import into Excel/plot.ly/etc).

The GUI is bare-bones at the moment and, but will eventually be given the UXD treatment and include a system-tray widget which shows temperature, humidity and alarm status, and also produces an audible alarm. Variables such as temp setpoint, alarm setpoints, number of satellites and low temp/humidity alarm grace periods will eventually be user-settable via the GUI (rather than in the device source code). All code is C++.
The base sends an alarm if any satellite fails to check in after a set period of time (probably around 15-60 minutes in practice) and the PC software will (in future) generate an alarm if it doesn't receive a communication from the base in a set period of time - this provides timely notification in the event of a satellite losing power, suffering from radio inteference, or locking up.
Temperature and humidity measurement is provided by a Bosch Sensortec BME280 - cheaper sensors are available, but the BME280s are very fast and very accurate (for our needs) and I'm still waiting on a couple of the cheaper sensors that are supposed to be decent.
Active temperature control is not currently implemented, but in future the system will control a small heating pad (15-25W for a minifridge) using a PID algorithm. Currently, I'm using always-on heating that happens to provide just the right amount of heat to hold a steady 28degC.
Humidity control was initially going to be controlled by the controller, but it's hard to implement a digitally-controlled humidification system and it turns out there's a much better passive option (salt packs, which I'll cover in another post).
If anyone's interested in building their own, here are the Git repos for the devices and the GUI - core monitoring functionality is there (minus a visual indicator for setpoint alarms, which I'll be implementing tonight), so it's developed enough to be useful. The base and satellites share code and are given a unique device ID (0 for base, 1-5 for the satellites). This is stored in the first byte of persistent EEPROM memory, and set using utilSetDeviceID (load utility sketch to device, wait until the desired serial message is seen, reset and, within 20 seconds of reset, download the regular sketch). The software for device and PC will always be free, open-source and available as long as GitHub is.
(With Victoria's blessing) I'm considering offering parts kits and/or pre-soldered setups for sale to recoup some of the development costs. This will depend entirely on y'all's level of interest and what people would be willing to pay for something like this (bearing in mind that it would be a DIY kit with the soldering done and access to technical support, not a polished commercial product). You'd likely have to sort out a housing yourself, if desired. Reach out if that sounds like something you'd want.
Code included from the following open-source works:
TMRh20's RF24 libraries - http://tmrh20.github.io/RF24/index.html
colin80's EEPROMAnything - https://github.com/collin80/EEPROMAnything
Manash Kumar Mandal's SerialPort - https://blog.manash.me/serial-communica ... 8710186498
BoschSensortec's BME280 driver library - https://github.com/BoschSensortec/BME280_driver
EDIT: Pedant has come across these base stations and sensors which provide most of the functionality I had planned for PuLogger (notably a smartphone app, webserver functionality and phone/email alerts for alarm conditions) and at $80 + $13 per field device, it's nowhere near prohibitively expensive.
Given that humidity and (with a little testing) temperature can be controlled passively and that there seems to be a robust alarm system, this might be an outright superior solution.
Actually, turns out these guys are massive ballbags who brick old hardware to force new purchases.
Pulogger is dead - long live pulogger. (Since I've had questions about this, no, it's not actually - check this blog post)
So I've had a project in the works for the last few weeks that might be of interest to fellow pu'er addicts enthusiasts. I want to store my pu in a reasonably warm and humid environment, without having to monitor it too frequently, but also without risking coming back to a pile of compost and mildew. To that end I've been trying to sort out a wireless temperature/humidity-control system with computer connectivity and alarms, and this is what I've come up with.
For reference, here's my current setup. Later on I'll be mounting the controller, humidity pack and sensor permanently (and adding a sensor so I can measure at the top and bottom of the pumidor.


If you have any questions or suggestions (about features or if you think something could be done better), throw them out here.
The bare-bones GUI currently looks like this

And here's an example of some graphs produced in plot.ly in a couple of minutes (disturbance resulted from opening the door to grab some tea. Eventually I'd like to incorporate live graphing with something like Grafana, but that's pretty high-cost and low-priority at the moment.


The base controller and satellites are Arduino Nano/Pro Mini microprocessors running nRF24L01+ radio modules and should be easily capable of running for long periods on 2xAA batteries. The base station interfaces with a PC via USB serial connection and sends data to the PC as CSVs. Software on the PC interprets the CSVs and provides monitoring and alarm functionality through a GUI, and generates CSV datalogs (for easy import into Excel/plot.ly/etc).

The GUI is bare-bones at the moment and, but will eventually be given the UXD treatment and include a system-tray widget which shows temperature, humidity and alarm status, and also produces an audible alarm. Variables such as temp setpoint, alarm setpoints, number of satellites and low temp/humidity alarm grace periods will eventually be user-settable via the GUI (rather than in the device source code). All code is C++.
The base sends an alarm if any satellite fails to check in after a set period of time (probably around 15-60 minutes in practice) and the PC software will (in future) generate an alarm if it doesn't receive a communication from the base in a set period of time - this provides timely notification in the event of a satellite losing power, suffering from radio inteference, or locking up.
Temperature and humidity measurement is provided by a Bosch Sensortec BME280 - cheaper sensors are available, but the BME280s are very fast and very accurate (for our needs) and I'm still waiting on a couple of the cheaper sensors that are supposed to be decent.
Active temperature control is not currently implemented, but in future the system will control a small heating pad (15-25W for a minifridge) using a PID algorithm. Currently, I'm using always-on heating that happens to provide just the right amount of heat to hold a steady 28degC.
Humidity control was initially going to be controlled by the controller, but it's hard to implement a digitally-controlled humidification system and it turns out there's a much better passive option (salt packs, which I'll cover in another post).
If anyone's interested in building their own, here are the Git repos for the devices and the GUI - core monitoring functionality is there (minus a visual indicator for setpoint alarms, which I'll be implementing tonight), so it's developed enough to be useful. The base and satellites share code and are given a unique device ID (0 for base, 1-5 for the satellites). This is stored in the first byte of persistent EEPROM memory, and set using utilSetDeviceID (load utility sketch to device, wait until the desired serial message is seen, reset and, within 20 seconds of reset, download the regular sketch). The software for device and PC will always be free, open-source and available as long as GitHub is.
(With Victoria's blessing) I'm considering offering parts kits and/or pre-soldered setups for sale to recoup some of the development costs. This will depend entirely on y'all's level of interest and what people would be willing to pay for something like this (bearing in mind that it would be a DIY kit with the soldering done and access to technical support, not a polished commercial product). You'd likely have to sort out a housing yourself, if desired. Reach out if that sounds like something you'd want.
Code included from the following open-source works:
TMRh20's RF24 libraries - http://tmrh20.github.io/RF24/index.html
colin80's EEPROMAnything - https://github.com/collin80/EEPROMAnything
Manash Kumar Mandal's SerialPort - https://blog.manash.me/serial-communica ... 8710186498
BoschSensortec's BME280 driver library - https://github.com/BoschSensortec/BME280_driver