Lightwave Smart Python Library
A Python library for controlling Lightwave (https://lightwaverf.com) Smart Series (second generation) devices as well as Connect Series (first generation) devices connected to a Link Plus hub. Control and monitor lights (dimmers), power outlets (sockets), smart switches (wirefrees), PIRs, thermostats, TRVs, magnetic switches, relays, energy monitors and other device types.
Supported devices include:
- Link Plus hub (required)
- Light Switches / Dimmers
- Power Outlets
- Smart Switches
- TRVs and Thermostats
- Relays and LED Drivers
- And more...
Updates
Important: The LWLink2Public class has been removed as of version 1.0.0.
Installation
pip install lightwave_smart
Quick Start
import asyncio
from lightwave_smart import lightwave_smart
async def main():
# Create and authenticate
link = lightwave_smart.LWLink2()
link.auth.set_auth_method(auth_method="password", username="your_email@example.com", password="your_password")
await link.async_activate()
# Get devices and feature sets
await link.async_get_hierarchy()
# List feature sets
for featureset in link.featuresets.values():
device = featureset.device
print(f"{featureset.name} (ID: {featureset.featureset_id}), Device Product Code: {device.product_code}")
# Control a light
featureset_id = "your-feature-set-id"
await link.async_turn_on_by_featureset_id(featureset_id)
await link.async_set_brightness_by_featureset_id(featureset_id, 75)
await link.async_deactivate()
asyncio.run(main())
Key Concepts
- Devices: Physical devices (light switches, thermostats, etc.)
- Feature Sets: Logical groupings within a device (e.g. a 2-circuit switch has 2 feature sets)
Device Control
Basic Control
# Lights/Switches
await link.async_turn_on_by_featureset_id(featureset_id)
await link.async_turn_off_by_featureset_id(featureset_id)
await link.async_set_brightness_by_featureset_id(featureset_id, 50)
# Thermostats
await link.async_set_temperature_by_featureset_id(featureset_id, 22.5)
# Covers/Blinds
await link.async_cover_open_by_featureset_id(featureset_id)
await link.async_cover_close_by_featureset_id(featureset_id)
Device Type Detection
device = link.featuresets['featureset-id'].device
print(f"Is light: {device.is_light()}")
print(f"Is climate: {device.is_climate()}")
print(f"Is switch: {device.is_switch()}")
Event Callbacks
def feature_changed(**kwargs):
# example output for a switch:
# {'feature': 'switch', 'feature_id': 'your-feature-set-id', 'prev_value': 0, 'new_value': 1}
print(f"Feature changed: {kwargs}")
# Register callback
await link.async_register_feature_callback(featureset_id, feature_changed)
API Reference
Core Methods
async_activate()- Connect to Lightwave serversasync_get_hierarchy()- Get all devices and feature sets, reads and updates all features states in the background
After calling async_get_hierarchy all feature known at that time will have their states updated as they change based on events received from the websocket.
Device Control
async_turn_on_by_featureset_id(id)- Turn device onasync_turn_off_by_featureset_id(id)- Turn device offasync_set_brightness_by_featureset_id(id, level)- Set brightness (0-100)async_set_temperature_by_featureset_id(id, temp)- Set temperature
Device Information
is_light(),is_climate(),is_switch(),is_cover(),is_energy()- Device type checksis_gen2(),is_hub(),is_trv()- Specific device checks
Examples
example_readme.py- Basic synchronous usageexample_async.py- Advanced async usage with callbacks
Contributing
Contributions welcome! Fork, create a feature branch, commit changes, and submit a PR.
License
MIT License - see LICENSE file.
Thanks
Credit to Bryan Blunt for the original version: https://github.com/bigbadblunt/lightwave2
Metadata
Release files for lightwave-smart 2.0.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| lightwave_smart-2.0.2.tar.gz | 20.9 kB | With provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| lightwave_smart-2.0.2-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 42.9 kB
Release files / lightwave_smart-2.0.2.tar.gz
| Download URL | lightwave_smart-2.0.2.tar.gz |
|---|---|
| Size | 20.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
8aec82ad5d554a5d3d09f295603b81ab15e54e4f7e8f226d01c972d1ec70dd11
|
|
BLAKE2b-256 checksum How to use checksums |
2e81562213046b81b22cb61056998aeb3f47cbc5267d99c78313f175db98c16c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 10, 2025.
Transparency logRelease files / lightwave_smart-2.0.2-py3-none-any.whl
| Download URL | lightwave_smart-2.0.2-py3-none-any.whl |
|---|---|
| Size | 22.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
bd8836c5f790d626ebcb5dd3997a13a66a1079e6deb76f5d9e24ea55d63b6439
|
|
BLAKE2b-256 checksum How to use checksums |
4c41c3c79c74d06f6a7ea4496742c956350b245b788580f8215a649378201189
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 10, 2025.
Transparency logSecurity for lightwave-smart 2.0.2
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
All 2 files in this release have been uploaded with provenance metadata.
Attestation for lightwave_smart-2.0.2.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 10, 2025.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.