Jonathan Oxer
[Blog]
Blog > Hacking a Rinnai hot water system
>> Hacking a Rinnai hot water system
Tue, May 13th 12:12am 2008: Tech Toys
We have a Rinnai Infinity hot water system at home (you know, the ones with a keypad where you set the water temperature and it's heated on-demand to exactly that temp instead of being pre-heated and stored in a tank) and after seeing some of my hardware hacking trickery a mate who works at Rinnai got me an extra controller to hack. The easy part turned out to be connecting up the buttons to an Arduino board so I could then use ser2net to expose the Rinnai controller as a network socket. It takes all of about 3 minutes, so I even made a dodgy little video of the process using my digital camera: (YouTube link: Hacking a Rinnai hot water system for home automation) Then, just because it seemed kinda cool, I made a crude web interface by taking a photo of the actual controller and sticking an imagemap over the top so we can pull it up on the TV. With the browser in kiosk mode it's a bit spooky having a monster-size controller on the screen that actually works when you "click" the buttons:
Then I went from macro to micro and did a version scaled to fit the screen on my Nokia E61 phone, so I can pull up the water controller on my phone and set the temperature.
The next step is going to be the tricky bit: reading which segments in the display are illuminated and using a lookup table to figure out what the temperature is currently set to, so that I can make the LED display on the web interface accurately show the current temperature setting. At first I thought this would be pretty trivial because it's just a 2-digit common-anode 7-segment display module, and I thought all I'd have to do is read the level off the cathode of each segment. I scratched my head for a bit when I got unpredictable results until I realised that the display controller is multiplexing its outputs so each segment is turned on for somewhat less than 50% of the time: the numbers look static to us mere humans whose eyes can't update faster than about 20 times / second, but to the Arduino trying to track it at the speed of electrons it's like "hey, it's on... no, it's off... nope, on again ... off ... on ... hey, what the hell's going on around here?" every few milliseconds.
It'll take a little bit of jiggery-pokery in both hardware and software to make the Arduino understand the multiplexing but nothing too difficult now I know why it's happening.
We have a Rinnai Infinity hot water system at home (you know, the ones with a keypad where you set the water temperature and it's heated on-demand to exactly that temp instead of being pre-heated and stored in a tank) and after seeing some of my hardware hacking trickery a mate who works at Rinnai got me an extra controller to hack. The easy part turned out to be connecting up the buttons to an Arduino board so I could then use ser2net to expose the Rinnai controller as a network socket. It takes all of about 3 minutes, so I even made a dodgy little video of the process using my digital camera: (YouTube link: Hacking a Rinnai hot water system for home automation) Then, just because it seemed kinda cool, I made a crude web interface by taking a photo of the actual controller and sticking an imagemap over the top so we can pull it up on the TV. With the browser in kiosk mode it's a bit spooky having a monster-size controller on the screen that actually works when you "click" the buttons:
Then I went from macro to micro and did a version scaled to fit the screen on my Nokia E61 phone, so I can pull up the water controller on my phone and set the temperature.
The next step is going to be the tricky bit: reading which segments in the display are illuminated and using a lookup table to figure out what the temperature is currently set to, so that I can make the LED display on the web interface accurately show the current temperature setting. At first I thought this would be pretty trivial because it's just a 2-digit common-anode 7-segment display module, and I thought all I'd have to do is read the level off the cathode of each segment. I scratched my head for a bit when I got unpredictable results until I realised that the display controller is multiplexing its outputs so each segment is turned on for somewhat less than 50% of the time: the numbers look static to us mere humans whose eyes can't update faster than about 20 times / second, but to the Arduino trying to track it at the speed of electrons it's like "hey, it's on... no, it's off... nope, on again ... off ... on ... hey, what the hell's going on around here?" every few milliseconds.
It'll take a little bit of jiggery-pokery in both hardware and software to make the Arduino understand the multiplexing but nothing too difficult now I know why it's happening.[ Back to top ]
