Skip to content
Get started

Mitsubishi CN105 Climate

The mitsubishi_cn105 component allows communication with Mitsubishi Electric indoor units using the CN105 connector.

The component communicates with the unit over UART and provides control and state reporting.

The CN105 connector exposes power and UART communication lines.

PinFunctionWire colorDevice
1NC
2GNDorangeGND
35Vbrown5V
4TXblueRX
5RXredTX
CN105 wiring diagram
CN105 connector wired to a D1 Mini Pro

WARNING

Verify the pinout and voltage levels before connecting.

This component requires a UART bus configured with:

  • 8 data bits
  • EVEN parity
  • 1 stop bit
  • Baud rate 2400 or 9600

NOTE

The required baud rate depends on the indoor unit. During initial setup, try both supported values if communication does not work.

uart:
id: ac_uart
tx_pin: GPIO1
rx_pin: GPIO3
data_bits: 8
baud_rate: 2400
parity: EVEN
stop_bits: 1
mitsubishi_cn105:
id: hp
uart_id: ac_uart
climate:
- platform: mitsubishi_cn105
mitsubishi_cn105_id: hp
name: "Living Room AC"
supported_swing_modes: BOTH

WARNING

If you are using the Logger Component, make sure you are not using the same pins, or disable UART logging with:

logger:
baud_rate: 0
  • Target temperature range: 16 °C to 31 °C
  • Current temperature reporting
  • Modes: OFF, HEAT, COOL, DRY, FAN_ONLY, HEAT_COOL (called AUTO by Mitsubishi)
  • Fan modes: AUTO, QUIET, LOW, MEDIUM, MIDDLE, HIGH
  • Swing modes: OFF, VERTICAL, HORIZONTAL, BOTH (configurable via supported_swing_modes)
  • Vertical vane direction select

NOTE

Fan modes map to the following Mitsubishi fan speeds:

  • AUTOAUTO
  • QUIETQUIET
  • LOWSPEED 1
  • MEDIUMSPEED 2
  • MIDDLESPEED 3
  • HIGHSPEED 4
  • id (Optional, ID): Manually specify the ID of this Mitsubishi CN105 hub. Use this ID to reference the hub from climate entities and actions.

  • uart_id (Optional, ID): The UART bus to use.

  • update_interval (Optional, Time): Interval between status updates. Defaults to 1s. Lower values provide faster detection of external changes, for example when using the remote control.

  • telemetry_request_min_interval (Optional, Time): Minimum time between consecutive telemetry reads. Defaults to 60s.

    This allows keeping a low update_interval (to quickly reflect changes, e.g. when using an IR remote) while avoiding excessive telemetry requests (for example room temperature reads).

    Telemetry is still requested during regular polling cycles, so the effective update frequency is bounded by update_interval.

    Set to never to disable telemetry polling.

  • vane (Optional): Vane state automation configuration.

    • on_state (Optional, Automation): An automation to run whenever the hub publishes its current state. The automation receives the current vane state as x. See vane.on_state Trigger for the available values and an example.
  • mitsubishi_cn105_id (Optional, ID): The Mitsubishi CN105 hub to use.

  • supported_swing_modes (Optional, enum): Selects which swing modes are exposed by the climate entity. Defaults to 'OFF'.

    • 'OFF' — no swing support
    • VERTICAL — exposes 'OFF', VERTICAL
    • HORIZONTAL — exposes 'OFF', HORIZONTAL
    • BOTH — exposes 'OFF', VERTICAL, HORIZONTAL, BOTH
  • All other options from Climate.

Vane controls are optional and can be enabled independently of the climate entity’s supported_swing_modes. They expose Mitsubishi-specific vane options that are available on the indoor unit but are not represented by Home Assistant’s generic climate model. Vane controls require a top-level mitsubishi_cn105: hub; see Migration From Climate-Owned Configuration if your configuration still defines the hub options on the climate: entry.

  • mitsubishi_cn105_id (Optional, ID): The Mitsubishi CN105 hub to use.

  • vertical_vane_direction (Optional, Select): Exposes the vertical vane direction as a select entity.

    Available options are: Auto, 1, 2, 3, 4, 5, Swing.

    These are the select option labels exposed to Home Assistant. If referenced from automations or templates, use them exactly as shown, including casing.

    All options from Select are supported.

    Example:

    mitsubishi_cn105:
    id: hp
    # ...
    select:
    - platform: mitsubishi_cn105
    mitsubishi_cn105_id: hp
    vertical_vane_direction:
    name: "Vertical Vane"

The vane.on_state trigger runs whenever the Mitsubishi CN105 hub publishes a vane state. This includes updates received from the indoor unit and changes requested through ESPHome. It is a snapshot trigger, not a change-only trigger, so it can run repeatedly when the vane direction has not changed.

The trigger passes a VaneState value named x to lambdas. The current vertical vane direction is available as x.vertical.direction and can have one of these values:

  • VERTICAL_VANE_MODE_AUTO
  • VERTICAL_VANE_MODE_POSITION_1
  • VERTICAL_VANE_MODE_POSITION_2
  • VERTICAL_VANE_MODE_POSITION_3
  • VERTICAL_VANE_MODE_POSITION_4
  • VERTICAL_VANE_MODE_POSITION_5
  • VERTICAL_VANE_MODE_SWING
  • VERTICAL_VANE_MODE_UNKNOWN
