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. The Home Assistant controls are adapted to the way each Salus device family models heating, cooling, schedules, and hold states:
- Standard heat-only iT600 thermostats and TRVs — one HVAC mode menu with
Off,Heat, andAuto.Heatmaps to manual/permanent hold,Automaps to Follow Schedule, andOffmaps to the Salus off/standby state. These devices do not expose a separate preset menu. - SQ610 / SQ610RF Quantum thermostats — separate HVAC and preset controls.
HVAC modes are
OffandHeat, withCooladded only when the gateway shows the thermostat supports cooling. Presets arePermanent HoldandFollow Schedule; schedule is not exposed as HVACAutofor SQ610, and standby is represented by HVACOff, not by a separate preset. - FC600 fan-coil controllers — separate HVAC, preset, and fan controls.
HVAC modes are
Off,Heat, andCool; schedule is handled through presets, not HVACAuto. Presets areFollow Schedule,Permanent Hold, andEcowhen the device reports Eco support. Fan modes areauto,high,medium,low, andoff.
| 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 RS600 roller shutter or blind. Supports open, close, and set position (0-100 %).
One switch entity per smart plug or relay (SP600, SPE600, SR600, and RS600 relay endpoints). 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.
Minimum supported Home Assistant version: 2024.8.0.
- Open HACS in your Home Assistant instance.
- Go to Integrations → ⋮ → Custom repositories.
- Add
https://github.com/Jordi-14/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 integration will discover all devices on the gateway and create entities automatically.
The EUID is a 16-character hexadecimal string printed on the bottom of the gateway, under the micro-USB port. For example: 001E5E0D32906128.
If the printed EUID does not work, try 0000000000000000 — some gateways accept a zeroed EUID instead of the physical one.
This is a local polling integration. Gateway data is refreshed every 20 seconds by default through one shared coordinator, then reused by all entity platforms. The regular poll interval is configurable in integration options.
After a Home Assistant command (e.g. changing a thermostat target temperature or turning on a switch), the integration requests one verification refresh after 5 s by default. This delay is configurable in integration options.
| Category | Devices |
|---|---|
| Climate | HTRP-RF(50), TS600, VS10WRF/VS10BRF, VS20WRF/VS20BRF, SQ610, SQ610RF, FC600, TRV3RF, it600MINITRV |
| Binary sensors | SW600, WLS600, OS600, SD600, TRV10RFM, RX10RF, SmokeSensor-EM |
| Temperature sensors | PS600 |
| Switches | SP600, SPE600, SR600, RS600 relay endpoints |
| Covers | RS600 |
| Locks | Any thermostat with child-lock support |
Known unsupported: SB600, CSB600 (button actions only work through the Salus Smart Home app).
RS600 is a multifunction device. A shutter installation may expose one cover
entity, while relay endpoint payloads may also expose one or two switch
entities. These entities are grouped under the same Home Assistant device when
the gateway reports the same Salus UniID.
Use the cover entity for shutters or blinds. Use the switch entities for
independent relay channels. Disable the unused representation in Home Assistant
to avoid confusing automations, and do not assume the cover and switch entities
control independent hardware outputs.
SR600 is treated as a dry relay switch, not as a cover device.
The SQ610 Quantum thermostat has additional handling:
- Separate HVAC and preset controls instead of collapsing schedule into HVAC
Auto Coolmode exposure only when the gateway reports cooling support- Direct standby handling via
HoldType, exposed as HVACOff - Simplified preset controls:
Permanent HoldandFollow Schedule - Humidity exposed through the normalized client model
- Floor temperature from external probe (
OUTSensorProbe)
Selecting Follow Schedule returns the thermostat to the schedule configured in the Salus Smart Home app.
- If the gateway IP or EUID changes, use Reconfigure from the integration entry menu — no need to delete and recreate.
- 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.
- If polling fails repeatedly, Home Assistant creates a Repairs issue linking back to this section. The repair clears automatically after the gateway responds successfully again.
If you're having issues with the integration, there are two ways to enable debug logging.
Option 1 — YAML configuration
Add the following to your configuration.yaml and restart Home Assistant:
logger:
default: info
logs:
custom_components.salus: debugOption 2 — Home Assistant UI
- 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.
- Open Settings → Devices & Services.
- Select the Salus iT600 integration.
- Open the three-dot menu → Download diagnostics.
Diagnostics include integration version, gateway health counters, device counts, availability history, and shared climate diagnostics with normalized fields plus whitelisted support fields for each thermostat. The gateway EUID/token is redacted automatically.
Review the file before posting publicly — it may contain your gateway IP and device IDs.
For support requests, include:
- Home Assistant version
homeassistant_salusversionsalus-it600-clientversion (fromcustom_components/salus/manifest.json)- Gateway model (UGE600 or UG800) if known
- Whether the gateway uses legacy or newer firmware if known
- Diagnostics file or the relevant redacted snippets
- Home Assistant logs around startup, reload, polling, or the failed command
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] |
Protocol auto-detection order:
- AES-256-CBC — legacy iT600 / UGE600 gateways
- AES-128-CBC — intermediate firmware variant
- AES-CCM — newer UG800 firmware
A rejected attempt is identified by a characteristic 33-byte reject frame (trailer byte 0xAE).
For full protocol implementation details, see the salus-it600-client library documentation.
See CONTRIBUTING.md for architecture, testing, and platform development details.
Release publishing is documented in RELEASE.md.
This integration uses salus-it600-client, a maintained successor of the original pyit600 library. Existing Home Assistant config entries keep the same salus integration domain, so normal HACS updates only require a restart.
The exact client version is pinned in custom_components/salus/manifest.json.
This repository is a fork of epoplavskis/homeassistant_salus, which is a fork of konradb3/homeassistant_salus.
It incorporates and reworks feature ideas from Leonard Pitzu's leonardpitzu/homeassistant_salus fork, including broader device coverage, UG800/new-firmware support, TRV-related entities, SQ610 improvements, smart-plug metering, and thermostat lock support. Leonard Pitzu has since joined development here, and his fork has been retired.
Protocol and parsing logic lives in the reusable salus-it600-client library. This repository exposes those capabilities through Home Assistant entities, diagnostics, options, repairs, and translations.
Licensed under either the Apache License, Version 2.0 (LICENSE-APACHE) or the MIT License (LICENSE-MIT), at your option. See LICENSE and NOTICE for the license expression and attribution details.