Giter VIP home page Giter VIP logo

aiolifx's Introduction

aiolifx

aiolifx is a Python 3/asyncio library to control Lifx LED lightbulbs over your LAN.

PyPI version fury.io MIT license GITHUB-BADGE Downloads

Most of it was taken from Meghan Clarkk lifxlan package (https://github.com/mclarkk) and adapted to Python 3 (and asyncio obviously)

Installation

We are on PyPi so

 pip3 install aiolifx

or python3 -m pip install aiolifx

After installation, the utility

aiolifx

can be used to test/control devices.

NOTE: When installing with Python 3.4, the installation produce an error message (syntax error). This can be safely ignored.

How to use

Essentially, you create an object with at least 2 methods:

- register
- unregister

You then start the LifxDiscovery task in asyncio. It will register any new light it finds. All the method communicating with the bulb can be passed a callback function to react to the bulb response. The callback should take 2 parameters:

- a light object
- the response message

The easiest way is to look at the file in the examples directory. "Wifi" and "Uptime" use a callback to print the info when it is returned.

In essence, the test program is this

class bulbs():
""" A simple class with a register and unregister methods
"""
    def __init__(self):
        self.bulbs=[]

    def register(self,bulb):
        self.bulbs.append(bulb)

    def unregister(self,bulb):
        idx=0
        for x in list([ y.mac_addr for y in self.bulbs]):
            if x == bulb.mac_addr:
                del(self.bulbs[idx])
                break
            idx+=1

def readin():
"""Reading from stdin and displaying menu"""

    selection = sys.stdin.readline().strip("\n")
    DoSomething()

MyBulbs = bulbs()
loop = aio.get_event_loop()
discovery = alix.LifxDiscovery(loop, MyBulbs)
try:
    loop.add_reader(sys.stdin, readin)
    discovery.start()
    loop.run_forever()
except:
    pass
finally:
    discovery.cleanup()
    loop.remove_reader(sys.stdin)
    loop.close()

Other things worth noting:

-  Whilst LifxDiscovery uses UDP broadcast, the bulbs are
   connected with Unicast UDP

- The socket connecting to a bulb is not closed unless the bulb is deemed to have
  gone the way of the Dodo. I've been using that for days with no problem

- You can select to used IPv6 connection to the bulbs by passing an
  IPv6 prefix to LifxDiscovery. It's only been tried with /64 prefix.
  If you want to use a /48 prefix, add ":" (colon) at the end of the
  prefix and pray. (This means 2 colons at the end!)

- I only have Original 1000, so I could not test with other types
  of bulbs

- Unlike in lifxlan, set_waveform takes a dictionary with the right
  keys instead of all those parameters

Development

Running locally

Run this command each time you make changes to the project. It enters at __main__.py

pip3 install . && aiolifx

Thanks

Thanks to Anders Melchiorsen and Avi Miller for their essential contributions

aiolifx's People

Contributors

frawau avatar amelchio avatar djelibeybi avatar samywamy10 avatar bdraco avatar micolous avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.