Nilan heatpump cts 700

Tags: #<Tag:0x00007f61705b6bd8> #<Tag:0x00007f61705b69d0> #<Tag:0x00007f61705b67c8>

I wanted to move the Nilan heatpump CTS 700 discussion in a separate thread.

@Tapani_Janhunen @Dieter_Janssens @GuidoDirkes any progress concerning the CTS700 integration, communication bringup, Setup snippets, anything?

Best, Nick

Also if you need any help for a bringup, I can give you a little bit of support.

I have started just the real basics, reading some of the registers via modbus. You can find the current version on github: (Part of it may still be in German)

Main trouble is time :slight_smile: … didn’t try yet to get access to the protected registers, also the compressor state reading and mapping to readable values is pending. But I tried to calculate the warm water capacity, but the result is still pretty bad once the bottom temperature drops below 35°C… I plan to continue…

1 Like

Looks like a nice start! :slight_smile: Do you know any of the passwords [page 9] {Superuser, Installer, Administrator} ?

Do they have an ssh server running, reachable via the same ip?


The administrator password is 6699.


1 Like

superuser password may be “7675” or “7576”?
@mRintamaki can you confirm that?

Best, Nick

Yes it is 7675. You can read all passwords with modbus using password 6699. I have a pdf guide modbus register. With the guide I got to read the register. I am a new user. I can not download the pdf file here.

I have a Nilan Compact P ventilation system (without central heating) with CTS 700. The panel is the “old” type with the wheel, not the touch screen.

Can anyone here give a short getting started guide?

Is it simply:

  1. Connect the network cable to local LAN (I assume it is the cable with RJ45 connector hanging inside the unit).
  2. Configure Nilan IP address, etc., via the panel.
  3. Try to establish basic communication using @GuidoDirkes repository as a template. Starting with a few items, e.g. reading the temperature sensors would make me happy.
  4. Continue to expand and experiment.

Are there any other things to be aware off? Things that would be different in my setup (since I don’t have central heating, but only ventilation, heat recovery and sanitary hot water)?

Thanks in advance.

I am eager to know the same! :+1:t2:

OK, I did a few experiments, but I am running into problems.
I changed the network settings to fit my network, but I am still having problems connecting. Most of the time I get “no route to host”, but sometimes i get replies to ping, and I was able to access a very crude website on port 80. Is the TCP interface only enabled sometimes (e.g. only when logged in as administrator on the panel?)

I tried to setup the modbus binding, based on a snippet from @GuidoDirkes repository:

# temperature sensors t1-t12 - VAL_DEV_TSENS1 - VAL_DEV_TSENS12

But my log is simply flooded with errors:

