Clarification needed for Omnistat2 Serial Protocol.

123

Senior Member
Can someone clarify the operation and behaviour of the following Omnistat2 registers:

#2 System type
My HVAC system consists of a Gas Furnace and an AC unit. Register #2 returns a value of "1". What does that mean because the documentation for this register is a bit unclear:
(0/1=Heat/Cool-Auto, 4/5= Heat/Cool-Manual, 12/13=Heat only, 20=Cool only, odd=Fan on with heat, even=Fan off with heat)
Here's my interpretation: it is saying my system is "Heat/Cool-Auto"and "Fan on with Heat". If it indicated "0" then it would mean "Heat/Cool-Auto" and "Fan off with Heat". Correct?
I figured ths one out; it works as per my description.
#8 Omni Version
My Omnistat2's firmware version "1.03D". When I read register #8 I get "1". How do I get the full firmware version?

#16 System run time, current week - hours
#17 System run time, last week - hours

Both of these registers always return "0". This is unusual given that registers 152-155 (Hours HVAC used in Week 0-3) return correct values. Why do #16 and #17 return zero?

#73 Model Number
My RC-2000 returns "120". What is the model number for an RC-1000?

#142 Selective message enable/disable
I get a value of "255". Is this a master on/off for messages (255=off?) or do different values control the display of specific messages? I'll reverse-engineer this one ...

#158 Enable/disable individual temp sensors
I get a value of "1". What values control which sensors? I assume that Bit0 will control one sensor, Bit1 another sensor, etc. Another one for reverse-engineering ...

#172 - #181 STRING ASCII display messages
Is it possible to read the contents of these registers? When I request the contents, I do not get a valid reply from the thermostat. Could it be that the reply format is substantially different from other registers?
 
I forwarded your questions to our Omnistat2 expert, but he has been out of town this past week. He should be in tomorrow, so he should respond then. Sorry for the delay.
 
Sorry for the delay but the nature of your questions required me to be at the office to answer accurately.

#8 Omni Version
This is a backwards (RC80) register than never was fully updated. It will currently only display 1 for versions 1.XX+.

#16 System run time, current week - hours
#17 System run time, last week - hours
This register was reserved for backwards compatibility. Since register 152-155 have the same information, these registers were not implmented.

#73 Model Number
110 = RC1000
120 = RC2000
130 = RC3000 (Has not been released yet)

#142 Selective message enable/disable
The bits should align with the listing order on the screen. Time/Date is BIT0

#158 Enable/disable individual temp sensors
The bits should align with the listing order on the screen. Internal Sensor is Bit0. The significant nibble determines what type of sensor it is (1 = indoor), and the LSB nibble is enabled or not.

#172 - #181 STRING ASCII display messages
You cannot read strings. I do not see a reason for this since the communicating device has to sent the string, thus should be aware what the string is.

Let me know if you have any more questions,
Ryan
 
Ryan,

Thank you for the detailed clarification. I had suspected the message registers might be "write-only"; you've saved me time and effort.

Here's another question:

The description for registers 18, 19, and 20 (Temperature Setback for various energy levels) indicates: "in Fahrenheit". Is the register's value in Omnitemp units (like other temperature-related registers) or truly in Fahrenheit units?


Here are two other items I've encountered whose documentation should be enhanced in a future release of the protocol:

#4 Calibration offset
This register holds a an Omnitemp value that is 100 times larger than the actual offset. For example, my RC-2000 has a calibration offset of -0.25 C. Register #4 contains an Omnitemp value of 30 which translates into -25 C and must be divided by 100 to arrive at the actual offset of -0.25 C.

#5 Low Cool Limit
#6 High Cool Limit
#59 Cool Setpoint
#60 Heat Setpoint

The description for these register description reads as follows: "51-91 Omnitemp units". May I suggest the following: "51-91 F. In Omnitemp units". The first time I read the description I thought the register would contain an Omnitemp value between 51 and 91. In contrast, register 68's description is unambiguous and simply indicates "in Omnitemp".
 
Ryan,

Thank you for the detailed clarification. I had suspected the message registers might be "write-only"; you've saved me time and effort.

Here's another question:

