Since 2012 I have had a 2nd generation GE Geospring hybrid water heater. Its basically an electric water heater with a heat pump sitting on top. The idea is that the heat pump is more energy efficient over time but the electric elements are there for quick recovery or in case of heat pump failure. Plus, it was a killer deal with a whole pile of rebates and tax incentives.
The entire system is computer controlled. GE sells a module called The Green Bean for $20, and they provide a node.js API to interface with any supported appliance - including my water heater. It lets you monitor the sensors as well as take control.
Here's my water heater:
So what are the plans? Large household or small? It's amazing how extra people will affect your electric bills.
My goal here is to monitor the water heater and figure out when each element is running. I also want to log current and voltage levels, so I can calculate power P=IV. My water heater sits in my basement adjacent to my furnace. The room has a fresh-air vent for the furnace, so in the winter it is fairly cool. In the summer, the temperature is fairly constant. I wonder if I'll see a difference in the summer versus winter too?
Here's the setup - Raspberry Pi 2 running Raspbian on my wifi network -> USB to green bean module -> RJ45 to water heater controller.
Close up of the 'bean:
So you can actually change when certain elements come on?
Disclaimer: I'm not a programmer, but I am an engineer. I know a lot about hardware and computers, but my software skills have not been maintained. I'm talking way behind state-of-the-art. Hint - my programming language of choice is Tcl. So I want to learn a little more about Node.js since it seems like one of those trendy new-ish languages the skinny jeans kids talk about.
Here's my hackery:
Which looks like this:
I logged one total day, and plotted the tank temperature (logged every 5 minutes, aka 300,000 ms):
So that is pretty much where I'm at. I've been working on this for about a week now, and I've managed to log the tank temperature at a set time interval. Node.js is a non-blocking language - events are supposed to be asynchronous. There's that "subscribe" method (?) that I think is supposed to fire when it detects a change. Polling every 5 minutes is somewhat inefficient. If I could get subscribe to work, I'd throw it all in a database and whip up some kind of snazzy front end. I envision events like "8:03 AM - upper element turned on"... "8:23 AM upper element turned off".
mazdeuce wrote:
So you can actually change when certain elements come on?
Yes, you can influence it by adjusting the set point - the temperature the computer tries to achieve. Or you can go full-manual (my terms, GE calls it "native mode") and do it yourself.
I want to log it for now, but that crafting my own control could be pretty useful. You could have it kick on the electric elements in peak usage times, otherwise force it to heat pump mode when you know there is very little hot water demand. Have different profiles for week days versus weekends. I'm sure you could think of something pretty cool.
Its complicated, but not overwhelmingly so. The elements are controlled by a series of relays, and they're wired in series so that no two things can be on concurrently. These switch one 120v leg. There's one more relay, Double Line Break, that switches the other 120v leg. This line also loops thorough an inductor so the computer can sense current. If the computer senses a current draw outside its parameters (eg, you should pull 2A for the heat pump, or 10A for an electric element) it detects a fault and goes to the next. That current sense value is another thing accessible to the 'bean. You can get data on the tank temp, ambient room temp, elements, voltage, current draw... there's also a bunch of sensors tied to the heat pump that I don't understand.
RossD
UltimaDork
1/31/17 8:34 p.m.
I love this!
You could control a supply air damper to provide hot air towards the heat pump side if the nat gas or LP is cheaper from the furnace side of things.
Can you infer from slope whether it's the heat pump or electric element turning on?
My background (long time ago) dealt with signal processing and I'd be all over trying to figure out what was happening purely from the temperature data.
Here I am slacking off on replacing my dip tube.
My specialty is software and that almost certainly means the other guys whose specialty is also software will be by shortly to fight me to the death over minute disagreements about the content of this post.
If all you're doing is logging, polling probably isn't that 'bad.'
You could go to an event-based mechanism but I would imagine all you would end up with is one busy loop that is constantly polling the temperature sensor and occasionally fires an event (which is just picked up by a worker that is running in the same process), so no real net change in efficiency as it stands.
It feels like (though I haven't checked their code closely) that the greenbean stuff mostly only allows for subscriptions to events when things get outside of a certain range; maybe not so useful for data logging at current but would probably be nice for a "smart controller" like you describe. I would hope you can get events when certain parts of the appliance fire on/turn off, because that'd be super slick for this and would be a definite use for async.
For the datalogger, I would probably not worry too much about async unless you wanted to break this thing up into a collection of modular 'workers' that would all work on the scalar data as you poll it.
As for the front end...
An RPi is a beefy enough sucker that you can just throw the data at something like Thingspeak as you poll it (since you are only polling a few times a day, according to my reading of your post) and put the process to sleep to conserve power until the next poll interval (although this is very hard to do on an RPi; saving power by sleeping is much easier on an ESP8266). Then you could use all the nice frontend/analytics stuff on Thingspeak's website.
If you were going to build a front-end of your own on this thing, you could always just dump into a database and use a separate node.js process to host the webserver and controller for the front-end. Then you'd be using the database as your asynchronous mechanism, which could come in handy later as well (not least because it makes the code much simpler to follow for each module.)
edit: Wow, I made a hash out of this post. Sorry about that, hopefully at least something in here is useful.
Since you can tell when water is going out/in (temp drop) you could set up a parameter for using the heat pump during off peak times and the element only during peak times, is that possible? I'm assuming that's the plan. Also, maybe adjust the switch so that it allows a greater drop in temp during off peak times so that you don't even run the heat pump as much.
Mazdeuce, I can try to infer whats going on, but there's a parameter that actually tells me what's running. I am gathering data and will post that up soon.
My assumptions:
+During periods of water use, the tank temp should fall dramatically.
+During periods of rest, there should be a slow decay
+If the temp rises quickly, an electric element is probably on.
+If the temp rises slowly, the heat pump must be running.
SSSwitch -
I thought asynchronous events would be handy for data compression. I could just log the events in a MySQL database only when things change. I guess I could do that on my own - oversample with polling but make a decision to actually INSERT the record only if its value has changed.
Thanks for the tip on Thingspeak. It sounds like they provide the main idea of what I want to create.
Oh, and yes, you can control things. You can influence it by changing the set point, and you can impose restrictions on the controller (electric only, heat pump only, or let it decide). You can enter native mode too and switch the relays yourself!
Alright - here is last night until just a few minutes ago. I'm still post processing the data manually and plotting in LibreOffice.
Time for an update. I've been analyzing my logs and discovered a few things.
-
The tank temp seems to decay at a rate of 1 deg/hr, or less. My data is foggy because I can't yet tell the difference if there's flow.
-
The heat pump compressor recovers 2 to 6 degrees per hour, at 600 Watts. So that's 100 to 300 Watts / degree.
-
The lower element, nearest the inlet, recovers over 15 degrees per hour, at 4500 W. Also 300 W/deg.
-
In a week of running, the upper element nearest the outlet has not turned on. The lower element has turned on just once.
Next steps: account for flow, so I can get some more accuracy in the above measurements
Good luck with your unit!
I've got a first gen model installed in 2011. The heat pump has died and it turn out that parts and service are somewhat problematic.
Upside of the unit was that I didn't need to run a dehumidifier in tha basement during the summer.
Yeah, the internet is full of horror stories with the blue / tan ones.
Mine hasn't been flawless either, but the GE support has been amazingly good. As in, call a 1-800 number and a person answers, solely to support your water heater. We've had two free service calls and an additional parts only warranty claim. Each fix has clearly been a design upgrade. I'm pretty happy with the unit if that isn't obvious...
I have been trying to get this to work and have been unsuccessful in getting the right combo/versions of npm/node/node-hid/etc working together. Could you give me the list of commands you used to get a successfully working rpi3 image? The git pages leave quite a bit of the exercise up to the reader and I have been unable to get it to work. Actually I had it working, then my card crashed and I have been unable to recreate a working image.
thanks
rearden
In reply to mikeatrpi :
I was wondering if your GreenBean is still humming along and if you've expanded it's capability at all since these original posts? My gen 1 water heater died and I replaced with (after weeks of searching) the last gen module before GE deep six'd it. After getting it I was able to track down a GreenBean module and picked up a RPi in order try to get it connected. It's been 15 years since I touched Linux so it's slow going so far and still working on just trying to get it connected. My goal is to ultimately set it up to interface with Samsung Smartthings.
Steve
LCSTEVE
New Reader
11/10/17 9:06 a.m.
In reply to rearden :
Were you ever able to get it working? I'm in the same boat where no combination I seem to try on my RPi3 works.
Steve
LCSTEVE
New Reader
11/13/17 8:07 a.m.
I've been able to get the GreenBean via RPi to connect to the water heater so far. I've tested some basic scripts reading and changing modes and such. Would anyone be willing to share the JS scripts developed so far to log some of this data or other functionality they've discovered?
Vigo
UltimaDork
11/14/17 11:48 a.m.
I'm trying to understand what the point is of putting a heat pump on a water heater. It will add somewhat less heat to the environment that it's in. I'm not sure how much dehumidifying it will do since it seems to have a very low duty cycle and unless the condensate is captured into the tank or something like that it could just re-evaporate into the environment between compressor cycles. I can see it using a little less energy to maintain temp if it runs at the low end of the 100-300w range posted (since 300 is the same as the traditional element anyway). But it's also more stuff to break.
I mean, it's a neat machine and i'm a sucker for neat machines, but the whole idea of a heat pump on a water heater is news to me and the data in this thread isn't selling me on it. What am i missing?
A heat pump is massively more efficient than a resistive heating element. It will use about 50% of the power of a resistive heating element for the same amount of heat rise in the water.
Vigo
UltimaDork
11/14/17 2:06 p.m.
One sort of wonders then why we don't just take the next step and put the condenser for the central AC system into a water tank. Maybe because the rest of you don't run the ac system 94% of the year..lol
daklein
New Reader
1/29/19 9:59 p.m.
Anyone still playing with their heat pump water heater? I have a gen 1 GE from 2010, and it's still going just fine. (I should be that lucky in the stock market I guess....)
It does a great job dehumidifying the basement (it has a drain line collecting the condensate, and avoiding most of what the dehumidifier would have been running). It is installed in a curtained area next to a relatively inefficient nat gas boiler furnace, so it get the waste heat from that. And I have ducted the electric dryer to it now, so it gets the waste heat and moist air from the dryer, capturing the heat back when it condenses the moist dryer air. I've added some control to make the water heater actively run when there is available heat.
Does anyone have a green bean that they are not using? I can't find them available any more.
For now, I'm using a carbureted approach. I have installed a conventional mechanical mercury thermostat near it, put an extra resistor in series with the tank temperature sensor, and the thermostat shorts the extra resistance when it 'calls for heat'. ie, low temperature the thermostat closes and makes the temperature sensor work like normal, high temperature, the thermostat contacts open and the water heater sensor reads the extra resistance (a 1k pot). The gen 1 version has the nice feature of the control panel able to show some component status data on the screen, for example the temperature sensor readings and resistance. That let me figure out the calibration for the tank temperature sensor: about 9dF per 1kOhm.
When the room air temperature is above a setpoint level, say 65 dF, when the furnace or the dryer comes on, it makes the water heater think the water temp is 5 or 10 deg colder depending on the pot, so it turns on the water heater. I was trying to use a humidity sensor relay board to do the same, but that didn't work well for a couple reasons.