Gateway Firmware Changelog
Version 6.5 (PIC16F1847) / 5.8 (PIC16F88), released 12 March 2023
- User control setpoints below 8 degrees are maintained without the need
to be repeated once per minute.
- Don't store faulty temperature sensor readings into the PS=1 data buffer.
- OT version numbers reported by the boiler that are higher than 3.0 must
not be changed to 3.0.
- Fix: After reconnecting the thermostat, the OTGW may end up in a state
where it replaces all messages with alternatives.
- Increase resilience against boilers that start sending a second protocol
during the second half of the stop bit.
- Add a BS command to modify the room setpoint being sent to the boiler.
- Perform CRC checking on data from an external temperature sensor.
- A/D conversions and error reporting were triggered much too frequently.
- Error 03 could happen in case of simultaneous activity on both interfaces.
Version 6.4 (PIC16F1847) / 5.7 (PIC16F88), released 28 December 2022
- Derive the comfort LED from MsgID 0 Read-Data instead of Read-Ack.
- Fix: Garbage after confirmation of LA, LB, LC, LD, LE, LF commands.
- Fix the SR command for Write-Data messages.
Version 6.3 (PIC16F1847), released 19 November 2022
- Add SM command for forcing summer mode
- Add BW command for forcing DHW blocking
- Add GPIO function to control DHW blocking
- Use the received data value when turning MsgID16 Unknown DataID into
- Abort DHW push when any other HW command is performed.
- When the DHW push bit is cleared in the ID99 Write Ack, interpret it as
a sign that the boiler doesn't support DHW push.
- Changing gateway mode/monitor mode was not correctly stored to EEPROM.
Version 5.6 (PIC16F88), released 19 November 2022
- Use the received data value when turning MsgID16 Unknown DataID into
- Fix: Individual expiry of SC, CS, and C2 commands is not working
Version 6.2 (PIC16F1847) / 5.5 (PIC16F88), released 14 October 2022
- The C2 command now expires, just like the CS command already does.
- The commands that expire (SC, CS, and now also C2) are decoupled, so a
control setpoint doesn't stay in effect if the clock data is updated every
- User configured max central heating setpoint and hot water setpoint are
preserved across restarts of the OTGW.
- Option to force a standard thermostat: FT=S.
- Init messages that have been marked as unknown are skipped. This allows
using the UI=49 command as a work-around for buggy boilers that incorrectly
report the current max CH water setpoint as the upper bound (like Viessman
- When the OTGW has no valid time and day of week information, the ReadAck
or WriteAck response from the slave is passed on to the thermostat.
- MsgIDs 48 and 49 are now always requested on startup, because some
boilers provide incorrect information in MsgID 6 about their support.
- Hanging serial receiver due to ESP8266 debug messages on power up.
- When there are no alternative messages in stand-alone mode, the status
message sent instead does not have the correct data bits.
- Only report the Smart Power level when it actually changes.
- When the OTGW changes a ReadData request from the thermostat for MsgID
56 or 57 into a WriteData request to the boiler, the data in the WriteAck
response from the boiler should be returned to the thermostat in the ReadAck
- While obtaining transparent slave parameters (TSP) via the PM command,
the OTGW gets confused when the thermostat also reads a TSP.
- Remote request command RR=0..12 for things such as starting remote
filling, if the boiler supports it.
- Cooling commands: CE and CL.
- Add support for Remote Override Operating Modes: MW, MH, and M2.
- DHW push (heat the water storage tank once): HW=P.
- TP command for individual access to transparent slave parameters (TSPs)
and fault history buffer entries (FHBs). This feature also allows TSPs to be
Version 6.1 (PIC16F1847) / 5.4 (PIC16F88), released 31 May 2022
- Fix restarts when no alternatives are available in stand-alone mode.
- Don't go into fail safe mode after a WDT reset if no thermostat is
- Add Watch dog time-out (W) as a reset reason to the PR=Q command output.
- PIC16F1847: Fix detection of thermostat connect/disconnect.
- PIC16F1847: Fix random SE responses from AA, DA, MM, PM, and VS commands.
- PIC16F1847: Extend debug pointer to addresses above 0xFF.
Version 6.0, released 8 March 2022
- First firmware for PIC16F1847. The functionality is basically the same as
version 5.3 for PIC16F88, except for some minor changes due to differences in
the peripheral implementations in the hardware of the two PICs.
Version 5.3, released 24 February 2022
- Reduce the subroutine nesting level, which could lead to spurious WDT
resets in some unfavorable cases.
Version 5.2, released 28 December 2021
- Handle Smart Power level changes while in monitor mode.
- Add support for boilers that generate unsolicited Medium/High power.
- Limit the validity of a CS command. A remotely set control setpoint
expires after just over a minute. This is a safety feature to prevent
runaway heating when the controlling program loses its connection, or
- Change the default voltage reference to 1.458V (4), which translates to
a line voltage that lies closer to the midway point between the high and low
voltage levels defined by the Opentherm specification.
- Change the voltage to detect a disconnected thermostat to 20.05V. The
old value of 19.11V might give false positives due to component tolerances.
- Pass on the response for MsgID 9 and MsgID 100 from the boiler (or a
downstream gateway) if it is a Read-Ack or Write-Ack and the OTGW doesn't
have any active override itself.
Version 5.1, released 11 February 2021
- Bug fix: Stand-alone mode: OTGW sends Read-Data for MsgID 1 (Control
Setpoint). Specs say it must be Write-Data.
- Bug fix: Empty Read-Ack on MsgID 20 (Day & Time) resets the thermostat
clock to midnight.
- Bug fix: The outside temperature, provided to the OTGW through an OT
command or by an external temperature sensor, overwrites the DHW temperature
value in the PS=1 output.
- Bug fix: Monitor mode: The 'C', 'F', 'H', 'M', and 'W' LEDs are not
- Bug fix: Monitor mode: Summary data is not updated.
- Bug fix: Incorrect response format for the C2 and H2 commands.
- Bug fix: Command OT=9.999 is not accepted and gives wrong error response:
Version 5.0, released 18 January 2021
Potential incompatibility: The PS=1 output has changed. If using this
function, the program processing the information will have to be adapted
- Add support for a 2nd central heating circuit using the new C2, and H2
- New TS command to select if a connected temperature sensor is used for
the outside temperature (O), or the return water temperature (R). The current
setting can be verified with the PR=D command.
- Support additional commands, like SH, SW and VS, in standalone mode.
- Report additional values in a PS=1 report: 7 (Cooling control), 8
(Control setpoint 2), 19 (DHW flow rate), 23 (CH2 room setpoint), 31 (CH2
flow temperature), 33 (Boiler exhaust temperature), 70 (V/H master status),
71 (V/H control setpoint), 77 (Relative ventilation).
- Use a WriteData request when sending the following IDs as alternative
messages: 1 (TSet), 8 (TSetCH2), 14 (MaxRelMod), and 71 (VSet).
- Repeat alternative messages that didn't receive a valid response.
Version 4.3, released 7 January 2021
- Store Monitor Mode setting in EEPROM, so it survives a restart of the OTGW
- Store DHW setting in EEPROM, so it survives a restart of the OTGW
- Fix freeze in standalone mode when boiler generates a stray signal
- Add a command to obtain the current state of the GPIO input pins
- Prevent unintended heat request in case of thermostat communication
- Fix spontaneous reset in monitor mode
- Add command to obtain the reason of the last reset
- Fix bug: Missing response from the boiler may result in wrong data
being returned by the gateway on the next request.
Version 4.2, released 30 December 2014
- Fix a bug in the presence detection of an opentherm thermostat and the
state detection of an on/off thermostat.
- When the gateway sends a message to the boiler for its own administration,
a successful response should not undo any manual blacklisting of the message
Version 4.1, released 29 November 2014
- Add the FT command for those cases where the gateway is unable to
auto-detect a Celcia 20 thermostat.
- Add support for manually configured responses for MsgID 48 and 49.
Version 4.0.1, released 15 June 2014
- Correct a rounding error in the PS report resulting in invalid floating
Version 4.0, released 9 June 2014
- Smart power support.
- The gateway can be used with an on/off thermostat, or even without a
- Many workarounds for quirks of the Remeha iSense (RF) thermostat.
- Several programmable GPIO functions.
- New serial commands: CH, CR, CS, GA, GB, KI, MM, OH, PM, SB, SR, UI, and
- Greately relaxed the checks performed on the received opentherm signal.
- Improved serial communications.
- Increased immunity against weird input on the serial interface.
- Blacklisting improvements.
- Improved command confirmations.
- Report the contents of messages with parity or stop-bit errors.
- LEDs flash on powerup/reset of the gateway.
Version 3.4, released 13 January 2013
- Setting the setpoint on a Celcia 20 thermostat was broken by firmware
- The gateway should give a thermostat three chances when trying to set a
remote setpoint. It only did that when initially setting the setpoint. But
when changing it to another value at some later moment the gateway
immediately gave up if the first try did not work.
Version 3.3, released 11 November 2012
- Under some unfavorable circumstances the firmware program flow could
exceed its stack space. This resulted in the loss of a return address which
prevented the code from returning to the main program loop and subsequently
the watchdog timer would kick in and put the device in its fail-safe state.
This has been fixed by eliminating some subroutine levels.
Version 3.2, released 15 July 2012
- Some boilers clear out the data bytes when returning an Unknown-DataID
response. This could cause strange behavior like the thermostat clock being
reset to midnight on powerup of the gateway. If the list of alternative
messages was empty, the clock reset would even happen every minute.
Version 3.1, released 15 June 2012
- Switch on the Maintenance LED when the gateway enters fail-safe mode,
i.e. after a watchdog timeout has occurred.
- Deleting alternative Data-IDs was broken since version 3.0
- Watchdog timeouts were being obscured by the self-programming code
(requires self-programming code upgrade).
- Random serial data within 1 second after a reset would put the device
into self-programming mode. Now an <STX> character is needed to do
that (requires self-programming code upgrade).
Version 3.0.1, released 2 June 2012
- The version 3.0 firmware published on the web site was built with the
adjustments needed for an Intergas boiler. For all other boilers it is
better not to have these modifications.
Version 3.0, released 20 May 2012
- Switched to PIC16F88 (requires circuit board changes)
- Added self-programming option for in-circuit firmware upgrade
- Invalidate the received time information after about one minute, so the
thermostat clock isn't continuously reset to the same time.
Version 2.1, released 05 Feb 2012
- Fixed bug in resetting boiler counters.
- The print summary command produced garbage when the outside temperature
went below zero.
Version 2.0, released 14 May 2011
- Due to the addition of several new features, a PIC16F628(A) is now
required. The code no longer fits in a PIC16F627(A).
- Added an option to allow non-significant transitions to happen outside
the range of -10%/+15%. This turned out to be necessary for (some) Remeha
- Added an option to trigger some thermostats to send a remote room setpoint
override request. This is necessary to control the setpoint on certain
thermostats, like the Remeha Celcia20.
- Introduced several new functions that can be freely assigned to the
optional LEDs that may be attached to four PIC output ports.
- Added the option to switch between gateway and monitor mode via a serial
command. This can be very useful for debugging a newly built gateway.
- Accept a deviation of +/-0.125 degrees in the setpoint reported back by
the thermostat after sending a remote room setpoint override response. This
turned out to be necessary for Remeha iSense thermostats.
- Added a new serial command to dump some useful information about the
- Added a check for parity errors in the received messages.
- Floating point values may now be specified with several decimal digits
(although only the first 2 will actually be used).
- The gateway can now report the most interesting parameters on demand,
instead of reporting individual opentherm messages.
- The gateway did not forward the outside temperature to the thermostat if
it was reported by the boiler instead of via the serial interface.
- Timing checks were too strict. The code dit not accept the full range of
-10%/+15% deviation from the perfect transition time.
- Negative temperatures that were specified without a fractional part ended
up as positive.
Version 1.3, released 26 Dec 2009
- Fixed a problem with specifying negative outside temperatures.
Version 1.2, released 22 Nov 2009