Skip to main content

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; off powers 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 ls and (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 setpoint command accepts a mode argument 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/istat outdoor 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 / line on the device console).

Setup steps​

  1. In GEM, go to System → Devices → Add Device (Open Devices) and pick CoolAutomation CoolMaster as the driver.
  2. Enter the device ip and port (default 10102).
  3. 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.
  4. Run the discover command to list the indoor units the CoolMaster currently reports (UID, mode, setpoint, temperature).
  5. Leave auto_create_zones on (the default) to have a climate zone created per indoor unit, or set it off and create zones by hand with address = the CoolMaster UID (e.g. L7.400).
Subsystem placement

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​

NameTypeRequiredDescription
ipstringyesLAN IP or hostname of the CoolMaster.
portintnoASCII server port (default 10102). A blank or out-of-range value uses 10102.
poll_intervalintnoHow often to poll all indoor units with ls, in ms (default 15000). The poll runs at most once a second; zero, negative or unreadable values use the default.
auto_create_zonesboolnoCreate a climate zone per discovered indoor unit (default true).
firmwarestring—Read from the box (version).
model / serialstring—Read from the box (S/N).

Zone attributes​

NameTypeDescription
addressstringCoolMaster unit UID, e.g. L7.400 (required).
statestringon / off.
system_modestringoff when the unit is off, otherwise cool / heat / auto / dry / fan.
device_modestringThe underlying mode regardless of power — used for an optimistic power-on.
setpointintTarget temperature in °F.
temperatureintCurrent room temperature in °F.
fan_modestringauto / low / medium / high / very_strong.
system_modes / fan_modesjsonCapability lists published once so the climate UI renders the right buttons.
min / maxintSetpoint bounds seeded once by the driver: 60–90 °F, in °F like the setpoint, whatever unit the box displays. Older versions seeded 16 / 32 on a °C box, which capped the setpoint at 32 °F; if a zone still shows those values, set them to 60 / 90.
faultstringThe CoolMaster fail-code for the unit; empty when OK.
demandbooltrue while the unit is actively calling for heating/cooling.
swingstringLast swing value applied.

Commands​

CommandArgsNotes
on / offaddressPower the unit. on resumes its last mode.
system_modeaddress, modeoff, 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_modeaddress, modeauto, low, medium, high, very_strong (= "Top"/turbo).
setpointaddress, setpoint, modeTarget temperature in °F. mode is accepted for UI compatibility but the unit has a single setpoint.
swingaddress, modeauto, vertical, horizontal, off, where supported.
get_temperature / get_system_mode / get_fan_modeaddressReturn 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 ls temperature carries a C/F suffix and the driver also reads the unit from the box's set reply. 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 = off while preserving the real cool/heat selection in device_mode. Turning the unit back on optimistically restores device_mode, and the next poll reconciles.
  • Polling. Every ls reply line is parsed independently and keyed by UID, so one poll refreshes every zone. Duplicate UIDs (only possible with the device's simul test mode) collapse onto a single zone. A zone whose address was typed in lower case (l7.400) is matched to the unit the box reports as L7.400.
  • Commands. A command answers an error, and leaves the zone's state alone, when the line could not be sent (the box is disconnected). Otherwise the zone is updated straight away and the next poll confirms it.
  • Connection health. Once the box has answered on a connection, three polls in a row with no reply (at least 45 seconds) close the connection and the driver reconnects. Without this, a box that lost power could leave the device showing Connected with every zone frozen at its last values.

Troubleshooting​

SymptomCheck
discover returns no units but the device connectsThe 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 offThe 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 valueThe 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 controllerExpected — there is no push; state refreshes on poll_interval.
The device drops to disconnected and reconnects on its ownThe box stopped answering polls for three intervals. Check its power and network link; the log line coolmaster: no reply to polls, recycling socket marks each occurrence.
A unit never gets a zone and the log mentions a zone insert errorThe zone could not be created (for example its name is taken). The driver waits 10 minutes before trying that unit again; create the zone by hand with the unit's UID as address.