The description for registers 18, 19, and 20 (Temperature Setback for various energy levels) indicates: "in Fahrenheit". Is the register's value in Omnitemp units (like other temperature-related registers) or truly in Fahrenheit units?


Here are two other items I've encountered whose documentation should be enhanced in a future release of the protocol:

#4 Calibration offset
This register holds a an Omnitemp value that is 100 times larger than the actual offset. For example, my RC-2000 has a calibration offset of -0.25 C. Register #4 contains an Omnitemp value of 30 which translates into -25 C and must be divided by 100 to arrive at the actual offset of -0.25 C.

#5 Low Cool Limit
#6 High Cool Limit
#59 Cool Setpoint
#60 Heat Setpoint

The description for these register description reads as follows: "51-91 Omnitemp units". May I suggest the following: "51-91 F. In Omnitemp units". The first time I read the description I thought the register would contain an Omnitemp value between 51 and 91. In contrast, register 68's description is unambiguous and simply indicates "in Omnitemp".

Thanks for the notification of some typos. i will make these changes for the next revision.

Register 18-20 are indeed in Fahrenheit. Sending this register a value of 3, means the thermostat will setback 3 degrees F when it is currently under this setback level. This is mainly for the Smart Energy side of the world and will probably not be used in a typical home automation system that does not have the energy company telling them what the currently energy level is.

Ryan
 
...
#158 Enable/disable individual temp sensors
The bits should align with the listing order on the screen. Internal Sensor is Bit0. The significant nibble determines what type of sensor it is (1 = indoor), and the LSB nibble is enabled or not.
...

I enabled/disabled various combinations of the four sensors and logged the resulting values. My results support your description and the attached diagram summarizes your explanation. However, I did see a few values that did not make sense. For example:

If Sensor 0 (Indoor Temperature) is the only enabled sensor then, according to the diagram, the value ought to be 17:
0001 0001
However, I've recorded 17 and, in another test, 1.
0000 0001

Another example is where Sensor 0 and Sensor 1 (External1) are enabled. Sensor 1 is set to Indoor so I should see a value of 51:
0011 0011
What I've seen is 35:
0010 0011

One more example where Sensor 0, Sensor 1, and Sensor 2 are all enabled and set to Indoor. One would expect a value of 119:
0111 0111

I recorded 103:
0110 0111

I also discovered that the Omnistat2 will not allow you to disable Sensor 0 unless at least one External sensor is set to Indoor (that makes sense).

To summarize, Sensor 0 can be reported as being either Indoor=1 or Outdoor=0. Is this normal?
 

Attachments

  • Omnistat_Sensors.png
    Omnistat_Sensors.png
    8.6 KB · Views: 17
I have four more questions:

1) How do you purge the value in register 68 (Outdoor Temperature)?
On page 11 of the "Serial Protocol Description", "Register Note A" claims the following:
Outside Temperature: writing to the outside temperature register will cause the thermostat to display the outside temperature every 4 seconds. The thermostat will stop displaying the outside temperature if this register is not refreshed at least every 5 minutes.

The second sentence does not jibe with the behaviour I've observed. After I wrote a value to register 68 (just once) the thermostat has displayed it (alternating with the Date & Time) and has not not stopped displaying it ever since. In fact, I did a Factory Reset and the Outdoor Temperature value continues to be displayed. What do I need to write to register 68 so that the thermostat stops displaying a value?

2) Is register 57 (Outdoor Humidity) a write-only register like the Message registers?
There is no indication that an external humidity sensor can be attached to the thermostat. I tried writing a value of 30 (hex:46) to register 57. The value is displayed as part of the Outdoor Status message along with the Outdoor Temperature (register 68). However, when I attempted to read register 57 it returned zero. Is this a 'write-only' register?

FWIW, Outdoor Temperature behaves differently and is not 'write-only'. Whatever value I write to it can be read back.

I also observed that Outside Humidity register does what Outdoor Temperature does not: if you don't refresh it periodically, the humidity value will cease to be displayed on the thermostat.


3) What is the purpose of registers 200 (Current temperature of Sensor 3) and 201 (Current temperature of Sensor 4)?
Here's a summary of the documentation's description of the Temperature Sensors and how to configure them:
Indoor/Outdoor temperatures are averaged between all sensors of the same type.

