Intro
The following information is targeted developers that want to build their own ESP firmware for the H60, not H66. Here you get an understanding on how to communicate with heat pumps through the H1 sub processor CLI.
This information could be somewhat un-updated and obsolete but is of great help to get started.
Overview of solution
The H1 interface bridges the often complex communication methods with heat pump controllers and provides access through a simple standard interface over RS-232.
The serial interfacing is the same even if connected to different heat pump models.
For example, reading the radiator return temperature or setting the room temp will use the same method on IVT, Bosch, NIBE, Thermia heat pumps and their different models.
The H1 gateway technology is today integrated in to various solutions from Husdata and partner integrator. Example are the Raspberry pi interface and the H60 Wifi heat pump gateway.
Features summary
- RS-232 interface.
- H1 provides a generic platform to communicate with different heat pumps using the same standard protocol and parameters.
- H1 provides a secure and convenient way to read and write information with heat pump controllers.
- H1 is provided in different hardware configuration, supporting the majority of all popular heat pump models.
- Has bootloader, Firmware up-gradable via the serial interface.
- A LED indicator shows status and enables for troubleshooting.
- Easy clear text based protocol in clear text manageable directly from serial terminal
H1-Protocol interface type (standard)
Serial interface specifications
Interface: RS-232 or USB(serial)
Baud rate: 19200
Bits: 8
Stop bits: 1
Flow control none
Protocol: H1-Proprietary as described in this manual.
Communication structure
All communication is made in plain text and all numbers are in hexadecimal format. Tests of communications can be managed from standard terminal software, such as Putty.
Data received from the interface has a two letter command structure + data and always end with chr 13 + chr 10 (Carriage Return + New Line, \r\n).
The command sent to the interface is always two capital letters followed by optional data and an ending (cr).
When powering up the interface (getting power from the heat pump) it first displays copyright information like below, followed by version information. This information is also shown at reset. You can manually reset the interface by sending the letter “!”.
(C)2013-2022 Arandis AB, Pitea Sweden.
http://www.husdata.se
XV402228
The version information start with XV followed by three hexadecimal bytes.
- Firmware/Interface variant for different heat pump types, example..
Rego600, Rego400, Rego80, Rego1000, NIBE EB100, NIBE Styr2002,
Thermia Diplomat, Thermia Villa. - Version
- Revision
After this message is displayed, the communication with the heat pump will initialize. It can take up to 30 seconds depending on heat pump model.
The registers on the heat pump is then automatically acquired by the interface and will be output continuously via the serial interface. After all registers are read once, the interface will only output data if something changes. For example if a temperature is changed on a sensor, it will output the new value.
If all values need to be refreshed the Re-sync command can be called by the command XR.
Registers
The interface firmware has a common set of pre-programmed heat pump registers to be read and written to.
Available registers can be listed using the XL command.
The register data format is a 2 byte number, ex 0101. The leftmost number (4 bits) representing the data type and the rest is the actual index number. For example on 0001, the left 0 indicating that this is a temperature. 001 indicating the Radiator return sensor index number. And likewise 1A01, 1 is indicating that this is a bool on/off device. and A01 indicating index for the Compressor.
List of data types
No |
Unit / Data type |
Additional info |
0 |
Degrees |
Divide by 10 |
1 |
On/off bool |
0 or 1 |
2 |
Number |
Divide by 10 |
3 |
Percent |
Divide by 10 |
4 |
Ampere |
Divide by 10 |
5 |
kWh |
Divide by 10 |
6 |
Hours |
As is |
7 |
Minutes |
As is |
8 |
Degree minutes |
As is |
9 |
kw |
As is |
The interface is continuously syncing with the Common registers and will output any change. A Common register consists of sensor information, status of devices (compressor, pumps, valves), a few standard settings and a some other controller parameter such as Degree minutes. The Common registers has a common structure and id’s for all heat pump models.
With the “XL” command will get a list of all available registers for to connected heat pump and with the “XP” command you have the option to turn on clear text register names and values shown in decimal. This feature is convenient for test and debug.
Some HP-Specific registers can be read and output if the “XS” command is sent. These registers are unique for every heat pump model. You can set/write to some of the HP-Specific registers using the “XW” command.
Example of register data output from the interface and how to interpret
XR00010106(cr) 0x0001=reg Radiator return of temp type (0)
0x0106=data (0x01*256)+0x06 = 262 = 26.2 deg C
XR00030198(cr) 0x0003=reg Heat carrier return of temp type (0)
0x0198=data (0x01*256)+0x98 = 408 = 40.8 deg C
XR0006FFE6(cr) 0x0001=reg Cold carrier out of temp type (0)
0xFFE6 and 0x8000 = true (left most bit set=negative)
0xFFE6=data ((0xFF*256)+0xE9)-65536 = -2.3 deg C
XR1A040001(cr) 0x1A04=reg Radiator return of on/off type (1)
0x0001=data ON
Example of data output from the interface with clear text output turned on (XP)
XR000200ED 002 Radiator Forward (23.7c)
XR0003018A 003 Heat carrier Return (39.4c)
XR000400E9 004 Heat carrier Forwrd (23.3c)
XR00050075 005 Brine in/Evaporator (11.7c)
XR00060057 006 Brine out/Condenser (8.7c)
XR0007FF6A 007 Outdoor (-15.0c)
XR0008DEAD 008 Indoor (-853.1c)
XR000901D3 009 Hot water 1 / Top (46.7c)
XR000B024A 00B Hot gas / Compr. (58.6c)
XR000E0000 00E Air intake (0.0c)
XR002000D9 020 Radiator Forward 2 (21.7c)
XR00210000 021 Indoor 2 (0.0c)
XR1A010001 A01 Compressor (1.0 )
XR1A040001 A04 Pump Cold circuit (1.0 )
XR1A050001 A05 Pump Heat circuit (1.0 )
XR1A060001 A06 Pump Radiator (1.0 )
XR1A070000 A07 Switch valve 1 (0.0 )
XR1A090000 A09 Fan (0.0 )
XR1A0A0001 A0A High Pressostat (1.0 )
XR1A0B0001 A0B Low Pressostat (1.0 )
XR1A0C0000 A0C Heating cable (0.0 )
XR1A0D0000 A0D Crank case heater (0.0 )
XR1A200000 A20 Alarm (0.0 )
Commands for the H1 Interface.
Data TO interface
Command |
Function |
Example / Returns |
! |
Reset |
! (cr) |
XV |
Request version number |
XV010304(cr) |
XR |
Request re-read and dump of Real-time registers |
XR(cr) |
XS |
Request read and dump of heat pump specific registers |
XS(cr) |
XWrrrrdddd |
Set a register value on HP. rrrr=register, dddd=data. |
XW010600AA(cr) XW01(ok) |
XL |
Request list of register names |
XL(cr) |
XP |
Toggle clear text register names print out |
XP(cr) Warmwater (35.2c) |
XM |
Enable auto refresh of all registers every second minute. default=off |
|
XA |
Disable register monitoring and update at change. Default=enabled. |
|
XO |
Enable register monitoring and update at change. Default=enabled. |
|
XU |
Enable simulator mode. Will output random data every second. |
Only available on rego600 firmware. |
XH |
Enable Rego 2-3000 statistical registers |
|
RP1, RP0 |
Enable/disable Can bus activity printout |
Only rego800/1000 |
|
|
|
SA |
Toggle OFF/ON to printout collected pulses every 10 sec. Default=on |
|
SP |
Print out collected pulses and reset counter. |
|
SS |
Set S0 port 1 to Input port instead to detect an on/off state. |
|
WE |
Scan for 1-wire temp sensors and return all ID’s |
|
WR |
Read all 1-wire temp sensors and dump result. |
|
XBxx |
Read alarm logs XB=Last log, XB05 = 5 last logs, etc. Max 20. Support only for Rego 600 and Rego2000. |
XB010E0B1B0D3130 Or XB1540 (R2000) See below for desc. |
XF |
List Max/Min values for settable registers |
|
XE |
Enable terminal ECHO |
|
Data format FROM interface
Input |
Description |
Usage Example |
XRrrrrdddd(cr) |
Receive new data from a register. rrrr= Reg ID, dddd=data. |
|
XV040304 |
Interface version |
|
|
|
|
WRxxxxxxxxpptt(cr) |
Return DS temp: x=8 bytes DS-ID, pp=00=+ FF=- |
|
XE002 |
Info. Rego1000 interface was moved to other Rego version, re-synchronizing. |
|
XE005 |
Can bus communication error, Check cables (Rego 800/1000 only) |
|
XE006 |
Fatal error identifying Rego1000 version. Contact Husdata.se |
|
XE007 |
Unsupported Rego800 version detected, switching to compatibility mode. |
|
XI024 |
NIBE EB100 detected comm alarm, will be reset in 10 minutes |
|
XI025 |
NIBE EB100 alarm has been reset |
|
XB010E0B1B0D3130
|
XB 01 0E0B1B 0D3130 01 = Alarm Code Next part is date YYMMDD Last part is Time HHMMSS Rego 600 only
|
For Rego 600 Only |
XB1540 XB1541 XB1542
|
XB 1540 1540 = alarmcode 1540h= 5440 HP Alarm Command XB always answers with 3 rows of alarmcodes. 0000= no alarm.
|
For Rego 2000 Only |
Supported heat pump models
Type |
Heat pump models |
Technical |
00 |
IVT Greenline / Optima 900 |
Rego 600 Serial |
05 |
IVT 490 |
Rego 400 Serial |
35 |
IVT Premiumline X, Optima/290-AW |
Rego 800, Can bus |
30 |
IVT Greenline HE/HC/HA+Prem HQ/EQ |
Rego 1000, Can bus |
40 |
NIBE xx45 |
EB100, RS-485 |
50 |
NIBE Fighter series |
Styr 2002, RS-485 |
60 |
Thermia Diplomat series |
901510, i2c |
65 |
Thermia Genesis |
Genesis RS-485 |
10 |
IVT AirX, Geo series, Vent202, etc |
Rego 2000, 3000 EMS |