I hit a few snags while integrating my new Mitsubishi heat pump with Home Assistant using an Aidoo Pro as the intermediary, and wanted to share my solutions for anyone who comes along in the future.
As a quick aside for why to use an Aidoo instead of a smart thermostat (nest, ecobee) attached to the Mitsubishi adapter for 3rd party thermostats: If you have a heat pump with an inverter, you greatly harm you energy efficiency this way. These thermostats lack the ability to modulate the heat pump’s power based on how close your are to the set temperature. Future heat pumps might be smart enough to reduce their power when the return air is near the set temperature, but mine cannot. The Aidoo handles this.
And Mitsubishi has a wifi cloud accessory, but I’ve heard nothing but bad things about it’s usability and reliability. The Aidoo works over local wifi which makes me happy.
- The Aidoo Pro supposedly cannot override the detected air temperature on some Mitsu systems (like mine). The Airzone site warns about this when I type my model into the compatibility tool at the bottom of the product page. So I have to keep my MHK2 wireless thermostat (as a temperature sensor) and additionally buy a “Airzone CN105 WiFi Splitter for Mitsubishi Controls” so it can share the cn105 port with the Aidoo. It will operate with no MHK2 attached, but the temperature reading seems pretty unreliable. It’s probably getting it from the return air sensor, which is only meaningful when the fan is running.
- By default, you lack fine-grain control of the Mitsubishi’s fan speed while the device is in any of the active modes (heat, cool, heat_cool). In these modes, the fan seems to only run when the heat pump is running. You can alter this behavior so that the fan always runs at the assigned speed. See the powerpoint here. (In case this link dies, the steps for an MHK2 thermostat are to hold Menu until prompted for a PIN. Calculate your pin by reading the bottom right number on the sticker on the back of the MHK2 and adding 1,234 to it. Then set IUFC 25 to “3” and IUFC 27 to “1”.) This menu is only accessible when the MHK2 receiver is attached directly to the cn105 port, not behind the Airzone splitter.
- The Aidoo defaults to exposing just one target temp and it will try to stay within a few degrees. If you want to specify your own min and max, you must open the Airzone app, go to Airtools, select your house, click Settings, and switch Autochange to “Double setpoint”. Note this broke some stuff in Home Assistant for me. Read below for the fixes.
- Once in “Double setpoint” mode, I notice that the Airzone integration confuses the upper and lower temperatures for the comfort zone. See bug report. I work around this by defining my own template sensors that tell me when heat is active, or cooling is active. Go to Settings, Devices and services, Helpers, Create Helper, Template, Binary Sensor, and define ones with these templates.
Cooling binary template sensor
{% set temp_high = state_attr('climate.aidoo_pro', 'target_temp_high') %}
{% set temp_low = state_attr('climate.aidoo_pro', 'target_temp_low') %}
{% set temp_current = state_attr('climate.aidoo_pro', 'current_temperature') %}
{% set in_cooling_mode = states('climate.aidoo_pro') in ('heat_cool', 'cool') %}
{{ in_cooling_mode and temp_current > temp_high and temp_current > temp_low }}
Heating binary template sensor
{% set temp_high = state_attr('climate.aidoo_pro', 'target_temp_high') %}
{% set temp_low = state_attr('climate.aidoo_pro', 'target_temp_low') %}
{% set temp_current = state_attr('climate.aidoo_pro', 'current_temperature') %}
{% set in_heating_mode = states('climate.aidoo_pro') in ('heat_cool', 'heat') %}
{{ in_heating_mode and temp_current < temp_high and temp_current < temp_low }}
And for fun, one I made that tells me if the fan is running without any heat or cooling
{% set raw_temp_high = state_attr('climate.aidoo_pro', 'target_temp_high') %}
{% set raw_temp_low = state_attr('climate.aidoo_pro', 'target_temp_low') %}
{% set temp_high = [raw_temp_high, raw_temp_low]|max%}
{% set temp_low = [raw_temp_high, raw_temp_low]|min%}
{% set temp_current = state_attr('climate.aidoo_pro', 'current_temperature') %}
{% set in_comfort_zone = temp_low <= temp_current and temp_current <= temp_high %}
{% set in_an_active_mode = states('climate.aidoo_pro') in ('heat_cool', 'heat', 'cool') %}
{% set in_fan_mode = states('climate.aidoo_pro') in ('fan_only') %}
{% set fan_running = states('binary_sensor.aidoo_pro_air_demand') == 'on' %}
{{ fan_running and (in_fan_mode or (in_an_active_mode and in_comfort_zone)) }}
## Doesn't handle dry mode