- New entities: number (salt output level 0-10), switch (lights, jets); the
read-only salt sensor is replaced by the settable number.
- Look identical to the official app on the wire: send the app's Dalvik UA on
REST, okhttp/4.12.0 on the mTLS creds fetch, and "mqtt-<uuid>" client ids.
- Consolidate every constant value into constants.py (well commented); protocol.py
keeps only the command builders; const.py removed.
- Optional local read path: a `local_status_url` config option polls the dongle's
local /status endpoint for telemetry instead of the cloud MQTT subscription
(control stays cloud MQTT). State getters handle both schemas.
No private/internal values in the repo (the spa IP is runtime config only).
Fixes bug-41mqxddz7zeh
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01F6B8b3iYNv6QUftK2FDfYb