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. Blank, 0, negative or unreadable values use the 30 s default; anything under 1000 is held at 1000. |
request_timeout | no | 10000 | Per-request timeout in milliseconds. Blank, 0, negative or unreadable values use 10 s. |
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. Cleared to an empty value once the fault clears. |
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".
A zero-padded address such as "01" is sent to the controller as written and
still receives the state the controller reports for group 1, as long as no
other zone on the device uses "1" or another padding of the same number. A
zone saved with no address is skipped: it is neither polled nor given state.
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 toautoinsystem_modeand indevice_mode; the raw refinement is not kept on the zone.- 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.
The controller went offline and GEM is slow to notice it is back.
After three failed status polls in a row the driver stretches the interval,
doubling it each time up to 5 minutes, so a controller that is down is not
asked every few seconds. The log shows one status read error line when the
failures start, not one per poll. The first good reply puts polling back on
status_interval; running refresh polls straight away.
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