An open API service indexing awesome lists of open source software.

https://github.com/majamassarini/lifx-lib

A Python 3 library able to encode/decode Lifx (lan) messages
https://github.com/majamassarini/lifx-lib

automate-home home-automation library lifx lifx-lan-protocol lifxlan python python3

Last synced: 30 days ago
JSON representation

A Python 3 library able to encode/decode Lifx (lan) messages

Awesome Lists containing this project

README

          

# lifx-lib

[![Build Status](https://travis-ci.com/majamassarini/lifx-lib.svg?branch=master)](https://travis-ci.com/majamassarini/lifx-lib)
[![codecov](https://codecov.io/gh/majamassarini/lifx-lib/branch/master/graph/badge.svg?token=HQ27JK26MT)](https://codecov.io/gh/majamassarini/lifx-lib)
[![Documentation Status](https://readthedocs.org/projects/lifx-lib/badge/?version=latest)](https://lifx-lib.readthedocs.io/en/latest/?badge=latest)

A Python 3 library able to encode/decode Lifx (lan) messages.

It can be used with an asynchronous or synchronous client.

## Examples

### Encode
```python
>>> import lifx
>>> body = lifx.lan.light.SetColor()
>>> header = lifx.lan.header.make(body.state)
>>> body.rgb = (0, 255, 0)
>>> body.kelvin = 3500
>>> body.duration = 1024
>>> msg = lifx.lan.Msg.encode(header, body)
>>> msg
[0x31, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x00, 0x00, 0x00, 0x00, 0x55, 0x55, 0xFF, 0xFF, 0xFF, 0xFE, 0xAC, 0x0D, 0x00, 0x04, 0x00, 0x00]
```

#### Encode from a dictionary
```python
>>> import lifx
>>> dictionary = {"hue": 335, "saturation": 90, "brightness": 90, "kelvin": 3500, "duration": 1000,
... "transient": True, "period": 180000, "cycles": 30, "skew_ratio": 0.5, "waveform": "sine"}
>>> body = lifx.lan.light.State_Factory.make("SetWaveform", dictionary)
>>> header = lifx.lan.header.make(body.state)
>>> msg = lifx.lan.Msg.encode(header, body)
>>> msg
[0x39, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x67, 0x00, 0x00, 0x00, 0x00, 0x01, 0x38, 0xEE, 0x66, 0xE6, 0x66, 0xE6, 0xAC, 0x0D, 0x20, 0xBF, 0x02, 0x00, 0x00, 0x00, 0xF0, 0x41, 0x00, 0x00, 0x01]
```

### Decode

```python
>>> import lifx
>>> msg = lifx.lan.Msg.from_bytes([0x58, 0x00, 0x00, 0x54, 0xB9, 0x71, 0x5D, 0x07, 0xD0, 0x73, 0xD5, 0x12, 0x1A, 0xF1, 0x00, 0x00, 0x4C, 0x49, 0x46, 0x58, 0x56, 0x32, 0x00, 0x4D, 0x18, 0x52, 0x42, 0x1E, 0xB5, 0xFC, 0x82, 0x14, 0x6B, 0x00, 0x00, 0x00, 0x71, 0x7E, 0xCC, 0x4C, 0x09, 0x57, 0xAC, 0x0D, 0x00, 0x00, 0xFF, 0xFF, 0x4C, 0x49, 0x46, 0x58, 0x20, 0x42, 0x75, 0x6C, 0x62, 0x20, 0x31, 0x32, 0x31, 0x61, 0x66, 0x31, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00])
>>> (header, body) = msg.decode()
>>> header.type

>>> body.kelvin
3500
>>> body.rgb
(61, 87, 86)
>>> str(body)
'State {power: 65535, hue: 178, saturation: 30, brightness: 34, kelvin: 3500, rgb: (61, 87, 86), label: LIFX Bulb 121af1}'
```

#### Decode to a dictionary

```python
>>> import lifx
>>> msg = lifx.lan.Msg.from_bytes([0x39, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x67, 0x00, 0x00, 0x00, 0x00, 0x01, 0x38, 0xEE, 0x66, 0xE6, 0x66, 0xE6, 0xAC, 0x0D, 0x20, 0xBF, 0x02, 0x00, 0x00, 0x00, 0xF0, 0x41, 0x00, 0x00, 0x01])
>>> (header, body) = msg.decode()
>>> header.type

>>> factory = lifx.lan.light.Description_Factory()
>>> s = factory.make(body)
>>> s[0]
'SetWaveform'
>>> s[1]['waveform']
'sine'
```

## Getting Started

```
pip install lifx-lib
```

## Diving In

[Documentation](https://lifx-lib.readthedocs.io/en/latest/?badge=latest)

## Contributing

Pull requests are welcome!.

## License

lifx-lib is licensed under the MIT license.