2018-10-01 19:58:57.170 [ERROR] [.binding.modbus.internal.ModbusSlave] - ModbusSlave (NilanTemp): Error getting modbus data for request net.wimpi.modbus.msg.ReadInputRegistersRequest@30e4db7b. Error: Error Code = 2. Endpoint ModbusTCPSlaveEndpoint@88217b9[address=,port=502]. Connection: TCPMasterConnection@399c15da[socket=Socket[addr=/,port=502,localport=34588]]
2018-10-01 19:59:07.176 [ERROR] [.binding.modbus.internal.ModbusSlave] - ModbusSlave (NilanTemp): Error getting modbus data for request net.wimpi.modbus.msg.ReadInputRegistersRequest@34513de3. Error: Error Code = 2. Endpoint ModbusTCPSlaveEndpoint@88217b9[address=,port=502]. Connection: TCPMasterConnection@6ad7ddb5[socket=Socket[addr=/,port=502,localport=34590]]
2018-10-01 19:59:17.181 [ERROR] [.binding.modbus.internal.ModbusSlave] - ModbusSlave (NilanTemp): Error getting modbus data for request net.wimpi.modbus.msg.ReadInputRegistersRequest@932f376. Error: Error Code = 2. Endpoint ModbusTCPSlaveEndpoint@88217b9[address=,port=502]. Connection: TCPMasterConnection@5d5cb71d[socket=Socket[addr=/,port=502,localport=34592]]
2018-10-01 19:59:27.186 [ERROR] [.binding.modbus.internal.ModbusSlave] - ModbusSlave (NilanTemp): Error getting modbus data for request net.wimpi.modbus.msg.ReadInputRegistersRequest@16595c3e. Error: Error Code = 2. Endpoint ModbusTCPSlaveEndpoint@88217b9[address=,port=502]. Connection: TCPMasterConnection@2e05f2bc[socket=Socket[addr=/,port=502,localport=34598]]
2018-10-01 19:59:37.191 [ERROR] [.binding.modbus.internal.ModbusSlave] - ModbusSlave (NilanTemp): Error getting modbus data for request net.wimpi.modbus.msg.ReadInputRegistersRequest@363d95c9. Error: Error Code = 2. Endpoint ModbusTCPSlaveEndpoint@88217b9[address=,port=502]. Connection: TCPMasterConnection@372c0182[socket=Socket[addr=/,port=502,localport=34600]]
2018-10-01 19:59:47.196 [ERROR] [.binding.modbus.internal.ModbusSlave] - ModbusSlave (NilanTemp): Error getting modbus data for request net.wimpi.modbus.msg.ReadInputRegistersRequest@409bd5dd. Error: Error Code = 2. Endpoint ModbusTCPSlaveEndpoint@88217b9[address=,port=502]. Connection: TCPMasterConnection@176ce6a3[socket=Socket[addr=/,port=502,localport=34602]]
2018-10-01 19:59:57.201 [ERROR] [.binding.modbus.internal.ModbusSlave] - ModbusSlave (NilanTemp): Error getting modbus data for request net.wimpi.modbus.msg.ReadInputRegistersRequest@4cb822b4. Error: Error Code = 2. Endpoint ModbusTCPSlaveEndpoint@88217b9[address=,port=502]. Connection: TCPMasterConnection@3c91827b[socket=Socket[addr=/,port=502,localport=34604]]
2018-10-01 20:00:07.206 [ERROR] [.binding.modbus.internal.ModbusSlave] - ModbusSlave (NilanTemp): Error getting modbus data for request net.wimpi.modbus.msg.ReadInputRegistersRequest@6ce375a3. Error: Error Code = 2. Endpoint ModbusTCPSlaveEndpoint@88217b9[address=,port=502]. Connection: TCPMasterConnection@5cd1b618[socket=Socket[addr=/,port=502,localport=34608]]
2018-10-01 20:00:17.212 [ERROR] [.binding.modbus.internal.ModbusSlave] - ModbusSlave (NilanTemp): Error getting modbus data for request net.wimpi.modbus.msg.ReadInputRegistersRequest@7bb5eff7. Error: Error Code = 2. Endpoint ModbusTCPSlaveEndpoint@88217b9[address=,port=502]. Connection: TCPMasterConnection@2a85fdc9[socket=Socket[addr=/,port=502,localport=34610]]

The software information page on the panel shows:
Display SW: 01.30.00 (2015-06-19)
Display HW: 00
Styring SW: (2015-08-25)
Styring HW: NCS-700

@GuidoDirkes: Do you have any suggestions? Which model of heatpump do you have, and which software versions?

I’m also having trouble with connecting via tcp. I can ping the device, but when I try to initiate a connection with the python package pymodbus (I like testing from the command line just to see what’s happening) it fails to connect (no error message either). Does anyone have any tips for further investigation?

Hi @fowlie please be more verbose (i.e. code, port, registers, …), it’s hard to help you with that little information.
Are you trying the same registers as the one DGuidoHD uses?

That sounds awkward, maybe the target is to slow? Network problems? I usually stick to a minimalistic (python) bringup - please follow @fowlie.

