TapHome

ClimaControl for Mitsubishi Electric Air-to-Air

Packet Parser → HTTP
Submitted by
Last updated: 04. 2026
ClimaControl for Mitsubishi Electric Air-to-Air

ClimaControl ME_CN105_ATA_WIFI is a third-party Wi-Fi gateway made by ProtoART (Enschede, Netherlands) that adds local network control to Mitsubishi Electric air-to-air air conditioners. The module plugs into the CN105 service connector present on virtually every Mitsubishi Electric RAC and PAC indoor unit and exposes the heat pump over a local HTTP REST API, an MQTT client and an mDNS hostname — all without a cloud account. TapHome connects over HTTP on the local network, reads the heat pump status JSON and drives power, mode, fan, vanes and the temperature setpoint.

This is a local integration — no MelCloud account, no internet dependency, no polling of Mitsubishi’s cloud. The template coexists with existing MelCloud Wi-Fi adapters and MHK1 / MHK2 wired thermostats on the same CN105 bus; the last command wins.

The gateway hardware is made by ProtoART, not by Mitsubishi Electric. Mitsubishi Electric manufactures the air conditioners that this gateway controls. ProtoART offers separate gateway variants for Mitsubishi Heavy Industries (MHI_XY_ATA_WIFI / MHI_CNS_ATA_WIFI) and for Mitsubishi Electric Air-to-Water Ecodan (ME_CN105_ATW_WIFI) — use the corresponding template for those systems.

Hardware

The ClimaControl module is a small plastic enclosure (no external power supply needed) based on an ESP32 Wi-Fi microcontroller. It ships fully assembled and pre-flashed — no soldering, no firmware flashing required.

The kit contains:

  • ClimaControl module (ESP32, Wi-Fi b/g/n, MQTT and HTTP REST client)
  • Ready-made CN105 harness (5-pin keyed connector)
  • Optional: wireless external temperature & humidity sensor (CR2032 battery puck)
  • Optional: CN105 extension cable (ordered separately)

Power is drawn from the 12 V rail on CN105 — no mains wiring and no external PSU are required. One ClimaControl module is needed per indoor unit (multi-split systems require one module per indoor head).

Supported Mitsubishi Electric indoor units

ProtoART documents the gateway as compatible with most Mitsubishi Electric RAC and PAC indoor units that expose a CN105 port, including ducted, wall-mount, cassette and floor-mount units.

FamilyForm factorConfirmed series
MSZWall-mounted split (RAC)MSZ-AP, AY, DM, EF, FD, FE, FH, FS, GA, GB, GC, GE, GL, GS, GV, HR, LN, RW
MLZ / MLSOne-way ceiling cassetteMLZ-KA, MLZ-KP, MLS-KP
MFZFloor-standingMFZ-KA, MFZ-KJ
PEAD / PEA / PKA / PVA / PLA / SEZDucted / Mr. Slim / PACPEAD-M, PEAD-RP100, PEA-RP140EA2, PKA-A, PKFY-P06NLMU-E-TH, PVA-A, PLA-A18BA, SEZ-KD
Multi-split / Mr. SlimOutdoor / multi-zoneMSXY-FP, MSXY-FNVE, SVZ-KPNA, MXZ-8C48NAHZ, MPEZS-60VJA, NAXWST18A112AA

If a specific model is not listed but has a CN105 port, it is typically compatible — ProtoART invites users to contact their support at [email protected] for confirmation.

ClimaControl ME_CN105_ATA_WIFI is for Mitsubishi Electric air-to-air systems only. It does not support Mitsubishi Heavy Industries (MHI) equipment — MHI indoor units need the MHI_XY_ATA_WIFI or MHI_CNS_ATA_WIFI variant instead. Mitsubishi Electric Air-to-Water (Ecodan) units use a different ClimaControl variant (ME_CN105_ATW_WIFI).

Installation

The module connects to the indoor unit’s internal PCB. Installation requires opening the indoor unit’s electrical compartment, so follow the Mitsubishi Electric installation manual for the relevant model and always power off the unit at the mains breaker first.

  1. Disconnect the air-conditioner at the mains breaker.
  2. Open the indoor-unit’s electrical compartment per the Mitsubishi Electric installation manual.
  3. Locate the CN105 5-pin connector on the indoor-unit PCB (sometimes labelled CN105 or CNS).
  4. Plug the ClimaControl harness into CN105 — the connector is keyed so only one orientation is possible.
  5. Route the cable out through an existing service opening and mount the ClimaControl box on the wall next to the indoor unit (or inside the chassis if there is space).
  6. Restore mains power — ClimaControl powers up from the 12 V rail on CN105.
