Elk M1 + HAI Omnistat 2 - HVAC Runtime Data

TheEther

Member
I've started a little project on a Rasberry Pi to graph some metrics from my ELK.  One of the features I want most is to be able to understand the relationship of HVAC runtime versus ambient temperature outside.  Since I have my Omnistat connected to the ELK I was hoping that there'd be a way to see when the HVAC fan is running when the Omnistat is in Auto Mode (to get runtime per day), but from what I can tell, there is no way to tell.  It's as if the Omnistat does not communicate fan on/off when in auto mode.  I'm using the ELKM1::Control Perl scripts at this time but dont think I can get any more data from my ISY-994i either..
 
I can essentially see the following items from the Omnistat:
ThermostatDataReply: thermostat=2, mode=auto (3), fanmode=auto (0), hold=off, currentTemperature=73, coolingSetPoint=74, heatingSetPoint=68
 
Would love to hear from someone that knows more about this.
 
Thanks!
 
Even if it doesn't directly apply to my situation, I'd be interested in knowing how to obtain accurate runtime data from a HVAC unit with the ELK or ISY.
 
Thanks!
 
With the HAI OmniPro the OmniStat also sends its status: off, cooling, heating. Does the ELK show the status on the keypads or in the programming software? If it does you might just need to modify the perl script.
 
rsw686, you're correct you can "set" those values but apparently there isn't a fan/hvac is running (on) value when the unit is in Auto mode.  Anyone know how to get HVAC runtime from a Elk/Omnistat configuration?
 
The data you are looking for can be found in register 72 (hex 48) which holds the current relay status of the thermostat.  You can find this and all of the other registers available for this thermostat in the Serial Protocol Description document for the Omnistat2 from HAI.  The part that took some digging (for me at least) was to figure out exactly how to interpret the returned values.  I stumbled on some comments in the Omnistat.pm module from MisterHouse.  In that file file you'll find the following:
 
# 0x48: reflects the positions of the control relays on the thermostat.
bit 0: heat/cool bit - set for heat, clear for cool
bit 1: auxiliary heat bit - set for on, clear for off (RC-100, -101, -112 only)
bit 2: stage 1 run bit - set for on, clear for off
bit 3: fan bit - set for on, clear for off
bit 4: stage 2 run bit: set for on, clear for off (RC-112, 120, 121, 122 only)
 
So a returned value of 00110 (12 dec or hex C) means that the thermostat is calling for cool, stage 1 is on and the fan is running.
 
Just use the sendCommand function in ElkM1::Control.pm and request that register.  For example:
$self->sendCommand( 't2012048016A00000000000000000000000000');
 
Then call readMessage and capture the return (in this case "T2")...
$self->readMessage('T2');
 
If thermostat 1 is calling for cool, stage 1 is on and the fan is running, then you'll get a string back like this:
2AT28122480CF700000000000000000000000000009E
 
2A = Elk packet length (see the Elk RS-232 Interface Spec document)
T2 = Elk command for PC to Omnistat via M1
81 = RA (Start/Remote address)
22 = DA (Data length/message type)
48 = Data (register 48 in our case)
0C = Status of register 48
F7 = Omnistat2 Checksum
00 = pad out 36 hex bytes
00 = future use
9E = Elk Checksum
 
You will also find that the Omnistat2 has existing registers that keep track of the run time in hours on a weekly basis.  It probably won't give you the fidelity you are after, but I at least thought I'd mention it.
 
Back
Top