%global _empty_manifest_terminate_build 0 Name: python-aiolifx Version: 0.8.10 Release: 1 Summary: API for local communication with LIFX devices over a LAN with asyncio. License: MIT URL: http://github.com/frawau/aiolifx Source0: https://mirrors.nju.edu.cn/pypi/web/packages/28/e7/fee8001e00db0f47be6ab93d73600a47f83a73971d01f27ad41caee8631d/aiolifx-0.8.10.tar.gz BuildArch: noarch Requires: python3-async-timeout Requires: python3-bitstring Requires: python3-ifaddr %description # aiolifx aiolifx is a Python 3/asyncio library to control Lifx LED lightbulbs over your LAN. [![PyPI version fury.io](https://badge.fury.io/py/aiolifx.svg)](https://pypi.python.org/pypi/aiolifx) [![MIT license](https://img.shields.io/badge/License-MIT-blue.svg)](https://lbesson.mit-licen) [![GITHUB-BADGE](https://github.com/frawau/aiolifx/workflows/black/badge.svg)](https://github.com/psf/black) [![Downloads](https://pepy.tech/badge/aiolifx/month)](https://pepy.tech/project/aiolifx) 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 To develop locally, the easiest way is to from the root directory run: ```bash pip3 install . && python3 ./examples/lifx-cli.py ``` # Thanks Thanks to Anders Melchiorsen and Avi Miller for their essential contributions %package -n python3-aiolifx Summary: API for local communication with LIFX devices over a LAN with asyncio. Provides: python-aiolifx BuildRequires: python3-devel BuildRequires: python3-setuptools BuildRequires: python3-pip %description -n python3-aiolifx # aiolifx aiolifx is a Python 3/asyncio library to control Lifx LED lightbulbs over your LAN. [![PyPI version fury.io](https://badge.fury.io/py/aiolifx.svg)](https://pypi.python.org/pypi/aiolifx) [![MIT license](https://img.shields.io/badge/License-MIT-blue.svg)](https://lbesson.mit-licen) [![GITHUB-BADGE](https://github.com/frawau/aiolifx/workflows/black/badge.svg)](https://github.com/psf/black) [![Downloads](https://pepy.tech/badge/aiolifx/month)](https://pepy.tech/project/aiolifx) 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 To develop locally, the easiest way is to from the root directory run: ```bash pip3 install . && python3 ./examples/lifx-cli.py ``` # Thanks Thanks to Anders Melchiorsen and Avi Miller for their essential contributions %package help Summary: Development documents and examples for aiolifx Provides: python3-aiolifx-doc %description help # aiolifx aiolifx is a Python 3/asyncio library to control Lifx LED lightbulbs over your LAN. [![PyPI version fury.io](https://badge.fury.io/py/aiolifx.svg)](https://pypi.python.org/pypi/aiolifx) [![MIT license](https://img.shields.io/badge/License-MIT-blue.svg)](https://lbesson.mit-licen) [![GITHUB-BADGE](https://github.com/frawau/aiolifx/workflows/black/badge.svg)](https://github.com/psf/black) [![Downloads](https://pepy.tech/badge/aiolifx/month)](https://pepy.tech/project/aiolifx) 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 To develop locally, the easiest way is to from the root directory run: ```bash pip3 install . && python3 ./examples/lifx-cli.py ``` # Thanks Thanks to Anders Melchiorsen and Avi Miller for their essential contributions %prep %autosetup -n aiolifx-0.8.10 %build %py3_build %install %py3_install install -d -m755 %{buildroot}/%{_pkgdocdir} if [ -d doc ]; then cp -arf doc %{buildroot}/%{_pkgdocdir}; fi if [ -d docs ]; then cp -arf docs %{buildroot}/%{_pkgdocdir}; fi if [ -d example ]; then cp -arf example %{buildroot}/%{_pkgdocdir}; fi if [ -d examples ]; then cp -arf examples %{buildroot}/%{_pkgdocdir}; fi pushd %{buildroot} if [ -d usr/lib ]; then find usr/lib -type f -printf "/%h/%f\n" >> filelist.lst fi if [ -d usr/lib64 ]; then find usr/lib64 -type f -printf "/%h/%f\n" >> filelist.lst fi if [ -d usr/bin ]; then find usr/bin -type f -printf "/%h/%f\n" >> filelist.lst fi if [ -d usr/sbin ]; then find usr/sbin -type f -printf "/%h/%f\n" >> filelist.lst fi touch doclist.lst if [ -d usr/share/man ]; then find usr/share/man -type f -printf "/%h/%f.gz\n" >> doclist.lst fi popd mv %{buildroot}/filelist.lst . mv %{buildroot}/doclist.lst . %files -n python3-aiolifx -f filelist.lst %dir %{python3_sitelib}/* %files help -f doclist.lst %{_docdir}/* %changelog * Fri Apr 21 2023 Python_Bot - 0.8.10-1 - Package Spec generated