Skip to content

First run and pairing

monikapurpl3 edited this page Aug 21, 2026 · 1 revision

First run and pairing

Everything between "it's installed" and "I'm changing the temperature from my phone". Three things happen, in this order: the server finds your units, you get an enrolment key, and each client you want to use gets approved once from the LAN.

Before you start

  • The units must already be on your Wi-Fi. That part only the vendor's NetHome Plus app can do. Do it once, then you never need it again.
  • Give them static DHCP leases in your router, or they will wander to new addresses and Breeze Core will look broken.
  • V3 units need one internet-connected discovery run. msmart-ng fetches each unit's token and key through the Midea cloud during discovery. That is the one online step; everything afterwards is offline. Back the credentials up — they cannot be re-derived if the cloud is unreachable.

1. Find the units

sudo breeze-core pair                     # broadcast, finds everything
sudo breeze-core pair --ip 192.168.1.73   # or one unit by address

This writes config.json — the unit list plus a generated API key — and tells you where. The broadcast is a UDP broadcast, so it has to run on the same L2 network as the units: in a container that means host networking, and in a VM a bridged adapter rather than NAT.

In the container images this is docker exec -it breeze-core breeze-setup, which wraps the whole of this page.

2. Start it and open the panel

sudo systemctl enable --now breeze-core

Then open http://<server>:8420. The panel asks for the API key from step 1.

3. Approve the client

The API key alone is not enough to control anything — it only lets a client begin pairing. That is deliberate: a key that leaks off a phone is not a working credential on its own.

So the panel shows a short code, and an admin on the LAN approves it:

breeze-core approve            # prompts for the code
breeze-core approve BONG-W3GN  # or give it directly
breeze-core devices            # what is enrolled
breeze-core revoke <token-id>  # take one away

The code lasts about 60 seconds and is single-use. Approval must come from a private address — that is the LAN gate, and it is what makes the whole model work. Full mechanics: Authentication and pairing.

Repeat step 3 for each browser, phone, or tool. Each gets its own credential, and each can be revoked on its own without disturbing the others.

4. Check it over

breeze-core diag --auto

Auth posture, per-unit latency, capability probing, input validation. It is the closest thing to a test suite this project has, and it is the first thing to run when something feels wrong.

Then what

If discovery finds nothing

In order of likelihood: the container or VM is not on the LAN (bridge networking cannot carry a broadcast), the units are on a different VLAN or a guest network with client isolation, or a host firewall is dropping the reply. Pair by address with --ip to sidestep discovery entirely, and see Troubleshooting.

Clone this wiki locally