Are you able to test that yourself and give us feedback?

@nickma82 yes I’m trying to read the same registers to get the temperature sensor values. So same register, same port (502) but different ip. My home network is 192.168.10.x so I changed the ip address on the cts 700 from to I also use a Netgear Wifi Adapter to connect the ventilation system to my home network. I have the Nilan Compact P solution with the cts 700 touch display. I can ping the Nilan system and I always get a fast response. However I cannot connect to it. I even tried with telnet 502 but no answer. There’s apparently a website hosted on port 80 according to replies in this thread, but trying to curl on port 80 also leads to timeout. So what makes the system respond to ping, but not tcp connections?

I should add that I also changed the ip address for “network port” from to Maybe this is causing the error, because that ip belongs to my home router. I don’t know what this “network port” ip address is used for.

Hi, I’m new to OH (only used it for a few days) and would like to connect my Nilan Compact P with CTS700 to the system.
To begin with I’d like to read the ventilation speed, air temperature and water temperature.
Would be nice to also set temperature and ventilation speed. Is it possible with Modbus 2.4?
I have hocked up the device to my network and changed the IP to fit my network setup. I can see the http page on port 80 (it’s a very simple page :), what shall I do next?
My next step is to connect to HomeKit via Homebridge - has this been done before?
Any help or suggestion is appreciated!

Just saw Nilan published a new version of their Modbus api for compact P device - looks very different from the previous version. It’s no longer Modbus TCP but Modbus RTU over tcp:


I have just come across OH and am about to start setting up for my Compact P GEO6.
Are there any recommended settings which I can use?
I have looked through some of the threads and have not found any specific details.
I am referring to night setback for both ventilation and heat pump for UFH.
Also - has anyone used the heat pump in reverse for cooling using the UFH circuit?


I have finally made some progress on this point. The control panel for my Nilan was replaced the newer touch panel (old one was the type Nilan called BIG display). When the technician had to upgrade the software he was unable to communicate with the main board (network problems), so he replaced it. That solved my network problems as well :slight_smile:

Version information now reads the following:
Display software: 09.08.04 (2018-07-06)
Display hardware: Touch Panel Version 2.0 (2016-01-21)
Print software: (2018-08-06)
Print hardware: NCS-700

So I decided to follow @GuidoDirkes example, and in the process convert it to the OH2 modbus binding. This is what I have so far:

