Skip to main content

No project description provided

Project description

lametric-py

CI PyPI Python License Docs Contributing

Async Python client for LaMetric devices and the LaMetric cloud API.

The package wraps the documented local device API, notification models, and the LaMetric Streaming Protocol (LMSP) used by LaMetric SKY devices.

Features

  • Async local device client for display, audio, Bluetooth, apps, notifications, and streaming
  • Async cloud client for account and device lookup
  • Typed dataclass models for API payloads and responses
  • Notification builders for text, goal, and chart frames
  • LMSP helpers for starting a stream and sending RGB888 UDP frames

Requirements

  • Python 3.14+
  • A LaMetric device on the local network for device API features
  • A LaMetric developer token for cloud API features

Installation

This repository is currently set up as a source install.

git clone https://github.com/ElectroAttacks/lametric-py.git
cd lametric-py
uv sync --dev

If you prefer pip:

pip install -e .

Quick Start

Local Device Client

import asyncio

from lametric import LaMetricDevice


async def main() -> None:
	async with LaMetricDevice(host="192.168.1.42", api_key="device-api-key") as device:
		state = await device.state
		print(state.name)


asyncio.run(main())

Send a Notification

import asyncio

from lametric import (
	BuiltinSound,
	LaMetricDevice,
	Notification,
	NotificationData,
	NotificationPriority,
	NotificationSound,
	SimpleFrame,
)


async def main() -> None:
	notification = Notification(
		priority=NotificationPriority.INFO,
		model=NotificationData(
			frames=[SimpleFrame(text="Deploy finished")],
			sound=BuiltinSound(id=NotificationSound.POSITIVE1),
		),
	)

	async with LaMetricDevice(host="192.168.1.42", api_key="device-api-key") as device:
		notification_id = await device.send_notification(notification)
		print(notification_id)


asyncio.run(main())

Query the Cloud API

import asyncio

from lametric import LaMetricCloud


async def main() -> None:
	async with LaMetricCloud(token="developer-token") as cloud:
		user = await cloud.current_user
		devices = await cloud.devices
		print(user.email, len(devices))


asyncio.run(main())

Streaming Example

import asyncio

from lametric import (
	CanvasFillType,
	CanvasPostProcess,
	CanvasPostProcessType,
	CanvasRenderMode,
	LaMetricDevice,
	StreamConfig,
)


async def main() -> None:
	config = StreamConfig(
		fill_type=CanvasFillType.SCALE,
		render_mode=CanvasRenderMode.PIXEL,
		post_process=CanvasPostProcess(type=CanvasPostProcessType.NONE),
	)

	async with LaMetricDevice(host="192.168.1.42", api_key="device-api-key") as device:
		session_id = await device.start_stream(config)
		if session_id is None:
			return

		stream_state = await device.stream_state
		frame = bytes(
			[255, 0, 0]
			* (stream_state.canvas.pixel.size.width * stream_state.canvas.pixel.size.height)
		)
		await device.send_stream_data(session_id, frame)
		await device.stop_stream()


asyncio.run(main())

Public API

The package re-exports its public surface from lametric.

  • Clients: LaMetricDevice, LaMetricCloud
  • Exceptions: LaMetricApiError, LaMetricConnectionError, LaMetricAuthenticationError, LaMetricUnsupportedError
  • Models: apps, notifications, state payloads, stream config/state types
  • Enums: notification, screensaver, display, and streaming constants

Documentation

Full documentation is available at electroattacks.github.io/lametric-py.

Source pages:

Development

Useful commands:

uv run ruff check .
uv run ruff format .
uv run mypy .
uv run pytest

The CI workflow runs Ruff, mypy, pytest, coverage export, and semantic-release.

Support

If this package is useful to you, consider sponsoring the project. ❤️

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

lametric_py-1.3.4.tar.gz (88.7 kB view details)

Uploaded Source

Built Distribution

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

lametric_py-1.3.4-py3-none-any.whl (16.0 kB view details)

Uploaded Python 3

File details

Details for the file lametric_py-1.3.4.tar.gz.

File metadata

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

File hashes

Hashes for lametric_py-1.3.4.tar.gz
Algorithm Hash digest
SHA256 8ac8ec6de47ad1562aac2040b29d9d2bbfe2f4f7e19ec10dba602d61ca2dd82f
MD5 c22e5e238b8afe70c8ae79b7a3167c80
BLAKE2b-256 b20be5c9738494f169795d2cfc85384537849d31d0b5c4f4d0ffee7ed902245e

See more details on using hashes here.

Provenance

The following attestation bundles were made for lametric_py-1.3.4.tar.gz:

Publisher: ci.yml on ElectroAttacks/lametric-py

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

File details

Details for the file lametric_py-1.3.4-py3-none-any.whl.

File metadata

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

File hashes

Hashes for lametric_py-1.3.4-py3-none-any.whl
Algorithm Hash digest
SHA256 eb08f070d28079b5a421068b27ee3893872a69abe06a350e053c70a95d82b6f9
MD5 4bc9eee4e23630ce85c639f350d9fca1
BLAKE2b-256 a3f3a9512cd68e0780089c11607eaaa41bc86479133e054b72057453aabf7672

See more details on using hashes here.

Provenance

The following attestation bundles were made for lametric_py-1.3.4-py3-none-any.whl:

Publisher: ci.yml on ElectroAttacks/lametric-py

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