Wi-Fi setup (captive portal)

On first boot the module advertises its own Wi-Fi access point and opens a captive portal. Join the AP, enter the home Wi-Fi credentials in the portal and the module joins the LAN. From that point on it advertises itself via mDNS / Bonjour as heatpump.local — reachable at http://heatpump.local/ for the web UI and http://heatpump.local/control for the REST API.

Use the heatpump.local mDNS hostname rather than a DHCP-assigned IP address. The hostname survives DHCP renewals and router reboots — the IP may change, the name will not.

Coexistence with MelCloud and MHK thermostats

ClimaControl connects in parallel to existing MelCloud Wi-Fi interfaces and MHK1 / MHK2 wired thermostats — all controllers share the CN105 bus. No special wiring is needed and the last command wins. TapHome, the MelCloud app and a wall thermostat can all drive the same unit.

Configuration

TapHome import parameter

During template import in the TapHome app, a single parameter must be set:

ParameterDescriptionRecommended value
IpAddressHost reachable from the TapHome CCUheatpump.local

Port 80 is fixed. Authentication is not used — the module is designed for trusted LAN access only. Keep it on a trusted network segment or VLAN; any device that can reach /control on port 80 can drive the HVAC.

If the mDNS hostname is not resolvable on the TapHome CCU’s network (for example, across subnets that do not forward mDNS), fall back to a static DHCP lease and enter the IP address directly.

Device capabilities

The template polls the /control endpoint every 2.5 seconds, caches the full JSON status response in a module-level variable (status) and exposes seven child devices that parse individual fields from the cache.

Power

A simple on/off Switch. Reads heatpump.power (on/off) and writes /control?cmd=heatpump&power=on|off.

Operating mode

A multi-value switch exposing the five modes supported on Mitsubishi Electric air-to-air indoor units:

ValueModeWritten as
0Automode=auto
1Coolingmode=cool
2Ventilation (Fan only)mode=fan
3Drymode=dry
4Heatingmode=heat
Fan speed

A multi-value switch with six steps: Quiet, 1, 2, 3, 4, Auto. Reads heatpump.fan and writes /control?cmd=heatpump&fan=…. The internal enum maps quiet=0, 1=1, 2=2, 3=3, 4=4, auto=5.

Thermostat

A thermostat device that reads the current indoor temperature (heatpump.actual_temperature) and the current setpoint (heatpump.set_temperature), and writes a new setpoint via /control?cmd=heatpump&set_temperature={value}. Temperatures are reported in °C as floats.

The actual_temperature field is fed either by the indoor unit’s built-in thermistor or — if used — by the Remote Temperature channel described below.

Remote Temperature (external room sensor)

A write-only variable that feeds an external room-temperature value to the HVAC, overriding the indoor unit’s built-in thermistor. Any TapHome temperature sensor (wireless, Modbus, Zigbee, etc.) can be bridged to it with a simple smart rule: whenever the source sensor changes, write its °C value to this device.

The remote temperature value must be refreshed at least every 15 seconds, otherwise the unit falls back to its built-in thermistor until a new value arrives. Configure the smart rule to write on every change and on a periodic heartbeat (for example, every 10 seconds) so that short sensor-idle periods do not drop the override.

Values ≤ 0 and NaN are ignored by the template — use this feature only when you have a reliable room sensor paired on the TapHome side.

Vane position (vertical louver)

A multi-value switch for the vertical louver angle: 1, 2, 3, 4, Auto. Reads heatpump.vane and writes /control?cmd=heatpump&vane=…. The ProtoART HTTP API also documents a swing value — the current template does not expose it.

Widevane position (horizontal louver)

A multi-value switch for the horizontal louver direction: Far left, Left, Middle, Right, Far right, Wide, Swing. Reads heatpump.widevane and writes /control?cmd=heatpump&widevane=…. ProtoART additionally documents a split value which the current template does not expose.

Module-level Reset action

A single service action at module level — Reset — sends /control?cmd=restart and triggers an ESP32 reboot. Useful after firmware upgrades or when the CN105 UART link appears stuck.

