Skip to content

Configuration

monikapurpl3 edited this page Aug 21, 2026 · 2 revisions

Configuration

Where Breeze Core keeps its state, and every environment variable that changes how it behaves. The file is written by breeze-core pair; the variables are read once at startup.

config.json — written and maintained by setup_device.py (or breeze-core pair), read and validated by the app. Its location is set by AC_CONFIG (this guide uses /etc/breeze-core/config.json).

{
  "api_key": "randomly-generated-urlsafe-string",
  "units": [
    { "name": "Living Room", "ip": "192.168.1.73", "port": 6444,
      "id": 153931628470980, "token": null, "key": null }
  ]
}
Field Notes
api_key The enrollment secret — needed to begin pairing (see Authentication). Generated by setup_device.py.
units[].name/ip/port/id Friendly name, LAN IP, control port (usually 6444), Midea device id.
units[].token/key V3 auth credentials (null for V1/V2). Back these up — they can't be re-derived if the Midea cloud is unreachable.

Runtime settings (environment variables)

Read once at startup. Defaults are safe for public exposure (docs off, headers on, LAN-only approval).

Var Default Purpose
AC_CONFIG /etc/meow-ac/config.json config file path
AC_DEVICES <config dir>/devices.json per-device token store (app-written)
AC_PROGRAMS <config dir>/programs.json favourites/schedules/curves (app-written)
AC_SCHED_TICK 30 scheduler evaluation interval (seconds)
AC_TIMERS <config dir>/timers.json one-shot timers (Timers), app-written
AC_TIMER_TICK 15 how often one-shot timers are checked (seconds)
AC_DOCS off set 1 to expose /docs (dev only)
AC_SECURITY_HEADERS on emit CSP/HSTS/etc. (turn off if your proxy sets them)
AC_TRUSTED_HOSTS any CSV Host allow-list (TrustedHostMiddleware)
AC_BEHIND_PROXY off trust X-Forwarded-For for the real client IP
AC_ENROLL_LAN_ONLY on pairing approval must come from a private/LAN address
AC_CODE_TTL 60 pairing-code lifetime (seconds)
AC_TOKEN_TTL_DAYS 90 device-token lifetime; 0 = never expires
AC_MIN_AUTH_VERSION 1 minimum device auth-version accepted (see Authentication). 1 = accept legacy bearer and Ed25519 v2; 2 = refuse v1 with 426
AC_HISTORY_SIZE 720 per-unit in-memory history samples kept for /history and /metrics (~1h at the app's 5s poll)
AC_STREAM_TICK 5 how often the SSE broadcaster (/api/units/stream) polls the units while ≥1 client is connected (seconds)
AC_AUTH_SKEW_SECONDS 60 how far a v2 signed request's timestamp may be from server time, either way. Raising it widens the replay window; the nonce cache is sized from it. Only raise if clients genuinely can't keep time

Point them at your chosen config dir, e.g. AC_CONFIG=/etc/breeze-core/config.jsonAC_DEVICES/AC_PROGRAMS then default alongside it. (The native packages set all of this up in /etc/breeze-core/breeze-core.env — see PACKAGES.md.)

Clone this wiki locally