Skip to main content

Controls for Lightwave Smart Series (second generation) devices

Project description

Lightwave Smart Python Library

PyPI version Python 3.7+ License: MIT

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:

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 servers
  • async_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 on
  • async_turn_off_by_featureset_id(id) - Turn device off
  • async_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 checks
  • is_gen2(), is_hub(), is_trv() - Specific device checks

Examples

  • example_readme.py - Basic synchronous usage
  • example_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

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

lightwave_smart-2.0.2.tar.gz (20.9 kB view details)

Uploaded Source

Built Distribution

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

lightwave_smart-2.0.2-py3-none-any.whl (22.0 kB view details)

Uploaded Python 3

File details

Details for the file lightwave_smart-2.0.2.tar.gz.

File metadata

  • Download URL: lightwave_smart-2.0.2.tar.gz
  • Upload date:
  • Size: 20.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for lightwave_smart-2.0.2.tar.gz
Algorithm Hash digest
SHA256 8aec82ad5d554a5d3d09f295603b81ab15e54e4f7e8f226d01c972d1ec70dd11
MD5 6eb5914cefabc634a1538d0e956615be
BLAKE2b-256 2e81562213046b81b22cb61056998aeb3f47cbc5267d99c78313f175db98c16c

See more details on using hashes here.

Provenance

The following attestation bundles were made for lightwave_smart-2.0.2.tar.gz:

Publisher: publish-pypi.yaml on LightwaveSmartHome/lightwave-smart

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

File details

Details for the file lightwave_smart-2.0.2-py3-none-any.whl.

File metadata

File hashes

Hashes for lightwave_smart-2.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 bd8836c5f790d626ebcb5dd3997a13a66a1079e6deb76f5d9e24ea55d63b6439
MD5 f2327b4781ae44f94a9b2c079e7a0264
BLAKE2b-256 4c41c3c79c74d06f6a7ea4496742c956350b245b788580f8215a649378201189

See more details on using hashes here.

Provenance

The following attestation bundles were made for lightwave_smart-2.0.2-py3-none-any.whl:

Publisher: publish-pypi.yaml on LightwaveSmartHome/lightwave-smart

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