Your air conditioner. Your network. No cloud.
Self-hosted control for Midea air conditioners — a REST API, a web panel, and a native Android app that talk to your units over your own LAN.
breeze-core-native is where Breeze Core is now. 3.2.0 is the last release of this Python implementation, and this repository is archived — read-only, and no longer accepting issues or pull requests.
4.x is a drop-in replacement, not a fork. Same REST API, same
config.json/devices.json/programs.json/timers.jsonbyte for byte, sameAC_*environment variables, same service name, same package name — so it installs over this one and your units, API key, paired phones and programs all stay where they are. The Android app needs no changes and does not know the difference.What you gain: ~2.5 MB instead of ~59 MB installed, ~2.4 MB resident instead of ~62 MB, and no dependencies at all — one static executable with the web panel compiled into it, which fits on a router. Plus riscv64, ppc64le and s390x as ordinary published packages, Void and Gentoo, and templates for every init system.
Upgrading is one command:
curl -fsSL https://aspic.salataputarica.hr.eu.org/migrate.sh -o migrate.sh less migrate.sh # it runs as root — read it first sudo sh migrate.sh # prints the plan, changes nothing sudo sh migrate.sh --yes # does itFull detail: Upgrading to 4.x · What changed in 4.x
Nothing published here is going away. The bolero repository stays up and everything in it stays installable, so an existing 3.x install keeps working and keeps updating from where it always did. It just will not get anything new.
Everything below describes 3.2.0 and remains accurate for it.
The vendor app sends "make it 23°" to a datacentre and back, to reach a machine three metres away. Breeze Core cuts the round trip: after one local pairing there is no cloud dependency, no account, and no telemetry. When your internet is down, your air conditioning still works.
- Control it from anywhere on your LAN — browser, Android app, home-screen
widgets, Android Auto, REST,
curl, cron. - Automation that runs on the server. Schedules and temperature curves fire whether or not your phone is home, charged, or awake.
- Live, not polled. Changes push to every client over SSE — yours, a schedule's, or another device's.
- Quiet by default. The beep is off unless a client asks for it, so a 3 a.m. setpoint change wakes nobody.
- One credential per device, each individually revocable, each approved from the LAN. No shared password to pass around the household.
- Installs like software should — signed repository, native packages for Linux, Windows, the BSDs, OpenWrt and OPNsense, and five container images.
Linux — add the signed repository and updates arrive through your package manager:
curl -fsSL https://bolero.salataputarica.hr.eu.org/breeze-core.asc \
| sudo gpg --dearmor -o /usr/share/keyrings/breeze-core.gpg
echo "deb [signed-by=/usr/share/keyrings/breeze-core.gpg] https://bolero.salataputarica.hr.eu.org/deb stable main" \
| sudo tee /etc/apt/sources.list.d/breeze-core.list
sudo apt update && sudo apt install breeze-core
sudo breeze-core pair # finds your units, writes the config
sudo systemctl enable --now breeze-core # start it, survives rebootsThen open http://<server>:8420 and enter the key it printed.
Everything else — Windows · containers · OPNsense · macOS, BSD, from source · other distros and one-off downloads
Android app — Breeze, with widgets and Android Auto.
Everything lives in the wiki:
| First run and pairing | getting from installed to controlling |
| The web panel · Programs, schedules, curves | using it day to day |
| REST API · Control schema · Configuration | writing a client, automating it |
| Exposing it safely · Reverse proxy and TLS | reaching it from outside the house |
| Troubleshooting | when something is off |
| Architecture · Building and releasing | working on it |
| Version history | what each release, v1.0.0 onwards, actually gave you |
It needs a machine that is always on, and you are its sysadmin. Units join Wi-Fi through the vendor app, and V3 units need one internet-connected discovery run to fetch their credentials — everything after that is offline. Nothing is exposed to the internet by default; away-from-home control means a VPN or a proxy you secure yourself. The feature ceiling is your firmware's. The native app is Android-only. It is one brand, one job — not a home-automation platform.
The full comparison with the vendor app, drawbacks included: Compared to NetHome Plus.
Two credentials, never one: an enrolment key to begin pairing, and a per-device credential — Ed25519 request signing by default, with the secret never on the wire — to use the API. Admin actions are gated to the LAN, with rate limiting, strict security headers, and interactive docs off by default. Before exposing anything to the internet, read Exposing it safely.
Found a vulnerability? SECURITY.md — privately, please.
AGPL-3.0. Free software: run it, study it, share it, change it. If you run a modified version as a network service for others, §13 asks you to offer them your changes. Built on msmart-ng, FastAPI and uvicorn — all permissively licensed.
