Skip to content
This repository was archived by the owner on Sep 10, 2026. It is now read-only.

Repository files navigation

Breeze Core

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.

License Latest release Packages Documentation

This line has been sunset. Development continues in Rust.

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.json byte for byte, same AC_* 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 it

Full 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.

Breeze Core web panel

Why

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.

Install

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 reboots

Then open http://<server>:8420 and enter the key it printed.

Everything elseWindows · containers · OPNsense · macOS, BSD, from source · other distros and one-off downloads

Android appBreeze, with widgets and Android Auto.

Documentation

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

Honest limits

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.

Security

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.

License

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.

About

Self-hosted, LAN-first REST API + web panel for controlling Midea air conditioners — no cloud. AGPL-3.0.

Topics

Resources

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages