Mitsubishi Electric AE-200 / EW-50
Controls commercial Mitsubishi Electric City Multi VRF systems through an AE-200A, AE-50A or EW-50A centralized controller, using the controller's local XML servlet. Everything runs on the LAN — there is no cloud account, no MELCloud login, and no per-indoor-unit Wi-Fi adapter.
This driver is for commercial City Multi equipment behind a centralized
controller. For residential ductless mini-splits (M-Series, Mr. Slim) with
Kumo Wi-Fi adapters, use mitsubishi_kumo_cloud
instead. For accounts driven through the MELCloud portal, use
melcloud.
Prerequisites
- An AE-200A / AE-50A / EW-50A on the LAN with a static IP address.
Older non-
Amodels (AE-200E, EW-50E) serve the same servlet but some firmware builds reject individual attribute names — see Known limitations. - The controller's integrated web function must be enabled:
Initial Settings ▸ Basic System ▸ Web monitoring. On a number of firmware builds this is a licensed option that has to be unlocked with a registration code purchased from Mitsubishi. If the controller's web page does not load in a browser, this driver cannot talk to it either. - Indoor units must already be grouped and commissioned on the controller. This driver reads and writes existing groups; it does not commission equipment or change grouping.
- Network path from the GEM server to the controller on TCP 80. AE-200 controllers usually live on a dedicated BMS or mechanical VLAN — either open the path or put GEM on that VLAN.
Setup steps
-
Confirm reachability. From the GEM server, open
http://<controller-ip>/in a browser. You should get the controller's web monitoring page. If you get nothing, stop here and fix the network path or enable the web function before continuing. -
Add the device. Go to Devices, create a device with driver
mitsubishi_ae200, and set Controller IP Address to the controller's address. Leave HTTP Port at80unless the site has remapped it. -
Credentials, only if prompted. If the controller's web page asked you for a login in step 1, put those credentials in Web Account Username and Web Account Password — typically the Maintenance (installer) account. Controllers left on an open web page need no credentials at all; leave both blank.
-
Enumerate groups. Run the
get_zonescommand. It returns every commissioned group with its number, the name configured on the controller's web page, and current drive/mode/setpoint:{"groups": [{"address": "1", "name": "Lobby", "drive": "ON", "mode": "COOL", "setpoint": 24, "temperature": 25.5},{"address": "2", "name": "Conf Room A", "drive": "OFF", "mode": "HEAT", "setpoint": 21, "temperature": 20.0}]} -
Create zones. Add one GEM zone per group under the HVAC subsystem, setting
zone.addressto the group number as a plain string. -
Set the temperature scale. If the site displays Fahrenheit, set Temperature Scale to
f. GEM then converts in both directions; the wire protocol stays Celsius regardless.
Attribute reference
Device attributes
| Attribute | Required | Default | Description |
|---|---|---|---|
ip | yes | — | LAN IP or hostname of the AE-200 / AE-50 / EW-50. |
port | no | 80 | Controller web port. |
protocol | no | http | http or https. AE-200 firmware serves plain HTTP by default. |
username | no | — | Web account username. Only needed if the controller's web page requires a login. |
password | no | — | Web account password. Stored encrypted. |
temperature_scale | no | c | c or f. Controls what GEM displays and what commands accept. |
group_range | no | 1-50 | Group numbers probed by get_zones, formatted "1-50". |
status_interval | no | 30000 | Status poll interval in milliseconds. |
Zone attributes written by the driver
| Attribute | Type | Description |
|---|---|---|
state | string | on / off — the group's drive state. |
system_mode | string | off when stopped, otherwise auto / cool / heat / dry / fan. |
device_mode | string | The mode the unit will resume in, retained while stopped. |
setpoint | int/float | Target temperature in the configured scale. |
temperature | int/float | Indoor-unit return-air (inlet) temperature — see limitations. |
fan_mode | string | low / mid2 / mid1 / high / auto. |
swing | string | Vane position or swing. |
error_status | string | normal, or error when the controller reports a fault. |
error_code | string | The raw M-NET error code when faulted. This is what a service call needs. |
system_modes, fan_modes, swing_modes | json | Picker option lists, written once per connect. |
Zone address format
zone.address is the City Multi group number exactly as configured on the
controller, as a plain string: "1", "2", … "50".
Group numbers are assigned during commissioning and are visible on the
controller's web page and in the get_zones output. They are not M-NET
addresses and not indoor-unit serial numbers.
Commands
| Command | Arguments | Notes |
|---|---|---|
get_zones | — | Enumerate commissioned groups. |
get_status | — | Read current state of every group in the scan range. |
on / off | address | Start / stop the group. |
set_mode | address, mode | auto, cool, heat, dry, fan. Starts a stopped group in the same packet. off is accepted and maps to a stop. |
set_setpoint | address, setpoint | In the configured temperature_scale. Range-checked to 10–35 °C / 50–95 °F. |
set_fan_mode | address, fan_mode | Availability depends on the indoor-unit model. |
set_air_direction | address, direction | Vane position or swing. |
all_off | — | Stops every group bound to a GEM zone (or the whole scan range if none are bound). |
refresh | — | Force an immediate status poll. |
Known limitations
- Read-only telemetry beyond the basics. The driver reads drive, mode, setpoint, inlet temperature, fan speed, vane and error sign. Energy metering, filter-sign state, outdoor-unit telemetry and the controller's own schedule are not read.
temperatureis return-air, not room air. The controller reports the indoor unit's inlet sensor. On a ducted unit this reads several degrees off the occupied space, especially right after the fan starts. For accurate room temperature, pair the zone with a separate space sensor.- Setpoint resolution is 0.5 °C. A Fahrenheit setpoint is converted to the nearest 0.5 °C, so round-tripping °F → °C → °F can land one degree away from the number that was sent.
AUTOreports asAUTOCOOL/AUTOHEAT. While a group runs in auto the controller shows which way it is currently driving. Both collapse tosystem_mode: auto; the raw value stays indevice_mode.- Fan vocabulary is model-dependent. Four-speed indoor units report
LOW / MID2 / MID1 / HIGH. Two-speed units only ever reportLOWandHIGH, and writingmid1to one is accepted by the controller and silently discarded. - Air direction is the least-verified surface. Vane values differ by indoor
unit, and ducted units with no vanes accept the write and discard it. Confirm
behaviour against the actual equipment before relying on
set_air_directionin a macro. - 50 groups per controller. AE-50A and EW-50A expansion controllers each answer for their own 50 groups. A site larger than that needs one GEM device row per controller.
- Scheduling belongs to one system. The AE-200 runs its own schedules. If you also drive the equipment from GEM macro schedules, the two will fight — pick one owner per group.
- No commissioning. Grouping, addressing and interlock configuration stay on the controller.
Troubleshooting
Nothing connects; the log shows mitsubishi ae200 missing ip.
The ip attribute is blank on the device row.
Connect succeeds but 0 groups reporting.
The controller answered, but no group in group_range returned a Drive
value. Either the groups are numbered outside the default 1-50 span (widen
group_range), or the controller has no commissioned groups yet.
HTTP 401 / the log shows a request error mentioning status 401.
The controller's web page requires a login. Fill in username and password.
If they are already set, confirm them by logging into the controller's web page
directly — the AE-200 locks the Maintenance account after repeated failures.
controller error in a command result.
The servlet answers HTTP 200 with an XML error body rather than a 4xx, so this
is the controller rejecting the packet, not a transport problem. The usual
causes are an attribute the firmware does not support (older non-A models),
or a value outside what the indoor unit accepts.
Timeouts.
The controller polls the M-NET bus on its own cadence and can be slow to answer
while a bus scan is running. If timeouts are intermittent, raise
request_timeout. If they are constant, it is a network path problem — most
often a VLAN or firewall rule between GEM and the mechanical network.
Commands appear to work but nothing changes on the equipment. Check whether the group is under a controller-side schedule or an interlock that immediately reverts the change. Also confirm the indoor unit actually supports the value written — see the fan and vane notes above.
Related
mitsubishi_kumo_cloud— residential ductless with Kumo adaptersmelcloud— Mitsubishi cloud portalomnibus_vrf— third-party Omnibus gateway tapping the indoor-unit bus directly