Additional capabilities (not implemented)

ProtoART exposes many more telemetry fields than the current template consumes. They can be added in a future template revision:

  • Indoor coil temperature (heatpump.tinp) and outdoor temperature (heatpump.tout) — coil / outdoor thermistors.
  • Indoor coil pressure (heatpump.pinp) — diagnostic.
  • Power consumption (heatpump.tpcns) — cumulative energy counter; could be mapped as a TapHome electric meter.
  • Operation time (heatpump.optime) — compressor run-hours counter.
  • Operation flag (heatpump.oper) — compressor active / standby.
  • Defrost state (heatpump.defrost) — true while the outdoor unit is defrosting.
  • Hot adjust (heatpump.hotadjust) — pre-heating flag.
  • Standby state (heatpump.standby) — indoor unit is on but not actively heating/cooling.
  • i-see sensor state (heatpump.isee) — MSZ-FH series occupant detection.
  • External sensor readings (sensor.external.*) — temperature, humidity and battery level of the optional wireless CR2032 puck.
  • Diagnostics — CN105 UART link status (sys.conhp), external sensor link (sys.conext), module uptime (sys.up), Wi-Fi RSSI (wifi.rssi), firmware version (fw.curr).

Optional wireless external sensor

ProtoART sells a small battery-powered wireless sensor (CR2032, LoRa / 2.4 GHz) as an optional add-on. The puck reports ambient temperature and humidity and is used to eliminate the “heat bubble” effect around the indoor-unit thermistor — the built-in sensor sits inside the chassis and reads warmer than the actual room during heating.

The sensor pairs directly to the ClimaControl module (not to TapHome). Its values appear in the JSON status under sensor.external.* and are used by the module’s internal logic. The current TapHome template does not read them back — if the external sensor is not purchased, feed a room temperature from any TapHome sensor to the Remote Temperature device instead.

Troubleshooting

heatpump.local does not resolve
  1. Confirm the ClimaControl module has joined the home Wi-Fi — its LED status is documented in the ProtoART manual.
  2. Ensure the TapHome CCU is on the same LAN / VLAN as the module. mDNS (Bonjour) is link-local — it does not cross subnets unless an mDNS reflector is configured on the router.
  3. Open http://heatpump.local/control in a browser on a device in the same LAN — a JSON status response confirms the module is reachable.
  4. If mDNS is not available, assign a static DHCP lease to the module’s MAC and enter the IP directly in the TapHome IpAddress import parameter.
All values read as NaN after import

The template polls /control with no parameters every 2.5 seconds. If every field is NaN, the HTTP request is not succeeding:

  1. Check that IpAddress points to a reachable host.
  2. Open http://{IpAddress}/control in a browser — if it returns a login form or an error page, the module firmware may be outdated; update via ProtoART Firmware Release Notes.
  3. Check the CN105 cable — if the cable is unseated or the indoor unit is powered off, the module boots but the heat pump section of the JSON returns empty / default values. The sys.conhp diagnostic (not currently exposed) goes to 0 in this case.
Remote Temperature has no effect
  1. Confirm the write is executing at least every 15 s — with a longer heartbeat the unit reverts to its internal thermistor between writes.
  2. Check that the written value is a positive float (°C). Values ≤ 0 and NaN are explicitly ignored by the template script.
  3. Some Mitsubishi Electric indoor units require the unit to be in Cooling, Heating or Auto mode for the remote temperature to take effect. In Dry and Fan modes the setpoint is not used by the compressor, so the remote temperature has no visible impact.
Setpoint writes are silently overridden

If another controller (the MelCloud app, an MHK thermostat, the IR remote) issues a command at roughly the same time as TapHome, the last command on the CN105 bus wins. This is expected behaviour for a multi-controller system. If a single controller should own the setpoint, remove the others (or restrict their access via Wi-Fi / schedule).

Fan or vane commands return with no effect

The template’s enum maps 0–5 for fan/vane. Some Mitsubishi Electric models do not physically support every level — for example, a unit without a “Quiet” fan mode will accept the command but run the nearest supported step. Test each speed against the unit’s remote controller to confirm which ones the specific model actually exposes.

ProtoART hardware is open to third-party home-automation platforms (Home Assistant, OpenHAB, FHEM, Tasmota, Homey). Multiple clients can connect to the same module concurrently — TapHome and Home Assistant, for example, can both read and write without interference, because the module does not serialise state between clients. Avoid conflicting writes from automations running in parallel.