mitsubishi_cn105:
id: hp
# ...
vane:
on_state:
- lambda: |-
switch (x.vertical.direction) {
case VERTICAL_VANE_MODE_AUTO:
ESP_LOGI("vane", "Vertical vane is automatic");
break;
case VERTICAL_VANE_MODE_SWING:
ESP_LOGI("vane", "Vertical vane is swinging");
break;
case VERTICAL_VANE_MODE_UNKNOWN:
ESP_LOGW("vane", "Vertical vane direction is unknown");
break;
default:
ESP_LOGI("vane", "Vertical vane is in a fixed position");
break;
}

The mitsubishi_cn105.vane.control action changes the vane direction. Its id must reference the top-level Mitsubishi CN105 hub. The currently supported setting is vertical.direction, which accepts AUTO, 1, 2, 3, 4, 5, or SWING. It can also be a lambda returning one of the corresponding VERTICAL_VANE_MODE_* values. A lambda returning VERTICAL_VANE_MODE_UNKNOWN is ignored and does not change the vane direction.

on_...:
- mitsubishi_cn105.vane.control:
id: hp
vertical:
direction: SWING

Configuration variables:

  • id (Required, ID): The ID of the top-level mitsubishi_cn105 hub.
  • vertical (Optional): Vertical vane settings.
    • direction (Optional, string, templatable): One of AUTO, 1, 2, 3, 4, 5, or SWING.

This example maps a template select to the indoor unit’s vertical vane positions. Add a vane.on_state automation, as shown above, if the select should also reflect changes made using the unit’s remote control.

mitsubishi_cn105:
id: hp
# ...
select:
- platform: template
id: custom_vertical_vane
name: "Custom Vertical Vane"
optimistic: true
options:
- "↑↑"
- ""
- ""
- ""
- "↓↓"
- "Swing"
- "Auto"
set_action:
- mitsubishi_cn105.vane.control:
id: hp
vertical:
direction: !lambda |-
if (x == "↑↑") return VERTICAL_VANE_MODE_POSITION_1;
if (x == "↑") return VERTICAL_VANE_MODE_POSITION_2;
if (x == "—") return VERTICAL_VANE_MODE_POSITION_3;
if (x == "↓") return VERTICAL_VANE_MODE_POSITION_4;
if (x == "↓↓") return VERTICAL_VANE_MODE_POSITION_5;
if (x == "Swing") return VERTICAL_VANE_MODE_SWING;
return VERTICAL_VANE_MODE_AUTO;
  • mitsubishi_cn105.set_remote_temperature

    • Sends an external (remote) room temperature to the indoor unit.
    • Overrides the unit’s internal temperature sensor.
    • Supported temperature range: 8.0–39.5 °C.
  • mitsubishi_cn105.clear_remote_temperature

    • Clears the externally provided temperature.
    • Restores use of the unit’s internal temperature sensor.

Example:

mitsubishi_cn105:
id: hp
# ...
sensor:
- platform: homeassistant
id: living_room_temp
entity_id: sensor.living_room_temperature
on_value:
then:
- mitsubishi_cn105.set_remote_temperature:
id: hp
temperature: !lambda 'return x;'

NOTE

This does not modify the temperature reported by the A/C unit in its status/room temperature packets. The reported current temperature remains the value provided by the unit itself. Some units may reflect the externally provided temperature, while others may continue to report their internal sensor value.

Some units may automatically fall back to the internal sensor if no external temperature is sent. In such cases, the external temperature should be sent periodically (for example using an interval). Alternatively, mitsubishi_cn105.clear_remote_temperature can be called if the external sensor becomes unavailable for an extended period.

It is the user’s responsibility to tailor the update strategy and usage to their specific A/C unit and setup.

This is an advanced feature; users are expected to understand the implications of overriding the internal sensor. Depending on the unit, it may be necessary to explicitly call mitsubishi_cn105.clear_remote_temperature to restore normal operation. Improper use may lead to unexpected behavior.

Migration From Climate-Owned Configuration

Section titled “Migration From Climate-Owned Configuration”

Older configurations that define Mitsubishi CN105 UART/protocol options inside the climate: entry (platform: mitsubishi_cn105) are still accepted temporarily when no top-level mitsubishi_cn105 hub is configured, but they emit a deprecation warning at compile time. All Mitsubishi CN105 climate entries must be migrated together; once a top-level hub is configured, legacy hub options in any climate entry are rejected.

  • Move uart_id and update_interval from the Mitsubishi CN105 climate entry to top-level mitsubishi_cn105.
  • Replace current_temperature_min_interval (in the climate entry) with top-level telemetry_request_min_interval.
  • Replace climate.mitsubishi_cn105.set_remote_temperature and climate.mitsubishi_cn105.clear_remote_temperature with mitsubishi_cn105.set_remote_temperature and mitsubishi_cn105.clear_remote_temperature.

Legacy climate-owned configuration compatibility will be removed in ESPHome 2027.2.0.