Hi everyone,
I’ve built a custom integration to control BTicino Smarther thermostats (tested on the X8000) fully over your local network, without going through BTicino’s cloud at runtime.
This is an independent, unofficial project — not affiliated with or supported by BTicino/Legrand. Use at your own risk.
How it works
The integration talks to the thermostat directly over TCP using its local XOpen V3 protocol, authenticated with HMAC-SHA256. Updates are push-based: the thermostat sends state changes in real time over the open connection — no polling. There’s automatic reconnection with exponential backoff if the connection drops.
Connection to bticino cloud APIs is required only for setup; once configured, no internet or cloud access is required for normal operation.
Features
- Local, real-time push updates (XOpen V3, HMAC-SHA256 auth)
- Climate entity: HVAC mode (Off/Heat/Cool/Auto), target temperature (7–40 °C, 0.5° step), preset modes (None, Boost 30/60/90 min, Protection)
- Current temperature and humidity sensors
- HVAC action (Heating/Cooling/Idle/Off) based on actual load state
- Automatic reconnection on network drops
- Config Flow UI setup — no YAML
- Italian and English translations
Setup
You’ll need each thermostat’s local IP address; the local PIN (XOpen password) can be entered manually if you already know it, or retrieved automatically: log in once with same account you use for the Thermostat app and the integration lists every thermostat registered on it — for each one you just confirm its local IP.
Installation (HACS)
- HACS → three-dot menu → Custom repositories
- Add
https://github.com/Mirmanero/ha-bticino-x8000, category Integration - Search for BTicino Thermostat, install, restart HA
- Settings → Devices & Services → Add Integration → BTicino Thermostat
Repo: GitHub - Mirmanero/ha-bticino-x8000 · GitHub
I’ve only been able to test this against my own X8000 units — if you try it on another BTicino/Smarther model, working or not, please open an issue on GitHub so I can extend the compatibility list. Feedback and bug reports very welcome!
PS
If you found this useful, — it goes toward my Claude subscription, which did a lot of the heavy lifting on this one
![]()