https://github.com/energy-tracker/api-client-python
Async Python client for Energy Tracker API
https://github.com/energy-tracker/api-client-python
aiohttp api-client asyncio energy-tracker home-assistant iot python python3 smart-home
Last synced: 4 months ago
JSON representation
Async Python client for Energy Tracker API
- Host: GitHub
- URL: https://github.com/energy-tracker/api-client-python
- Owner: energy-tracker
- License: mit
- Created: 2025-11-29T02:03:05.000Z (7 months ago)
- Default Branch: main
- Last Pushed: 2025-11-30T01:47:09.000Z (7 months ago)
- Last Synced: 2025-12-02T06:36:33.733Z (7 months ago)
- Topics: aiohttp, api-client, asyncio, energy-tracker, home-assistant, iot, python, python3, smart-home
- Language: Python
- Homepage: https://www.energy-tracker.best-ios-apps.de
- Size: 18.6 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Energy Tracker API Client
Async Python client for the [Energy Tracker](https://github.com/energy-tracker) public REST API.
## Installation
```bash
pip install energy-tracker-api
```
## Requirements
- Python 3.14+
- Personal Access Token from Energy Tracker
## Quick Start
```python
import asyncio
from decimal import Decimal
from energy_tracker_api import EnergyTrackerClient, CreateMeterReadingDto
async def main():
async with EnergyTrackerClient(access_token="your-token") as client:
# List devices
devices = await client.devices.list_standard()
# Create a meter reading
reading = CreateMeterReadingDto(value=Decimal("12345.67"))
await client.meter_readings.create(
device_id="your-device-id",
meter_reading=reading,
)
asyncio.run(main())
```
## Resources
The client exposes three resource groups — all endpoints, parameters, and DTOs are documented in the [OpenAPI specification](https://github.com/energy-tracker/public-docs/blob/main/public-api/openapi.yml).
| Resource | Methods |
|---|---|
| `client.devices` | `list_standard()`, `list_virtual()` |
| `client.meter_readings` | `list()`, `create()`, `delete()`, `export()` |
| `client.environments` | `list()`, `get()`, `create()`, `delete()`, `create_entry()`, `delete_entry()` |
## Configuration
```python
client = EnergyTrackerClient(
access_token="your-token",
base_url="https://custom-api.example.com", # Optional
timeout=30, # Optional, default: 10s
)
```
## Error Handling
All API errors inherit from `EnergyTrackerAPIError` and carry an `api_message` list with details from the server.
```python
from energy_tracker_api import (
EnergyTrackerAPIError,
ValidationError,
AuthenticationError,
ForbiddenError,
ResourceNotFoundError,
ConflictError,
RateLimitError,
)
try:
await client.meter_readings.create(device_id, reading)
except RateLimitError as e:
print(f"Retry after {e.retry_after}s")
except EnergyTrackerAPIError as e:
print(e.api_message)
```
## Development
```bash
make install-dev # Install dependencies
make test # Run tests
make type-check # mypy
make format # black + isort
make lint # Linters
```
## License
MIT