Internal Sensor: Enable/disable onboard temperature sensor for indoor use only.
External Sensor 1: Enable/disable external temperature sensor for indoor/outdoor use.
External Sensor 2: Enable/disable expansion module temperature sensor for indoor/outdoor use.
External Sensor 3: Enable/disable expansion module temperature sensor for indoor/outdoor use.


Based on that description, here is how I believe it works:
  1. Registers 64 and 68 hold Indoor and Outdoor temperatures, respectively.
  2. If Internal Sensor is enabled, its value is recorded in register 64 (Current Temperature).
  3. If External Sensor 1 is enabled and set it as Outdoor, its value is recorded in register 68 (Current Outside Temperature).
  4. If External Sensor 2 is enabled and set as Indoor, its value will be averaged with Internal Sensor and recorded in register 64.
  5. If External Sensor 3 is enabled and set it as Outdoor, its value will be averaged with External Sensor 1 and recorded in register 68 (Current Outside Temperature).
If all of the above statements are true, what is the purpose of registers 200 and 201? There appear to be no external sensors that write to them. What are "Sensor 3" and "Sensor 4" because they do not appear to correspond to the naming/numbering scheme used above?

4) Is only one of the three message registers usable?
The document indicates all three message registers are "not implemented" but that is not true for 177. If I write text to register 177 (Custom Message), it is displayed on the thermostat. If I do the same with registers 175 (Energy Message) and 176 (Emergency Broadcast Message) nothing is displayed on the thermostat (all three messages are enabled for display in the thermostat's menu). Is there some other way to write to registers 175 and 176 or are they truly 'not implemented' in firmware 1.03D?
 
I suspect there may be a bug in firmware 1.03D involving register 158 (Enable/disable individual temperature sensors).

The themostat's "Temperature Sensors" menu reports the following:
Internal: Enabled
External 1: Disabled
External 2: Disabled
External 3: Disabled

I want this:
Internal: Enabled
External 1: Disabled
External 2: Disabled
External 3: Indoor

so I write 153 (hex: 99, binary:1001 1001) to register 158. I read the register, it reports 153, so it accepted the value. However, the thermostat continues to display the original settings!

I repeated the test with 137 (hex:89, binary:1000 1001), confirm the thermostat has accepted the new value, yet it continues to display the original settings.

So what is going on? Is this a firmware bug or am I doing something wrong?

FYI, if I write to register 142 to programmatically enable/disable the display of Messages (Date/Time, Filter, Custom, etc), the thermostat immediately updates the corresponding settings in its Messages menu
 
Register 3 (Display Options) has the same issue as register 158. If I write a value to it, I can read it back, but the thermostat does not use the new value. For example, setting it to "4" should enable "Simple" display mode. In fact, the register gets set to 4 but the thermostat ignores the new value and continues to use "Advanced" display mode.

This is either a firmware bug or the documentation has omitted to mention that register 3 is read-only (and that'd be a shame because it means you cannot programmatically control the display options).
 
Ryan,

I hate to be a nag but ... any comments about the issues I've revealed?

Summary
  1. The "Indoor Sensor" can be reported as being an outdoor sensor.
  2. How do you clear Outdoor Temperature? Why doesn't it behave as documented?
  3. Is Outdoor Humidity write-only?
  4. Purpose of registers 200 and 201 (Sensor 3 and Sensor 4)?
  5. Registers 175 and 176 (Energy and Emergency Broadcast messages) are unusable?
  6. Thermostat does not respond to changes in register 158 (Enable/disable individual temperature sensors) and register 3 (Display Options).
 
No response from anyone at HAI since late February regarding the six issues I've encountered so I'm forced to conclude the issues represent a combination of firmware (V1.03D) and documentation errors.

For driver developers, the key deficiencies are:
  1. You cannot programmatically set an Omnistat2's Display options (register 3) nor its Indoor/Outdoor Temperature Sensors (register 158). You can write to the registers, and the register contents will change, but the Omnistat2 will not use the new value. Effectively, these registers are read-only.
  2. The Energy and Emergency Broadcast messages are unusable.
  3. The Outdoor Temperature and Humidity registers don't behave as per their documentation.
 
123,
I apologize for the lack of response. To answer these questions required me to dig up some information while I am in the office, which that time has been really infrequent lately.

To answer your questions:

MESSAGES
All Messages should work 175-177. I have just run this test in my office and all messages are functioning. Please verify you are using the correct check sum and format for the messages. This was documented as not implemented because we do not encourage the use of "Emergency Broadcast" and "Energy Message" unless you truly are an Energy Company sending vital information. This fetaure was designed to talk to the Electric meter/Energy Company directly.

OUTDOOR TEMPERATURE
You can clear this register by writing a value of 255 (0xFF). If this temperature reports an invalid value (255) this will be cleared after 5 minutes.

OUTDOOR HUMIDIFY
This is a write only register, there no is way for the Omnistat2 to acquire this information except for receiving this information serially.

REGISTER 200 & 201
Temperature Sensors 2&3 can only be used with a Remote Sensor Interface board that has not been released (RC3000 functionality). The registers to read these temperatures was a debug implementation for development for the RC3000. This will not work without the Remote Sensor Interface board.

TEMPERATURE SENSORS
Register 158 is determined as the following: Binary - 0bABCDEFGH
A- Sensor 3, 1=Indoor 0 = Outdoor.
B- Sensor 2, 1=Indoor 0 = Outdoor.
C- Sensor 1, 1=Indoor 0 = Outdoor.
D - Always 0.
E- Sensor 3, 1= Enabled 0 = Disabled
F- Sensor 2, 1= Enabled 0 = Disabled
G- Sensor 1, 1= Enabled 0 = Disabled
H- On board Sensor, 1= Enabled 0 = Disabled

Please note that the on board sensor can only be used as indoor.

REGISTERS NOT UPDATED
Several congratulation register cannot not be updated without a reset or power cylce. These registers may be written, but require a reboot to take effect. Display and Temperature sensors are two of these registers. This was done to conserve memory

I hope that this answers all your pending question and thanks again for pointing out the typos in the protocol. I am fixing the document as I find them.

Thanks,
Ryan
 
Thank you for your reply.

MESSAGES
All Messages should work 175-177. ...we do not encourage the use of "Emergency Broadcast" and "Energy Message" unless you truly are an Energy Company sending vital information.
You are right; I made a programming error. I've corrected my mistake and I can now send all three messages.
NOTE:
If an Energy Company sends vital information to my Omnistat2, I'd like the ability to retrieve it with my HA software. Given that all three of these message registers are write-only, may I suggest that, in the future, they be made read/write.

OUTDOOR TEMPERATURE
You can clear this register by writing a value of 255 (0xFF). If this temperature reports an invalid value (255) this will be cleared after 5 minutes.
Thanks, I'll give that a try.

OUTDOOR HUMIDIFY
This is a write only register ...
OK, that corresponds to what I observed.

REGISTER 200 & 201
Temperature Sensors 2&3 can only be used with a Remote Sensor Interface board that has not been released (RC3000 functionality). The registers to read these temperatures was a debug implementation for development for the RC3000. This will not work without the Remote Sensor Interface board.
Well that solves that mystery! BTW, if you need someone to beta-test the serial-command protocol, and its documentation, for an RC-3000, send me a PM.

TEMPERATURE SENSORS
Register 158 is determined as the following: Binary - 0bABCDEFGH
A- Sensor 3, 1=Indoor 0 = Outdoor.
B- Sensor 2, 1=Indoor 0 = Outdoor.
C- Sensor 1, 1=Indoor 0 = Outdoor.
D - Always 0.
OK, I'll buy that but you have to admit that the scheme is a bit inconsistent. "D" represents the Indoor sensor yet it is flagged as "0" which normally represents "Outdoor" for the other three sensors.
As mentioned in a previous post, I have seen "D" reported as being "1". At any rate, I'll make sure my driver's code always writes a zero for "D". Although, it is now less useful given that the changes aren't applied until the thermostat reboots.

REGISTERS NOT UPDATED
...These registers may be written, but require a reboot to take effect. Display and Temperature sensors are two of these registers.
These details definitely need to be in the next version of the documentation. A driver developer may choose to omit adding any programmatic control over these two registers given that a manual reboot is needed to have them take effect.
 
Back
Top