⚠️ This repository is no longer actively maintained. Development has moved to homeassistant_salus by Jordi-14. That fork is on track to become part of HACS default repositories, has a superior architecture, and is actively maintained by two developers, giving it a much better chance of long-term survival. Please use it instead.
A custom Home Assistant integration that lets you control and monitor your Salus iT600 smart home devices locally through the UGE600 or UG800 gateway - thermostats, smart plugs, roller shutters, sensors, and more, all without cloud dependency.
One climate entity per thermostat connected to the gateway. Two thermostat families are supported:
- iT600 thermostats (e.g. SQ610RF) - heat/off/auto modes, Follow Schedule / Permanent Hold / Off presets, current & target temperature, humidity, 0.5 °C increments.
- FC600 fan-coil controllers - heat/cool/auto modes, five presets (Follow Schedule, Permanent Hold, Temporary Hold, Eco, Off), fan modes (auto/high/medium/low/off), separate heating/cooling setpoints.
| Sensor | Description |
|---|---|
| Temperature | Current temperature reading (°C) |
| Humidity | Relative humidity (%) |
| Battery | Battery level for wireless thermostats and standalone sensors (%) |
| Power | Instantaneous power draw from smart plugs (W) |
| Energy | Cumulative energy consumption from smart plugs (kWh) |
| Binary sensor | Description |
|---|---|
| Window / Door | Open/closed state (SW600, OS600) |
| Water leak | Moisture detection (WLS600) |
| Smoke | Smoke alarm (SmokeSensor-EM) |
| Low battery | Battery warning for wireless sensors and TRVs (it600MINITRV via TRVError22) |
| Thermostat problem | Aggregated thermostat error flags with human-readable descriptions as attributes |
| Battery problem | Battery-specific thermostat error indicator |
One cover entity per roller shutter or blind (SR600, RS600). Supports open, close, and set position (0-100 %).
One switch entity per smart plug or relay (SP600, SPE600). Supports on/off control. Double-switch devices are exposed as separate entities.
One lock entity per thermostat that supports child lock. Allows locking/unlocking the thermostat keypad.
- Open HACS in your Home Assistant instance.
- Go to Integrations -> ⋮ -> Custom repositories.
- Add
https://github.com/leonardpitzu/homeassistant_salusas an Integration. - Search for Salus iT600 and install it.
- Restart Home Assistant.
- Copy the
custom_components/salusfolder into your Home Assistantconfig/custom_components/directory. - Restart Home Assistant.
- Go to Settings -> Devices & Services -> Add Integration.
- Search for Salus iT600.
- Enter your gateway's IP address and EUID (the first 16 characters printed under the gateway's micro-USB port).
- The integration will discover all devices on the gateway and create entities automatically.
Data is polled every 30 seconds. All communication is local over your LAN.
Salus gateways encrypt all local API traffic. Different gateway models and firmware versions use different encryption protocols. The integration auto-detects the correct protocol by trying each one in order during connection.
| Legacy AES-CBC | AES-CCM (newer firmware) | |
|---|---|---|
| Gateways | UGE600, older UG800 firmware | UG800 with newer firmware |
| Cipher | AES-256-CBC (fallback: AES-128-CBC) | AES-256-CCM (authenticated encryption) |
| Key derivation | MD5("Salus-{euid}") - static, derived from the gateway EUID |
EUID bytes + hardcoded suffix - 32-byte key derived from the gateway EUID |
| IV / nonce | Fixed 16-byte IV | 8-byte random nonce (3 random + 2-byte counter + 3-byte timestamp) |
| Authentication | None | 8-byte MAC tag (CBC-MAC) |
| Padding | PKCS7 | None (CCM handles arbitrary lengths) |
| Wire format | Block-aligned encrypted HTTP body | [ciphertext + 8-byte MAC][8-byte nonce] |
The gateway connection tries protocols in this order:
- AES-256-CBC - legacy iT600 / UGE600 gateways
- AES-128-CBC - intermediate firmware variant
- AES-CCM - newer UG800 firmware
If a protocol is rejected the integration moves to the next one automatically. A rejected attempt is identified by a characteristic 33-byte reject frame (trailer byte 0xAE).
If you're having issues with the integration, there are two ways to enable debug logging.
Add the following to your configuration.yaml and restart Home Assistant:
logger:
default: info
logs:
custom_components.salus: debug- Go to Settings -> Devices & Services.
- Find the Salus iT600 integration and click the ⋮ menu.
- Select Enable debug logging.
- Reproduce the issue.
- Click Disable debug logging - the browser will download a log file you can inspect or attach to a bug report.
This method is useful for one-off troubleshooting since it automatically reverts to the normal log level once you stop it.
- If you can't connect using the EUID on your gateway (e.g.
001E5E0D32906128), try0000000000000000as EUID. - Make sure Local WiFi Mode is enabled on your gateway:
- Open the Salus Smart Home app on your phone and sign in.
- Double-tap your gateway to open the info screen.
- Press the gear icon to enter configuration.
- Scroll down and check that Disable Local WiFi Mode is set to No.
- Scroll to the bottom, save settings, and restart the gateway by unplugging/plugging USB power.
SQ610RF, SQ610RF(WB), SQ610RFNH, FC600, SP600, SPE600, SR600, RS600, SW600, OS600, WLS600, SmokeSensor-EM, SD600, TS600, RE600, RE10B, TRV3RF, it600MINITRV, it600Receiver.
This project is licensed under the MIT License - see the LICENSE file for details.