A custom Home Assistant integration for local control of Exalus Home roller blinds via the TR7 control unit. No cloud required.
- Fully local communication — no cloud dependency after setup
- Precise position control — 0–100%
- Real-time updates — instant status feedback via WebSocket push
- Automatic reconnection — robust error handling
- Rich attributes — position, state, battery level, signal strength, firmware
- Multilingual UI — German & English
- Home Assistant 2026.4.4 or newer
- TR7 Exalus control unit reachable on your local network
- TR7 serial number and PIN (found on the device label)
- Open HACS
- Click Integrations
- Click the menu (⋮) in the top right → Custom repositories
- Add:
https://github.com/JohnGrab/tr7-exalus-local— Category: Integration - Search for TR7 Exalus Local and install
- Restart Home Assistant
- Download this repository
- Copy
custom_components/tr7_exalus_local/into your<config_dir>/custom_components/ - Restart Home Assistant
- Settings → Devices & Services → Add Integration
- Search for TR7 Exalus
- Enter:
- Host: IP address of the TR7 unit (e.g.
192.168.1.160) - Port:
81(default) - Serial number: from the label on the TR7 device
- PIN: from the label on the TR7 device
- Host: IP address of the TR7 unit (e.g.
Router admin panel: look under Connected devices / DHCP clients for TR7 or Exalus.
Network scan:
nmap -p 81 192.168.1.0/24Recommended: assign a static DHCP reservation for the TR7's MAC address so the IP never changes.
service: cover.open_cover
target:
entity_id: cover.living_room_blind
service: cover.set_cover_position
target:
entity_id: cover.living_room_blind
data:
position: 50
service: cover.stop_cover
target:
entity_id: cover.living_room_blindautomation:
- alias: "Open blinds at sunrise"
trigger:
- platform: sun
event: sunrise
offset: "00:30:00"
action:
- service: cover.open_cover
target:
entity_id:
- cover.living_room_blind
- cover.bedroom_blind
- alias: "Sun protection above 28°C"
trigger:
- platform: numeric_state
entity_id: sensor.outdoor_temperature
above: 28
condition:
- condition: sun
after: sunrise
before: sunset
action:
- service: cover.set_cover_position
target:
entity_id: cover.south_blind
data:
position: 25| Attribute | Description |
|---|---|
position |
Current position (0–100%) |
state |
idle / opening / closing / stopped / error |
device_guid |
Unique device ID |
battery_level |
Battery level (if available) |
signal_strength |
RSSI in dBm |
firmware |
Firmware version |
"Failed to connect": verify the IP with ping <TR7_IP> and the port with nc -zv <TR7_IP> 81. Restart the TR7 if needed.
"Unauthorized": double-check the serial number (must be uppercase) and PIN on the device label.
No devices found: confirm the blinds are registered in the Exalus Home app, then reload the integration: Integrations → TR7 Exalus → ⋮ → Reload.
Enable debug logging:
# configuration.yaml
logger:
default: info
logs:
custom_components.tr7_exalus_local: debugpip install websockets
cp config.example.json config.json
# Edit config.json with your TR7 host, serial number, and PIN
python scripts/smoke_test.py- API_DOCUMENTATION.md — WebSocket protocol reference
- CONTRIBUTING.md — contribution guide and testing setup
- FAQ.md — common questions
MIT — see LICENSE
Unofficial project — not affiliated with or endorsed by Exalus or TR7.