aiobirdnetgo
Asynchronous Python client library for the BirdNET-Go REST API and real-time Server-Sent Events (SSE) streaming.
Designed primarily for integration with Home Assistant Core and other Python asyncio applications.
Features
- ⚡ Asynchronous: Built entirely on top of
aiohttpandasyncio. - 🔍 Type-Safe: Frozen dataclasses with full typing support (
py.typed). - 🐦 Real-Time Detection Streaming: Built-in SSE listener with automatic reconnection and heartbeat handling.
- 📊 Dashboard KPIs & Analytics: Fetch daily species summaries, lifetime statistics, and detection streaks.
- 🎙️ Multi-Source Audio: Discovers and maps audio devices and RTSP stream sources.
- 🎛️ Engine Control: Restart analysis engine or reload classifier models remotely.
Installation
pip install aiobirdnetgo
Quickstart
Basic API Usage & KPIs
import asyncio
from aiobirdnetgo import BirdNetGoClient
async def main():
async with BirdNetGoClient(host="192.168.1.50", port=8080) as client:
# Check connectivity
if await client.ping():
print("Connected to BirdNET-Go!")
# Get system health
health = await client.get_health()
print(f"Version: {health.version}, Status: {health.status}")
# Get dashboard headline KPIs
kpis = await client.get_kpis()
print(f"Today's detections: {kpis.today_detections}")
print(f"Lifetime species count: {kpis.lifetime_species}")
print(f"Current streak: {kpis.detection_streak.days} days")
if __name__ == "__main__":
asyncio.run(main())
Real-Time Detection Streaming (SSE)
import asyncio
from aiobirdnetgo import BirdNetGoClient
async def main():
async with BirdNetGoClient(host="192.168.1.50", port=8080) as client:
print("Listening for live bird detections...")
stream = client.stream_detections()
async for detection in stream:
print(f"🐦 Detected: {detection.common_name} ({detection.scientific_name})")
print(f" Confidence: {detection.confidence * 100:.1f}%")
print(f" Source: {detection.source_name or detection.source_id}")
if detection.bird_image:
print(f" Photo: {client.get_species_image_url(detection.scientific_name)}")
if __name__ == "__main__":
asyncio.run(main())
Managing Audio Sources & Recent Detections
import asyncio
from aiobirdnetgo import BirdNetGoClient
async def main():
async with BirdNetGoClient(host="192.168.1.50", port=8080) as client:
# List audio sources (sound cards & RTSP streams)
sources = await client.get_audio_sources()
for source in sources:
print(f"Source: {source.name} (ID: {source.id}, State: {source.state})")
# Fetch recent detections
detections = await client.get_recent_detections(limit=10)
for det in detections:
print(f"{det.time} - {det.common_name} ({det.confidence * 100:.0f}%)")
if __name__ == "__main__":
asyncio.run(main())
Development & Testing
# Clone the repository
git clone https://github.com/TN-1/aiobirdnetgo.git
cd aiobirdnetgo
# Install dependencies and dev tools
pip install -e ".[dev]"
# Run linter and type checker
ruff check .
mypy src tests
# Run unit tests with coverage
pytest
Metadata
Release files for aiobirdnetgo 0.1.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| aiobirdnetgo-0.1.2.tar.gz | 20.6 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| aiobirdnetgo-0.1.2-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 35.7 kB
Release files / aiobirdnetgo-0.1.2.tar.gz
| Download URL | aiobirdnetgo-0.1.2.tar.gz |
|---|---|
| Size | 20.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
92976ab36eae749460135f7ce7982c4c718e28acc76f2e0516ae2734d0362600
|
|
BLAKE2b-256 checksum How to use checksums |
04c83347d585f8a8379eb791e8b1693d9a567ea0c46789b3e304bf8405536da7
|
| 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 6, 2026.
Transparency logRelease files / aiobirdnetgo-0.1.2-py3-none-any.whl
| Download URL | aiobirdnetgo-0.1.2-py3-none-any.whl |
|---|---|
| Size | 15.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
51403c1d896ae4b28795650a6f98c5ffb4a31de1211f2afe7bd0862cd41f6e5d
|
|
BLAKE2b-256 checksum How to use checksums |
58be7d3d26da5e8488ee208b841df511b64a9d370f1c9460908772d9a0405665
|
| 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 6, 2026.
Transparency log