CoolAutomation CoolMaster
Local TCP integration for the CoolAutomation CoolMaster family — CoolMasterNet and the larger CoolMaster Pro. These boxes are universal VRF/VRV-to-IP gateways: they sit on a manufacturer's indoor-unit bus (Daikin, Samsung, Mitsubishi Electric/Heavy, Toshiba, Hitachi, LG, Panasonic, and more) and expose every indoor unit over a single ASCII "line" protocol on TCP 10102.
One CoolMaster becomes one GEM device row; each indoor air handler becomes a climate zone addressed by its CoolMaster UID (for example L7.400 — line 7, address 400).
What this integration covers
- Power — on / off per indoor unit.
- Mode — cool, heat, auto, dry, fan (mapped to GEM
system_mode;offpowers the unit down). - Setpoint — single target temperature per unit, reported and set in °F.
- Fan speed — low, medium, high, very_strong (CoolMaster "Top"/turbo), auto.
- Swing — auto / vertical / horizontal / off, where the indoor unit supports it.
- Status polling of on/off state, mode, room temperature, setpoint, fan speed, the unit fault code, and the active heating/cooling demand flag.
- Auto-discovery — the driver enumerates indoor units with
lsand (by default) creates a climate zone per unit.
What this integration does NOT cover (yet)
- Push updates. The CoolMaster line protocol is strictly request/response with no unsolicited event stream, so a change made at a wall controller appears at the next poll (within
poll_interval), not instantly. - Dual heat/cool setpoints. A CoolMaster indoor unit has a single setpoint; the
setpointcommand accepts amodeargument for climate-UI compatibility but always applies that one setpoint. - Line / DIP configuration. Assigning an HVAC line to a manufacturer (Daikin, Samsung, …) is done on the box — by DIP switches for lines L1/L2 and on-device for L3–L8. The driver consumes whatever lines are already configured.
- PRO-only object data (
ostat/istatoutdoor and indoor "PRO" telemetry), filter-life resets, group management, and the box's other gateway roles (Modbus, BACnet, KNX, REST). The driver speaks only the indoor-unit control surface.
Prerequisites
- A CoolMaster reachable from the GEM host on TCP 10102 (the "ASCII server" / aserver port). Confirm it is enabled on the box.
- HVAC lines already configured on the CoolMaster with indoor units detected (verify with
ls/lineon the device console).
Setup steps
- In GEM, go to System → Devices → Add Device (Open Devices) and pick CoolAutomation CoolMaster as the driver.
- Enter the device
ipandport(default10102). - Save. After a few seconds the device row should show Connected — the driver reads the box's °C/°F setting and identity, then polls
ls. - Run the
discovercommand to list the indoor units the CoolMaster currently reports (UID, mode, setpoint, temperature). - Leave
auto_create_zoneson (the default) to have a climate zone created per indoor unit, or set it off and create zones by hand withaddress= the CoolMaster UID (e.g.L7.400).
Auto-created zones are placed under the seeded Climate subsystem. If your site has no climate subsystem the driver logs a warning and skips creation — create the zones manually (any subsystem works; the subsystem only affects grouping/presentation, not whether commands work).
Attribute reference
Device attributes
| Name | Type | Required | Description |
|---|---|---|---|
ip | string | yes | LAN IP or hostname of the CoolMaster. |
port | int | no | ASCII server port (default 10102). |
poll_interval | int | no | How often to poll all indoor units with ls, in ms (default 15000). |
auto_create_zones | bool | no | Create a climate zone per discovered indoor unit (default true). |
firmware | string | — | Read from the box (version). |
model / serial | string | — | Read from the box (S/N). |
Zone attributes
| Name | Type | Description |
|---|---|---|
address | string | CoolMaster unit UID, e.g. L7.400 (required). |
state | string | on / off. |
system_mode | string | off when the unit is off, otherwise cool / heat / auto / dry / fan. |
device_mode | string | The underlying mode regardless of power — used for an optimistic power-on. |
setpoint | int | Target temperature in °F. |
temperature | int | Current room temperature in °F. |
fan_mode | string | auto / low / medium / high / very_strong. |
system_modes / fan_modes | json | Capability lists published once so the climate UI renders the right buttons. |
min / max | int | Setpoint bounds seeded by the driver (60–90 °F, or 16–32 when the box is °C). |
fault | string | The CoolMaster fail-code for the unit; empty when OK. |
demand | bool | true while the unit is actively calling for heating/cooling. |
swing | string | Last swing value applied. |
Commands
| Command | Args | Notes |
|---|---|---|
on / off | address | Power the unit. on resumes its last mode. |
system_mode | address, mode | off, cool, heat, auto, dry, fan. Any non-off mode also powers the unit on (a CoolMaster mode verb does not power on by itself). |
fan_mode | address, mode | auto, low, medium, high, very_strong (= "Top"/turbo). |
setpoint | address, setpoint, mode | Target temperature in °F. mode is accepted for UI compatibility but the unit has a single setpoint. |
swing | address, mode | auto, vertical, horizontal, off, where supported. |
get_temperature / get_system_mode / get_fan_mode | address | Return the last-polled value for the zone. |
discover | — | List all indoor units the box currently reports. |
How state mapping works
- Temperature units. GEM works in °F. The CoolMaster has one display unit (°C or °F); each
lstemperature carries aC/Fsuffix and the driver also reads the unit from the box'ssetreply. Reads are converted to °F; setpoints are converted back to the device unit before sending. On a °F box this is a no-op. - Off vs. mode. The climate UI treats "off" as a mode, so when a unit is off the driver reports
system_mode = offwhile preserving the real cool/heat selection indevice_mode. Turning the unit back on optimistically restoresdevice_mode, and the next poll reconciles. - Polling. Every
lsreply line is parsed independently and keyed by UID, so one poll refreshes every zone. Duplicate UIDs (only possible with the device'ssimultest mode) collapse onto a single zone.
Troubleshooting
| Symptom | Check |
|---|---|
discover returns no units but the device connects | The HVAC line may be configured but have no indoor units detected on the bus. Run ls / line on the CoolMaster directly. |
| Setpoint lands a degree or two off | The box is likely in °C while GEM works in °F; the driver rounds on conversion. Confirm the device unit with the set command. |
A zone shows a fault value | The CoolMaster reports a non-OK fail-code for that indoor unit — check the unit's error code on the equipment. |
| Zone state lags a manual change at a wall controller | Expected — there is no push; state refreshes on poll_interval. |