diff options
Diffstat (limited to 'python-aiolifx.spec')
-rw-r--r-- | python-aiolifx.spec | 406 |
1 files changed, 406 insertions, 0 deletions
diff --git a/python-aiolifx.spec b/python-aiolifx.spec new file mode 100644 index 0000000..c0aa77e --- /dev/null +++ b/python-aiolifx.spec @@ -0,0 +1,406 @@ +%global _empty_manifest_terminate_build 0 +Name: python-aiolifx +Version: 0.8.9 +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://files.pythonhosted.org/packages/2f/20/00800ec774732b03c94f07e25165db3bfe8b5c68e07bd1d686e55deebc6c/aiolifx-0.8.9.tar.gz +BuildArch: noarch + +Requires: python3-bitstring +Requires: python3-ifaddr + +%description +# aiolifx + +aiolifx is a Python 3/asyncio library to control Lifx LED lightbulbs over your LAN. + +[](https://pypi.python.org/pypi/aiolifx) +[](https://lbesson.mit-licen) +[](https://github.com/psf/black) +[](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 + +# 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 +%description -n python3-aiolifx +# aiolifx + +aiolifx is a Python 3/asyncio library to control Lifx LED lightbulbs over your LAN. + +[](https://pypi.python.org/pypi/aiolifx) +[](https://lbesson.mit-licen) +[](https://github.com/psf/black) +[](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 + +# 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. + +[](https://pypi.python.org/pypi/aiolifx) +[](https://lbesson.mit-licen) +[](https://github.com/psf/black) +[](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 + +# Thanks + +Thanks to Anders Melchiorsen and Avi Miller for their essential contributions + + +%prep +%autosetup -n aiolifx-0.8.9 + +%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 +* Thu Feb 23 2023 Python_Bot <Python_Bot@openeuler.org> - 0.8.9-1 +- Package Spec generated |