Available devices

ClimaControl ME_CN105_ATA_WIFI Module
Service Actions
ResetRestarts the ClimaControl module (ESP32 reboot) via /control?cmd=restart. Useful after firmware updates or when the CN105 UART link hangs.
Custom Variables

ClimaControl - Mitsubishi Electric Air-to-Air

Read (module)
VAR response := SENDHTTPREQUEST("/control");
IF response.IsSuccess
 status := response.Content;
ELSE
 ADDERROR(response.StatusCode + " (" + response.ReasonPhrase + ")");
 RETURN(NaN);
END
Service Actions
Reset
VAR response := SENDHTTPREQUEST("/control?cmd=restart");
IF response.IsSuccess = false
 RETURN("Error");
ELSE
 RETURN("OK");
END
Fan Speed Multi-value Switch

Fan speed selector — Quiet, 1, 2, 3, 4, Auto. Reads heatpump.fan; writes /control?cmd=heatpump&fan={value}.

string enum_map
Values / States: Quiet · ${device_mode_Automatic}

Fan Speed

Read switch state
switch(parsejson(status, "heatpump.fan"),
"quiet", 0, "1", 1, "2", 2, "3", 3, "4", 4, "auto", 5, NaN)
Write switch state
IF (!ISNAN(Mu))
	VAR response := SENDHTTPREQUEST("/control?cmd=heatpump&fan=" + switch(Mu,
	0, "quiet", 1, "1", 2, "2", 3, "3", 4, "4", 5, "auto", ""));
	IF response.IsSuccess = false
	 ADDERROR(response.StatusCode);
	END
END
Power Switch

On/off power state of the indoor unit. Reads heatpump.power; writes /control?cmd=heatpump&power=on|off.

string enum_map
Values / States: ON · OFF

Power

Read switch state
switch(parsejson(status, "heatpump.power"),
"off", 0, "on", 1, NaN)
Write switch state
VAR response := SENDHTTPREQUEST("/control?cmd=heatpump&power=" + St);
IF response.IsSuccess = false
 ADDERROR(response.StatusCode);
END
Remote Temperature Variable

Write-only channel that feeds an external room temperature (°C) to the HVAC, overriding the indoor unit's built-in thermistor. Must be refreshed at least every 15 s or the unit falls back to its internal sensor. Values ≤ 0 and NaN are ignored.

float Unit: °C

Remote Temperature

Write
IF (!(ISNAN(Va) or Va <= 0))
	VAR response := SENDHTTPREQUEST("/control?cmd=heatpump&remote_temperature=" + Va);
	IF response.IsSuccess = false
	 ADDERROR(response.StatusCode);
	END
END
Mode Multi-value Switch

Operating mode selector — Auto, Cooling, Ventilation (Fan), Dry, Heating. Reads heatpump.mode; writes /control?cmd=heatpump&mode={value}.

string enum_map
Values / States: ${device_mode_Automatic} · ${device_mode_Cooling} · ${category_ventilation} · Dry · ${device_mode_Heating}

Mode

Read switch state
switch(parsejson(status, "heatpump.mode"),
"auto", 0, "cool", 1, "fan", 2, "dry", 3, "heat", 4, NaN)
Write switch state
IF (!ISNAN(Mu))
	VAR response := SENDHTTPREQUEST("/control?cmd=heatpump&mode=" + switch(Mu,
	0, "auto", 1, "cool", 2, "fan", 3, "dry", 4, "heat", ""));
	IF response.IsSuccess = false
	 ADDERROR(response.StatusCode);
	END
END
Thermostat Thermostat

Indoor temperature thermostat — reads the actual indoor temperature (heatpump.actual_temperature) and the current setpoint (heatpump.set_temperature); writes the new setpoint via /control?cmd=heatpump&set_temperature={value} in °C.

float Unit: °C

Thermostat

Read temperature
parsejson(status, "heatpump.actual_temperature")
Read desired temperature
parsejson(status, "heatpump.set_temperature")
Write desired temperature
VAR response := SENDHTTPREQUEST("/control?cmd=heatpump&set_temperature=" + Se);
IF response.IsSuccess = false
 ADDERROR(response.StatusCode);
END
Vane Position Multi-value Switch

