Skip to content

Usage

Async Client

import aiohttp
from flowerhub_portal_api_client.async_client import AsyncFlowerhubClient

async def main():
    async with aiohttp.ClientSession() as session:
        client = AsyncFlowerhubClient(session=session)
        await client.async_login("user@example.com", "password")

        # Fetch complete readout including uptime
        result = await client.async_readout_sequence()
        print(f"Asset ID: {result['asset_id']}")
        print(f"Status: {client.flowerhub_status}")

        # Access uptime data (automatically included in readout)
        if result["uptime_pie_resp"]:
            pie = result["uptime_pie_resp"]
            print(f"Uptime (total period): {pie['uptime_ratio_total']:.1f}%")
            print(f"Uptime (actual/measured): {pie['uptime_ratio_actual']:.1f}%")
            print(f"Uptime: {pie['uptime']/3600:.1f}h")
            print(f"Downtime: {pie['downtime']/3600:.1f}h")
            print(f"No data: {pie['noData']/3600:.1f}h")

        # Fetch specific month uptime
        pie_result = await client.async_fetch_uptime_pie(period="2026-01")
        if pie_result["uptime_ratio_total"]:
            print(f"January 2026 uptime (total): {pie_result['uptime_ratio_total']:.2f}%")
            print(f"January 2026 uptime (actual): {pie_result['uptime_ratio_actual']:.2f}%")

Error Handling

  • raise_on_error=True: Raises ApiError for HTTP/validation issues.
  • on_auth_failed: Callback on refresh failure (re-auth required).
  • on_api_error: Callback invoked before raising ApiError.

Timeouts & Retries

  • timeout_total: Per-call override for total timeout.
  • retry_5xx_attempts: Retries for server errors; honors Retry-After.