A package to control Midea CCM15 data converter modules
Project description
py-ccm15
Python Library to access a Midea CCM15 data converter
This package provides an asynchronous interface to communicate with Midea CCM15 data converter modules. It allows you to control and monitor air conditioning units via the CCM15 gateway using Python.
The CCM15 — officially the Midea CCM-15 Central Controller — is a data converter that bridges Midea's RS-485 VRF bus to TCP/IP, exposing a small HTTP interface for monitoring and control of up to 64 indoor units.
Features
- Read and set temperature
- Control fan mode and AC mode
- Async support for non-blocking operations
- Communicate with CCM15 over HTTP
Installation
pip install py-ccm15
Usage
import asyncio
from ccm15 import CCM15Device
async def main():
# host and port of the CCM15 gateway (default HTTP port is 80).
# Optionally pass password="123456" for firmwares that require it.
device = CCM15Device("192.168.1.100", 80)
# Read the state of every AC slave, keyed by its slot index.
state = await device.get_status_async()
for index, ac in state.devices.items():
print(index, ac.ac_mode, ac.fan_mode, ac.temperature, ac.temperature_setpoint)
# Change a slave: mutate its decoded state and write it back.
ac = state.devices[0]
ac.ac_mode = 0 # mode code (0 = cool — see PROTOCOL.md)
ac.fan_mode = 0 # fan code (0 = auto)
ac.temperature_setpoint = 24
await device.async_set_state(0, ac)
asyncio.run(main())
The importable package is
ccm15(the PyPI distribution ispy-ccm15). The CCM15 uses no token; the only optional auth is apassword=for firmwares that require it. See PROTOCOL.md for the mode/fan codes.
Requirements
- Python 3.7+
- httpx>=0.24.1
- xmltodict>=0.13.0
Documentation
For full API reference and advanced usage, visit the GitHub repository.
Protocol
The CCM15's HTTP interface (status.xml / ctrl.xml) and the per-slave status
byte layout are documented in detail in PROTOCOL.md — a
bit-level reverse-engineering reference for the wire format, including the
ac0/ac1 slave mask, mode/fan codes, and the optional pwd/sw/ht
parameters.
References
- Midea CCM-15 Central Controller — official product page
- Home Assistant
ccm15integration — consumes this library - Where to buy: the CCM15 / CCM-15 data converter is often available cheaply on AliExpress (search "Midea CCM15")
Contributing
Pull requests are welcome. If you find a bug or have a feature request, feel free to open an issue.
Acknowledgements
The CCM15 wire protocol implemented here — the status.xml byte decoding and the
HVAC/fan mode command mappings — was originally derived from the
houselabs/home-assistant-mideaccm
Home Assistant custom component (originally authored by Chao Shen). This library
re-implements that protocol as a standalone, async package. Thanks to the original
authors for reverse-engineering the controller protocol.
Thanks also to daxingplay/home-assistant-midea-ccm15,
an independent CCM15 Home Assistant component whose status.xml decoding and
ctrl.xml command handling were a valuable second reference for validating this
library's wire protocol.
Special thanks to Alexa (@Alexa-RR), who captured
the controller's own midea.js from a live device and traced the protocol to
document the swing (sw, status byte 4 bit 1) and electric-heater (ht, status
byte 4 bit 0) parameters and their control-URL semantics. That work is the basis
for the opt-in swing/heater support and much of PROTOCOL.md.
License
This project is licensed under the MIT License. See the LICENSE file for details.
Made by Oscar Calvo
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file py_ccm15-1.1.2.tar.gz.
File metadata
- Download URL: py_ccm15-1.1.2.tar.gz
- Upload date:
- Size: 19.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
39fffd4a73857647d368137d3d86961a1cfd34b54c5cd56a1c7f629202265b2f
|
|
| MD5 |
b480fc06c8d57ded9f68edde42188f11
|
|
| BLAKE2b-256 |
9d5daf445f00110231f2206af5f9b7bd7a27bd2cb7517cbc9b7c938dcb5548a8
|
Provenance
The following attestation bundles were made for py_ccm15-1.1.2.tar.gz:
Publisher:
release-please.yml on HomeOps/py-ccm15
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
py_ccm15-1.1.2.tar.gz -
Subject digest:
39fffd4a73857647d368137d3d86961a1cfd34b54c5cd56a1c7f629202265b2f - Sigstore transparency entry: 2064760964
- Sigstore integration time:
-
Permalink:
HomeOps/py-ccm15@4dc5c8df0531541a47be3bcb7ad33b57b7665f6f -
Branch / Tag:
refs/heads/main - Owner: https://github.com/HomeOps
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release-please.yml@4dc5c8df0531541a47be3bcb7ad33b57b7665f6f -
Trigger Event:
push
-
Statement type:
File details
Details for the file py_ccm15-1.1.2-py3-none-any.whl.
File metadata
- Download URL: py_ccm15-1.1.2-py3-none-any.whl
- Upload date:
- Size: 13.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d564a233bd0005861b3c98f2a5f517f58c6221beb6407930a9576dadfe530a23
|
|
| MD5 |
3452c36ddc2153df8e20b8c8e207e3ba
|
|
| BLAKE2b-256 |
867981cbe252a12f103aaa1858329fdc534c882893ed12592b66796343f5c1d2
|
Provenance
The following attestation bundles were made for py_ccm15-1.1.2-py3-none-any.whl:
Publisher:
release-please.yml on HomeOps/py-ccm15
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
py_ccm15-1.1.2-py3-none-any.whl -
Subject digest:
d564a233bd0005861b3c98f2a5f517f58c6221beb6407930a9576dadfe530a23 - Sigstore transparency entry: 2064760971
- Sigstore integration time:
-
Permalink:
HomeOps/py-ccm15@4dc5c8df0531541a47be3bcb7ad33b57b7665f6f -
Branch / Tag:
refs/heads/main - Owner: https://github.com/HomeOps
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release-please.yml@4dc5c8df0531541a47be3bcb7ad33b57b7665f6f -
Trigger Event:
push
-
Statement type: