CTC Smart-Home-Integration, kostenlos und Open Source

CTC heat pumps (EcoZenith, EcoHeat, EcoPart) over local Modbus: readings, optional control.
Die Dokumentation dieser Integration wird von ihrem Autor geschrieben und ist bisher nur auf Englisch verfügbar.
This integration shows a CTC heat pump (EcoZenith i255, i360 or i550, EcoHeat, EcoPart, and the EcoAir they drive) in Gladys, over the Modbus TCP interface of its display, on your local network, without any cloud.
Never tested with a real CTC: it follows CTC's BMS manual (162 600 16-3, 2026-02-02) and the HA-CTC-Local-Easyconf integration for Home Assistant, which runs on real units. Not affiliated with CTC.
Before you start
- A display with 3 ports (the manual: only those talk Modbus over TCP/IP).
- On the display: Installer (Advanced), Define, Remote control, set Ethernet to Modbus TCP. This is reported to exclude the myUplink cloud connection.
- Give the display a fixed address in your router.
- The controller serves one Modbus client at a time: remove any other one (Home Assistant, a script), or both will fail.
- Modbus has no password: anyone who reaches port 502 can read the registers and write the control ones. Keep the heat pump on a trusted network (a VLAN, or a firewall rule letting only Gladys reach it), and never open port 502 to the internet.
Configuration
| Field | What it does |
|---|---|
| IP address of the CTC display | An IPv4 address or a host name, port 502 unless you add one (192.168.1.80:5020). |
| Allow the commands | Off by default. See "Control" below. |
| Refresh interval | 30 s by default, from 10 to 600 s. |
| Language | Names of the device and features added from now on, state texts, errors. |
Save, then add the heat pump from the Discovery tab.
The Test the connection button reads the controller, at most once per refresh interval, and shows its state.
What you get
Temperatures (outdoor, flow and its setpoint, return, radiator water, heat pump in and out, discharge and suction gas, brine, hot water upper and lower, room 1 and 2), high and low pressure, compressor speed, charge pump, brine pump and fan (%), degree minutes, immersion heater power, phase currents, hot water capacity, compressor operating time and its last 24 h, the immersion heater and compressor energy counters (kWh, plain values), the system, heat pump, heating circuit 1 and SmartGrid statuses, and the stored hot water mode, room setting and heating mode of circuit 1, read only. Compressor running, defrosting and "stopped by an alarm" are derived from the heat pump status.
A value appears once its register answered with a number. CTC answers "no sensor" with markers (9999, 32767...) and stays silent for a register the model lacks: such a block is left out after three silent rounds, until the integration restarts, and the configuration screen lists it.
The energy counters are plain values, not an energy index: nothing proves yet that they never go back nor jump.
Control
Gladys writes only to CTC's volatile control registers (the 1000 block), never to the stored settings, whose memory tolerates a limited number of writes; the code refuses any other address before anything is sent. The controller forgets a control value 5 minutes after the last write and at its own restart, so Gladys writes what it holds again every minute. If the integration stops, the heat pump goes back to its own settings within 5 minutes.
Three commands:
- Heating circuit 1 mode: Controller's own program (gives control back, writes nothing), Heating off, Heating, Auto.
- Hot water mode: Controller's own program, Economy, Normal, Comfort. The temperatures of these modes are the controller's own settings: Gladys writes no hot water temperature.
- Room setpoint, circuit 1: 10 to 30 °C, in tenths of a degree.
When nothing is in force (nothing held, or a hold the controller no longer acknowledges), the commands show what the controller follows: its own program, its own room setting. The feature Control held by Gladys says what is held and since when, what is asked but not in force, and the last hold that ended.
How a hold ends
The room setpoint, the hot water mode and the Heating or Auto mode end:
- at the panel: change the matching setting on the display (heating mode of circuit 1, room setting of circuit 1, hot water mode). Gladys notes these settings once the controller has acknowledged its value and gives the hold back at the first different reading (a setting it cannot read gives nothing back);
- after 24 hours, by themselves;
- with Controller's own program or the button Give control back to the heat pump;
- when "Allow the commands" is turned off, when the display software version changes, or when the controller refuses the value.
The heating off has no end by the time: giving it back restarts the heating, which Gladys never does without a click. It ends only:
- with Controller's own program, Heating, Auto or the button Give control back to the heat pump, when "Allow the commands" is on;
- at the panel: set the heating mode of circuit 1 to Auto or On; Gladys gives the heating off back when it reads that setting, different from the one noted and other than Off, on two rounds in a row;
- when the address is removed from the configuration, or the device is deleted in Gladys.
The status and Control held by Gladys say since when it is held. In the
last resort, setting Ethernet back to anything but Modbus TCP on the
display, or stopping the integration, makes the controller forget within 5
minutes; the heating off kept in /data is written again when the
integration starts again.
Whether the panel or the 1000 block wins while Gladys holds a value is not known (never tested with a real CTC).
Heating off
Heating off (zone mode of circuit 1 = Off) is the protective command. It
works even when "Allow the commands" is off, while the controller has
not been read yet, after a failed round and when /data cannot be written
or is slow. It never waits behind the queued reads, but CTC answers one
request at a time: it waits for the Modbus exchange in flight to end
(usually a fraction of a second; up to about 7 s behind a rewrite whose
identity read and write both stay unanswered), then leaves first. Its own
answer is awaited 5 s; the line stays open after a silence.
It is refused only when no controller address is known: none in the
configuration and none kept in /data (the address of the stop, or the
last address where a CTC was identified). Before the configuration has
been read from Gladys (it is read again every 5 s, doubled up to 5
minutes, while Gladys does not answer), it waits for it up to 2.5 s, then
uses the address kept in /data.
It is kept in /data with its address and its date: after a restart of
the integration it is written again at once, before the configuration is
even read. When the configuration gives a new address, it is written there
only once a round has identified a CTC at that address (the same display
software version as before, when one was known); this wait is kept in
/data too.
When the controller does not acknowledge it within 3.5 s, Gladys answers that it is recorded and not yet acknowledged; when the controller refuses it (Modbus exception 1, 2 or 3), Gladys says so. In both cases it is kept and tried again as soon as the line is free, then after 15 s, then twice as long each time, up to 5 minutes (30 minutes after a refusal). Once acknowledged, it is written again every minute.
A newer mode (Heating, Auto) replaces it once its write has left;
/data is written before that, before the line is taken. If the
controller refuses the newer mode, the heating off stays. A command asked
before the heating off and not sent yet is cancelled.
Whether CTC keeps its frost protection with the zone mode Off is not known: check it on your installation before relying on it in winter.
The other commands
They need Allow the commands. Before each write, Gladys reads the display software version again in the same Modbus session and refuses when it is missing or not the one read before (another controller at that address). The write must leave within 3.5 s of the click or it is not sent. Several commands at once (a scene) are written one after the other, in order; a newer click of the same feature replaces an older one not sent yet. A write the controller acknowledges is held; one without an answer is reported "sent, without acknowledgement" and written again within the minute; a write refused by the controller is not held. None of them is written again after a restart of the integration: the controller forgets them within 5 minutes.
The control registers cannot be read back (the manual: write only): the acknowledgement of the controller is the confirmation Gladys can give. The statuses (heating circuit 1, heat pump) show the effect.
Not done (yet)
The hot water setpoint (register 1033: the manual gives no scale for the 1000 block, a wrong guess could overheat the water), the heating circuits 2 to 4, cooling, the immersion heater and compressor limits, the SmartGrid inputs, the alarm codes (65xxx), the display's web interface.
Konfigurationseinstellungen
Diese Einstellungen fragt CTC in seinem Konfigurationsbildschirm in Gladys ab.
| Einstellung | Typ | Pflichtfeld | Beschreibung |
|---|---|---|---|
| Your CTC heat pump | section | Nein | Shows your CTC heat pump (EcoZenith i255/i360/i550, EcoHeat, EcoPart, EcoAir behind them) in Gladys through the Modbus TCP interface of its display, without any cloud: temperatures, pressures, statuses, energy counters. On the display, set Installer > Define > Remote control > Ethernet to Modbus TCP (a display with 3 ports is needed). Enter its IP address (give it a fixed address in your router), save, then add the heat pump from the Discovery tab. The controller serves one Modbus client only: remove any other one. A setpoint or mode held by Gladys ends after 24 hours or when the setting is changed at the panel; a heating off ends only by a click, the panel, or removing the address. Modbus has no password: keep the heat pump on a trusted network. Never tested with a real CTC. Not affiliated with CTC. |
| IP address of the CTC display | string | Ja | An IPv4 address or a host name (Modbus port 502 unless you add one, for example 192.168.1.80:5020). |
| Allow the commands | boolean | Nein | Off by default. On: Gladys may set the heating circuit 1 mode (heating, auto), the hot water mode (economy, normal, comfort) and the room setpoint of circuit 1 (10 to 30 °C), written to CTC's volatile registers only, never to its stored settings. "Heating off" works even when this is off. |
| Refresh interval (s) | number | Nein | How often the controller is read, in seconds. |
| Language of the feature names | select | Nein | Used for the names of the device and features added from now on, for the state texts and for the command errors. |
So installierst du CTC in Gladys
- Öffne in Gladys Integrationen: CTC erscheint im Katalog neben den nativen Integrationen, mit einem Community-Badge.
- Klicke auf Installieren. Gladys lädt das Docker-Image (
ghcr.io/lm1lc3n7/gladys-ctc:0.1.1) herunter, startet es in einer vom Kern isolierten Sandbox und erzeugt die Oberfläche der Integration (Geräte, Erkennung und Konfiguration). - Öffne den Bildschirm Konfiguration der Integration, fülle die Einstellungen aus und speichere.
- Du kannst sie auch direkt über die URL ihres Repositorys installieren: https://github.com/LM1LC3N7/gladys-ctc.
CTC benötigt Gladys >=5.1.0. Der Katalog in Gladys wird stündlich aktualisiert, eine neue Version ist also spätestens eine Stunde nach ihrer Veröffentlichung verfügbar.
Du nutzt Gladys noch nicht? Es ist kostenlos und Open Source: folge der Installationsanleitung, um loszulegen.
Über externe Integrationen
CTC ist eine externe Integration: eine Community-Integration, die als Docker-Container verpackt und auf GitHub veröffentlicht wird. Gladys installiert sie mit einem Klick und führt sie in einer vom Kern isolierten Sandbox aus. Sie wird von LM1LC3N7 veröffentlicht und gepflegt, nicht vom Gladys-Kernteam.
- Alle Integrationen durchsuchen, native und aus der Community
- Deine eigene externe Integration bauen und veröffentlichen
- Quellcode auf GitHub — Quelle dieser Dokumentation