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.5 °C increments
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 instantaneous demand (sMeteringS)
Energy (kWh) Smart plug cumulative consumption (sMeteringS)

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 (SR600, RS600): open, close, set position (0–100 %).

Switches

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

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.

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.5.tar.gz (43.7 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.5-py3-none-any.whl (36.4 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: salus_it600_client-0.4.5.tar.gz
  • Upload date:
  • Size: 43.7 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.5.tar.gz
Algorithm Hash digest
SHA256 796b07b1b6b17ecfbbda71bd1ab8a60683110e792b47ded9b6cbae85402aef5f
MD5 660afbda4c3abd630e883ee58a4c3611
BLAKE2b-256 5ea3f7271430085dbbfa7b682018912b6d8b850650d4c0a128a5d12066aa8902

See more details on using hashes here.

Provenance

The following attestation bundles were made for salus_it600_client-0.4.5.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.5-py3-none-any.whl.

File metadata

File hashes

Hashes for salus_it600_client-0.4.5-py3-none-any.whl
Algorithm Hash digest
SHA256 ef82fd6a545960a05eaeab16a226a9e3249ab6a7c6808de83e743d9d503925fc
MD5 2708322b0d3b81bca32e0f25454f5539
BLAKE2b-256 0a49630e1e1ef8fdf5cef89462ef9a3e4ee88ab898386972fbefb066346bd556

See more details on using hashes here.

Provenance

The following attestation bundles were made for salus_it600_client-0.4.5-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