|
| 1 | +--- |
| 2 | +title: Mitsubishi WF-RAC |
| 3 | +description: Instructions on how to integrate Mitsubishi Heavy Industries air conditioners with a WF-RAC module into Home Assistant. |
| 4 | +ha_category: |
| 5 | + - Climate |
| 6 | +ha_release: 2026.10 |
| 7 | +ha_iot_class: Local Polling |
| 8 | +ha_config_flow: true |
| 9 | +ha_codeowners: |
| 10 | + - '@blues-sechseck' |
| 11 | +ha_domain: mitsubishi_wf_rac |
| 12 | +ha_platforms: |
| 13 | + - climate |
| 14 | + - diagnostics |
| 15 | +ha_zeroconf: true |
| 16 | +ha_integration_type: device |
| 17 | +--- |
| 18 | + |
| 19 | +The **Mitsubishi WF-RAC** {% term integration %} controls Mitsubishi Heavy Industries air conditioners fitted with the WF-RAC wireless LAN module (sold as part number WF-RAC, and marketed with the Smart M-Air app). |
| 20 | + |
| 21 | +It talks to the module over your local network, using the same HTTP API the app uses. No account with the manufacturer is needed and the integration makes no outbound internet connection. |
| 22 | + |
| 23 | +## Supported devices |
| 24 | + |
| 25 | +Any indoor unit whose WF-RAC module answers on the local network. Confirmed on `SRK`-series wall-mounted units on single-split and multi-split systems, on all three firmware branches the module ships with. `FDT` cassettes and other indoor unit types use the same module and the same protocol. |
| 26 | + |
| 27 | +The module is the requirement, not the indoor unit: a unit that works with the Smart M-Air app on the same network works here. |
| 28 | + |
| 29 | +## Prerequisites |
| 30 | + |
| 31 | +- The module has to be on your network already. Set it up once with the manufacturer's app, or through the module's own access point; this integration does not perform that first-time setup. |
| 32 | +- Give the module a fixed address in your router. A changed address is not followed automatically and has to be corrected with **Reconfigure**. |
| 33 | +- The module accepts a limited number of registered controllers. If its account table is full, Home Assistant cannot register and the integration raises a repair issue saying so; free a slot in the app, or factory-reset the module. |
| 34 | + |
| 35 | +{% include integrations/config_flow.md %} |
| 36 | + |
| 37 | +Units on the same network are discovered automatically and appear as discovered devices. Confirm one and give it a name. |
| 38 | + |
| 39 | +{% configuration_basic %} |
| 40 | +Name: |
| 41 | + description: "The name the airco gets in Home Assistant. It names the device and prefixes the entities belonging to it." |
| 42 | +Host: |
| 43 | + description: "The local IP address of the airco's wireless module." |
| 44 | +Port: |
| 45 | + description: "The port the module's local API listens on. This is 51443 on every firmware branch seen so far; discovery fills it in." |
| 46 | +Ignore duplicate IP address: |
| 47 | + description: "Off by default. Adds the airco even though another entry already uses that IP address, for re-adding a unit whose old entry went missing. The module accepts one connection at a time, so two entries polling it produce errors in the log." |
| 48 | +{% endconfiguration_basic %} |
| 49 | + |
| 50 | +Everything else is configured afterwards under **Configure**. |
| 51 | + |
| 52 | +{% configuration_basic %} |
| 53 | +Retry limit: |
| 54 | + description: "Consecutive failed polls before the airco is marked unavailable. The minimum of three is about three minutes at the 60-second poll interval, which is enough to ride through the module's hourly Wi-Fi reassociation. Raise it on a weak link." |
| 55 | +Target Temp. Offset: |
| 56 | + description: "Calibrates the setpoint sent to the unit. Positive lowers what is sent while the card keeps showing your setting. Most units round a half degree up to the next whole one, so 0.5 often acts as 1." |
| 57 | +Target Temp. Offset (Cooling): |
| 58 | + description: "Overrides the general target offset for cool and dry mode. Leave empty to use the general offset there too." |
| 59 | +Target Temp. Offset (Heating): |
| 60 | + description: "Overrides the general target offset for heat mode. Leave empty to use the general offset for heat too." |
| 61 | +Indoor Temp. Sensor Offset: |
| 62 | + description: "Added to the unit's own indoor reading before it is shown. Display only; it does not change what the unit does." |
| 63 | +Outdoor Temp. Sensor Offset: |
| 64 | + description: "The same, for the outdoor temperature the unit reports." |
| 65 | +{% endconfiguration_basic %} |
| 66 | + |
| 67 | +## Supported functionality |
| 68 | + |
| 69 | +The integration creates one device per air conditioner with a climate entity that offers: |
| 70 | + |
| 71 | +- **Modes**: off, cool, heat, dry, fan only, and auto where the unit supports it. |
| 72 | +- **Target temperature**, within the range the unit itself reports for the mode it is in. |
| 73 | +- **Fan speed**, including the unit's quiet step. |
| 74 | +- **Vertical and horizontal swing**, including the unit's 3D auto mode where fitted. |
| 75 | +- **Away preset**, which switches the unit into its own Home Leave mode. |
| 76 | + |
| 77 | +The current temperature shown is the unit's own return-air reading, corrected by the indoor sensor offset. |
| 78 | + |
| 79 | +## Data updates |
| 80 | + |
| 81 | +The integration polls each module every 60 seconds over the local network. A command you send is applied immediately rather than waiting for the next poll. |
| 82 | + |
| 83 | +Commands issued close together are coalesced into a single frame, because the module accepts one connection at a time and expects about a second between requests. Changing the mode and the temperature in the same breath therefore reaches the unit as one write, not two. |
| 84 | + |
| 85 | +## Known limitations |
| 86 | + |
| 87 | +- **The unit briefly goes unavailable about once an hour.** The module reassociates with your Wi-Fi on its own; the default retry limit of three polls is chosen to ride through it. This is the module's behaviour, not a network fault. |
| 88 | +- **Only one controller writes at a time.** The module grants a 60-second exclusive write lease to whoever wrote last. A command sent while somebody else holds it, typically the manufacturer's app, is refused and retried once when the lease lapses. |
| 89 | +- **The current temperature is measured at the return air grille**, above the unit and inside its own airflow, so it reads differently from a thermostat placed in the room. The target and sensor offsets exist to calibrate that difference. |
| 90 | +- **A limited number of controllers can be registered** on a module at once. Home Assistant occupies one slot. |
| 91 | + |
| 92 | +## Troubleshooting |
| 93 | + |
| 94 | +### The airco is not discovered |
| 95 | + |
| 96 | +Discovery uses mDNS, which does not cross subnets or VLANs by default. Add the unit manually with its IP address if Home Assistant and the airco are on different networks, or if multicast traffic is filtered between them. |
| 97 | + |
| 98 | +### Setup fails with "too many devices registered" |
| 99 | + |
| 100 | +The module's account table is full. Remove a controller in the manufacturer's app, or factory-reset the module, then retry. Home Assistant raises a repair issue while this condition persists and clears it by itself once registration succeeds. |
| 101 | + |
| 102 | +### The unit stops responding after using the app |
| 103 | + |
| 104 | +The app takes the write lease for 60 seconds. Wait a minute and try again. |
| 105 | + |
| 106 | +## Removing the integration |
| 107 | + |
| 108 | +This integration follows standard integration removal. Removing the config entry also releases the controller slot Home Assistant occupies on the module. |
| 109 | + |
| 110 | +{% include integrations/remove_device_service.md %} |
0 commit comments