Bridge modbus:tcp:nilan [ host="", port=502 ] {
    Bridge poller NilanTemperatures [ start=5152, length=12, refresh=10000, type="input" ] {
        Thing data Nilan_Temp_T1_Outdoor        [ readStart="5152", readValueType="int16", readTransform="JS(divide10.js)" ]
        Thing data Nilan_Temp_T2_Supply         [ readStart="5153", readValueType="int16", readTransform="JS(divide10.js)" ]
        Thing data Nilan_Temp_T3_Extract        [ readStart="5154", readValueType="int16", readTransform="JS(divide10.js)" ]
        Thing data Nilan_Temp_T4_Discharge      [ readStart="5155", readValueType="int16", readTransform="JS(divide10.js)" ]
        Thing data Nilan_Temp_T5_Condenser      [ readStart="5156", readValueType="int16", readTransform="JS(divide10.js)" ]
        Thing data Nilan_Temp_T6_Evaporator     [ readStart="5157", readValueType="int16", readTransform="JS(divide10.js)" ]
        //Thing data Nilan_Temp_T7_AfterHeat      [ readStart="5158", readValueType="int16", readTransform="JS(divide10.js)" ]
        Thing data Nilan_Temp_T11_HotWaterTop   [ readStart="5162", readValueType="int16", readTransform="JS(divide10.js)" ]
        Thing data Nilan_Temp_T12_HotWaterBot   [ readStart="5163", readValueType="int16", readTransform="JS(divide10.js)" ]

    Bridge poller NilanDHWSetpoint [ start=5548, length=1, refresh=10000, type="input" ] {
        Thing data Nilan_Temp_DWH_Setpoint      [ readStart="5548", readValueType="int16", readTransform="JS(divide10.js)" ]

    Bridge poller NilanRegulationMode [ start=5432, length=1, refresh=10000, type="input" ] {
        Thing data Nilan_Enum_RegulationMode    [ readStart="5432", readValueType="uint16" ]


Number Nilan_T1_Outdoor	        "Udeluft [%.1f °C]"         { channel="modbus:data:nilan:NilanTemperatures:Nilan_Temp_T1_Outdoor:number" }
Number Nilan_T2_Supply          "Tilluft [%.1f °C]"         { channel="modbus:data:nilan:NilanTemperatures:Nilan_Temp_T2_Supply:number" }
Number Nilan_T3_Extract         "Fraluft [%.1f °C]"         { channel="modbus:data:nilan:NilanTemperatures:Nilan_Temp_T3_Extract:number" }
Number Nilan_T4_Discharge       "Afkastluft [%.1f °C]"      { channel="modbus:data:nilan:NilanTemperatures:Nilan_Temp_T4_Discharge:number" }
Number Nilan_T5_Condenser       "Kondensator [%.1f °C]"     { channel="modbus:data:nilan:NilanTemperatures:Nilan_Temp_T5_Condenser:number" }
Number Nilan_T6_Evaporator      "Fordamper [%.1f °C]"       { channel="modbus:data:nilan:NilanTemperatures:Nilan_Temp_T6_Evaporator:number" }

Number Nilan_T11_HotWaterTop    "Vandvarmer Top [%.1f °C]"  { channel="modbus:data:nilan:NilanTemperatures:Nilan_Temp_T11_HotWaterTop:number" }
Number Nilan_T12_HotWaterBot    "Vandvarmer Bund [%.1f °C]" { channel="modbus:data:nilan:NilanTemperatures:Nilan_Temp_T12_HotWaterBot:number" }

Number Nilan_DHW_Setpoint       "Vandtemperatur setpunkt [%.0f °C]"   { channel="modbus:data:nilan:NilanDHWSetpoint:Nilan_Temp_DWH_Setpoint:number" }

Number Nilan_RegulationMode     "Regulation mode [%d]"      { channel="modbus:data:nilan:NilanRegulationMode:Nilan_Enum_RegulationMode:number" }

And a snippet from the sitemap:

            Frame label="Nilan" {
                Default item=Nilan_T1_Outdoor icon="temperature"
                Default item=Nilan_T2_Supply icon="temperature"
                Default item=Nilan_T3_Extract icon="temperature"
                Default item=Nilan_T4_Discharge icon="temperature"
                Default item=Nilan_T5_Condenser icon="temperature"
                Default item=Nilan_T6_Evaporator icon="temperature"
                Default item=Nilan_T11_HotWaterTop icon="temperature"
                Default item=Nilan_T12_HotWaterBot icon="temperature"
                Default item=Nilan_DHW_Setpoint icon="heating"
                Default item=Nilan_RegulationMode icon="text"

Trying to figure out how to extend it to also adjusting parameters, I was confused to find several documents describing CTS700 modbus registers, but which disagree on the register numbers. By including the register number for the T1 temparature sensor in above example (5152) in my search string, I found the following document:

It seems the above document is not so detailed as some of the others I have found regarding the contents of the registers, but the other ones are not so useful due to the incorrect register numbers. Does anyone have more accurate data?

Has anyone gotten further with OH2 and the Nilan CTS-700? Like being able to set values (e.g. ventilation settings, water heater setpoint, etc.) instead of only reading them?

Best regards,

If the print hardware is NCS-700, there may be a different kind of modbus registers other than the CTS700… I assume they´re not the same.
Unfortunatly I cant help as I´m on the old CTS602… But there are modbus registers for almost everything.