Skip to main content

Asynchronous Python client for Salus iT600 local gateways

Project description

salus-it600-client

An asynchronous Python client for local control and monitoring of Salus iT600 smart home devices through UGE600 or UG800 gateways — thermostats, TRVs, smart plugs, roller shutters, sensors, and more, all without cloud dependency.

Features

Climate (thermostats & TRVs)

Device family Capabilities
iT600 / SQ610 Heat/off/auto modes, Follow Schedule / Permanent Hold / Off presets, humidity (SQ610), floor temperature (external probe), battery level, 0.1 °C precision
FC600 fan-coil Heat/cool/auto modes, five presets, fan modes (auto/high/medium/low/off), separate heating/cooling setpoints
TRV3RF Heat/off/auto modes, valve opening %, battery (voltage curve), open-window detection, error code diagnostics

Sensors

Sensor Source
Temperature Standalone sensors (TS600, PS600) and thermostat readings
Humidity SQ610 (SunnySetpoint_x100) and standalone multi-sensors
Floor temperature SQ610 with external floor probe (OUTSensorProbe)
Battery Status_d (SQ610RF) and voltage curves (TRV, window/door sensors)
Power (W) Smart plug (sMeteringS) and energy meter ECM600 (sMeterS)
Energy (kWh) Smart plug (sMeteringS) and energy meter ECM600 (sMeterS)

Binary sensors

Sensor Source
Window / Door SW600, OS600 (sIASZS)
Water leak WLS600
Smoke SmokeSensor-EM
TRV relay (heat) it600MINITRV (sIT600I.RelayStatus)
Receiver relay it600Receiver
Low battery Diagnostic child on battery-powered sensors and TRVs
Thermostat problem Aggregated error flags (Error01–Error32) with descriptions
Battery problem Battery-specific error flags (battery models only)
Open window TRV open-window detection (sComm.OpenWindowStatus)

Covers

Roller shutters and blinds (RS600): open, close, set position (0-100 %).

Switches

Smart plugs and relays (SP600, SPE600, SR600, and RS600 relay endpoints): on/off control. Dual-endpoint devices exposed as separate entities.

RS600 notes

RS600 is a multifunction physical device. Depending on gateway payloads and installation mode, it can expose a cover surface through sLevelS and separate relay switch endpoints through sOnOffS. The client keeps these capabilities separate so Home Assistant can decide how to present them.

Installation

pip install salus-it600-client

Usage

from salus_it600.gateway import IT600Gateway

async with IT600Gateway(host="192.168.1.100", euid="001E5E0D32906128") as gw:
    await gw.connect()
    await gw.poll_status()

    for device_id, device in gw.get_climate_devices().items():
        print(f"{device.name}: {device.current_temperature}°C → {device.target_temperature}°C")

    # Set temperature
    await gw.set_climate_device_temperature("device_001", 21.5)

Encryption & protocol support

Salus gateways encrypt all local API traffic. The library 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
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:

  1. AES-256-CBC — legacy iT600 / UGE600 gateways
  2. AES-128-CBC — intermediate firmware variant
  3. AES-CCM — newer UG800 firmware

Rejected attempts are identified by a characteristic 33-byte reject frame (trailer byte 0xAE).

Supported devices

SQ610RF, SQ610RF(WB), SQ610RFNH, SQ610RFNH(WB), FC600, TRV3RF, it600MINITRV, it600Receiver, SP600, SPE600, SR600, RS600, SW600, OS600, WLS600, SmokeSensor-EM, SD600, TS600, RE600, RE10B, PS600, ECM600.

Unsupported

Buttons (SB600, CSB600) — actions only work through the Salus Smart Home app.

Troubleshooting

  • If you can't connect using the EUID on your gateway, try 0000000000000000 as EUID.
  • Make sure Local WiFi Mode is enabled:
    1. Open the Salus Smart Home app and sign in.
    2. Double-tap your gateway to open the info screen.
    3. Press the gear icon to enter configuration.
    4. Check that Disable Local WiFi Mode is set to No.
    5. Save and power-cycle the gateway.

Development

python -m venv venv && source venv/bin/activate
pip install -e ".[dev]"
pytest
ruff check .

See CONTRIBUTING.md for architecture details and contribution guidelines.

Migration from pyit600

This package replaces the unmaintained pyit600. Update imports:

# Old
from pyit600.gateway import IT600Gateway

# New
from salus_it600.gateway import IT600Gateway

License

MIT License. See LICENSE for details.

Project origin

This project is a maintained fork of epoplavskis/pyit600. It incorporates protocol, device-support, and parser work from leonardpitzu/homeassistant_salus.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

salus_it600_client-0.4.8.tar.gz (45.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

salus_it600_client-0.4.8-py3-none-any.whl (37.4 kB view details)

Uploaded Python 3

File details

Details for the file salus_it600_client-0.4.8.tar.gz.

File metadata

  • Download URL: salus_it600_client-0.4.8.tar.gz
  • Upload date:
  • Size: 45.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for salus_it600_client-0.4.8.tar.gz
Algorithm Hash digest
SHA256 8fe7dcfbe414dc20dcdebfa092acd1696f3172b42bdfec163c135da24417a9f3
MD5 b4127ddf3223b71de41e78efc9ecec4d
BLAKE2b-256 19b011e1809ce5a1930bba0ed36e72e452a661b07c7ef4e1bf363956526e5060

See more details on using hashes here.

Provenance

The following attestation bundles were made for salus_it600_client-0.4.8.tar.gz:

Publisher: publish.yml on Jordi-14/salus-it600-client

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file salus_it600_client-0.4.8-py3-none-any.whl.

File metadata

File hashes

Hashes for salus_it600_client-0.4.8-py3-none-any.whl
Algorithm Hash digest
SHA256 bf104e6c4bc7fbda92dea27ee5fd2bebe69d289b6a06b2d2af06a957562ed7c1
MD5 6178b2b26210ae68b4adb0210df4cafe
BLAKE2b-256 9d5d2c0813032f72d7facbef257a2115358e762344b8a6ef43c815fea1c11c83

See more details on using hashes here.

Provenance

The following attestation bundles were made for salus_it600_client-0.4.8-py3-none-any.whl:

Publisher: publish.yml on Jordi-14/salus-it600-client

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page