Vertical vane (louver) position — 1, 2, 3, 4, Auto. Reads heatpump.vane; writes /control?cmd=heatpump&vane={value}.

string enum_map
Values / States: -- · ${device_mode_Automatic}

Vane Position

Read switch state
switch(parsejson(status, "heatpump.vane"),
"1", 1, "2", 2, "3", 3, "4", 4, "auto", 5, NaN)
Write switch state
IF (!ISNAN(Mu))
	VAR response := SENDHTTPREQUEST("/control?cmd=heatpump&vane=" + switch(Mu,
	1, "1", 2, "2", 3, "3", 4, "4", 5, "auto", ""));
	IF response.IsSuccess = false
	 ADDERROR(response.StatusCode);
	END
END
Widevane Position Multi-value Switch

Horizontal widevane (louver) position — Far left, Left, Middle, Right, Far right, Wide, Swing. Reads heatpump.widevane; writes /control?cmd=heatpump&widevane={value}.

string enum_map
Values / States: farleft · left · middle · right · farright · wide · swing

Widevane Position

Read switch state
switch(parsejson(status, "heatpump.widevane"),
"farleft", 0, "left", 1, "middle", 2, "right", 3, "farright", 4, "wide", 5, "swing", 6, NaN)
Write switch state
IF (!ISNAN(Mu))
	VAR response := SENDHTTPREQUEST("/control?cmd=heatpump&widevane=" + switch(Mu,
	0, "farleft", 1, "left", 2, "middle", 3, "right", 4, "farright", 5, "wide", 6, "swing", ""));
	IF response.IsSuccess = false
	 ADDERROR(response.StatusCode);
	END
END
Connection: Packet Parser → HTTP
Possible improvements (18)
  • Indoor coil (input) temperature — Indoor unit coil temperature — available in JSON status and on MQTT /heatpump/tinp. Could be added as PacketParserVariable, read-only, °C.
  • Outdoor temperature — Outdoor unit temperature — available in JSON status and on MQTT /heatpump/tout. Could be added as PacketParserVariable, read-only, °C.
  • Indoor coil pressure — Indoor coil pressure (diagnostic). Could be added as PacketParserVariable, read-only.
  • Power consumption — Cumulative power consumption reported by the heat pump. Homey app maps this as an energy meter — could be added as PacketParserElectricityMeter.
  • Operation time — Total compressor operating time counter. Could be added as PacketParserVariable, read-only.
  • Operation flag — Indicates whether the compressor is actively running. Useful for detecting standby vs. active cycles.
  • Defrost state — True when the outdoor unit is in a defrost cycle. Homey app exposes this; useful for user feedback during winter operation.
  • Hot adjust — Pre-heat adjustment flag — indicates the unit is warming up before delivering air.
  • Standby state — Indicates the indoor unit is in standby (on but not actively heating/cooling).
  • i-see sensor state — i-see infrared presence sensor state (on MSZ-FH and similar models). Reports detected occupant position.
  • External sensor temperature — Temperature from the optional wireless CR2032 external sensor (puck). The template does not read it — users would need a separate Remote Temperature feed.
  • External sensor humidity — Humidity from the optional wireless external sensor. Homey app exposes this capability.
  • External sensor battery level — Battery level of the optional CR2032 external sensor.
  • Module uptime — ClimaControl module uptime. Could be exposed as a module-level service attribute.
  • CN105 UART link status — Status of the UART link between the ClimaControl module and the indoor unit. Critical diagnostic — value 0 means the CN105 cable is disconnected or the indoor unit is off.
  • External sensor link status — Status of the wireless link to the optional external sensor (1 = paired).
  • WiFi signal strength — WiFi RSSI of the ClimaControl module (module.* / sys.* section of the JSON).
  • Firmware version — Current firmware version of the ClimaControl module. Could be exposed as a module-level service attribute.

Sources

  • ProtoART — ME_CN105_ATA_WIFI HTTP API & MQTT Topics
    protoart.net 2026-04-16
  • ProtoART — ME_CN105_ATA_WIFI Supported Models
    protoart.net 2026-04-16
  • ProtoART — ME_CN105_ATA_WIFI Installation
    protoart.net 2026-04-16
  • Lectronz — ClimaControl Mitsubishi Electric Air-to-Air HVAC
    lectronz.com 2026-04-16
  • Homey — ClimateControl community app (net.protoart.clima)
    homey.app 2026-04-16