awoxmeshlight 0.2.0
A package to control Awox Mesh light bulbs.
License: MIT

Python package to control Awox mesh light bulbs.

API inspired by [Matthew Garrett](https://github.com/mjg59)'s python light bulb 
interfaces.

I have only one light bulb and so didn't really test the mesh features, and 
my light bulb was never associated with the official app.

Only tested with the ESMLm\_c9 model, firmware version 1.2.4

Requires :
- A recent version of Python 2 or 3 (tested with 3.6 and 2.7)
- bluepy
- pycryptodome

## Installation

From the directory containing `setup.py` : `pip install .` or
`pip install --user .` to install in the user's Python directory.

## Usage :

From reports, it may not be possible to use the Awox app at the same time as this.

### Setting the password on an unpaired light

The `setMesh` function may hang, but the light blinks when accepting the settings.

```python
import awoxmeshlight
mylight = awoxmeshlight.AwoxMeshLight ("A4:C1:38:78:11:33")
mylight.connect() # Unless specified, the default name and password are used
mylight.setMesh("new_mesh_name", "new_mesh_password","new_mesh_key")
mylight.disconnect()
```

### With the remote

*Contributed by [Pixtxa](https://github.com/Pixtxa).*

Reset the light (hold PowerOn + Fav. 1) and the remote (hold PowerOn +
ColorCycle) and connect the remote to the light again (hold PowerOn). Now hold
PowerOn and the blue button for a few seconds, so the remote switches to
Bluetooth-mode. Use BT-app (nRF-Connect or so) to get the mac and name (both
will have the same name, its "R-" followed by the last 6 digits of the remotes
mac-address). Password will be "1234".

For the remote:

```python
import awoxmeshlight
myremote = awoxmeshlight.AwoxMeshLight ("A4:C1:38:75:24:93", "R-752593", "1234") #change to your remotes data
myremote.connect()
myremote.setMesh("PixtxaLightNet", "IeY3johvoosh","4556572782865925") #better change all of them
myremote.disconnect()
```
[After setMesh(...) the program didn't work, but the data was set, so i killed the task]

For the light:
```python
import awoxmeshlight
mylight = awoxmeshlight.AwoxMeshLight ("A4:C1:38:78:62:74", "R-752593", "1234") #change to your lights data
mylight.connect()
mylight.setMesh("PixtxaLightNet", "IeY3johvoosh","4556572782865925") #same as on the remote
mylight.disconnect()
```
[After setMesh(...) the program didn't work, but the data was set, so i killed the task]

Now you can run a simple test script:

```python
import awoxmeshlight
import time
mylight = awoxmeshlight.AwoxMeshLight ("A4:C1:38:78:62:74", "PixtxaLightNet", "IeY3johvoosh")
mylight.connect()
mylight.setColor(0x00, 0xFF, 0x00) #green
mylight.setColorBrightness(0x01) #dark
time.sleep(1)
mylight.setColorBrightness(0x64) #bright
time.sleep(1)
mylight.setPreset(0) #colorchange
mylight.setSequenceFadeDuration(500)
mylight.setSequenceColorDuration(500)
time.sleep(15)
mylight.setWhite(0x00, 0x7F) #coldwhite
time.sleep(1)
mylight.setWhite(0x73, 0x63) #warmwhite
time.sleep(1)
mylight.off()
time.sleep(1)
mylight.on()
mylight.disconnect()
```

## Printing some debug info

Functions don't print anything, instead the `logging` module is used.

Example using the logger to print everything to stderr :
```python
import awoxmeshlight
import logging

logger = logging.getLogger("awoxmeshlight")
logger.setLevel(logging.DEBUG)
handler = logging.StreamHandler ()
handler.setLevel(logging.DEBUG)
logger.addHandler (handler)

mylight = awoxmeshlight.AwoxMeshLight ("A4:C1:38:97:11:33", "mesh_name", "mesh_password")
mylight.connect ()
mylight.setColor (0x50, 0x76, 0x00 )
mylight.disconnect()
```

## Procedure to manually reset the light bulb (from Awox FAQ video):

Turn on and off in the following sequence :

- 3 times :
  - On during 1 sec
  - Off during 6 sec
- On 10 sec
- Off 10 sec
- On 10 sec
- Off 6 sec
- On -> Light will blink and turn red