pyzerproc
Async library to control Zerproc Bluetooth LED smart string lights
Free software: Apache Software License 2.0
Features
Discover nearby devices
Turn lights on and off
Set light color
Get light status
Command line usage
pyzerproc ships with a command line tool that exposes the features of the library.
$ pyzerproc discover
INFO:pyzerproc.discovery:Starting scan for local devices
INFO:pyzerproc.discovery:Discovered AA:BB:CC:00:11:22: LEDBlue-CC001122
INFO:pyzerproc.discovery:Discovered AA:BB:CC:33:44:55: LEDBlue-CC334455
INFO:pyzerproc.discovery:Scan complete
AA:BB:CC:00:11:22
AA:BB:CC:33:44:55
$ pyzerproc turn-on AA:BB:CC:00:11:22
INFO:pyzerproc.light:Connecting to AA:BB:CC:00:11:22
INFO:pyzerproc.light:Turning on AA:BB:CC:00:11:22
$ pyzerproc turn-off AA:BB:CC:00:11:22
INFO:pyzerproc.light:Connecting to AA:BB:CC:00:11:22
INFO:pyzerproc.light:Turning off AA:BB:CC:00:11:22
$ pyzerproc set-color AA:BB:CC:00:11:22 ff0000
INFO:pyzerproc.light:Connecting to AA:BB:CC:00:11:22
INFO:pyzerproc.light:Changing color of AA:BB:CC:00:11:22 to #ff0000
$ pyzerproc set-color AA:BB:CC:00:11:22 00ff00
INFO:pyzerproc.light:Connecting to AA:BB:CC:00:11:22
INFO:pyzerproc.light:Changing color of AA:BB:CC:00:11:22 to #00ff00
$ pyzerproc is-on AA:BB:CC:00:11:22
INFO:pyzerproc.light:Connecting to AA:BB:CC:00:11:22
INFO:pyzerproc.light:Got state of AA:BB:CC:00:11:22: <LightState is_on='True' color='(255, 0, 0)'>
True
$ pyzerproc get-color AA:BB:CC:00:11:22
INFO:pyzerproc.light:Connecting to AA:BB:CC:00:11:22
INFO:pyzerproc.light:Got state of AA:BB:CC:00:11:22: <LightState is_on='True' color='(255, 0, 0)'>
ff0000
Usage
Discover nearby devices
import asyncio
import pyzerproc
async def main():
lights = await pyzerproc.discover(timeout=30)
for light in lights:
print("Address: {} Name: {}".format(light.address, light.name))
asyncio.get_event_loop().run_until_complete(main())
Turn a light on and off
import asyncio
import pyzerproc
async def main():
address = "AA:BB:CC:00:11:22"
light = pyzerproc.Light(address)
try:
await light.connect()
await light.turn_on()
await asyncio.sleep(5)
await light.turn_off()
finally:
await light.disconnect()
asyncio.get_event_loop().run_until_complete(main())
Change the light color
import asyncio
import pyzerproc
async def main():
address = "AA:BB:CC:00:11:22"
light = pyzerproc.Light(address)
try:
await light.connect()
while True:
await light.set_color(255, 0, 0) # Red
await asyncio.sleep(1)
await light.set_color(0, 255, 0) # Green
await asyncio.sleep(1)
finally:
await light.disconnect()
asyncio.get_event_loop().run_until_complete(main())
Get the light state
import asyncio
import pyzerproc
async def main():
address = "AA:BB:CC:00:11:22"
light = pyzerproc.Light(address)
try:
await light.connect()
state = await light.get_state()
if state.is_on:
print(state.color)
else:
print("Off")
finally:
await light.disconnect()
Changelog
0.4.12 (2023-04-07)
Fix test compatibility with bleak 0.20
0.4.11 (2022-05-03)
Unpin test dependencies
0.4.10 (2021-11-23)
Fix test compatibility with bleak 0.13
0.4.9 (2021-03-28)
Upgrade to bleak 0.11.0
0.4.8 (2021-02-12)
0.4.7 (2020-12-20)
Include a default timeout on all remote calls
0.4.5 (2020-12-20)
Wrap all exceptions from upstream code
0.4.4 (2020-12-19)
Timeout for is_connected and reduce extra calls
0.4.3 (2020-12-17)
Fix bleak dependency called in setup.py
0.4.1 (2020-12-17)
Wrap exceptions from is_connected
0.4.0 (2020-12-17)
Refactor from pygatt to bleak for async interface
0.3.0 (2020-12-03)
Remove thread-based auto_reconnect
0.2.5 (2020-06-24)
Set full brightness to 0xFF to match vendor app
0.2.4 (2020-05-09)
Improve RGB edge cases
0.2.3 (2020-05-09)
Rethrow exceptions on device subscribe
0.2.2 (2020-05-09)
Fix imports
0.2.1 (2020-05-09)
Wrap upstream exceptions
0.2.0 (2020-05-09)
Expose exception objects
Expose light address and name on discovery
0.1.1 (2020-05-08)
Expose auto reconnect
0.1.0 (2020-05-07)
Discover nearby devices
0.0.2 (2020-05-05)
Get the current light state
0.0.1 (2020-05-04)
Initial release
Credits
Thanks to Uri Shaked for an incredible guide to Reverse Engineering a Bluetooth Lightbulb.
This package was created with Cookiecutter and the audreyr/cookiecutter-pypackage project template.
Metadata
Release files for pyzerproc 0.4.12
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| pyzerproc-0.4.12.tar.gz | 11.9 kB | Without provenance | Details for pyzerproc-0.4.12.tar.gz |
Release files / pyzerproc-0.4.12.tar.gz
| Download URL | pyzerproc-0.4.12.tar.gz |
|---|---|
| Size | 11.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
b6c82e3112cad542222f1c590f3eef38c0c6583b7fc749f2b35f3795a9cc384a
|
|
BLAKE2b-256 checksum How to use checksums |
371afe70219677822d06b7055f4779854ae238ccf287883d6fe42958f07cdf0f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/1.14.0 pkginfo/1.8.1 requests/2.26.0 setuptools/58.3.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.9.13
|
Security for pyzerproc 0.4.12
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.