
FoxESS MQ2200 (battery)
The FoxESS MQ2200 is a compact all-in-one battery storage unit sold under the Avocado, Avocado Pro, ONE, and MQ2200 product names, designed for residential and small-commercial energy storage. This Modbus TCP template reads instantaneous battery power, cumulative energy throughput, and state of charge over port 502, and exposes five write registers for remote control: mode bitfield, charge-period start and end times, session timeout, and active power command. Connecting the ModbusCloud Gateway to the same LAN as the MQ2200 gives installers live visibility and programmatic charge and discharge control without depending on the FoxESS cloud.
- Protocol
- Modbus TCP
- Connection
- Ethernet, Modbus TCP
- Registers
- 8, read and write
- Brand
- FoxESS
- Compatible models
- Avocado · MQ2200 · ONE · Avocado Pro
- Last updated
Registers (8)
3 read, 5 write
| Name | Unit | Access | Address (Hidden until you enter your email) | Function (hidden) | Type (hidden) |
|---|---|---|---|---|---|
| power | W | Read | |||
| energy | Wh | Read | |||
| soc | % | Read | |||
| batterymode_a | Write | ||||
| batterymode_b | Write | ||||
| batterymode_c | Write | ||||
| batterymode_e | s | Write | |||
| batterymode_f | W | Write |
Loading registers…
Send your device list
If a device is not in the library yet, we build the template for free as soon as we have the register data.
Use cases
- Monitor battery state of charge continuously to detect unexpected overnight discharge before the next solar day.
- Track cumulative energy throughput to verify whether the battery is cycling within expected daily limits.
- Alert on battery power readings that stay at zero during scheduled charge windows, indicating a remote control failure.
- Report charge-period compliance over time by comparing active power command values against actual power readings.
- Verify that the remote control timeout register resets correctly after each control session to prevent stuck commands.
Installation
Confirm the MQ2200 is connected to your local network via Wi-Fi or LAN and note its IP address from your router's DHCP lease table.
Verify Modbus TCP is active on the device by opening a TCP connection to port 502 on the unit's IP address; a successful connection confirms the Modbus server is running.
In the ModbusCloud portal, add the ModbusCloud Gateway to the same network segment as the MQ2200, then import the FoxESS MQ2200 (battery) template and set the unit ID to 1.
Spot-check the connection by reading the soc register at address 39424 in the portal's live register view and confirm the value matches the percentage shown in the FoxESS app.
Things to watch for
The soc register reads zero even though the battery is charged. Why?
Address 39424 uses function code 3 and returns an int16. If the gateway is sending function code 4 or reading as uint16 with the wrong byte order, the result will be wrong. Confirm the template is using FC3 and that your gateway applies big-endian byte order, which is standard for FoxESS Modbus TCP registers.
The gateway connects to port 502 but power and energy registers return errors.
The MQ2200 obtains its IP via DHCP, so the address can change between reboots. Assign a DHCP reservation for the device's MAC address in your router, then update the host entry in the ModbusCloud portal. Also confirm slave unit ID is set to 1.
Sending a write to batterymode_f has no effect on actual battery power.
The remote control active power command only takes effect when the mode bitfield in batterymode_a is set to enable remote control and the timeout in batterymode_e is non-zero. Write batterymode_a first to activate the control session, then write the power value to batterymode_f.
Is it safe to write large power values to the batterymode_f setpoint register?
Use caution with write registers. The MQ2200's internal BMS and inverter firmware will clip commands that exceed hardware limits, but sending values outside the device's rated power range repeatedly may trigger fault conditions or cause the device to exit remote control mode. Test with conservative values and monitor the power register response before automating large setpoints.
Want to see how it works?









