/**
 * This file was auto-generated by openapi-typescript.
 * Do not make direct changes to the file.
 */

export interface paths {
    "/status": {
        parameters: {
            query?: never;
            header?: never;
            path?: never;
            cookie?: never;
        };
        /** Get Status */
        get: operations["get_status_status_get"];
        put?: never;
        post?: never;
        delete?: never;
        options?: never;
        head?: never;
        patch?: never;
        trace?: never;
    };
    "/api/config": {
        parameters: {
            query?: never;
            header?: never;
            path?: never;
            cookie?: never;
        };
        /**
         * Get Config
         * @description Return all configuration sections. Secret field values are masked (empty string).
         */
        get: operations["get_config_api_config_get"];
        /**
         * Put Config
         * @description Save configuration updates.
         *
         *     - Blank secret value keeps the existing stored value (no change).
         *     - Invalid values return 422 and nothing is written to the database.
         *     - If MQTT-related settings changed, the MQTT client reconnects automatically.
         */
        put: operations["put_config_api_config_put"];
        post?: never;
        delete?: never;
        options?: never;
        head?: never;
        patch?: never;
        trace?: never;
    };
    "/api/config/smtp/test": {
        parameters: {
            query?: never;
            header?: never;
            path?: never;
            cookie?: never;
        };
        get?: never;
        put?: never;
        /**
         * Post Smtp Test
         * @description Send a test SMTP email using the current runtime settings.
         *
         *     Returns a structured result indicating success or the category of failure.
         *     Three possible outcomes:
         *     - 200 { "result": "success", "message": ... }
         *     - 400 { "result": "config-error", "message": ... }   (EmailConfigurationError)
         *     - 502 { "result": "failed", "message": ... }          (EmailDeliveryError)
         *
         *     SMTP credentials are never echoed in the response.
         */
        post: operations["post_smtp_test_api_config_smtp_test_post"];
        delete?: never;
        options?: never;
        head?: never;
        patch?: never;
        trace?: never;
    };
    "/api/config/mqtt/test": {
        parameters: {
            query?: never;
            header?: never;
            path?: never;
            cookie?: never;
        };
        get?: never;
        put?: never;
        /**
         * Post Mqtt Test
         * @description Test MQTT broker connectivity by attempting to connect and publishing a
         *     test message to ``<ha_discovery_prefix>/home-automation/test``.
         *
         *     The message is visible in MQTT Explorer (or any subscriber) so users can
         *     confirm the full broker publish path is working.
         *
         *     Three possible outcomes:
         *     - 200 { "result": "success", "message": ... }
         *     - 400 { "result": "config-error", "message": ... }   (not configured)
         *     - 502 { "result": "failed", "message": ... }          (connection/publish error)
         *
         *     MQTT credentials are never echoed in the response.
         */
        post: operations["post_mqtt_test_api_config_mqtt_test_post"];
        delete?: never;
        options?: never;
        head?: never;
        patch?: never;
        trace?: never;
    };
    "/api/locations": {
        parameters: {
            query?: never;
            header?: never;
            path?: never;
            cookie?: never;
        };
        /**
         * Get Locations
         * @description Return location records with optional time-window filtering and pagination.
         *
         *     - ``start`` / ``end`` are ISO8601 strings; filtering is **inclusive** on both bounds.
         *     - Results are ordered by ``datetime`` ascending.
         *     - ``limit`` is capped at 5000 to prevent full-table exports.
         */
        get: operations["get_locations_api_locations_get"];
        put?: never;
        post?: never;
        delete?: never;
        options?: never;
        head?: never;
        patch?: never;
        trace?: never;
    };
    "/api/poo": {
        parameters: {
            query?: never;
            header?: never;
            path?: never;
            cookie?: never;
        };
        /**
         * Get Poo
         * @description Return poo records ordered by timestamp descending (most recent first).
         *
         *     ``limit`` is capped at 1000 to prevent full-table exports.
         */
        get: operations["get_poo_api_poo_get"];
        put?: never;
        post?: never;
        delete?: never;
        options?: never;
        head?: never;
        patch?: never;
        trace?: never;
    };
    "/api/public-ip": {
        parameters: {
            query?: never;
            header?: never;
            path?: never;
            cookie?: never;
        };
        /**
         * Get Public Ip
         * @description Return the current public IP state and recent history.
         *
         *     - ``state`` is ``null`` if no IP check has been performed yet.
         *     - ``history`` is ordered by ``observed_at`` descending (most recent first).
         *     - ``limit`` applies to the history list and is capped at 1000.
         */
        get: operations["get_public_ip_api_public_ip_get"];
        put?: never;
        post?: never;
        delete?: never;
        options?: never;
        head?: never;
        patch?: never;
        trace?: never;
    };
    "/api/locations/{person}/{datetime}": {
        parameters: {
            query?: never;
            header?: never;
            path?: never;
            cookie?: never;
        };
        get?: never;
        put?: never;
        post?: never;
        /**
         * Delete Location Record
         * @description Delete the single location record identified by its composite PK.
         *
         *     - Exactly one row is deleted; **404** if the PK does not exist.
         *     - No batch delete / truncate path is available.
         */
        delete: operations["delete_location_record_api_locations__person___datetime__delete"];
        options?: never;
        head?: never;
        /**
         * Patch Location
         * @description Update the non-PK fields of a single location record.
         *
         *     - ``person`` and ``datetime`` identify the row (composite PK) and are immutable.
         *     - Only ``latitude``, ``longitude``, and ``altitude`` may be updated.
         *     - Omitted body fields are left unchanged.
         *     - Returns **404** if the PK does not exist.
         */
        patch: operations["patch_location_api_locations__person___datetime__patch"];
        trace?: never;
    };
    "/api/poo/{timestamp}": {
        parameters: {
            query?: never;
            header?: never;
            path?: never;
            cookie?: never;
        };
        get?: never;
        put?: never;
        post?: never;
        /**
         * Delete Poo
         * @description Delete the single poo record identified by its PK.
         *
         *     - Exactly one row is deleted; **404** if the PK does not exist.
         *     - No batch delete / truncate path is available.
         */
        delete: operations["delete_poo_api_poo__timestamp__delete"];
        options?: never;
        head?: never;
        /**
         * Patch Poo
         * @description Update the non-PK fields of a single poo record.
         *
         *     - ``timestamp`` is the PK and is immutable.
         *     - Only ``status``, ``latitude``, and ``longitude`` may be updated.
         *     - Omitted body fields are left unchanged.
         *     - Returns **404** if the PK does not exist.
         */
        patch: operations["patch_poo_api_poo__timestamp__patch"];
        trace?: never;
    };
    "/api/energy/prices": {
        parameters: {
            query?: never;
            header?: never;
            path?: never;
            cookie?: never;
        };
        /**
         * Get Prices
         * @description Return the price curve for the active contract.
         *
         *     **Tibber contracts** (kind="tibber"):
         *         Fetches ``tibber_price`` rows within ``[start, end]``, ordered ascending
         *         by ``starts_at``.  At most ``limit`` rows are returned (most recent first
         *         within the window, then reversed to ascending order — identical to the
         *         modbus readings pattern).
         *
         *         Response ``points`` carries per-slot:
         *         - ``buy  = total``              (Tibber all-inclusive price)
         *         - ``sell = total − energy_tax − sell_adjust``  (from active version values)
         *         - ``level``                     (Tibber price level, may be null)
         *
         *         ``tariff`` is null.
         *
         *     **Manual contracts** (kind="manual"):
         *         ``points`` is empty.  ``tariff`` carries the four effective prices
         *         derived using the billing engine formula:
         *         - ``buy_dal    = energy.buy.dal    + energy_tax + ode``
         *         - ``buy_normal = energy.buy.normal + energy_tax + ode``
         *         - ``sell_dal   = energy.sell.dal``
         *         - ``sell_normal = energy.sell.normal``
         *
         *     **No active contract**: returns kind=null, currency="EUR", points=[], tariff=null (200).
         */
        get: operations["get_prices_api_energy_prices_get"];
        put?: never;
        post?: never;
        delete?: never;
        options?: never;
        head?: never;
        patch?: never;
        trace?: never;
    };
    "/api/energy/costs": {
        parameters: {
            query?: never;
            header?: never;
            path?: never;
            cookie?: never;
        };
        /**
         * Get Costs
         * @description Return energy_cost_period rows within a time window.
         *
         *     Rows are ordered by ``period_start`` ascending.  When the window contains
         *     more rows than ``limit``, the **most recent** N rows are returned (DESC LIMIT),
         *     then reversed to ascending order — identical to the modbus readings pattern.
         *
         *     Query parameters:
         *     - ``start``: inclusive lower bound on ``period_start`` (ISO 8601 datetime).
         *     - ``end``:   inclusive upper bound on ``period_start`` (ISO 8601 datetime).
         *     - ``limit``: max rows to return (default 500, max {_COSTS_LIMIT_MAX}).
         */
        get: operations["get_costs_api_energy_costs_get"];
        put?: never;
        post?: never;
        delete?: never;
        options?: never;
        head?: never;
        patch?: never;
        trace?: never;
    };
    "/api/energy/costs/summary": {
        parameters: {
            query?: never;
            header?: never;
            path?: never;
            cookie?: never;
        };
        /**
         * Get Costs Summary
         * @description Aggregate billing for a time interval.
         *
         *     Calls ``energy_cost.summarize(session, start, end)`` which computes:
         *
         *         total_payable = Σ(net_cost) + fixed_costs − credits
         *
         *     where ``fixed_costs`` is (network_fee + management_fee) apportioned to the
         *     interval length in days (÷30 per month), and ``credits`` is heffingskorting
         *     apportioned similarly (÷365 per year).
         *
         *     Both ``fixed_costs`` and ``credits`` are derived from the **currently active
         *     contract version at ``end``**.  When no active contract exists they are 0.
         */
        get: operations["get_costs_summary_api_energy_costs_summary_get"];
        put?: never;
        post?: never;
        delete?: never;
        options?: never;
        head?: never;
        patch?: never;
        trace?: never;
    };
    "/api/energy/dsmr/latest": {
        parameters: {
            query?: never;
            header?: never;
            path?: never;
            cookie?: never;
        };
        /**
         * Get Dsmr Latest
         * @description Return the most recent dsmr_reading row.
         *
         *     Returns ``{"found": false, "recorded_at": null, "payload": null}`` (200, not
         *     404) when no rows exist yet, so the front-end can distinguish "no data" from
         *     a server error.
         */
        get: operations["get_dsmr_latest_api_energy_dsmr_latest_get"];
        put?: never;
        post?: never;
        delete?: never;
        options?: never;
        head?: never;
        patch?: never;
        trace?: never;
    };
    "/api/energy/costs/recompute": {
        parameters: {
            query?: never;
            header?: never;
            path?: never;
            cookie?: never;
        };
        get?: never;
        put?: never;
        /**
         * Post Recompute
         * @description Idempotently recompute billing records in a time window.
         *
         *     Calls ``energy_cost.recompute_range(session, start, end)`` which overwrites
         *     existing rows (including successful ones) for every UTC quarter-hour boundary
         *     in ``[start, end)``.
         *
         *     **Idempotency**: repeated calls with the same window produce the same
         *     outcome.  No rows are deleted; only upserted.
         *
         *     **Window constraint**: the maximum allowed range is {_RECOMPUTE_MAX_DAYS} days.
         *     Requests exceeding this return 422.
         *
         *     Returns the number of periods for which a billing record was written.
         *     Periods skipped due to missing contract or missing Tibber price are not counted.
         */
        post: operations["post_recompute_api_energy_costs_recompute_post"];
        delete?: never;
        options?: never;
        head?: never;
        patch?: never;
        trace?: never;
    };
    "/api/energy/tibber/test": {
        parameters: {
            query?: never;
            header?: never;
            path?: never;
            cookie?: never;
        };
        get?: never;
        put?: never;
        /**
         * Post Tibber Test
         * @description Test Tibber API connectivity by fetching the current price point.
         *
         *     Three possible outcomes:
         *
         *     - **200** ``{ result: "success",      message: ..., price: {...} }``
         *       The Tibber API responded with a valid current price.  ``price`` contains
         *       starts_at, total, energy, tax, currency, and level.
         *
         *     - **400** ``{ result: "config-error", message: ... }``
         *       The Tibber API token is empty or not configured.
         *
         *     - **502** ``{ result: "failed",       message: ... }``
         *       The API call failed (authentication rejected, network error, timeout,
         *       unexpected response, etc.).
         *
         *     The API token is **never** included in the response body or logged.
         */
        post: operations["post_tibber_test_api_energy_tibber_test_post"];
        delete?: never;
        options?: never;
        head?: never;
        patch?: never;
        trace?: never;
    };
    "/api/energy/profiles": {
        parameters: {
            query?: never;
            header?: never;
            path?: never;
            cookie?: never;
        };
        /**
         * Get Profiles
         * @description List all available pricing profile structures.
         *
         *     Returns the full profile structure for each supported contract kind
         *     (``manual`` and ``tibber``).  The front-end uses this to dynamically
         *     render the correct fields and labels for the contract creation/editing form.
         */
        get: operations["get_profiles_api_energy_profiles_get"];
        put?: never;
        post?: never;
        delete?: never;
        options?: never;
        head?: never;
        patch?: never;
        trace?: never;
    };
    "/api/energy/contracts": {
        parameters: {
            query?: never;
            header?: never;
            path?: never;
            cookie?: never;
        };
        /**
         * List Energy Contracts
         * @description List all energy contracts with their active status.
         *
         *     Returns a flat list (no embedded version history); use
         *     GET /api/energy/contracts/{id} to fetch the full version history for a
         *     specific contract.
         */
        get: operations["list_energy_contracts_api_energy_contracts_get"];
        put?: never;
        /**
         * Create Energy Contract
         * @description Create a new energy contract with an initial pricing version.
         *
         *     The ``values`` dict is validated against the YAML profile for the given
         *     ``kind``; non-conforming values result in 422 Unprocessable Entity.
         *     The new contract is created with ``active=False``; use
         *     PATCH /api/energy/contracts/{id} with ``active=true`` to activate it.
         */
        post: operations["create_energy_contract_api_energy_contracts_post"];
        delete?: never;
        options?: never;
        head?: never;
        patch?: never;
        trace?: never;
    };
    "/api/energy/contracts/{contract_id}": {
        parameters: {
            query?: never;
            header?: never;
            path?: never;
            cookie?: never;
        };
        /**
         * Get Energy Contract
         * @description Return a single energy contract with its full version history.
         *
         *     Versions are ordered by ``effective_from`` ascending so the caller can
         *     easily inspect the pricing timeline.
         */
        get: operations["get_energy_contract_api_energy_contracts__contract_id__get"];
        put?: never;
        post?: never;
        delete?: never;
        options?: never;
        head?: never;
        /**
         * Patch Energy Contract
         * @description Partially update a contract: rename or change activation status.
         *
         *     - ``name``: updates the human-readable label.
         *     - ``active=true``: activates this contract (all others are deactivated).
         *     - ``active=false``: deactivates this contract (no effect on others).
         *
         *     At most one contract may be active at any time; the service layer enforces
         *     mutual exclusion.
         */
        patch: operations["patch_energy_contract_api_energy_contracts__contract_id__patch"];
        trace?: never;
    };
    "/api/energy/contracts/{contract_id}/versions": {
        parameters: {
            query?: never;
            header?: never;
            path?: never;
            cookie?: never;
        };
        get?: never;
        put?: never;
        /**
         * Add Contract Version
         * @description Add a new pricing version to an existing contract.
         *
         *     This is how price changes are recorded: the current open version is
         *     automatically closed (its ``effective_to`` is set to ``body.effective_from``)
         *     and a new version is created starting at ``body.effective_from``.
         *
         *     The ``values`` dict must conform to the contract's pricing profile.
         *     Non-conforming values return 422.  If ``effective_from`` is not strictly
         *     after the previous version's ``effective_from``, 422 is returned without
         *     writing any rows.
         *
         *     Historical versions are never modified; this endpoint is append-only.
         */
        post: operations["add_contract_version_api_energy_contracts__contract_id__versions_post"];
        delete?: never;
        options?: never;
        head?: never;
        patch?: never;
        trace?: never;
    };
    "/api/energy/meters": {
        parameters: {
            query?: never;
            header?: never;
            path?: never;
            cookie?: never;
        };
        /**
         * List Energy Meters
         * @description List all meter epochs in ascending ``started_at`` order.
         *
         *     Returns the full historical sequence of meter installations across all
         *     commodities.  The active meter (``ended_at=null``) appears last because it
         *     has the latest ``started_at``.
         */
        get: operations["list_energy_meters_api_energy_meters_get"];
        put?: never;
        /**
         * Declare Energy Meter
         * @description Declare a new meter epoch (swap, home move, or initial declaration).
         *
         *     Closes the current active meter for the given commodity at ``started_at``
         *     and opens a new active meter.  If no active meter exists, the new meter is
         *     simply created without closing anything.
         *
         *     **Validation**: ``started_at`` must be **≥** the current active meter's
         *     own ``started_at`` (no chronological backdate below the active epoch's
         *     start).  Equal timestamps are allowed (replaces the current meter at the
         *     same logical moment).  Violation → 422.
         *
         *     **Retroactive recompute**: if ``started_at`` is in the past, billing
         *     records from that point forward are re-judged via ``recompute_range`` to
         *     reflect the new meter attribution.  The recompute is transparent — the
         *     response body is the created meter (``MeterResponse``) only and does **not**
         *     include a recompute count; callers should re-fetch costs if they need the
         *     updated totals.
         */
        post: operations["declare_energy_meter_api_energy_meters_post"];
        delete?: never;
        options?: never;
        head?: never;
        patch?: never;
        trace?: never;
    };
    "/api/energy/meters/{meter_id}": {
        parameters: {
            query?: never;
            header?: never;
            path?: never;
            cookie?: never;
        };
        get?: never;
        put?: never;
        post?: never;
        delete?: never;
        options?: never;
        head?: never;
        /**
         * Patch Energy Meter
         * @description Partially update a meter epoch: rename, edit note, or correct started_at.
         *
         *     - ``label``: updates the human-readable label.
         *     - ``note``: updates the free-form note.
         *     - ``started_at``: **retroactive correction** — shifts this meter's start
         *       boundary.  The service layer maintains timeline continuity by also
         *       updating the preceding meter's ``ended_at``.  Validation:
         *         * Must be strictly after the previous meter's own ``started_at``.
         *         * Must be strictly before this meter's ``ended_at`` (if closed).
         *       Violation → 422.
         *
         *     **Retroactive recompute when ``started_at`` changes**: billing records in
         *     the window ``[min(old, new), now)`` are re-judged to reflect the corrected
         *     meter attribution.
         *
         *     Not found → 404.
         */
        patch: operations["patch_energy_meter_api_energy_meters__meter_id__patch"];
        trace?: never;
    };
    "/api/expose": {
        parameters: {
            query?: never;
            header?: never;
            path?: never;
            cookie?: never;
        };
        /**
         * Get Expose
         * @description Return the full exposable-entity catalog with toggle states and MQTT status.
         *
         *     The catalog is computed dynamically from registered providers (e.g. the
         *     Modbus provider enumerates all enabled devices and their metric entities).
         *     Toggle states come from the ``exposed_entity_toggle`` table; entities with
         *     no row default to ``enabled=False``.
         */
        get: operations["get_expose_api_expose_get"];
        /**
         * Put Expose
         * @description Set per-entity toggle state.
         *
         *     Accepts a map of ``{key: bool}`` and upserts rows in the
         *     ``exposed_entity_toggle`` table.  Only keys present in ``body.toggles``
         *     are touched; other entities' toggles are left unchanged.
         *
         *     After writing the toggles, triggers a HA Discovery re-publish so any
         *     changes (enabled ↔ disabled) are reflected in Home Assistant immediately.
         */
        put: operations["put_expose_api_expose_put"];
        post?: never;
        delete?: never;
        options?: never;
        head?: never;
        patch?: never;
        trace?: never;
    };
    "/api/expose/republish": {
        parameters: {
            query?: never;
            header?: never;
            path?: never;
            cookie?: never;
        };
        get?: never;
        put?: never;
        /**
         * Post Expose Republish
         * @description Manually trigger a full HA Discovery re-publish.
         *
         *     Calls ``publish_discovery(session)`` from the HA discovery service (M5-T11).
         *     Returns a status indicating whether the publish was attempted (or skipped
         *     because MQTT / discovery is not enabled / connected).
         */
        post: operations["post_expose_republish_api_expose_republish_post"];
        delete?: never;
        options?: never;
        head?: never;
        patch?: never;
        trace?: never;
    };
    "/api/modbus/profiles": {
        parameters: {
            query?: never;
            header?: never;
            path?: never;
            cookie?: never;
        };
        /**
         * Get Profiles
         * @description List all available Modbus YAML profiles (name + description).
         *
         *     Intended for the front-end's device-creation profile drop-down.
         */
        get: operations["get_profiles_api_modbus_profiles_get"];
        put?: never;
        post?: never;
        delete?: never;
        options?: never;
        head?: never;
        patch?: never;
        trace?: never;
    };
    "/api/modbus/devices": {
        parameters: {
            query?: never;
            header?: never;
            path?: never;
            cookie?: never;
        };
        /**
         * List Devices
         * @description Return all Modbus devices (no pagination — device counts stay small).
         */
        get: operations["list_devices_api_modbus_devices_get"];
        put?: never;
        /**
         * Create Device
         * @description Create a new Modbus device.
         *
         *     - Validates that the referenced ``profile`` exists; returns 422 if not.
         *     - Returns 201 with the created device on success.
         */
        post: operations["create_device_api_modbus_devices_post"];
        delete?: never;
        options?: never;
        head?: never;
        patch?: never;
        trace?: never;
    };
    "/api/modbus/devices/{uuid}": {
        parameters: {
            query?: never;
            header?: never;
            path?: never;
            cookie?: never;
        };
        /**
         * Get Device
         * @description Return a single Modbus device by UUID.
         */
        get: operations["get_device_api_modbus_devices__uuid__get"];
        put?: never;
        post?: never;
        /**
         * Delete Device
         * @description Delete a Modbus device.
         *
         *     **Default behaviour (cascade=false)**:
         *     Returns 409 Conflict if the device has any associated readings; use
         *     ``enabled=false`` to disable it instead.
         *
         *     **Cascade delete (cascade=true)**:
         *     Permanently deletes the device together with all its readings and any
         *     ``ExposedEntityToggle`` rows whose key matches ``modbus.<uuid>.*``.
         *     Also makes a best-effort attempt to clear the device's HA Discovery
         *     config topics from MQTT (empty retained payload) before the DB rows
         *     are removed.  MQTT failures are swallowed — the DB deletion proceeds
         *     regardless.
         *     Returns HTTP 200 with a ``ModbusDeleteResponse`` JSON body on success.
         *
         *     **Application-layer safety**: the 409 guard uses an explicit SELECT COUNT
         *     query to return a friendly message.  FK RESTRICT is enforced at runtime
         *     (the app sets ``PRAGMA foreign_keys=ON``), so the cascade path deletes
         *     readings before the device.
         */
        delete: operations["delete_device_api_modbus_devices__uuid__delete"];
        options?: never;
        head?: never;
        /**
         * Patch Device
         * @description Partially update a Modbus device (including enable/disable).
         *
         *     Only fields explicitly provided in the request body are updated.
         *     Providing ``profile`` triggers a profile-existence check (422 if unknown).
         */
        patch: operations["patch_device_api_modbus_devices__uuid__patch"];
        trace?: never;
    };
    "/api/modbus/devices/{uuid}/latest": {
        parameters: {
            query?: never;
            header?: never;
            path?: never;
            cookie?: never;
        };
        /**
         * Get Latest Reading
         * @description Return the most recent reading for a device.
         *
         *     If no readings exist yet, returns ``{"found": false, "recorded_at": null,
         *     "payload": null}`` (200, not 404) so the front-end can distinguish
         *     "device exists but has no data" from "device not found".
         */
        get: operations["get_latest_reading_api_modbus_devices__uuid__latest_get"];
        put?: never;
        post?: never;
        delete?: never;
        options?: never;
        head?: never;
        patch?: never;
        trace?: never;
    };
    "/api/modbus/devices/{uuid}/readings": {
        parameters: {
            query?: never;
            header?: never;
            path?: never;
            cookie?: never;
        };
        /**
         * Get Readings
         * @description Return time-range readings for a device.
         *
         *     When the window contains more rows than ``limit``, the **most recent** N rows
         *     are returned (``ORDER BY recorded_at DESC LIMIT n``), then reversed to
         *     ascending order before being sent to the client.  This ensures that for long
         *     time-range requests (e.g. 6 h / 24 h) the caller always sees the latest data
         *     rather than the oldest segment of the window.
         *
         *     When the window has fewer rows than ``limit`` the full window is returned in
         *     ascending order — behaviour is identical to a plain ascending query.
         *
         *     The response schema is unchanged: items are always ``recorded_at`` ascending.
         *
         *     The query uses the ``(device_id, recorded_at)`` composite index for
         *     efficient time-window scans.
         *
         *     Query parameters:
         *     - ``start``: inclusive lower bound (ISO8601 datetime)
         *     - ``end``: inclusive upper bound (ISO8601 datetime)
         *     - ``limit``: max rows to return (default 500, max {_READINGS_LIMIT_MAX})
         */
        get: operations["get_readings_api_modbus_devices__uuid__readings_get"];
        put?: never;
        post?: never;
        delete?: never;
        options?: never;
        head?: never;
        patch?: never;
        trace?: never;
    };
    "/api/modbus/devices/{uuid}/metrics": {
        parameters: {
            query?: never;
            header?: never;
            path?: never;
            cookie?: never;
        };
        /**
         * Get Metrics
         * @description Return the metric catalogue for a device's profile.
         *
         *     Each entry has ``key``, ``label`` (derived from key if the profile has
         *     none — underscores → spaces, title-cased), ``unit``, and ``device_class``.
         *     This is the authoritative metadata source for front-end card labels and
         *     chart axis labels.
         */
        get: operations["get_metrics_api_modbus_devices__uuid__metrics_get"];
        put?: never;
        post?: never;
        delete?: never;
        options?: never;
        head?: never;
        patch?: never;
        trace?: never;
    };
    "/api/modbus/devices/{uuid}/test": {
        parameters: {
            query?: never;
            header?: never;
            path?: never;
            cookie?: never;
        };
        get?: never;
        put?: never;
        /**
         * Test Read
         * @description Immediately read and decode the device once without persisting any data.
         *
         *     Useful for validating gateway connectivity and Modbus address settings
         *     before relying on the background polling job.
         *
         *     This is a write-class endpoint (it initiates network I/O on demand) and
         *     therefore requires a CSRF token.  The response payload is never stored.
         */
        post: operations["test_read_api_modbus_devices__uuid__test_post"];
        delete?: never;
        options?: never;
        head?: never;
        patch?: never;
        trace?: never;
    };
    "/api/session": {
        parameters: {
            query?: never;
            header?: never;
            path?: never;
            cookie?: never;
        };
        /**
         * Get Session
         * @description Return the current session user and CSRF token. Returns 401 if not authenticated.
         */
        get: operations["get_session_api_session_get"];
        put?: never;
        post?: never;
        delete?: never;
        options?: never;
        head?: never;
        patch?: never;
        trace?: never;
    };
    "/api/auth/login": {
        parameters: {
            query?: never;
            header?: never;
            path?: never;
            cookie?: never;
        };
        get?: never;
        put?: never;
        /**
         * Post Login
         * @description Authenticate with username and password.
         *
         *     On success, sets an HttpOnly session cookie and returns the session user + CSRF token.
         *     On failure, returns 401 with no cookie set.
         *     Repeated failures trigger exponential back-off (429 + Retry-After).
         *     No X-CSRF-Token required (unauthenticated endpoint).
         */
        post: operations["post_login_api_auth_login_post"];
        delete?: never;
        options?: never;
        head?: never;
        patch?: never;
        trace?: never;
    };
    "/api/auth/logout": {
        parameters: {
            query?: never;
            header?: never;
            path?: never;
            cookie?: never;
        };
        get?: never;
        put?: never;
        /**
         * Post Logout
         * @description Revoke the current session and clear the session cookie.
         *     Requires authentication and X-CSRF-Token header.
         *     Returns 204 No Content.
         */
        post: operations["post_logout_api_auth_logout_post"];
        delete?: never;
        options?: never;
        head?: never;
        patch?: never;
        trace?: never;
    };
    "/api/auth/password": {
        parameters: {
            query?: never;
            header?: never;
            path?: never;
            cookie?: never;
        };
        get?: never;
        put?: never;
        /**
         * Post Change Password
         * @description Change the current user's password.
         *     Requires authentication and X-CSRF-Token header.
         *     On AuthPasswordChangeError returns 400 with a generic message.
         *     On success, force_password_change becomes False (handled by the service).
         *     Returns 204 No Content.
         */
        post: operations["post_change_password_api_auth_password_post"];
        delete?: never;
        options?: never;
        head?: never;
        patch?: never;
        trace?: never;
    };
    "/api/auth/totp/setup": {
        parameters: {
            query?: never;
            header?: never;
            path?: never;
            cookie?: never;
        };
        get?: never;
        put?: never;
        /**
         * Post Totp Setup
         * @description Generate a new pending TOTP secret, otpauth URI, and one-time recovery codes.
         *
         *     The secret is stored in the DB but TOTP is NOT yet enabled (totp_enabled stays
         *     False until the user confirms with POST /api/auth/totp/enable).
         *
         *     Recovery codes are returned here as plaintext exactly once; their Argon2 hashes
         *     are persisted immediately so enable only needs to flip the enabled flag.
         *
         *     Repeating this call replaces any prior pending secret and regenerates codes.
         *
         *     Requires: session cookie + X-CSRF-Token.
         */
        post: operations["post_totp_setup_api_auth_totp_setup_post"];
        delete?: never;
        options?: never;
        head?: never;
        patch?: never;
        trace?: never;
    };
    "/api/auth/totp/enable": {
        parameters: {
            query?: never;
            header?: never;
            path?: never;
            cookie?: never;
        };
        get?: never;
        put?: never;
        /**
         * Post Totp Enable
         * @description Enable TOTP by confirming with the current 6-digit code from the authenticator app.
         *
         *     Requires a prior call to POST /api/auth/totp/setup (so that a pending secret
         *     exists).  On success, totp_enabled becomes True.
         *
         *     Returns 400 if the code is wrong or there is no pending secret.
         *     Requires: session cookie + X-CSRF-Token.
         */
        post: operations["post_totp_enable_api_auth_totp_enable_post"];
        delete?: never;
        options?: never;
        head?: never;
        patch?: never;
        trace?: never;
    };
    "/api/auth/totp/disable": {
        parameters: {
            query?: never;
            header?: never;
            path?: never;
            cookie?: never;
        };
        get?: never;
        put?: never;
        /**
         * Post Totp Disable
         * @description Disable TOTP.  The caller must provide exactly one of:
         *     - ``password``: the user's current login password, OR
         *     - ``code``: the current 6-digit TOTP code.
         *
         *     On success: totp_enabled=False, totp_secret cleared, all recovery codes deleted.
         *     Returns 400 if neither credential matches or neither is provided.
         *     Requires: session cookie + X-CSRF-Token.
         */
        post: operations["post_totp_disable_api_auth_totp_disable_post"];
        delete?: never;
        options?: never;
        head?: never;
        patch?: never;
        trace?: never;
    };
    "/api/auth/totp": {
        parameters: {
            query?: never;
            header?: never;
            path?: never;
            cookie?: never;
        };
        /**
         * Get Totp Status
         * @description Return the current TOTP status for the authenticated user.
         *
         *     Response contains only ``{"enabled": bool}``.
         *     Secret and recovery codes are NEVER returned here.
         *     Requires: session cookie only (no CSRF — read-only).
         */
        get: operations["get_totp_status_api_auth_totp_get"];
        put?: never;
        post?: never;
        delete?: never;
        options?: never;
        head?: never;
        patch?: never;
        trace?: never;
    };
    "/homeassistant/publish": {
        parameters: {
            query?: never;
            header?: never;
            path?: never;
            cookie?: never;
        };
        get?: never;
        put?: never;
        /** Publish From Homeassistant */
        post: operations["publish_from_homeassistant_homeassistant_publish_post"];
        delete?: never;
        options?: never;
        head?: never;
        patch?: never;
        trace?: never;
    };
    "/location/record": {
        parameters: {
            query?: never;
            header?: never;
            path?: never;
            cookie?: never;
        };
        get?: never;
        put?: never;
        /** Create Location Record */
        post: operations["create_location_record_location_record_post"];
        delete?: never;
        options?: never;
        head?: never;
        patch?: never;
        trace?: never;
    };
    "/poo/record": {
        parameters: {
            query?: never;
            header?: never;
            path?: never;
            cookie?: never;
        };
        get?: never;
        put?: never;
        /** Create Poo Record */
        post: operations["create_poo_record_poo_record_post"];
        delete?: never;
        options?: never;
        head?: never;
        patch?: never;
        trace?: never;
    };
    "/poo/latest": {
        parameters: {
            query?: never;
            header?: never;
            path?: never;
            cookie?: never;
        };
        /** Notify Latest Poo */
        get: operations["notify_latest_poo_poo_latest_get"];
        put?: never;
        post?: never;
        delete?: never;
        options?: never;
        head?: never;
        patch?: never;
        trace?: never;
    };
    "/public-ip/check": {
        parameters: {
            query?: never;
            header?: never;
            path?: never;
            cookie?: never;
        };
        /** Run Public Ip Check */
        get: operations["run_public_ip_check_public_ip_check_get"];
        put?: never;
        post?: never;
        delete?: never;
        options?: never;
        head?: never;
        patch?: never;
        trace?: never;
    };
    "/ticktick/auth/start": {
        parameters: {
            query?: never;
            header?: never;
            path?: never;
            cookie?: never;
        };
        /** Start Ticktick Auth */
        get: operations["start_ticktick_auth_ticktick_auth_start_get"];
        put?: never;
        post?: never;
        delete?: never;
        options?: never;
        head?: never;
        patch?: never;
        trace?: never;
    };
    "/ticktick/auth/code": {
        parameters: {
            query?: never;
            header?: never;
            path?: never;
            cookie?: never;
        };
        /** Handle Ticktick Auth Code */
        get: operations["handle_ticktick_auth_code_ticktick_auth_code_get"];
        put?: never;
        post?: never;
        delete?: never;
        options?: never;
        head?: never;
        patch?: never;
        trace?: never;
    };
}
export type webhooks = Record<string, never>;
export interface components {
    schemas: {
        /**
         * CatalogEntrySchema
         * @description An entity from the catalog with its current toggle state.
         */
        CatalogEntrySchema: {
            entity: components["schemas"]["ExposableEntitySchema"];
            /** Enabled */
            enabled: boolean;
        };
        /** ConfigField */
        ConfigField: {
            /** Env Name */
            env_name: string;
            /** Label */
            label: string;
            /** Value */
            value: string;
            /** Secret */
            secret: boolean;
            /** Input Type */
            input_type: string;
            /** Configured */
            configured: boolean;
        };
        /** ConfigResponse */
        ConfigResponse: {
            /** Sections */
            sections: components["schemas"]["ConfigSection"][];
        };
        /** ConfigSection */
        ConfigSection: {
            /** Name */
            name: string;
            /** Fields */
            fields: components["schemas"]["ConfigField"][];
        };
        /**
         * ConfigUpdateRequest
         * @description Flat mapping of env_name → value, mirroring the existing form semantics.
         */
        ConfigUpdateRequest: {
            /** Updates */
            updates: {
                [key: string]: string;
            };
        };
        /** ConfigUpdateResponse */
        ConfigUpdateResponse: {
            /** Sections */
            sections: components["schemas"]["ConfigSection"][];
        };
        /**
         * ContractCreate
         * @description Request body for POST /api/energy/contracts.
         *
         *     ``effective_from`` defaults to the current UTC time if not provided,
         *     giving the first version an open-ended start from "now".
         *     ``kind`` is validated at the application layer against the profile registry;
         *     clients should send ``"manual"`` or ``"tibber"``.
         */
        ContractCreate: {
            /** Name */
            name: string;
            /** Kind */
            kind: string;
            /**
             * Currency
             * @default EUR
             */
            currency: string;
            /** Values */
            values: {
                [key: string]: unknown;
            };
            /**
             * Effective From
             * @description UTC datetime from which the first pricing version is effective. Defaults to the current UTC time when omitted.
             */
            effective_from?: string | null;
        };
        /**
         * ContractDetailResponse
         * @description Response schema for a single EnergyContract with full version history.
         *
         *     Returned by GET /api/energy/contracts/{id} and by successful POST / PATCH
         *     operations where the caller needs to see all version data.
         */
        ContractDetailResponse: {
            /** Id */
            id: number;
            /** Name */
            name: string;
            /** Kind */
            kind: string;
            /** Active */
            active: boolean;
            /** Currency */
            currency: string;
            /**
             * Created At
             * Format: date-time
             */
            created_at: string;
            /**
             * Updated At
             * Format: date-time
             */
            updated_at: string;
            /** Versions */
            versions: components["schemas"]["ContractVersionResponse"][];
        };
        /**
         * ContractListResponse
         * @description Response schema for GET /api/energy/contracts.
         */
        ContractListResponse: {
            /** Items */
            items: components["schemas"]["ContractResponse"][];
            /** Total */
            total: number;
        };
        /**
         * ContractPatch
         * @description Request body for PATCH /api/energy/contracts/{id}.
         *
         *     All fields are optional.  Sending ``active=true`` activates this contract
         *     (deactivating all others); ``active=false`` deactivates it without affecting
         *     other contracts.
         */
        ContractPatch: {
            /** Name */
            name?: string | null;
            /** Active */
            active?: boolean | null;
        };
        /**
         * ContractResponse
         * @description Response schema for a single EnergyContract (without embedded versions).
         *
         *     Used for list responses where embedding all versions would be expensive.
         */
        ContractResponse: {
            /** Id */
            id: number;
            /** Name */
            name: string;
            /** Kind */
            kind: string;
            /** Active */
            active: boolean;
            /** Currency */
            currency: string;
            /**
             * Created At
             * Format: date-time
             */
            created_at: string;
            /**
             * Updated At
             * Format: date-time
             */
            updated_at: string;
        };
        /**
         * ContractVersionResponse
         * @description Response schema for a single EnergyContractVersion row.
         */
        ContractVersionResponse: {
            /** Id */
            id: number;
            /**
             * Effective From
             * Format: date-time
             */
            effective_from: string;
            /** Effective To */
            effective_to: string | null;
            /** Values */
            values: {
                [key: string]: unknown;
            };
            /**
             * Created At
             * Format: date-time
             */
            created_at: string;
        };
        /**
         * CostPeriodSchema
         * @description One 15-minute billing record from the energy_cost_period table.
         */
        CostPeriodSchema: {
            /**
             * Period Start
             * Format: date-time
             */
            period_start: string;
            /**
             * D1 Kwh
             * @description Delivered low-tariff kWh for this period.
             */
            d1_kwh: number;
            /**
             * D2 Kwh
             * @description Delivered normal-tariff kWh for this period.
             */
            d2_kwh: number;
            /**
             * R1 Kwh
             * @description Returned low-tariff kWh for this period.
             */
            r1_kwh: number;
            /**
             * R2 Kwh
             * @description Returned normal-tariff kWh for this period.
             */
            r2_kwh: number;
            /**
             * Import Cost
             * @description Cost of electricity drawn from grid (EUR).
             */
            import_cost: number;
            /**
             * Export Revenue
             * @description Revenue from electricity fed to grid (EUR).
             */
            export_revenue: number;
            /**
             * Net Cost
             * @description import_cost − export_revenue (EUR).
             */
            net_cost: number;
            /**
             * Currency
             * @description ISO 4217 currency code.
             */
            currency: string;
            /**
             * Degraded
             * @description True when the period was computed with incomplete data.
             */
            degraded: boolean;
            /**
             * Contract Version Id
             * @description FK to the contract version used for this billing period (null when degraded).
             */
            contract_version_id?: number | null;
        };
        /**
         * CostsResponse
         * @description Response for GET /api/energy/costs.
         */
        CostsResponse: {
            /** Items */
            items: components["schemas"]["CostPeriodSchema"][];
            /**
             * Total
             * @description Number of items returned.
             */
            total: number;
        };
        /**
         * DeviceInfoSchema
         * @description HA device grouping info for an exposable entity.
         */
        DeviceInfoSchema: {
            /** Identifiers */
            identifiers: string[];
            /** Name */
            name: string;
        };
        /**
         * DsmrLatestResponse
         * @description Response for GET /api/energy/dsmr/latest.
         *
         *     ``found`` is False when no dsmr_reading rows exist yet.  The front-end
         *     should check ``found`` before reading ``recorded_at`` or ``payload``.
         */
        DsmrLatestResponse: {
            /** Found */
            found: boolean;
            /** Recorded At */
            recorded_at?: string | null;
            /** Payload */
            payload?: {
                [key: string]: unknown;
            } | null;
        };
        /**
         * ExposableEntitySchema
         * @description One exposable entity in the catalog.
         *
         *     ``value_getter`` is intentionally excluded — it is a non-serialisable
         *     callable and is only used internally by the HA Discovery service.
         */
        ExposableEntitySchema: {
            /** Key */
            key: string;
            /** Component */
            component: string;
            device: components["schemas"]["DeviceInfoSchema"];
            /** Device Class */
            device_class: string | null;
            /** Unit */
            unit: string;
            /** Name */
            name: string;
            /** State Class */
            state_class?: string | null;
        };
        /**
         * ExposeResponse
         * @description Response for GET /api/expose.
         */
        ExposeResponse: {
            /** Catalog */
            catalog: components["schemas"]["CatalogEntrySchema"][];
            mqtt_status: components["schemas"]["MqttStatusSchema"];
        };
        /**
         * ExposeUpdateRequest
         * @description Request body for PUT /api/expose.
         *
         *     ``toggles`` is a map from entity key to desired enabled state (bool).
         *     Only keys present in the map are updated; absent keys are untouched.
         */
        ExposeUpdateRequest: {
            /** Toggles */
            toggles: {
                [key: string]: boolean;
            };
        };
        /**
         * ExposeUpdateResponse
         * @description Response for PUT /api/expose (returns updated catalog + status).
         */
        ExposeUpdateResponse: {
            /** Catalog */
            catalog: components["schemas"]["CatalogEntrySchema"][];
            mqtt_status: components["schemas"]["MqttStatusSchema"];
        };
        /** HTTPValidationError */
        HTTPValidationError: {
            /** Detail */
            detail?: components["schemas"]["ValidationError"][];
        };
        /** LocationRecord */
        LocationRecord: {
            /** Person */
            person: string;
            /** Datetime */
            datetime: string;
            /** Latitude */
            latitude: number;
            /** Longitude */
            longitude: number;
            /** Altitude */
            altitude: number | null;
        };
        /**
         * LocationUpdateRequest
         * @description PATCH body for a location record — all fields optional; PK fields excluded.
         */
        LocationUpdateRequest: {
            /** Latitude */
            latitude?: number | null;
            /** Longitude */
            longitude?: number | null;
            /** Altitude */
            altitude?: number | null;
        };
        /** LocationsResponse */
        LocationsResponse: {
            /** Items */
            items: components["schemas"]["LocationRecord"][];
            /** Limit */
            limit: number;
            /** Offset */
            offset: number;
        };
        /** LoginRequest */
        LoginRequest: {
            /** Username */
            username: string;
            /** Password */
            password: string;
            /** Totp Code */
            totp_code?: string | null;
        };
        /**
         * ManualTariffSchema
         * @description Fixed-tariff breakdown for manual contracts.
         *
         *     Prices are the *effective* buy prices as used by the billing engine
         *     (energy_buy_x + energy_tax + ode) and the raw sell prices.
         */
        ManualTariffSchema: {
            /**
             * Buy Dal
             * @description Effective buy price, low-tariff / dal (EUR/kWh).
             */
            buy_dal: number;
            /**
             * Buy Normal
             * @description Effective buy price, normal / high-tariff (EUR/kWh).
             */
            buy_normal: number;
            /**
             * Sell Dal
             * @description Sell price, low-tariff / dal (EUR/kWh).
             */
            sell_dal: number;
            /**
             * Sell Normal
             * @description Sell price, normal / high-tariff (EUR/kWh).
             */
            sell_normal: number;
        };
        /**
         * MeterDeclareRequest
         * @description Request body for POST /api/energy/meters.
         *
         *     Declares a new meter epoch (swap, home move, or initial declaration).  The
         *     service layer closes the current active meter for the given commodity at
         *     ``started_at`` and opens a new one.
         *
         *     ``started_at`` follows the Principle-A localisation convention: a
         *     timezone-naive value is interpreted as the **server's local wall-clock time**
         *     (e.g. CEST midnight → stored as UTC the night before); a timezone-aware
         *     value is converted to UTC as-is.  Omitting ``started_at`` is not allowed —
         *     every meter declaration must carry an explicit start timestamp.
         *
         *     ``commodity`` defaults to ``"electricity"``; the field is available for
         *     future use with ``gas`` or ``heating``.
         */
        MeterDeclareRequest: {
            /** Label */
            label: string;
            /**
             * Started At
             * Format: date-time
             * @description UTC (or server-local naive) datetime from which this meter epoch starts.  May be in the past (retroactive declaration).
             */
            started_at: string;
            /** @description Why this epoch was created.  One of: initial, meter_swap, home_move, other. */
            reason: components["schemas"]["MeterReason"];
            /** Note */
            note?: string | null;
            /**
             * Commodity
             * @description Energy commodity this meter measures.  Defaults to 'electricity'.
             * @default electricity
             */
            commodity: string;
        };
        /**
         * MeterListResponse
         * @description Response schema for GET /api/energy/meters.
         *
         *     Meters are returned in ascending ``started_at`` order so the caller sees
         *     the historical installation sequence.
         */
        MeterListResponse: {
            /** Items */
            items: components["schemas"]["MeterResponse"][];
            /** Total */
            total: number;
        };
        /**
         * MeterPatchRequest
         * @description Request body for PATCH /api/energy/meters/{id}.
         *
         *     All fields are optional.  Only non-``None`` values are applied.
         *
         *     Updating ``started_at`` is a **retroactive correction**: the service layer
         *     maintains timeline continuity (adjusting the preceding meter's ``ended_at``)
         *     and the API layer triggers ``recompute_range`` over the affected window so
         *     that billing attribution is re-judged.
         */
        MeterPatchRequest: {
            /** Label */
            label?: string | null;
            /** Note */
            note?: string | null;
            /**
             * Started At
             * @description Retroactive correction of the meter epoch start timestamp.  Triggers billing recompute over the affected window.
             */
            started_at?: string | null;
        };
        /**
         * MeterReason
         * @description Allowed values for the meter epoch creation reason.
         * @enum {string}
         */
        MeterReason: "initial" | "meter_swap" | "home_move" | "other";
        /**
         * MeterResponse
         * @description Response schema for a single Meter epoch row.
         *
         *     ``ended_at`` is ``null`` for the currently active meter.
         */
        MeterResponse: {
            /** Id */
            id: number;
            /** Label */
            label: string;
            /** Commodity */
            commodity: string;
            /**
             * Started At
             * Format: date-time
             */
            started_at: string;
            /** Ended At */
            ended_at: string | null;
            /** Reason */
            reason: string;
            /** Note */
            note: string | null;
            /**
             * Created At
             * Format: date-time
             */
            created_at: string;
        };
        /**
         * MetricInfo
         * @description Metadata for a single measurable quantity in a device's profile.
         */
        MetricInfo: {
            /** Key */
            key: string;
            /** Label */
            label: string;
            /** Unit */
            unit: string;
            /** Device Class */
            device_class: string;
        };
        /**
         * ModbusDeviceCreate
         * @description Request body for POST /api/modbus/devices.
         */
        ModbusDeviceCreate: {
            /** Friendly Name */
            friendly_name: string;
            /**
             * Transport
             * @default tcp
             */
            transport: string;
            /** Host */
            host: string;
            /**
             * Port
             * @default 502
             */
            port: number;
            /**
             * Unit Id
             * @default 1
             */
            unit_id: number;
            /** Profile */
            profile: string;
            /**
             * Poll Interval S
             * @default 5
             */
            poll_interval_s: number;
            /**
             * Enabled
             * @default true
             */
            enabled: boolean;
        };
        /**
         * ModbusDeviceListResponse
         * @description Response schema for listing Modbus devices.
         */
        ModbusDeviceListResponse: {
            /** Items */
            items: components["schemas"]["ModbusDeviceResponse"][];
            /** Total */
            total: number;
        };
        /**
         * ModbusDeviceResponse
         * @description Response schema for a single Modbus device.
         */
        ModbusDeviceResponse: {
            /** Uuid */
            uuid: string;
            /** Friendly Name */
            friendly_name: string;
            /** Transport */
            transport: string;
            /** Host */
            host: string;
            /** Port */
            port: number;
            /** Unit Id */
            unit_id: number;
            /** Profile */
            profile: string;
            /** Poll Interval S */
            poll_interval_s: number;
            /** Enabled */
            enabled: boolean;
            /** Last Poll At */
            last_poll_at: string | null;
            /** Last Poll Ok */
            last_poll_ok: boolean | null;
            /**
             * Created At
             * Format: date-time
             */
            created_at: string;
            /**
             * Updated At
             * Format: date-time
             */
            updated_at: string;
        };
        /**
         * ModbusDeviceUpdate
         * @description Request body for PATCH /api/modbus/devices/{uuid} — all fields optional.
         */
        ModbusDeviceUpdate: {
            /** Friendly Name */
            friendly_name?: string | null;
            /** Transport */
            transport?: string | null;
            /** Host */
            host?: string | null;
            /** Port */
            port?: number | null;
            /** Unit Id */
            unit_id?: number | null;
            /** Profile */
            profile?: string | null;
            /** Poll Interval S */
            poll_interval_s?: number | null;
            /** Enabled */
            enabled?: boolean | null;
        };
        /**
         * ModbusLatestResponse
         * @description Response for the /latest endpoint.
         *
         *     ``found`` is False and ``recorded_at``/``payload`` are None when the device
         *     has no readings yet.  Callers should check ``found`` before using the values.
         */
        ModbusLatestResponse: {
            /** Found */
            found: boolean;
            /** Recorded At */
            recorded_at: string | null;
            /** Payload */
            payload: {
                [key: string]: unknown;
            } | null;
        };
        /**
         * ModbusMetricsResponse
         * @description Response schema for GET /api/modbus/devices/{uuid}/metrics.
         */
        ModbusMetricsResponse: {
            /** Profile */
            profile: string;
            /** Metrics */
            metrics: components["schemas"]["MetricInfo"][];
        };
        /**
         * ModbusProfilesResponse
         * @description Response schema for GET /api/modbus/profiles.
         */
        ModbusProfilesResponse: {
            /** Profiles */
            profiles: components["schemas"]["ProfileSummary"][];
        };
        /**
         * ModbusReadingResponse
         * @description A single reading row: timestamp + decoded payload.
         */
        ModbusReadingResponse: {
            /**
             * Recorded At
             * Format: date-time
             */
            recorded_at: string;
            /** Payload */
            payload: {
                [key: string]: unknown;
            };
        };
        /**
         * ModbusReadingsResponse
         * @description Response schema for the readings time-range endpoint.
         */
        ModbusReadingsResponse: {
            /** Items */
            items: components["schemas"]["ModbusReadingResponse"][];
        };
        /**
         * ModbusTestReadResponse
         * @description Response for POST /api/modbus/devices/{uuid}/test.
         *
         *     On success ``ok=True`` and ``payload`` contains the decoded values.
         *     On failure ``ok=False`` and ``error`` describes the problem.
         */
        ModbusTestReadResponse: {
            /** Ok */
            ok: boolean;
            /** Payload */
            payload?: {
                [key: string]: unknown;
            } | null;
            /** Error */
            error?: string | null;
        };
        /**
         * MqttStatusSchema
         * @description Connection status for MQTT and HA Discovery.
         */
        MqttStatusSchema: {
            /** Mqtt Configured */
            mqtt_configured: boolean;
            /** Mqtt Connected */
            mqtt_connected: boolean;
            /** Discovery Enabled */
            discovery_enabled: boolean;
        };
        /**
         * MqttTestResponse
         * @description Response from POST /api/config/mqtt/test.
         */
        MqttTestResponse: {
            /**
             * Result
             * @enum {string}
             */
            result: "success" | "config-error" | "failed";
            /** Message */
            message: string;
        };
        /** PasswordChangeRequest */
        PasswordChangeRequest: {
            /** Current Password */
            current_password: string;
            /** New Password */
            new_password: string;
            /** Confirm Password */
            confirm_password: string;
        };
        /** PooRecord */
        PooRecord: {
            /** Timestamp */
            timestamp: string;
            /** Status */
            status: string;
            /** Latitude */
            latitude: number;
            /** Longitude */
            longitude: number;
        };
        /** PooResponse */
        PooResponse: {
            /** Items */
            items: components["schemas"]["PooRecord"][];
            /** Limit */
            limit: number;
            /** Offset */
            offset: number;
        };
        /**
         * PooUpdateRequest
         * @description PATCH body for a poo record — all fields optional; PK field excluded.
         */
        PooUpdateRequest: {
            /** Status */
            status?: string | null;
            /** Latitude */
            latitude?: number | null;
            /** Longitude */
            longitude?: number | null;
        };
        /**
         * PricePointSchema
         * @description A single 15-minute price point (tibber) or placeholder entry.
         */
        PricePointSchema: {
            /**
             * Starts At
             * Format: date-time
             */
            starts_at: string;
            /**
             * Buy
             * @description All-in buy price in EUR/kWh (including taxes).
             */
            buy: number;
            /**
             * Sell
             * @description Net sell price in EUR/kWh.
             */
            sell: number;
            /**
             * Level
             * @description Tibber price level (CHEAP / NORMAL / EXPENSIVE); null for manual.
             */
            level?: string | null;
        };
        /**
         * PricesResponse
         * @description Response for GET /api/energy/prices.
         *
         *     ``kind`` mirrors the active contract kind:
         *     - ``"tibber"``  → ``points`` has actual 15-min price entries; ``tariff`` is null.
         *     - ``"manual"``  → ``points`` is empty; ``tariff`` carries the fixed-rate table.
         *     - ``None``      → no active contract; both ``points`` and ``tariff`` are empty/null.
         *
         *     ``currency`` comes from the active contract (or "EUR" fallback).
         *     ``points`` is always ascending by ``starts_at``.
         */
        PricesResponse: {
            /**
             * Kind
             * @description Active contract kind ('tibber' or 'manual'), or null if no active contract.
             */
            kind: string | null;
            /**
             * Currency
             * @description ISO 4217 currency code.
             */
            currency: string;
            /**
             * Points
             * @description 15-minute price points for tibber contracts (ascending by starts_at). Empty for manual contracts or when no active contract exists.
             */
            points: components["schemas"]["PricePointSchema"][];
            /** @description Fixed tariff table for manual contracts. Null for tibber contracts and when no active contract exists. */
            tariff?: components["schemas"]["ManualTariffSchema"] | null;
        };
        /**
         * ProfileSummary
         * @description One entry in the GET /api/modbus/profiles response.
         */
        ProfileSummary: {
            /** Name */
            name: string;
            /** Description */
            description: string;
        };
        /**
         * ProfilesResponse
         * @description Response schema for GET /api/energy/profiles.
         *
         *     ``profiles`` is a list of raw profile dicts as produced by
         *     ``list_profiles()`` (Pydantic model dumps).  Each entry contains at minimum
         *     ``kind`` and ``label``; the full nested structure allows the front-end to
         *     render a type-appropriate form for each pricing profile.
         */
        ProfilesResponse: {
            /** Profiles */
            profiles: {
                [key: string]: unknown;
            }[];
        };
        /** PublicIPCheckResponse */
        PublicIPCheckResponse: {
            /**
             * Status
             * @enum {string}
             */
            status: "first_seen" | "unchanged" | "changed" | "error";
            /**
             * Checked At
             * Format: date-time
             */
            checked_at: string;
            /** Changed */
            changed: boolean;
        };
        /** PublicIPHistorySchema */
        PublicIPHistorySchema: {
            /** Id */
            id: number;
            /** Ipv4 */
            ipv4: string;
            /**
             * Observed At
             * Format: date-time
             */
            observed_at: string;
            /** Change Type */
            change_type: string;
            /** Provider */
            provider: string | null;
        };
        /** PublicIPResponse */
        PublicIPResponse: {
            state: components["schemas"]["PublicIPStateSchema"] | null;
            /** History */
            history: components["schemas"]["PublicIPHistorySchema"][];
        };
        /** PublicIPStateSchema */
        PublicIPStateSchema: {
            /** Id */
            id: number;
            /** Current Ipv4 */
            current_ipv4: string;
            /** Previous Ipv4 */
            previous_ipv4: string | null;
            /**
             * First Seen At
             * Format: date-time
             */
            first_seen_at: string;
            /**
             * Last Checked At
             * Format: date-time
             */
            last_checked_at: string;
            /** Last Changed At */
            last_changed_at: string | null;
            /** Last Check Status */
            last_check_status: string;
            /** Last Check Error */
            last_check_error: string | null;
            /** Last Provider */
            last_provider: string | null;
        };
        /**
         * RecomputeResponse
         * @description Response for POST /api/energy/costs/recompute.
         */
        RecomputeResponse: {
            /**
             * Recomputed
             * @description Number of 15-minute periods for which a billing record was written (inserted or updated).  Periods skipped due to missing contract or missing Tibber price are not counted.
             */
            recomputed: number;
        };
        /**
         * RepublishResponse
         * @description Response for POST /api/expose/republish.
         */
        RepublishResponse: {
            /** Ok */
            ok: boolean;
            /** Message */
            message: string;
        };
        /** SessionResponse */
        SessionResponse: {
            user: components["schemas"]["SessionUser"];
            /** Csrf Token */
            csrf_token: string;
        };
        /** SessionUser */
        SessionUser: {
            /** Username */
            username: string;
            /** Force Password Change */
            force_password_change: boolean;
        };
        /**
         * SmtpTestResponse
         * @description Response from POST /api/config/smtp/test.
         */
        SmtpTestResponse: {
            /**
             * Result
             * @enum {string}
             */
            result: "success" | "config-error" | "failed";
            /** Message */
            message: string;
        };
        /** StatusResponse */
        StatusResponse: {
            /** Status */
            status: string;
        };
        /**
         * SummaryResponse
         * @description Response for GET /api/energy/costs/summary.
         *
         *     All monetary values are in ``currency``.
         *
         *     ``total_payable = metered_net + fixed_costs − credits``
         */
        SummaryResponse: {
            /** Currency */
            currency: string;
            /**
             * Metered Import
             * @description Σ import_cost for non-degraded periods.
             */
            metered_import: number;
            /**
             * Metered Export
             * @description Σ export_revenue for non-degraded periods.
             */
            metered_export: number;
            /**
             * Metered Net
             * @description Σ net_cost for non-degraded periods.
             */
            metered_net: number;
            /**
             * Fixed Costs
             * @description Standing charges (network_fee + management_fee) apportioned over the interval.
             */
            fixed_costs: number;
            /**
             * Credits
             * @description Energy-tax credit (heffingskorting) apportioned over the interval.
             */
            credits: number;
            /**
             * Total Payable
             * @description metered_net + fixed_costs − credits (actual amount owed).
             */
            total_payable: number;
            /**
             * Period Count
             * @description Number of non-degraded billing periods in range.
             */
            period_count: number;
            /**
             * Degraded Count
             * @description Number of degraded billing periods in range.
             */
            degraded_count: number;
            /**
             * Days
             * @description Interval length in days.
             */
            days: number;
        };
        /**
         * TibberTestPriceSchema
         * @description Current Tibber price point returned on a successful test.
         *
         *     Carries enough fields for the front-end to confirm the API is working and
         *     display the live price.  The API token is **never** included.
         */
        TibberTestPriceSchema: {
            /**
             * Starts At
             * Format: date-time
             */
            starts_at: string;
            /** Total */
            total: number;
            /** Energy */
            energy: number;
            /** Tax */
            tax: number;
            /** Currency */
            currency: string;
            /** Level */
            level?: string | null;
        };
        /**
         * TibberTestResponse
         * @description Three-state response for POST /api/energy/tibber/test.
         *
         *     Possible ``result`` values:
         *
         *     - ``"success"``      — Tibber API responded with a valid price.
         *     - ``"config-error"`` — Token is missing or not configured.
         *     - ``"failed"``       — API call failed (auth rejected, network error, timeout, etc.).
         *
         *     ``price`` is populated only on ``"success"``; it is null otherwise.
         *     ``message`` always contains a human-readable explanation.
         */
        TibberTestResponse: {
            /**
             * Result
             * @enum {string}
             */
            result: "success" | "config-error" | "failed";
            /** Message */
            message: string;
            price?: components["schemas"]["TibberTestPriceSchema"] | null;
        };
        /**
         * TotpDisableRequest
         * @description Disable TOTP by proving identity.
         *
         *     Exactly one of ``password`` or ``code`` must be provided.
         */
        TotpDisableRequest: {
            /** Password */
            password?: string | null;
            /** Code */
            code?: string | null;
        };
        /**
         * TotpEnableRequest
         * @description The user confirms setup by providing the 6-digit TOTP code.
         */
        TotpEnableRequest: {
            /** Code */
            code: string;
        };
        /**
         * TotpSetupResponse
         * @description Returned once after a setup call.
         *
         *     ``secret`` and ``recovery_codes`` are **one-time plaintext values**.
         *     They are never returned again by any subsequent API call.
         *     The frontend must display and instruct the user to save them before confirming.
         */
        TotpSetupResponse: {
            /** Secret */
            secret: string;
            /** Otpauth Uri */
            otpauth_uri: string;
            /** Recovery Codes */
            recovery_codes: string[];
        };
        /**
         * TotpStatusResponse
         * @description Minimal status response — never exposes secret or recovery codes.
         */
        TotpStatusResponse: {
            /** Enabled */
            enabled: boolean;
        };
        /** ValidationError */
        ValidationError: {
            /** Location */
            loc: (string | number)[];
            /** Message */
            msg: string;
            /** Error Type */
            type: string;
        };
        /**
         * VersionCreate
         * @description Request body for POST /api/energy/contracts/{id}/versions.
         */
        VersionCreate: {
            /**
             * Effective From
             * Format: date-time
             */
            effective_from: string;
            /** Values */
            values: {
                [key: string]: unknown;
            };
        };
    };
    responses: never;
    parameters: never;
    requestBodies: never;
    headers: never;
    pathItems: never;
}
export type $defs = Record<string, never>;
export interface operations {
    get_status_status_get: {
        parameters: {
            query?: never;
            header?: never;
            path?: never;
            cookie?: never;
        };
        requestBody?: never;
        responses: {
            /** @description Successful Response */
            200: {
                headers: {
                    [name: string]: unknown;
                };
                content: {
                    "application/json": components["schemas"]["StatusResponse"];
                };
            };
        };
    };
    get_config_api_config_get: {
        parameters: {
            query?: never;
            header?: never;
            path?: never;
            cookie?: never;
        };
        requestBody?: never;
        responses: {
            /** @description Successful Response */
            200: {
                headers: {
                    [name: string]: unknown;
                };
                content: {
                    "application/json": components["schemas"]["ConfigResponse"];
                };
            };
        };
    };
    put_config_api_config_put: {
        parameters: {
            query?: never;
            header?: {
                "X-CSRF-Token"?: string | null;
            };
            path?: never;
            cookie?: never;
        };
        requestBody: {
            content: {
                "application/json": components["schemas"]["ConfigUpdateRequest"];
            };
        };
        responses: {
            /** @description Successful Response */
            200: {
                headers: {
                    [name: string]: unknown;
                };
                content: {
                    "application/json": components["schemas"]["ConfigUpdateResponse"];
                };
            };
            /** @description Validation Error */
            422: {
                headers: {
                    [name: string]: unknown;
                };
                content: {
                    "application/json": components["schemas"]["HTTPValidationError"];
                };
            };
        };
    };
    post_smtp_test_api_config_smtp_test_post: {
        parameters: {
            query?: never;
            header?: {
                "X-CSRF-Token"?: string | null;
            };
            path?: never;
            cookie?: never;
        };
        requestBody?: never;
        responses: {
            /** @description Successful Response */
            200: {
                headers: {
                    [name: string]: unknown;
                };
                content: {
                    "application/json": components["schemas"]["SmtpTestResponse"];
                };
            };
            /** @description Bad Request */
            400: {
                headers: {
                    [name: string]: unknown;
                };
                content: {
                    "application/json": components["schemas"]["SmtpTestResponse"];
                };
            };
            /** @description Validation Error */
            422: {
                headers: {
                    [name: string]: unknown;
                };
                content: {
                    "application/json": components["schemas"]["HTTPValidationError"];
                };
            };
            /** @description Bad Gateway */
            502: {
                headers: {
                    [name: string]: unknown;
                };
                content: {
                    "application/json": components["schemas"]["SmtpTestResponse"];
                };
            };
        };
    };
    post_mqtt_test_api_config_mqtt_test_post: {
        parameters: {
            query?: never;
            header?: {
                "X-CSRF-Token"?: string | null;
            };
            path?: never;
            cookie?: never;
        };
        requestBody?: never;
        responses: {
            /** @description Successful Response */
            200: {
                headers: {
                    [name: string]: unknown;
                };
                content: {
                    "application/json": components["schemas"]["MqttTestResponse"];
                };
            };
            /** @description Bad Request */
            400: {
                headers: {
                    [name: string]: unknown;
                };
                content: {
                    "application/json": components["schemas"]["MqttTestResponse"];
                };
            };
            /** @description Validation Error */
            422: {
                headers: {
                    [name: string]: unknown;
                };
                content: {
                    "application/json": components["schemas"]["HTTPValidationError"];
                };
            };
            /** @description Bad Gateway */
            502: {
                headers: {
                    [name: string]: unknown;
                };
                content: {
                    "application/json": components["schemas"]["MqttTestResponse"];
                };
            };
        };
    };
    get_locations_api_locations_get: {
        parameters: {
            query?: {
                limit?: number;
                offset?: number;
                start?: string | null;
                end?: string | null;
            };
            header?: never;
            path?: never;
            cookie?: never;
        };
        requestBody?: never;
        responses: {
            /** @description Successful Response */
            200: {
                headers: {
                    [name: string]: unknown;
                };
                content: {
                    "application/json": components["schemas"]["LocationsResponse"];
                };
            };
            /** @description Validation Error */
            422: {
                headers: {
                    [name: string]: unknown;
                };
                content: {
                    "application/json": components["schemas"]["HTTPValidationError"];
                };
            };
        };
    };
    get_poo_api_poo_get: {
        parameters: {
            query?: {
                limit?: number;
                offset?: number;
            };
            header?: never;
            path?: never;
            cookie?: never;
        };
        requestBody?: never;
        responses: {
            /** @description Successful Response */
            200: {
                headers: {
                    [name: string]: unknown;
                };
                content: {
                    "application/json": components["schemas"]["PooResponse"];
                };
            };
            /** @description Validation Error */
            422: {
                headers: {
                    [name: string]: unknown;
                };
                content: {
                    "application/json": components["schemas"]["HTTPValidationError"];
                };
            };
        };
    };
    get_public_ip_api_public_ip_get: {
        parameters: {
            query?: {
                limit?: number;
            };
            header?: never;
            path?: never;
            cookie?: never;
        };
        requestBody?: never;
        responses: {
            /** @description Successful Response */
            200: {
                headers: {
                    [name: string]: unknown;
                };
                content: {
                    "application/json": components["schemas"]["PublicIPResponse"];
                };
            };
            /** @description Validation Error */
            422: {
                headers: {
                    [name: string]: unknown;
                };
                content: {
                    "application/json": components["schemas"]["HTTPValidationError"];
                };
            };
        };
    };
    delete_location_record_api_locations__person___datetime__delete: {
        parameters: {
            query?: never;
            header?: {
                "X-CSRF-Token"?: string | null;
            };
            path: {
                person: string;
                datetime: string;
            };
            cookie?: never;
        };
        requestBody?: never;
        responses: {
            /** @description Successful Response */
            204: {
                headers: {
                    [name: string]: unknown;
                };
                content?: never;
            };
            /** @description Validation Error */
            422: {
                headers: {
                    [name: string]: unknown;
                };
                content: {
                    "application/json": components["schemas"]["HTTPValidationError"];
                };
            };
        };
    };
    patch_location_api_locations__person___datetime__patch: {
        parameters: {
            query?: never;
            header?: {
                "X-CSRF-Token"?: string | null;
            };
            path: {
                person: string;
                datetime: string;
            };
            cookie?: never;
        };
        requestBody?: {
            content: {
                "application/json": components["schemas"]["LocationUpdateRequest"];
            };
        };
        responses: {
            /** @description Successful Response */
            200: {
                headers: {
                    [name: string]: unknown;
                };
                content: {
                    "application/json": components["schemas"]["LocationRecord"];
                };
            };
            /** @description Validation Error */
            422: {
                headers: {
                    [name: string]: unknown;
                };
                content: {
                    "application/json": components["schemas"]["HTTPValidationError"];
                };
            };
        };
    };
    delete_poo_api_poo__timestamp__delete: {
        parameters: {
            query?: never;
            header?: {
                "X-CSRF-Token"?: string | null;
            };
            path: {
                timestamp: string;
            };
            cookie?: never;
        };
        requestBody?: never;
        responses: {
            /** @description Successful Response */
            204: {
                headers: {
                    [name: string]: unknown;
                };
                content?: never;
            };
            /** @description Validation Error */
            422: {
                headers: {
                    [name: string]: unknown;
                };
                content: {
                    "application/json": components["schemas"]["HTTPValidationError"];
                };
            };
        };
    };
    patch_poo_api_poo__timestamp__patch: {
        parameters: {
            query?: never;
            header?: {
                "X-CSRF-Token"?: string | null;
            };
            path: {
                timestamp: string;
            };
            cookie?: never;
        };
        requestBody?: {
            content: {
                "application/json": components["schemas"]["PooUpdateRequest"];
            };
        };
        responses: {
            /** @description Successful Response */
            200: {
                headers: {
                    [name: string]: unknown;
                };
                content: {
                    "application/json": components["schemas"]["PooRecord"];
                };
            };
            /** @description Validation Error */
            422: {
                headers: {
                    [name: string]: unknown;
                };
                content: {
                    "application/json": components["schemas"]["HTTPValidationError"];
                };
            };
        };
    };
    get_prices_api_energy_prices_get: {
        parameters: {
            query?: {
                /** @description Inclusive start of the time window (ISO 8601). Defaults to the start of today UTC when omitted. */
                start?: string | null;
                /** @description Inclusive end of the time window (ISO 8601). Defaults to the end of tomorrow UTC when omitted. */
                end?: string | null;
                /** @description Maximum number of Tibber price points to return. */
                limit?: number;
            };
            header?: never;
            path?: never;
            cookie?: never;
        };
        requestBody?: never;
        responses: {
            /** @description Successful Response */
            200: {
                headers: {
                    [name: string]: unknown;
                };
                content: {
                    "application/json": components["schemas"]["PricesResponse"];
                };
            };
            /** @description Validation Error */
            422: {
                headers: {
                    [name: string]: unknown;
                };
                content: {
                    "application/json": components["schemas"]["HTTPValidationError"];
                };
            };
        };
    };
    get_costs_api_energy_costs_get: {
        parameters: {
            query?: {
                /** @description Inclusive lower bound for period_start (ISO 8601). */
                start?: string | null;
                /** @description Inclusive upper bound for period_start (ISO 8601). */
                end?: string | null;
                /** @description Maximum number of cost periods to return (default 500, max 5000). */
                limit?: number;
            };
            header?: never;
            path?: never;
            cookie?: never;
        };
        requestBody?: never;
        responses: {
            /** @description Successful Response */
            200: {
                headers: {
                    [name: string]: unknown;
                };
                content: {
                    "application/json": components["schemas"]["CostsResponse"];
                };
            };
            /** @description Validation Error */
            422: {
                headers: {
                    [name: string]: unknown;
                };
                content: {
                    "application/json": components["schemas"]["HTTPValidationError"];
                };
            };
        };
    };
    get_costs_summary_api_energy_costs_summary_get: {
        parameters: {
            query?: {
                /** @description Inclusive start of the summary interval (ISO 8601). Defaults to the start of the current UTC day. */
                start?: string | null;
                /** @description Exclusive end of the summary interval (ISO 8601). Defaults to the start of the next UTC day (i.e. today's full data). */
                end?: string | null;
            };
            header?: never;
            path?: never;
            cookie?: never;
        };
        requestBody?: never;
        responses: {
            /** @description Successful Response */
            200: {
                headers: {
                    [name: string]: unknown;
                };
                content: {
                    "application/json": components["schemas"]["SummaryResponse"];
                };
            };
            /** @description Validation Error */
            422: {
                headers: {
                    [name: string]: unknown;
                };
                content: {
                    "application/json": components["schemas"]["HTTPValidationError"];
                };
            };
        };
    };
    get_dsmr_latest_api_energy_dsmr_latest_get: {
        parameters: {
            query?: never;
            header?: never;
            path?: never;
            cookie?: never;
        };
        requestBody?: never;
        responses: {
            /** @description Successful Response */
            200: {
                headers: {
                    [name: string]: unknown;
                };
                content: {
                    "application/json": components["schemas"]["DsmrLatestResponse"];
                };
            };
        };
    };
    post_recompute_api_energy_costs_recompute_post: {
        parameters: {
            query: {
                /** @description Inclusive start of the recompute window (ISO 8601). Required. */
                start: string;
                /** @description Exclusive end of the recompute window (ISO 8601). Required. */
                end: string;
            };
            header?: {
                "X-CSRF-Token"?: string | null;
            };
            path?: never;
            cookie?: never;
        };
        requestBody?: never;
        responses: {
            /** @description Successful Response */
            200: {
                headers: {
                    [name: string]: unknown;
                };
                content: {
                    "application/json": components["schemas"]["RecomputeResponse"];
                };
            };
            /** @description Validation error (missing window or range too large) */
            422: {
                headers: {
                    [name: string]: unknown;
                };
                content?: never;
            };
        };
    };
    post_tibber_test_api_energy_tibber_test_post: {
        parameters: {
            query?: never;
            header?: {
                "X-CSRF-Token"?: string | null;
            };
            path?: never;
            cookie?: never;
        };
        requestBody?: never;
        responses: {
            /** @description Successful Response */
            200: {
                headers: {
                    [name: string]: unknown;
                };
                content: {
                    "application/json": components["schemas"]["TibberTestResponse"];
                };
            };
            /** @description Bad Request */
            400: {
                headers: {
                    [name: string]: unknown;
                };
                content: {
                    "application/json": components["schemas"]["TibberTestResponse"];
                };
            };
            /** @description Validation Error */
            422: {
                headers: {
                    [name: string]: unknown;
                };
                content: {
                    "application/json": components["schemas"]["HTTPValidationError"];
                };
            };
            /** @description Bad Gateway */
            502: {
                headers: {
                    [name: string]: unknown;
                };
                content: {
                    "application/json": components["schemas"]["TibberTestResponse"];
                };
            };
        };
    };
    get_profiles_api_energy_profiles_get: {
        parameters: {
            query?: never;
            header?: never;
            path?: never;
            cookie?: never;
        };
        requestBody?: never;
        responses: {
            /** @description Successful Response */
            200: {
                headers: {
                    [name: string]: unknown;
                };
                content: {
                    "application/json": components["schemas"]["ProfilesResponse"];
                };
            };
        };
    };
    list_energy_contracts_api_energy_contracts_get: {
        parameters: {
            query?: never;
            header?: never;
            path?: never;
            cookie?: never;
        };
        requestBody?: never;
        responses: {
            /** @description Successful Response */
            200: {
                headers: {
                    [name: string]: unknown;
                };
                content: {
                    "application/json": components["schemas"]["ContractListResponse"];
                };
            };
        };
    };
    create_energy_contract_api_energy_contracts_post: {
        parameters: {
            query?: never;
            header?: {
                "X-CSRF-Token"?: string | null;
            };
            path?: never;
            cookie?: never;
        };
        requestBody: {
            content: {
                "application/json": components["schemas"]["ContractCreate"];
            };
        };
        responses: {
            /** @description Successful Response */
            201: {
                headers: {
                    [name: string]: unknown;
                };
                content: {
                    "application/json": components["schemas"]["ContractDetailResponse"];
                };
            };
            /** @description Validation Error */
            422: {
                headers: {
                    [name: string]: unknown;
                };
                content: {
                    "application/json": components["schemas"]["HTTPValidationError"];
                };
            };
        };
    };
    get_energy_contract_api_energy_contracts__contract_id__get: {
        parameters: {
            query?: never;
            header?: never;
            path: {
                contract_id: number;
            };
            cookie?: never;
        };
        requestBody?: never;
        responses: {
            /** @description Successful Response */
            200: {
                headers: {
                    [name: string]: unknown;
                };
                content: {
                    "application/json": components["schemas"]["ContractDetailResponse"];
                };
            };
            /** @description Validation Error */
            422: {
                headers: {
                    [name: string]: unknown;
                };
                content: {
                    "application/json": components["schemas"]["HTTPValidationError"];
                };
            };
        };
    };
    patch_energy_contract_api_energy_contracts__contract_id__patch: {
        parameters: {
            query?: never;
            header?: {
                "X-CSRF-Token"?: string | null;
            };
            path: {
                contract_id: number;
            };
            cookie?: never;
        };
        requestBody: {
            content: {
                "application/json": components["schemas"]["ContractPatch"];
            };
        };
        responses: {
            /** @description Successful Response */
            200: {
                headers: {
                    [name: string]: unknown;
                };
                content: {
                    "application/json": components["schemas"]["ContractDetailResponse"];
                };
            };
            /** @description Validation Error */
            422: {
                headers: {
                    [name: string]: unknown;
                };
                content: {
                    "application/json": components["schemas"]["HTTPValidationError"];
                };
            };
        };
    };
    add_contract_version_api_energy_contracts__contract_id__versions_post: {
        parameters: {
            query?: never;
            header?: {
                "X-CSRF-Token"?: string | null;
            };
            path: {
                contract_id: number;
            };
            cookie?: never;
        };
        requestBody: {
            content: {
                "application/json": components["schemas"]["VersionCreate"];
            };
        };
        responses: {
            /** @description Successful Response */
            201: {
                headers: {
                    [name: string]: unknown;
                };
                content: {
                    "application/json": components["schemas"]["ContractDetailResponse"];
                };
            };
            /** @description Validation Error */
            422: {
                headers: {
                    [name: string]: unknown;
                };
                content: {
                    "application/json": components["schemas"]["HTTPValidationError"];
                };
            };
        };
    };
    list_energy_meters_api_energy_meters_get: {
        parameters: {
            query?: never;
            header?: never;
            path?: never;
            cookie?: never;
        };
        requestBody?: never;
        responses: {
            /** @description Successful Response */
            200: {
                headers: {
                    [name: string]: unknown;
                };
                content: {
                    "application/json": components["schemas"]["MeterListResponse"];
                };
            };
        };
    };
    declare_energy_meter_api_energy_meters_post: {
        parameters: {
            query?: never;
            header?: {
                "X-CSRF-Token"?: string | null;
            };
            path?: never;
            cookie?: never;
        };
        requestBody: {
            content: {
                "application/json": components["schemas"]["MeterDeclareRequest"];
            };
        };
        responses: {
            /** @description Successful Response */
            201: {
                headers: {
                    [name: string]: unknown;
                };
                content: {
                    "application/json": components["schemas"]["MeterResponse"];
                };
            };
            /** @description Validation Error */
            422: {
                headers: {
                    [name: string]: unknown;
                };
                content: {
                    "application/json": components["schemas"]["HTTPValidationError"];
                };
            };
        };
    };
    patch_energy_meter_api_energy_meters__meter_id__patch: {
        parameters: {
            query?: never;
            header?: {
                "X-CSRF-Token"?: string | null;
            };
            path: {
                meter_id: number;
            };
            cookie?: never;
        };
        requestBody: {
            content: {
                "application/json": components["schemas"]["MeterPatchRequest"];
            };
        };
        responses: {
            /** @description Successful Response */
            200: {
                headers: {
                    [name: string]: unknown;
                };
                content: {
                    "application/json": components["schemas"]["MeterResponse"];
                };
            };
            /** @description Validation Error */
            422: {
                headers: {
                    [name: string]: unknown;
                };
                content: {
                    "application/json": components["schemas"]["HTTPValidationError"];
                };
            };
        };
    };
    get_expose_api_expose_get: {
        parameters: {
            query?: never;
            header?: never;
            path?: never;
            cookie?: never;
        };
        requestBody?: never;
        responses: {
            /** @description Successful Response */
            200: {
                headers: {
                    [name: string]: unknown;
                };
                content: {
                    "application/json": components["schemas"]["ExposeResponse"];
                };
            };
        };
    };
    put_expose_api_expose_put: {
        parameters: {
            query?: never;
            header?: {
                "X-CSRF-Token"?: string | null;
            };
            path?: never;
            cookie?: never;
        };
        requestBody: {
            content: {
                "application/json": components["schemas"]["ExposeUpdateRequest"];
            };
        };
        responses: {
            /** @description Successful Response */
            200: {
                headers: {
                    [name: string]: unknown;
                };
                content: {
                    "application/json": components["schemas"]["ExposeUpdateResponse"];
                };
            };
            /** @description Validation Error */
            422: {
                headers: {
                    [name: string]: unknown;
                };
                content: {
                    "application/json": components["schemas"]["HTTPValidationError"];
                };
            };
        };
    };
    post_expose_republish_api_expose_republish_post: {
        parameters: {
            query?: never;
            header?: {
                "X-CSRF-Token"?: string | null;
            };
            path?: never;
            cookie?: never;
        };
        requestBody?: never;
        responses: {
            /** @description Successful Response */
            200: {
                headers: {
                    [name: string]: unknown;
                };
                content: {
                    "application/json": components["schemas"]["RepublishResponse"];
                };
            };
            /** @description Validation Error */
            422: {
                headers: {
                    [name: string]: unknown;
                };
                content: {
                    "application/json": components["schemas"]["HTTPValidationError"];
                };
            };
        };
    };
    get_profiles_api_modbus_profiles_get: {
        parameters: {
            query?: never;
            header?: never;
            path?: never;
            cookie?: never;
        };
        requestBody?: never;
        responses: {
            /** @description Successful Response */
            200: {
                headers: {
                    [name: string]: unknown;
                };
                content: {
                    "application/json": components["schemas"]["ModbusProfilesResponse"];
                };
            };
        };
    };
    list_devices_api_modbus_devices_get: {
        parameters: {
            query?: never;
            header?: never;
            path?: never;
            cookie?: never;
        };
        requestBody?: never;
        responses: {
            /** @description Successful Response */
            200: {
                headers: {
                    [name: string]: unknown;
                };
                content: {
                    "application/json": components["schemas"]["ModbusDeviceListResponse"];
                };
            };
        };
    };
    create_device_api_modbus_devices_post: {
        parameters: {
            query?: never;
            header?: {
                "X-CSRF-Token"?: string | null;
            };
            path?: never;
            cookie?: never;
        };
        requestBody: {
            content: {
                "application/json": components["schemas"]["ModbusDeviceCreate"];
            };
        };
        responses: {
            /** @description Successful Response */
            201: {
                headers: {
                    [name: string]: unknown;
                };
                content: {
                    "application/json": components["schemas"]["ModbusDeviceResponse"];
                };
            };
            /** @description Validation Error */
            422: {
                headers: {
                    [name: string]: unknown;
                };
                content: {
                    "application/json": components["schemas"]["HTTPValidationError"];
                };
            };
        };
    };
    get_device_api_modbus_devices__uuid__get: {
        parameters: {
            query?: never;
            header?: never;
            path: {
                uuid: string;
            };
            cookie?: never;
        };
        requestBody?: never;
        responses: {
            /** @description Successful Response */
            200: {
                headers: {
                    [name: string]: unknown;
                };
                content: {
                    "application/json": components["schemas"]["ModbusDeviceResponse"];
                };
            };
            /** @description Validation Error */
            422: {
                headers: {
                    [name: string]: unknown;
                };
                content: {
                    "application/json": components["schemas"]["HTTPValidationError"];
                };
            };
        };
    };
    delete_device_api_modbus_devices__uuid__delete: {
        parameters: {
            query?: {
                cascade?: boolean;
            };
            header?: {
                "X-CSRF-Token"?: string | null;
            };
            path: {
                uuid: string;
            };
            cookie?: never;
        };
        requestBody?: never;
        responses: {
            /** @description Successful Response */
            204: {
                headers: {
                    [name: string]: unknown;
                };
                content?: never;
            };
            /** @description Validation Error */
            422: {
                headers: {
                    [name: string]: unknown;
                };
                content: {
                    "application/json": components["schemas"]["HTTPValidationError"];
                };
            };
        };
    };
    patch_device_api_modbus_devices__uuid__patch: {
        parameters: {
            query?: never;
            header?: {
                "X-CSRF-Token"?: string | null;
            };
            path: {
                uuid: string;
            };
            cookie?: never;
        };
        requestBody: {
            content: {
                "application/json": components["schemas"]["ModbusDeviceUpdate"];
            };
        };
        responses: {
            /** @description Successful Response */
            200: {
                headers: {
                    [name: string]: unknown;
                };
                content: {
                    "application/json": components["schemas"]["ModbusDeviceResponse"];
                };
            };
            /** @description Validation Error */
            422: {
                headers: {
                    [name: string]: unknown;
                };
                content: {
                    "application/json": components["schemas"]["HTTPValidationError"];
                };
            };
        };
    };
    get_latest_reading_api_modbus_devices__uuid__latest_get: {
        parameters: {
            query?: never;
            header?: never;
            path: {
                uuid: string;
            };
            cookie?: never;
        };
        requestBody?: never;
        responses: {
            /** @description Successful Response */
            200: {
                headers: {
                    [name: string]: unknown;
                };
                content: {
                    "application/json": components["schemas"]["ModbusLatestResponse"];
                };
            };
            /** @description Validation Error */
            422: {
                headers: {
                    [name: string]: unknown;
                };
                content: {
                    "application/json": components["schemas"]["HTTPValidationError"];
                };
            };
        };
    };
    get_readings_api_modbus_devices__uuid__readings_get: {
        parameters: {
            query?: {
                start?: string | null;
                end?: string | null;
                limit?: number;
            };
            header?: never;
            path: {
                uuid: string;
            };
            cookie?: never;
        };
        requestBody?: never;
        responses: {
            /** @description Successful Response */
            200: {
                headers: {
                    [name: string]: unknown;
                };
                content: {
                    "application/json": components["schemas"]["ModbusReadingsResponse"];
                };
            };
            /** @description Validation Error */
            422: {
                headers: {
                    [name: string]: unknown;
                };
                content: {
                    "application/json": components["schemas"]["HTTPValidationError"];
                };
            };
        };
    };
    get_metrics_api_modbus_devices__uuid__metrics_get: {
        parameters: {
            query?: never;
            header?: never;
            path: {
                uuid: string;
            };
            cookie?: never;
        };
        requestBody?: never;
        responses: {
            /** @description Successful Response */
            200: {
                headers: {
                    [name: string]: unknown;
                };
                content: {
                    "application/json": components["schemas"]["ModbusMetricsResponse"];
                };
            };
            /** @description Validation Error */
            422: {
                headers: {
                    [name: string]: unknown;
                };
                content: {
                    "application/json": components["schemas"]["HTTPValidationError"];
                };
            };
        };
    };
    test_read_api_modbus_devices__uuid__test_post: {
        parameters: {
            query?: never;
            header?: {
                "X-CSRF-Token"?: string | null;
            };
            path: {
                uuid: string;
            };
            cookie?: never;
        };
        requestBody?: never;
        responses: {
            /** @description Successful Response */
            200: {
                headers: {
                    [name: string]: unknown;
                };
                content: {
                    "application/json": components["schemas"]["ModbusTestReadResponse"];
                };
            };
            /** @description Validation Error */
            422: {
                headers: {
                    [name: string]: unknown;
                };
                content: {
                    "application/json": components["schemas"]["HTTPValidationError"];
                };
            };
        };
    };
    get_session_api_session_get: {
        parameters: {
            query?: never;
            header?: never;
            path?: never;
            cookie?: never;
        };
        requestBody?: never;
        responses: {
            /** @description Successful Response */
            200: {
                headers: {
                    [name: string]: unknown;
                };
                content: {
                    "application/json": components["schemas"]["SessionResponse"];
                };
            };
        };
    };
    post_login_api_auth_login_post: {
        parameters: {
            query?: never;
            header?: never;
            path?: never;
            cookie?: never;
        };
        requestBody: {
            content: {
                "application/json": components["schemas"]["LoginRequest"];
            };
        };
        responses: {
            /** @description Successful Response */
            200: {
                headers: {
                    [name: string]: unknown;
                };
                content: {
                    "application/json": components["schemas"]["SessionResponse"];
                };
            };
            /** @description Validation Error */
            422: {
                headers: {
                    [name: string]: unknown;
                };
                content: {
                    "application/json": components["schemas"]["HTTPValidationError"];
                };
            };
        };
    };
    post_logout_api_auth_logout_post: {
        parameters: {
            query?: never;
            header?: {
                "X-CSRF-Token"?: string | null;
            };
            path?: never;
            cookie?: never;
        };
        requestBody?: never;
        responses: {
            /** @description Successful Response */
            200: {
                headers: {
                    [name: string]: unknown;
                };
                content: {
                    "application/json": unknown;
                };
            };
            /** @description Validation Error */
            422: {
                headers: {
                    [name: string]: unknown;
                };
                content: {
                    "application/json": components["schemas"]["HTTPValidationError"];
                };
            };
        };
    };
    post_change_password_api_auth_password_post: {
        parameters: {
            query?: never;
            header?: {
                "X-CSRF-Token"?: string | null;
            };
            path?: never;
            cookie?: never;
        };
        requestBody: {
            content: {
                "application/json": components["schemas"]["PasswordChangeRequest"];
            };
        };
        responses: {
            /** @description Successful Response */
            200: {
                headers: {
                    [name: string]: unknown;
                };
                content: {
                    "application/json": unknown;
                };
            };
            /** @description Validation Error */
            422: {
                headers: {
                    [name: string]: unknown;
                };
                content: {
                    "application/json": components["schemas"]["HTTPValidationError"];
                };
            };
        };
    };
    post_totp_setup_api_auth_totp_setup_post: {
        parameters: {
            query?: never;
            header?: {
                "X-CSRF-Token"?: string | null;
            };
            path?: never;
            cookie?: never;
        };
        requestBody?: never;
        responses: {
            /** @description Successful Response */
            200: {
                headers: {
                    [name: string]: unknown;
                };
                content: {
                    "application/json": components["schemas"]["TotpSetupResponse"];
                };
            };
            /** @description Validation Error */
            422: {
                headers: {
                    [name: string]: unknown;
                };
                content: {
                    "application/json": components["schemas"]["HTTPValidationError"];
                };
            };
        };
    };
    post_totp_enable_api_auth_totp_enable_post: {
        parameters: {
            query?: never;
            header?: {
                "X-CSRF-Token"?: string | null;
            };
            path?: never;
            cookie?: never;
        };
        requestBody: {
            content: {
                "application/json": components["schemas"]["TotpEnableRequest"];
            };
        };
        responses: {
            /** @description Successful Response */
            204: {
                headers: {
                    [name: string]: unknown;
                };
                content?: never;
            };
            /** @description Validation Error */
            422: {
                headers: {
                    [name: string]: unknown;
                };
                content: {
                    "application/json": components["schemas"]["HTTPValidationError"];
                };
            };
        };
    };
    post_totp_disable_api_auth_totp_disable_post: {
        parameters: {
            query?: never;
            header?: {
                "X-CSRF-Token"?: string | null;
            };
            path?: never;
            cookie?: never;
        };
        requestBody: {
            content: {
                "application/json": components["schemas"]["TotpDisableRequest"];
            };
        };
        responses: {
            /** @description Successful Response */
            204: {
                headers: {
                    [name: string]: unknown;
                };
                content?: never;
            };
            /** @description Validation Error */
            422: {
                headers: {
                    [name: string]: unknown;
                };
                content: {
                    "application/json": components["schemas"]["HTTPValidationError"];
                };
            };
        };
    };
    get_totp_status_api_auth_totp_get: {
        parameters: {
            query?: never;
            header?: never;
            path?: never;
            cookie?: never;
        };
        requestBody?: never;
        responses: {
            /** @description Successful Response */
            200: {
                headers: {
                    [name: string]: unknown;
                };
                content: {
                    "application/json": components["schemas"]["TotpStatusResponse"];
                };
            };
        };
    };
    publish_from_homeassistant_homeassistant_publish_post: {
        parameters: {
            query?: never;
            header?: never;
            path?: never;
            cookie?: never;
        };
        requestBody?: never;
        responses: {
            /** @description Successful Response */
            200: {
                headers: {
                    [name: string]: unknown;
                };
                content: {
                    "application/json": unknown;
                };
            };
        };
    };
    create_location_record_location_record_post: {
        parameters: {
            query?: never;
            header?: never;
            path?: never;
            cookie?: never;
        };
        requestBody?: never;
        responses: {
            /** @description Successful Response */
            200: {
                headers: {
                    [name: string]: unknown;
                };
                content: {
                    "application/json": unknown;
                };
            };
        };
    };
    create_poo_record_poo_record_post: {
        parameters: {
            query?: never;
            header?: never;
            path?: never;
            cookie?: never;
        };
        requestBody?: never;
        responses: {
            /** @description Successful Response */
            200: {
                headers: {
                    [name: string]: unknown;
                };
                content: {
                    "application/json": unknown;
                };
            };
        };
    };
    notify_latest_poo_poo_latest_get: {
        parameters: {
            query?: never;
            header?: never;
            path?: never;
            cookie?: never;
        };
        requestBody?: never;
        responses: {
            /** @description Successful Response */
            200: {
                headers: {
                    [name: string]: unknown;
                };
                content: {
                    "application/json": unknown;
                };
            };
        };
    };
    run_public_ip_check_public_ip_check_get: {
        parameters: {
            query?: never;
            header?: never;
            path?: never;
            cookie?: never;
        };
        requestBody?: never;
        responses: {
            /** @description Successful Response */
            200: {
                headers: {
                    [name: string]: unknown;
                };
                content: {
                    "application/json": components["schemas"]["PublicIPCheckResponse"];
                };
            };
        };
    };
    start_ticktick_auth_ticktick_auth_start_get: {
        parameters: {
            query?: never;
            header?: never;
            path?: never;
            cookie?: never;
        };
        requestBody?: never;
        responses: {
            /** @description Successful Response */
            200: {
                headers: {
                    [name: string]: unknown;
                };
                content: {
                    "application/json": unknown;
                };
            };
        };
    };
    handle_ticktick_auth_code_ticktick_auth_code_get: {
        parameters: {
            query?: never;
            header?: never;
            path?: never;
            cookie?: never;
        };
        requestBody?: never;
        responses: {
            /** @description Successful Response */
            200: {
                headers: {
                    [name: string]: unknown;
                };
                content: {
                    "application/json": unknown;
                };
            };
        };
    };
}
