puffco-py 💨
A Python library and CLI for Puffco Peak Pro and Puffco Proxy smart vaporizers over Bluetooth Low Energy (BLE).
Stream live bowl temperatures and battery levels, control heating sessions and profiles, and build custom desktop widgets, home automations, or web apps.
🌐 Website & Live Docs: puffco-py.soymilkisok.com
Features
- Real-Time Telemetry: Stream bowl temperature (~16 FPS active / 250ms idle), battery %, chamber status, and session countdowns.
- Session Control: Start/stop heat cycles, trigger boosts, switch profiles, and tweak target temperatures.
- Async & Thread-Safe: Built on
asyncio(bleak), with aThreadedPuffcoClientbridge for desktop GUIs (Tkinter, PyQt, rumps) and sync scripts. - Auto-Discovery: Automatically find and connect to nearby Puffco hardware.
- Built-in CLI: Terminal commands for monitoring, scanning, and heat control right out of the box.
Installation
pip install puffco-py
For the terminal dashboard and desktop GUI extras:
pip install "puffco-py[cli,gui]"
Quickstart
import asyncio
from puffco_py import PuffcoClient
async def main():
async with PuffcoClient() as client:
print(f"Connected to {client.telemetry.device_name} ({client.telemetry.chamber_name})")
# Stream real-time telemetry updates
def on_update(telemetry):
print(f"\rTemp: {telemetry.live_temp_f:.1f}°F | State: {telemetry.state_name}", end="")
client.add_telemetry_listener(on_update)
await client.start_telemetry_stream()
# Stream for 15 seconds
await asyncio.sleep(15)
asyncio.run(main())
Building a desktop GUI or synchronous script? Use
ThreadedPuffcoClientso you don't have to juggle asyncio event loops. Seeexamples/03_threaded_gui.py.
Command-Line Interface (CLI)
puffco-py installs a standalone terminal tool:
# Scan for nearby devices and signal strength
puffco-py scan
# Stream a live terminal telemetry dashboard
puffco-py monitor
# View hardware serial, firmware version, and heat profiles
puffco-py info
# Trigger or abort heat sessions
puffco-py sesh start
puffco-py sesh boost
puffco-py sesh stop
Examples & Integrations
The examples/ directory contains standalone, runnable scripts:
- Live Telemetry: Minimal quickstart streaming temperature and battery.
- Session Control: Switching profile slots and heat settings.
- Threaded GUI Worker: Background BLE worker pattern for PyQt, Tkinter, or PySide.
- macOS Menu Bar Widget: Native status bar monitor and remote control (
rumps). - Home Assistant MQTT Bridge: Auto-discovery for smart home sensors and switches.
- FastAPI & WebSocket Server: REST API and live WebSocket server for web apps.
See examples/README.md for full descriptions and setup steps.
Documentation
Detailed documentation is available in docs/ and on the web:
- Website & Live Docs — Interactive web documentation and guides.
- Python API Reference — Full reference for
PuffcoClient,ThreadedPuffcoClient, andPuffcoTelemetry. - Hardware & Platform Troubleshooting — Bluetooth permissions (macOS, Linux BlueZ, Windows) and connection tips.
- Lorax BLE Protocol Specification — Handshake flow, authentication challenge-response, UUIDs, and VFS endpoints.
Running Tests
Run the offline unit test suite:
python3 -m unittest discover tests/
Contributing
Contributions, bug reports, and hardware dumps are warmly welcomed! Please read our Contributing Guide and Code of Conduct before submitting pull requests.
Check out the Changelog for release notes and version history.
Credits & Acknowledgments
puffco-py builds upon foundational protocol research and reverse-engineering from the community:
- Fr0st3h / PuffcoBLE: Early BLE exploration and Lorax path research.
- PuffcoPC by meekzyr: Original Puffco Bluetooth communication and pairing work.
- home-assistant-puffco: Home Assistant integration documenting Lorax paths.
- Bleak: Asynchronous BLE library for Python.
License
This project is licensed under the MIT License.
Legal Disclaimer
puffco-py is an independent, community-developed open-source reverse-engineering project. It is NOT affiliated with, authorized, maintained, sponsored, or endorsed by Puff Corp. or any of its affiliates. Puffco, Peak, Peak Pro, Proxy, 3D Chamber, and 3DXL are registered trademarks of Puff Corp. Nominative use of these names is strictly for identification and interoperability purposes under Fair Use.
Metadata
Release files for puffco-py 0.1.3
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 |
|---|---|---|---|---|
| puffco_py-0.1.3.tar.gz | 64.9 kB | With provenance | Details for puffco_py-0.1.3.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| puffco_py-0.1.3-py3-none-any.whl | Python 3 | none | any | Details for puffco_py-0.1.3-py3-none-any.whl |
Total release size: 97.8 kB
Release files / puffco_py-0.1.3.tar.gz
| Download URL | puffco_py-0.1.3.tar.gz |
|---|---|
| Size | 64.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
3c39f0a2c98a47247f9065f275cebb231b24febce27c5ff69fd1c7336c2d40cf
|
|
BLAKE2b-256 checksum How to use checksums |
9253b9ae90f2b6906cf99c6fd71f9270b14079e249e7b158757c19bdd1eb7fe9
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 18, 2026.
Transparency logRelease files / puffco_py-0.1.3-py3-none-any.whl
| Download URL | puffco_py-0.1.3-py3-none-any.whl |
|---|---|
| Size | 32.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
bb4647a98c9955d84e925723c201a731d1e7ac47ed629556de258fbbb5e5bc0e
|
|
BLAKE2b-256 checksum How to use checksums |
1eb22631726de7da24d0f2357599c8468c6f4c66b665e969439fbe5a74efba6f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 18, 2026.
Transparency logSecurity for puffco-py 0.1.3
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.
Full provenance
All 2 files in this release have been uploaded with provenance metadata.
Attestation for puffco_py-0.1.3.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 18, 2026.
Transparency logA 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.