Skip to main content

msmart-ng

A Python library for local control of Midea (and associated brands) smart air conditioners. Designed for ease of integration, with async support and minimal dependencies.

Code Quality Checks PyPI

Supported Devices

This library supports air conditioners from Midea and several associated brands that use the following Android apps or their iOS equivalents:

  • Artic King (com.arcticking.ac)
  • Midea Air (com.midea.aircondition.obm)
  • NetHome Plus (com.midea.aircondition)
  • SmartHome/MSmartHome (com.midea.ai.overseas)
  • Toshiba AC NA (com.midea.toshiba)
  • 美的美居 (com.midea.ai.appliances)

Note: Only air conditioners (type 0xAC and 0xCC) are supported. See the usage section for how to check compatibility.

Note On Cloud Usage

This library (and its Home Assistant integration midea-ac-py) works locally. No internet connection is required to control your device.

However, for newer "V3" devices, the Midea Cloud is used to acquire a token & key for device authentication. Once retrieved and saved, no further cloud connection is required. Devices are not linked to the library’s built-in accounts and concerned users may supply their own account credentials if they prefer.

Features

Async Support

The library fully supports async/await, allowing non-blocking communication with devices.

from msmart.device import AirConditioner as AC

# Build device
device = AC(ip=DEVICE_IP, port=6444, device_id=int(DEVICE_ID))

# Get capabilities
await device.get_capabilities()

# Get current state
await device.refresh()

Device Discovery

Automatically discover devices on the local network or an individual device by IP or hostname.

from msmart.discover import Discover

# Discover all devices on the network
devices = await Discover.discover()

# Discover a single device by IP
device = await Discover.discover_single(DEVICE_IP)

Note: V3 devices are automatically authenticated via the NetHome Plus cloud.

Reduced Dependencies

Many external dependencies have been replaced with standard Python modules.

Code Quality Improvements

  • Type annotated for clarity.
  • Code style and import sorting enforced by autopep8 and isort.
  • Unit tests validated by Github Actions.
  • Naming conventions follow PEP8.

Installing

To install, use pip to install msmart-ng, and remove the old msmart package if necessary.

pip uninstall msmart
pip install msmart-ng

Usage

Command Line Interface (CLI)

Interact with devices using a simple command-line tool that supports device discovery, querying, and control.

$ msmart-ng --help
usage: msmart-ng [-h] [-v] {discover,query,control,download} ...

For more details on each subcommand and its available options, run msmart-ng <command> --help

Discover

Discover devices on the local network with the msmart-ng discover subcommand.

$ msmart-ng discover
INFO:msmart.cli:Discovering all devices on local network.
...
INFO:msmart.cli:Found 1 devices.
INFO:msmart.cli:Found device:
{'ip': '10.100.1.140', 'port': 6444, 'id': 15393162840672, 'online': True, 'supported': True, 'type': <DeviceType.AIR_CONDITIONER: 172>, 'name': 'net_ac_F7B4', 'sn': '000000P0000000Q1F0C9D153F7B40000', 'key': None, 'token': None}

Ensure the device type is 0xAC and the supported property is True.

Save the device ID, IP address, and port. Version 3 devices will also require the token and key fields to control the device.

Warning: V3 Device Users

For V3 devices, it's highly recommended to save your token and key values in a secure place. In the event that the cloud become unavailable, having these on hand will allow you to continue controlling your device locally.

Note: V1 Device Owners

Owners of V1 devices might encounter the following error:

ERROR:msmart.discover:V1 device not supported yet.

Please report this error with the output of msmart-ng discover --debug to help improve support.

Query

Query device state and capabilities with the msmart-ng query subcommand.

$ msmart-ng query <HOST>

Add --capabilities to query capabilities of the device before requesting the state.

Note: Version 3 devices need to specify either the --auto argument or the --token, --key and --id arguments to make a connection.

Note: For CC devices, either the --auto argument or the --device_type argument must be specified.

Control

Control a device with the msmart-ng control subcommand. The command takes key-value pairs of settings to control.

Enumerated settings like operational_mode, fan_speed, and swing_mode can accept integer or string values. e.g. operational_mode=cool, fan_speed=100 or swing_mode=both.

Number settings like target_temperature can accept floating point or integer values. e.g. target_temperature=20.5.

Boolean settings like display_on and beep can accept integer or string values. e.g. display_on=True or beep=0.

$ msmart-ng control <HOST> operational_mode=cool target_temperature=20.5 fan_speed=100 display_on=True beep=0

Note: Version 3 devices need to specify either the --auto argument or the --token, --key and --id arguments to make a connection.

Note: For CC devices, either the --auto argument or the --device_type argument must be specified.

Home Assistant

To control your Midea AC units via Home Assistant, use the mill1000/midea-ac-py integration.

Python

To control devices programmatically, see the included Python example.

Docker

A docker image is available on ghcr.io at ghcr.io/mill1000/msmart-ng. Ensure the container is run with --network=host to allow device discovery on the local network via broadcast.

$ docker run --network=host ghcr.io/mill1000/msmart-ng:latest --help
usage: msmart-ng [-h] [-v] {discover,query,control,download} ...

Troubleshooting

  • If devices are not being discovered, ensure your devices are on the same subnet as your computer.
  • If a cloud connection can not be made, try using a credentials from a different region with the --region argument or manually specifying a NetHome Plus account.

Ecosystem

These projects are utilizing msmart-ng.

Gratitude

This project is a fork of mac-zhou/midea-msmart, and builds upon the work of

Metadata

Release files for msmart-ng 2026.8.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for msmart-ng 2026.8.1
File Size Uploaded
msmart_ng-2026.8.1.tar.gz 70.4 MB Details

Built distribution (wheel)

Table of built distributions (wheels) for msmart-ng 2026.8.1
File Interpreter ABI Platform
msmart_ng-2026.8.1-py3-none-any.whl Python 3 none any Details

Total release size: 70.5 MB

Release files / msmart_ng-2026.8.1.tar.gz

Download URL msmart_ng-2026.8.1.tar.gz
Size 70.4 MB
Tags Source
SHA-256 checksum
How to use checksums
bf3686641b1e17b16e166c340637153e7c1d0c1e5f9981127da7816adf09eeb4
BLAKE2b-256 checksum
How to use checksums
2bc56e471c9ee9751be3f64bd419fa57ab035d81d1911ab5f0f5afdf7cf6f656
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 30, 2026.

Transparency log

Release files / msmart_ng-2026.8.1-py3-none-any.whl

Download URL msmart_ng-2026.8.1-py3-none-any.whl
Size 86.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
6cb66f53c928f9a6c3ea2d8c68cd0db39b2f5a018b89199345aef7488b8633e2
BLAKE2b-256 checksum
How to use checksums
8f7c3a207d9b2585cb7f5a83c8fe8b6a5bb3210f62fcbeee36d422b4bb5c158e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 30, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

2026.8.1 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page