Skip to main content

Python BLE SDK for Puffco Peak Pro devices

Project description

PuffcoBLE

Python library for communicating with Puffco devices over Bluetooth Low Energy using the Lorax protocol.

This library allows you to connect to a Puffco device, authenticate, read and write Lorax paths, and control device features such as heat cycles, LEDs, lantern mode, and device information. Everything is async and built on top of bleak.


Features

  • Scan for devices by name or MAC address
  • Automatic Lorax authentication
  • Read and write Lorax paths
  • Typed reads (int, float, bool) and raw byte reads
  • Chunked reads for large data
  • Start, stop, and boost heat cycles
  • Lantern mode control
  • LED brightness control
  • Battery, firmware, uptime, and usage info
  • Fully async / asyncio-based

Requirements

  • Python 3.11+
  • Bluetooth Low Energy capable system

Supported platforms:

  • Windows
  • macOS
  • Linux (BlueZ)

Installation

From PyPI:

pip install PuffcoBLE

From source:

git clone https://github.com/Fr0st3h/PuffcoBLE.git
cd PuffcoBLE
pip install -e .

Basic usage

import asyncio
from puffcoble import PuffcoBLE

async def main():
    device = PuffcoBLE(device_name="DEV PUFFCO", debug=True)
    await device.connect()

    print("Device name:", await device.get_device_name())
    
    #get current profile info
    currentProfile = await device.get_current_profile_name()
    currentProfileTemp = await device.get_current_profile_temp()
    currentProfileDuration = await device.get_current_profile_duration()

    #start heat cycle
    await device.start_heat_cycle()

    #sleep for 3 seconds
    await asyncio.sleep(3)

    #cancel the heat cycle
    await device.stop_heat_cycle()

    #print the current profiles info
    print(f'Current Profile: {currentProfile}, Temperature: {currentProfileTemp}, Duration: {currentProfileDuration} seconds')

    payload = {'lamp': {'name': 'solid', 'param': {'color': ["#b700ff"]}}}


    #sets profile 4 colour
    await device.write_cbor_full("/u/app/hc/3/colr", payload)
    await device.disconnect()

asyncio.run(main())

Connection and authentication

Authentication is handled automatically when calling connect():

  • BLE bonding trigger
  • Access seed request
  • Unlock key generation
  • Lorax access unlock

Manual authentication is not required for normal usage.


Reading data

Typed read:

temp = await puffco.read(
    "/p/app/thc/temp",
    size=4,
    data_type="float32"
)

Raw bytes:

data = await puffco.read("/p/sys/fw/ver", size=12)

Read full path (chunked):

blob = await puffco.read_bytes_all("/p/app/thc/colr")

Writing data

Write raw bytes:

await puffco.write_short(
    "/u/app/ui/lbrt",
    0,
    0,
    bytes([80, 80, 80, 80])
)

Write typed values:

await puffco.write(
    "/p/app/thc/time",
    45.0,
    data_type="float32"
)

Heat cycle control

await puffco.start_heat_cycle()
await puffco.boost_heat_cycle()
await puffco.stop_heat_cycle()

Lantern mode

await puffco.start_lantern()
await puffco.stop_lantern()

Device information

info = await puffco.get_device_info()
serial = await puffco.get_serial_number()
fw = await puffco.get_software_version()
uptime = await puffco.get_uptime()

Debug logging

Enable debug output:

PuffcoBLE(debug=True)

Logging uses Tamga.


Notes

  • This project is not affiliated with Puffco
  • Firmware updates may break compatibility
  • Use at your own risk

License

MIT


Contributing

Pull requests are welcome.
If you add new Lorax paths or opcodes, please document them clearly.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

puffcoble-0.1.1.tar.gz (12.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

puffcoble-0.1.1-py3-none-any.whl (12.1 kB view details)

Uploaded Python 3

File details

Details for the file puffcoble-0.1.1.tar.gz.

File metadata

  • Download URL: puffcoble-0.1.1.tar.gz
  • Upload date:
  • Size: 12.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for puffcoble-0.1.1.tar.gz
Algorithm Hash digest
SHA256 6973d22612d5f4a2bb932d5570e4c4c530f9ed3e8240f7c562eb37da297aa7dd
MD5 8ecb8eab3c15f8f4ca6765b52d4e431c
BLAKE2b-256 d981d6fcd2a793406492b396fbe0b382aee6cd7fab2f2d3f286303c285686793

See more details on using hashes here.

Provenance

The following attestation bundles were made for puffcoble-0.1.1.tar.gz:

Publisher: release.yml on Fr0st3h/PuffcoBLE

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file puffcoble-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: puffcoble-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 12.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for puffcoble-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 e1eee5d6cbe0daf378e9426df86f9356439c65fb88ff4a77e09aab3ae094dc5c
MD5 8e5b32179c61550965a2272b75621404
BLAKE2b-256 d8454c9321532db421cd238d8abe9dcdbe1fddaa166df3fed32b6900ccbde418

See more details on using hashes here.

Provenance

The following attestation bundles were made for puffcoble-0.1.1-py3-none-any.whl:

Publisher: release.yml on Fr0st3h/PuffcoBLE

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page