{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://artifacts.apis.io/evcc/json-schema/evcc-state-schema.json",
  "title": "State",
  "description": "Complete system state as returned by /api/state and pushed via websocket and MQTT. This structure mirrors the internal UI state and carries no compatibility promise. Fields may change or disappear between releases.",
  "x-generated": "2026-10-28",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/evcc-openapi.yaml#/components/schemas/State",
  "type": "object",
  "properties": {
    "telemetry": {
      "description": "Telemetry is enabled.",
      "type": "boolean"
    },
    "experimental": {
      "description": "Experimental UI features are enabled.",
      "type": "boolean"
    },
    "setupRequired": {
      "description": "Initial setup is required.",
      "type": "boolean"
    },
    "onboarding": {
      "$ref": "#/$defs/OnboardingState",
      "description": "Setup wizard and checklist state."
    },
    "startupCompleted": {
      "description": "Startup has completed.",
      "type": "boolean"
    },
    "apiReady": {
      "description": "HTTP API is ready to accept requests.",
      "type": "boolean"
    },
    "loadpoints": {
      "description": "Charging locations. One entry per configured loadpoint.",
      "type": "array",
      "items": {
        "$ref": "#/$defs/Loadpoint"
      }
    },
    "forecast": {
      "$ref": "#/$defs/Forecast",
      "description": "Price, CO₂ and solar production forecasts."
    },
    "currency": {
      "$ref": "#/$defs/Currency",
      "description": "Configured currency for all monetary values."
    },
    "country": {
      "description": "Configured site country as ISO 3166-1 alpha-2 code. Empty when not set.",
      "type": "string"
    },
    "fatal": {
      "description": "Fatal startup errors.",
      "type": "array",
      "items": {
        "$ref": "#/$defs/FatalError"
      }
    },
    "authProviders": {
      "$ref": "#/$defs/AuthProviders",
      "description": "Status of configured vehicle authentication providers, keyed by provider name."
    },
    "version": {
      "description": "Running evcc version.",
      "type": "string"
    },
    "availableVersion": {
      "description": "Latest available evcc version.",
      "type": "string"
    },
    "system": {
      "description": "Operating system and architecture.",
      "type": "string"
    },
    "timezone": {
      "description": "Server time zone abbreviation and UTC offset.",
      "type": "string"
    },
    "battery": {
      "$ref": "#/$defs/Battery",
      "description": "Aggregated home battery state."
    },
    "batteryMode": {
      "$ref": "#/$defs/BatteryMode",
      "description": "Current operation mode of the home battery."
    },
    "grid": {
      "$ref": "#/$defs/Meter",
      "description": "Grid meter data."
    },
    "gridConfigured": {
      "description": "A grid meter is configured.",
      "type": "boolean"
    },
    "gridConnection": {
      "$ref": "#/$defs/GRID_CONNECTION",
      "description": "Grid connection, with or without neutral conductor."
    },
    "voltage": {
      "description": "Nominal grid voltage in V, line-to-line without neutral.",
      "type": "number"
    },
    "pv": {
      "description": "Solar meters. One entry per configured meter.",
      "type": "array",
      "items": {
        "$ref": "#/$defs/Meter"
      }
    },
    "pvPower": {
      "description": "Total solar power in W. Sum of all solar meters.",
      "type": "number"
    },
    "pvEnergy": {
      "description": "Total solar production in kWh.",
      "type": "number"
    },
    "aux": {
      "description": "Auxiliary consumption meters. Their power is treated as available for charging.",
      "type": "array",
      "items": {
        "$ref": "#/$defs/Meter"
      }
    },
    "auxPower": {
      "description": "Total power of all auxiliary meters in W.",
      "type": "number"
    },
    "ext": {
      "description": "Additional meters for monitoring purposes.",
      "type": "array",
      "items": {
        "$ref": "#/$defs/Meter"
      }
    },
    "consumers": {
      "description": "Consumption meters of individual devices for monitoring purposes.",
      "type": "array",
      "items": {
        "$ref": "#/$defs/Meter"
      }
    },
    "homePower": {
      "description": "Home consumption power in W.",
      "type": "number"
    },
    "residualPower": {
      "description": "Configured grid operating point in W. Positive values maintain grid import.",
      "type": "number"
    },
    "gridExportLimit": {
      "description": "Static grid export power limit in W used as optimizer constraint, 0 = disabled. An active HEMS curtailment takes precedence.",
      "type": "number"
    },
    "profilePercentile": {
      "description": "Percentile of the historic energy profiles used for demand prediction in %, e.g. 50 = median. Null uses the average.",
      "type": [
        "number",
        "null"
      ]
    },
    "greenShareHome": {
      "description": "Share of green energy in home consumption, between 0 and 1.",
      "type": "number"
    },
    "greenShareLoadpoints": {
      "description": "Share of green energy used for charging, between 0 and 1.",
      "type": "number"
    },
    "tariffs": {
      "$ref": "#/$defs/GenericConfigStatus",
      "description": "Configured tariffs. Structure depends on configuration."
    },
    "tariffGrid": {
      "description": "Current grid energy price per kWh in the configured currency.",
      "type": "number"
    },
    "tariffFeedIn": {
      "description": "Current grid export price per kWh in the configured currency.",
      "type": "number"
    },
    "tariffCo2": {
      "description": "Current grid CO₂ emissions in g/kWh.",
      "type": "number"
    },
    "tariffSolar": {
      "description": "Current cost of solar production per kWh in the configured currency.",
      "type": "number"
    },
    "tariffPriceHome": {
      "description": "Current energy price of home consumption per kWh, taking the green energy share into account.",
      "type": "number"
    },
    "tariffPriceLoadpoints": {
      "description": "Current energy price of charging per kWh, taking the green energy share into account.",
      "type": "number"
    },
    "tariffCo2Home": {
      "description": "Current CO₂ emissions of home consumption in g/kWh, taking the green energy share into account.",
      "type": "number"
    },
    "tariffCo2Loadpoints": {
      "description": "Current CO₂ emissions of charging in g/kWh, taking the green energy share into account.",
      "type": "number"
    },
    "tariffTemperature": {
      "description": "Current outside temperature in °C.",
      "type": "number"
    },
    "mqtt": {
      "$ref": "#/$defs/MqttConfig",
      "description": "MQTT integration configuration."
    },
    "influx": {
      "$ref": "#/$defs/InfluxConfig",
      "description": "InfluxDB integration configuration."
    },
    "network": {
      "$ref": "#/$defs/Network",
      "description": "Network configuration."
    },
    "hems": {
      "$ref": "#/$defs/Hems",
      "description": "Home energy management system integration."
    },
    "shm": {
      "$ref": "#/$defs/ShmConfig",
      "description": "SMA Home Manager configuration."
    },
    "sponsor": {
      "$ref": "#/$defs/Sponsor",
      "description": "Sponsorship status."
    },
    "eebus": {
      "$ref": "#/$defs/Eebus",
      "description": "EEBUS integration configuration and status."
    },
    "remote": {
      "$ref": "#/$defs/Remote",
      "description": "Remote access configuration and connection status."
    },
    "modbusproxy": {
      "description": "Modbus proxy configuration.",
      "type": [
        "array",
        "null"
      ],
      "items": {
        "$ref": "#/$defs/ModbusProxy"
      }
    },
    "messaging": {
      "$ref": "#/$defs/GenericConfigStatus",
      "description": "Messaging services configuration. Structure depends on configuration."
    },
    "messagingEvents": {
      "description": "Configured notification messages per event type.",
      "nullable": true,
      "allOf": [
        {
          "$ref": "#/$defs/MessagingEvents"
        }
      ]
    },
    "interval": {
      "description": "Update interval of the control loop in seconds.",
      "type": "number"
    },
    "circuits": {
      "description": "Load management circuits, keyed by circuit name.",
      "type": "object",
      "additionalProperties": {
        "$ref": "#/$defs/Circuit"
      }
    },
    "circuitsConfig": {
      "$ref": "#/$defs/GenericConfigStatus",
      "description": "Load management configuration."
    },
    "bufferSoc": {
      "description": "Battery buffer SoC in %. Energy above this level may be used for charging in smart mode.",
      "type": "number"
    },
    "prioritySoc": {
      "description": "Battery priority SoC in %. Home battery is charged first while below this level.",
      "type": "number"
    },
    "bufferStartSoc": {
      "description": "Battery buffer start SoC in %. Solar charging starts automatically above this level.",
      "type": "number"
    },
    "batteryDischargeControl": {
      "description": "Home battery discharge is prevented during fast charging and planned charging.",
      "type": "boolean"
    },
    "batteryGridDischarge": {
      "description": "Home battery is allowed to discharge to the grid (experimental).",
      "type": "boolean"
    },
    "solarAdjusted": {
      "description": "Solar forecast is adjusted to real production data (experimental).",
      "type": "boolean"
    },
    "batteryGridChargeLimit": {
      "description": "Price or emission limit for charging the home battery from grid.",
      "type": [
        "number",
        "null"
      ]
    },
    "batteryGridChargeActive": {
      "description": "Home battery is currently charged from grid.",
      "type": "boolean"
    },
    "batteryGridDischargeLimit": {
      "description": "Grid export price limit for discharging the home battery to the grid (experimental).",
      "type": [
        "number",
        "null"
      ]
    },
    "batteryGridDischargeActive": {
      "description": "Home battery is currently discharged to the grid.",
      "type": "boolean"
    },
    "smartCostAvailable": {
      "description": "A dynamic grid price or CO₂ forecast is configured.",
      "type": "boolean"
    },
    "smartCostType": {
      "$ref": "#/$defs/SmartCostType",
      "description": "Type of the smart charging limit, price based or emission based."
    },
    "smartFeedInPriorityAvailable": {
      "description": "A grid export tariff with forecast is configured.",
      "type": "boolean"
    },
    "historyUpdated": {
      "description": "Time of the last energy history update.",
      "type": "string",
      "format": "date-time"
    },
    "siteTitle": {
      "description": "Configured site title.",
      "type": "string"
    },
    "deviceColors": {
      "description": "Colors assigned to devices for consistent UI display.",
      "type": "array",
      "items": {
        "$ref": "#/$defs/DeviceColorEntry"
      }
    },
    "vehicles": {
      "description": "Configured vehicles, keyed by vehicle name.",
      "type": "object",
      "additionalProperties": {
        "$ref": "#/$defs/Vehicle"
      }
    },
    "statistics": {
      "$ref": "#/$defs/Statistics",
      "description": "Charging statistics over different time periods."
    },
    "authDisabled": {
      "description": "Authentication is disabled.",
      "type": "boolean"
    },
    "config": {
      "description": "Path of the evcc configuration file.",
      "type": "string"
    },
    "database": {
      "description": "Path of the evcc database.",
      "type": "string"
    },
    "ocpp": {
      "$ref": "#/$defs/Ocpp",
      "description": "OCPP server configuration and connected stations."
    },
    "ocppforwarder": {
      "$ref": "#/$defs/OcppForwarder",
      "description": "OCPP forwarder rules and upstream connection status."
    },
    "optimizer": {
      "description": "Battery optimizer is enabled.",
      "type": "boolean"
    },
    "optimizerAutomatic": {
      "$ref": "#/$defs/OptimizerAutomatic",
      "description": "What the optimizer controls instead of only advising: nothing, the home battery, or battery and loadpoints."
    },
    "optimizerChargingStrategy": {
      "description": "Selected battery optimizer charging strategy.",
      "type": "string"
    },
    "optimizerChargingStrategies": {
      "description": "Available battery optimizer charging strategies.",
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "mcp": {
      "description": "Built-in MCP server is enabled.",
      "type": "boolean"
    },
    "demoMode": {
      "description": "Instance runs in demo mode.",
      "type": "boolean"
    }
  },
  "required": [
    "loadpoints",
    "forecast",
    "vehicles"
  ],
  "$defs": {
    "AlwaysCharge": {
      "description": "Always charge state. Smart mode charges continuously at least at minimum power.",
      "type": "string",
      "enum": [
        "off",
        "on",
        "once"
      ]
    },
    "AuthProviders": {
      "description": "Status of configured vehicle authentication providers, keyed by provider name.",
      "type": "object",
      "additionalProperties": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "authenticated": {
            "type": "boolean"
          }
        },
        "required": [
          "id",
          "authenticated"
        ]
      }
    },
    "Battery": {
      "description": "Home battery state. Aggregated across all battery meters.",
      "type": "object",
      "properties": {
        "power": {
          "description": "Current battery power in W. Positive means discharging, negative means charging.",
          "type": "number"
        },
        "capacity": {
          "description": "Total battery capacity in kWh.",
          "type": "number"
        },
        "soc": {
          "description": "Charge level in %. Weighted by capacity across all batteries.",
          "type": "number"
        },
        "energy": {
          "description": "Total discharged energy in kWh.",
          "type": "number"
        },
        "returnEnergy": {
          "description": "Total charged energy in kWh.",
          "type": "number"
        },
        "devices": {
          "description": "Measurement data per battery meter.",
          "type": "array",
          "items": {
            "$ref": "#/$defs/BatteryMeter"
          }
        },
        "forecast": {
          "$ref": "#/$defs/BatteryForecast",
          "description": "Projected charge levels based on the solar and price forecast."
        }
      },
      "required": [
        "power",
        "capacity",
        "soc"
      ]
    },
    "BatteryForecast": {
      "description": "Projected home battery charge levels based on the solar and price forecast.",
      "type": "object",
      "properties": {
        "highest": {
          "$ref": "#/$defs/BatteryForecastPoint",
          "description": "Projected highest charge level."
        },
        "lowest": {
          "$ref": "#/$defs/BatteryForecastPoint",
          "description": "Projected lowest charge level."
        }
      }
    },
    "BatteryForecastPoint": {
      "description": "A projected home battery charge level at a point in time.",
      "type": "object",
      "properties": {
        "soc": {
          "description": "Projected charge level in %.",
          "type": "number"
        },
        "time": {
          "description": "Time of the projected charge level.",
          "type": "string",
          "format": "date-time"
        },
        "limit": {
          "description": "The projection hits the upper or lower battery limit.",
          "type": "boolean"
        }
      },
      "required": [
        "soc",
        "time"
      ]
    },
    "BatteryMeter": {
      "description": "Measurement data of a single home battery meter.",
      "type": "object",
      "properties": {
        "name": {
          "description": "Unique device name of the meter.",
          "type": "string"
        },
        "power": {
          "description": "Current power in W.",
          "type": "number"
        },
        "title": {
          "description": "Meter title for UI display.",
          "type": "string"
        },
        "icon": {
          "description": "Meter icon name for UI display.",
          "type": "string"
        },
        "energy": {
          "description": "Total energy in kWh.",
          "type": "number"
        },
        "returnEnergy": {
          "description": "Total exported energy in kWh.",
          "type": "number"
        },
        "powers": {
          "description": "Power per phase in W.",
          "type": "array",
          "items": {
            "type": "number"
          }
        },
        "currents": {
          "description": "Current per phase in A.",
          "type": "array",
          "items": {
            "type": "number"
          }
        },
        "soc": {
          "description": "Charge level in %.",
          "type": "number"
        },
        "controllable": {
          "description": "Battery supports external control of its operation mode.",
          "type": "boolean"
        },
        "modes": {
          "description": "Battery modes supported by the device.",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "capacity": {
          "description": "Battery capacity in kWh. Zero when not specified.",
          "type": "number"
        },
        "minSoc": {
          "description": "Minimum soc (reserve) in % as configured on the device.",
          "type": "number"
        },
        "maxSoc": {
          "description": "Maximum soc (charge limit) in % as configured on the device.",
          "type": "number"
        },
        "suggestion": {
          "$ref": "#/$defs/BatterySuggestion",
          "description": "Battery optimizer suggestion."
        }
      },
      "required": [
        "capacity",
        "controllable",
        "power",
        "soc"
      ]
    },
    "BatteryMode": {
      "description": "Battery operation mode.",
      "type": "string",
      "enum": [
        "unknown",
        "normal",
        "hold",
        "charge",
        "holdcharge",
        "discharge"
      ]
    },
    "BatterySuggestion": {
      "description": "Battery optimizer suggestion for a home battery.",
      "type": "object",
      "properties": {
        "action": {
          "description": "Suggested operation mode.",
          "type": "string",
          "enum": [
            "normal",
            "hold",
            "charge",
            "holdcharge",
            "discharge"
          ]
        },
        "charge": {
          "description": "Recommended charge power in W.",
          "type": "number"
        },
        "discharge": {
          "description": "Recommended discharge power in W.",
          "type": "number"
        },
        "grid": {
          "description": "Planned site grid flow of the slot in W, positive means import.",
          "type": "number"
        },
        "actionable": {
          "description": "Suggestion differs from the current operating mode.",
          "type": "boolean"
        }
      },
      "required": [
        "action"
      ]
    },
    "Certificate": {
      "description": "A TLS certificate key pair.",
      "type": "object",
      "properties": {
        "public": {
          "description": "Public certificate in PEM format.",
          "type": "string"
        },
        "private": {
          "description": "Private key in PEM format. Redacted.",
          "type": "string"
        }
      },
      "required": [
        "public",
        "private"
      ]
    },
    "ChargeMode": {
      "description": "Charging mode.",
      "type": "string",
      "enum": [
        "off",
        "smart",
        "now"
      ]
    },
    "ChargerStatusReason": {
      "description": "Reason why the charger is waiting.",
      "type": "string",
      "enum": [
        "unknown",
        "waitingforauthorization",
        "disconnectrequired"
      ]
    },
    "Circuit": {
      "description": "A load management circuit limiting power and current of its assigned loadpoints.",
      "type": "object",
      "properties": {
        "name": {
          "description": "Circuit name used as configuration reference.",
          "type": "string"
        },
        "title": {
          "description": "Circuit title for UI display.",
          "type": "string"
        },
        "icon": {
          "description": "Circuit icon name for UI display.",
          "type": "string"
        },
        "parent": {
          "description": "Name of the parent circuit.",
          "type": "string"
        },
        "power": {
          "description": "Current power in W.",
          "type": "number"
        },
        "current": {
          "description": "Current in A.",
          "type": "number"
        },
        "maxPower": {
          "description": "Maximum allowed power in W.",
          "type": "number"
        },
        "maxCurrent": {
          "description": "Maximum allowed current in A.",
          "type": "number"
        }
      },
      "required": [
        "power"
      ]
    },
    "Currency": {
      "description": "Currency in ISO 4217 format.",
      "type": "string",
      "enum": [
        "AUD",
        "BGN",
        "BRL",
        "CAD",
        "CHF",
        "CNY",
        "CZK",
        "EUR",
        "GBP",
        "HUF",
        "ILS",
        "JPY",
        "NZD",
        "NOK",
        "PLN",
        "RON",
        "USD",
        "DKK",
        "SEK",
        "ZAR",
        "TRY",
        "MYR",
        "THB",
        "BYN",
        "UAH",
        "RUB",
        "KZT"
      ]
    },
    "DeviceColorEntry": {
      "description": "Color assigned to a device for consistent UI display.",
      "type": "object",
      "properties": {
        "title": {
          "description": "Device title the color is assigned to.",
          "type": "string"
        },
        "color": {
          "description": "Assigned color as CSS value.",
          "type": "string"
        }
      },
      "required": [
        "title",
        "color"
      ]
    },
    "Eebus": {
      "description": "EEBUS integration configuration and status.",
      "type": "object",
      "properties": {
        "config": {
          "$ref": "#/$defs/EebusConfig",
          "description": "Static configuration."
        },
        "status": {
          "$ref": "#/$defs/EebusStatus",
          "description": "Runtime status."
        },
        "yamlSource": {
          "description": "Source of the configuration, evcc.yaml file or database.",
          "type": "string",
          "enum": [
            "file",
            "db"
          ]
        }
      }
    },
    "EebusConfig": {
      "description": "EEBUS integration configuration.",
      "type": "object",
      "properties": {
        "uri": {
          "description": "URI the EEBUS service listens on.",
          "type": "string"
        },
        "port": {
          "description": "Port the EEBUS service listens on.",
          "type": "number"
        },
        "shipid": {
          "description": "SHIP id.",
          "type": "string"
        },
        "interfaces": {
          "description": "Network interfaces the EEBUS service uses.",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "certificate": {
          "$ref": "#/$defs/Certificate",
          "description": "TLS certificate."
        }
      },
      "required": [
        "port",
        "shipid"
      ]
    },
    "EebusStatus": {
      "description": "EEBUS runtime status.",
      "type": "object",
      "properties": {
        "ski": {
          "description": "SKI (subject key identifier) used for pairing.",
          "type": "string"
        },
        "qr": {
          "description": "QR code payload for pairing.",
          "type": "string"
        }
      },
      "required": [
        "ski"
      ]
    },
    "EnergyByDay": {
      "description": "Expected solar production energy of a day.",
      "type": "object",
      "properties": {
        "energy": {
          "description": "Expected production energy in kWh.",
          "type": "number"
        },
        "complete": {
          "description": "Forecast data covers the whole day.",
          "type": "boolean"
        }
      },
      "required": [
        "energy",
        "complete"
      ]
    },
    "FatalError": {
      "description": "A fatal startup error.",
      "type": "object",
      "properties": {
        "error": {
          "description": "Error message.",
          "type": "string"
        },
        "class": {
          "description": "Device class the error originates from, like meter or charger.",
          "type": "string"
        },
        "device": {
          "description": "Name of the device that caused the error.",
          "type": "string"
        }
      },
      "required": [
        "error"
      ]
    },
    "Forecast": {
      "description": "Price, CO₂ and solar production forecasts.",
      "type": "object",
      "properties": {
        "grid": {
          "description": "Grid price forecast. Price per kWh in the configured currency per time slot.",
          "type": "array",
          "items": {
            "$ref": "#/$defs/ForecastSlot"
          }
        },
        "co2": {
          "description": "CO₂ emission forecast in g/kWh per time slot.",
          "type": "array",
          "items": {
            "$ref": "#/$defs/ForecastSlot"
          }
        },
        "solar": {
          "$ref": "#/$defs/SolarDetails",
          "description": "Solar production forecast."
        },
        "planner": {
          "description": "Charging cost forecast used by the plan optimizer per time slot.",
          "type": "array",
          "items": {
            "$ref": "#/$defs/ForecastSlot"
          }
        },
        "feedin": {
          "description": "Grid export price forecast. Price per kWh in the configured currency per time slot.",
          "type": "array",
          "items": {
            "$ref": "#/$defs/ForecastSlot"
          }
        },
        "temperature": {
          "description": "Temperature forecast in °C per time slot.",
          "type": "array",
          "items": {
            "$ref": "#/$defs/ForecastSlot"
          }
        }
      }
    },
    "ForecastSlot": {
      "description": "A forecast time slot as [start, end, value] array. Start and end are unix seconds. Value unit depends on the forecast type.",
      "type": "array",
      "items": {
        "type": "number"
      },
      "minItems": 3,
      "maxItems": 3
    },
    "GRID_CONNECTION": {
      "description": "Grid connection, with or without neutral conductor.",
      "type": "string",
      "enum": [
        "3p4w",
        "3p3w"
      ]
    },
    "GenericConfigStatus": {
      "description": "Configuration and runtime status of an integration. Structure depends on configuration.",
      "type": "object",
      "properties": {
        "config": {
          "description": "Static configuration."
        },
        "status": {
          "description": "Runtime status."
        },
        "yamlSource": {
          "description": "Source of the configuration, evcc.yaml file or database.",
          "type": "string",
          "enum": [
            "file",
            "db"
          ]
        }
      }
    },
    "Hems": {
      "description": "Home energy management system integration.",
      "type": "object",
      "properties": {
        "config": {
          "$ref": "#/$defs/HemsConfig",
          "description": "Static configuration."
        },
        "status": {
          "$ref": "#/$defs/HemsStatus",
          "description": "Runtime status."
        },
        "yamlSource": {
          "description": "Source of the configuration, evcc.yaml file or database.",
          "type": "string",
          "enum": [
            "file",
            "db"
          ]
        }
      }
    },
    "HemsConfig": {
      "description": "Home energy management system configuration.",
      "type": "object",
      "properties": {
        "configured": {
          "description": "A home energy management system is configured.",
          "type": "boolean"
        }
      },
      "required": [
        "configured"
      ]
    },
    "HemsStatus": {
      "description": "Current external limits imposed by the home energy management system.",
      "type": "object",
      "properties": {
        "dimmed": {
          "description": "Consumption is currently limited.",
          "type": "boolean"
        },
        "curtailed": {
          "description": "Allowed grid export in %. Values below 100 mean production is curtailed.",
          "type": "number"
        },
        "maxConsumptionPower": {
          "description": "Maximum allowed consumption power in W.",
          "type": "number"
        },
        "maxProductionPower": {
          "description": "Maximum allowed production power in W.",
          "type": "number"
        }
      }
    },
    "InfluxConfig": {
      "description": "InfluxDB integration configuration.",
      "type": "object",
      "properties": {
        "url": {
          "description": "InfluxDB server URL.",
          "type": "string"
        },
        "database": {
          "description": "Database name (InfluxDB 1.x) or bucket (InfluxDB 2.x).",
          "type": "string"
        },
        "org": {
          "description": "Organization (InfluxDB 2.x).",
          "type": "string"
        },
        "token": {
          "description": "Access token (InfluxDB 2.x). Redacted.",
          "type": "string"
        },
        "user": {
          "description": "Username (InfluxDB 1.x).",
          "type": "string"
        },
        "password": {
          "description": "Password (InfluxDB 1.x). Redacted.",
          "type": "string"
        },
        "insecure": {
          "description": "Skip TLS certificate verification.",
          "type": "boolean"
        }
      },
      "required": [
        "url",
        "database",
        "org"
      ]
    },
    "Loadpoint": {
      "description": "A charging location with a charger, an optional dedicated meter and an optional vehicle.",
      "type": "object",
      "properties": {
        "name": {
          "description": "Unique loadpoint identifier used in API routes and configuration.",
          "type": "string"
        },
        "alwaysCharge": {
          "$ref": "#/$defs/AlwaysCharge",
          "description": "Always charge state. Smart mode charges continuously at least at minimum power."
        },
        "batteryBoost": {
          "description": "Battery boost is active. When enabled, home battery power is used for fast charging.",
          "type": "boolean"
        },
        "chargeCurrents": {
          "description": "Charging current per phase in A.",
          "type": "array",
          "items": {
            "type": "number"
          }
        },
        "chargeDuration": {
          "description": "Duration of the current charging session in seconds.",
          "type": "number"
        },
        "chargePower": {
          "description": "Current charging power in W.",
          "type": "number"
        },
        "chargeRemainingDuration": {
          "description": "Estimated remaining charging time in seconds.",
          "type": "number"
        },
        "chargeRemainingEnergy": {
          "description": "Estimated remaining energy in kWh.",
          "type": "number"
        },
        "chargeTotalImport": {
          "description": "Total energy imported by the charge meter in kWh.",
          "type": "number"
        },
        "chargeVoltages": {
          "description": "Charging voltage per phase in V.",
          "type": "array",
          "items": {
            "type": "number"
          }
        },
        "chargedEnergy": {
          "description": "Energy charged in the current charging session in kWh.",
          "type": "number"
        },
        "chargerFeatureAutodetectDisabled": {
          "description": "The connected vehicle is not identified automatically by its status.",
          "type": "boolean"
        },
        "chargerFeatureAverage": {
          "description": "Values are averaged.",
          "type": "boolean"
        },
        "chargerFeatureCacheable": {
          "description": "Values are cached.",
          "type": "boolean"
        },
        "chargerFeatureClimaterDisabled": {
          "description": "The climater state of the connected vehicle is ignored for charge control.",
          "type": "boolean"
        },
        "chargerFeatureCoarseCurrent": {
          "description": "Charger only supports full ampere steps for current control.",
          "type": "boolean"
        },
        "chargerFeatureContinuous": {
          "description": "Charger is a heating device where disabled means normal operation.",
          "type": "boolean"
        },
        "chargerFeatureDemandTemperature": {
          "description": "Heating device demand forecast uses daily average profile scaled by outdoor temperature.",
          "type": "boolean"
        },
        "chargerFeatureDemandWeekday": {
          "description": "Heating device demand forecast uses same-weekday average over past 4 weeks.",
          "type": "boolean"
        },
        "chargerFeatureHeating": {
          "description": "Charger is a heating device. SoC values represent temperature in degrees.",
          "type": "boolean"
        },
        "chargerFeatureIntegratedDevice": {
          "description": "Charger is an always-connected device without vehicles and charging sessions, like a heat pump.",
          "type": "boolean"
        },
        "chargerFeatureOffline": {
          "description": "The connected vehicle only provides data while charging.",
          "type": "boolean"
        },
        "chargerFeatureRetryable": {
          "description": "Vehicle API calls are retried on failure.",
          "type": "boolean"
        },
        "chargerFeatureStreaming": {
          "description": "The connected vehicle pushes data updates instead of being polled.",
          "type": "boolean"
        },
        "chargerFeatureSwitchDevice": {
          "description": "Charger is a switchable device without current control, like a heat pump or switch socket.",
          "type": "boolean"
        },
        "chargerFeatureWakeUpDisabled": {
          "description": "No wake-up calls are sent to the connected vehicle.",
          "type": "boolean"
        },
        "chargerFeatureWelcomeCharge": {
          "description": "The connected vehicle may need a short welcome charge to start communicating.",
          "type": "boolean"
        },
        "chargerIcon": {
          "description": "Charger icon name for UI display.",
          "type": [
            "string",
            "null"
          ]
        },
        "chargerPhases1p3p": {
          "description": "Charger supports automatic switching between 1-phase and 3-phase charging.",
          "type": "boolean"
        },
        "chargerSinglePhase": {
          "description": "Charger is physically connected with a single phase.",
          "type": "boolean"
        },
        "chargerStatusReason": {
          "description": "Reason why the charger is waiting, like a pending authorization or a required disconnect.",
          "nullable": true,
          "allOf": [
            {
              "$ref": "#/$defs/ChargerStatusReason"
            }
          ]
        },
        "charging": {
          "description": "A vehicle is connected and charging.",
          "type": "boolean"
        },
        "connected": {
          "description": "A vehicle is connected to the charger.",
          "type": "boolean"
        },
        "connectedDuration": {
          "description": "Duration since the vehicle was connected, in seconds.",
          "type": "number"
        },
        "disabled": {
          "description": "Loadpoint is disabled via configuration.",
          "type": "boolean"
        },
        "disableDelay": {
          "description": "Delay before charging stops in smart mode, in seconds.",
          "type": "number"
        },
        "disableThreshold": {
          "description": "Grid draw power above which charging stops in smart mode, in W.",
          "type": "number"
        },
        "effectiveLimitSoc": {
          "description": "Currently applied SoC limit in %.",
          "type": "number"
        },
        "effectiveMaxCurrent": {
          "description": "Currently applied maximum charging current in A.",
          "type": "number"
        },
        "effectiveMinCurrent": {
          "description": "Currently applied minimum charging current in A.",
          "type": "number"
        },
        "effectiveMinSoc": {
          "description": "Currently applied minimum SoC in %.",
          "type": "number"
        },
        "effectivePlanId": {
          "description": "Id of the currently applied charging plan. Zero if no plan is active.",
          "type": "number"
        },
        "effectivePlanSoc": {
          "description": "SoC goal in % of the currently applied charging plan.",
          "type": "number"
        },
        "effectivePlanTime": {
          "description": "Target time of the currently applied charging plan.",
          "type": [
            "string",
            "null"
          ],
          "format": "date-time"
        },
        "effectivePlanStrategy": {
          "$ref": "#/$defs/PlanStrategy",
          "description": "Currently applied charging plan strategy."
        },
        "effectivePriority": {
          "description": "Currently applied priority.",
          "type": "number"
        },
        "enableDelay": {
          "description": "Delay before charging starts in smart mode, in seconds.",
          "type": "number"
        },
        "enableThreshold": {
          "description": "Available surplus power above which charging starts in smart mode, in W.",
          "type": "number"
        },
        "enabled": {
          "description": "Charger is currently allowed to charge.",
          "type": "boolean"
        },
        "limitEnergy": {
          "description": "Session energy limit in kWh. Zero means no limit.",
          "type": "number"
        },
        "limitSoc": {
          "description": "Session SoC limit in %. Zero means no limit.",
          "type": "number"
        },
        "maxCurrent": {
          "description": "Maximum charging current in A.",
          "type": "number"
        },
        "minCurrent": {
          "description": "Minimum charging current in A.",
          "type": "number"
        },
        "minSoc": {
          "description": "Minimum SoC in %. Vehicle is fast-charged until this level is reached.",
          "type": "number"
        },
        "minSocNotReached": {
          "description": "Vehicle SoC is below the configured minimum SoC.",
          "type": "boolean"
        },
        "mode": {
          "$ref": "#/$defs/ChargeMode",
          "description": "Charging behavior."
        },
        "offeredCurrent": {
          "description": "Current offered to the vehicle in A.",
          "type": "number"
        },
        "optimizerControlled": {
          "description": "Optimizer decides start/stop for this loadpoint, replacing the price limits.",
          "type": "boolean"
        },
        "phaseAction": {
          "$ref": "#/$defs/PhaseAction",
          "description": "Pending phase switching action in smart mode."
        },
        "phaseRemaining": {
          "description": "Remaining time until the pending phase switching action executes, in seconds.",
          "type": "number"
        },
        "phasesActive": {
          "description": "Number of phases expected to be used for charging.",
          "type": "number"
        },
        "phasesConfigured": {
          "description": "Configured phase mode. 0 is automatic switching, 1 and 3 select a fixed phase count.",
          "type": "number"
        },
        "plan": {
          "description": "Time slots of the current charging plan.",
          "type": [
            "array",
            "null"
          ],
          "items": {
            "$ref": "#/$defs/Rate"
          }
        },
        "planActive": {
          "description": "The current time slot is an active charging slot of the plan.",
          "type": "boolean"
        },
        "planEnergy": {
          "description": "Energy goal of the charging plan in kWh.",
          "type": "number"
        },
        "planOverrun": {
          "description": "Duration in seconds the charging plan is projected to miss its target time.",
          "type": "number"
        },
        "planStrategy": {
          "$ref": "#/$defs/PlanStrategy",
          "description": "Charging plan strategy."
        },
        "planProjectedEnd": {
          "description": "Projected end of the charging plan. End of the last planned slot.",
          "type": [
            "string",
            "null"
          ],
          "format": "date-time"
        },
        "planProjectedStart": {
          "description": "Projected start of the charging plan. Start of the earliest planned slot.",
          "type": [
            "string",
            "null"
          ],
          "format": "date-time"
        },
        "planTime": {
          "description": "Target time of the charging plan.",
          "type": [
            "string",
            "null"
          ],
          "format": "date-time"
        },
        "priority": {
          "description": "Priority for surplus distribution. Higher number means higher priority.",
          "type": "number"
        },
        "pvAction": {
          "$ref": "#/$defs/PvAction",
          "description": "Pending charge start or stop action in smart mode."
        },
        "pvRemaining": {
          "description": "Remaining time until the pending charge start or stop action executes, in seconds.",
          "type": "number"
        },
        "last24hEnergy": {
          "description": "Energy used in the last 24 hours in kWh.",
          "type": "number"
        },
        "last7dEnergy": {
          "description": "Energy used in the last 7 days in kWh.",
          "type": "number"
        },
        "sessionCo2PerKWh": {
          "description": "Average CO₂ emissions of the current charging session in g/kWh.",
          "type": [
            "number",
            "null"
          ]
        },
        "sessionEnergy": {
          "description": "Energy charged in the current charging session in kWh.",
          "type": "number"
        },
        "sessionPrice": {
          "description": "Total cost of the current charging session in the configured currency.",
          "type": [
            "number",
            "null"
          ]
        },
        "sessionPricePerKWh": {
          "description": "Average energy price of the current charging session per kWh in the configured currency.",
          "type": [
            "number",
            "null"
          ]
        },
        "sessionSolarPercentage": {
          "description": "Share of solar energy in the current charging session in %.",
          "type": "number"
        },
        "smartCostActive": {
          "description": "Fast charging with cheap or clean grid energy is currently active.",
          "type": "boolean"
        },
        "smartCostLimit": {
          "description": "Price or emission limit for fast charging with grid energy.",
          "type": [
            "number",
            "null"
          ]
        },
        "smartCostNextStart": {
          "description": "Start of the next fast charging period with cheap or clean grid energy.",
          "type": [
            "string",
            "null"
          ],
          "format": "date-time"
        },
        "smartFeedInPriorityActive": {
          "description": "Charging pause for prioritized feed-in is currently active.",
          "type": "boolean"
        },
        "smartFeedInPriorityLimit": {
          "description": "Feed-in rate limit above which charging is paused.",
          "type": [
            "number",
            "null"
          ]
        },
        "smartFeedInPriorityNextStart": {
          "description": "Start of the next charging pause for prioritized feed-in.",
          "type": [
            "string",
            "null"
          ],
          "format": "date-time"
        },
        "solarShare": {
          "description": "Required solar share. Usually 0 to 1; values outside that range are possible via API for special cases.",
          "type": "number"
        },
        "suggestion": {
          "description": "Charging suggestion from the battery optimizer.",
          "nullable": true,
          "allOf": [
            {
              "$ref": "#/$defs/LoadpointSuggestion"
            }
          ]
        },
        "title": {
          "description": "Loadpoint title for UI display.",
          "type": "string"
        },
        "todayEnergy": {
          "description": "Energy used since midnight in kWh.",
          "type": "number"
        },
        "vehicleClimaterActive": {
          "description": "Climater of the connected vehicle is active.",
          "type": [
            "boolean",
            "null"
          ]
        },
        "vehicleDetectionActive": {
          "description": "Automatic vehicle detection is running.",
          "type": "boolean"
        },
        "vehicleLimitSoc": {
          "description": "SoC limit configured in the vehicle itself, in %.",
          "type": "number"
        },
        "vehicleName": {
          "description": "Unique name of the connected vehicle. Empty for guest vehicles.",
          "type": "string"
        },
        "vehicleOdometer": {
          "description": "Odometer reading of the connected vehicle in km.",
          "type": "number"
        },
        "vehicleRange": {
          "description": "Range of the connected vehicle in km.",
          "type": "number"
        },
        "vehicleSoc": {
          "description": "Charge level of the connected vehicle in %. Temperature in degrees for heating devices.",
          "type": "number"
        },
        "vehicleTitle": {
          "description": "Title of the connected vehicle for UI display.",
          "type": "string"
        },
        "vehicleWelcomeActive": {
          "description": "A short welcome charge is active to enable vehicle communication.",
          "type": "boolean"
        },
        "batteryBoostLimit": {
          "description": "SoC limit for battery boost in %.",
          "type": "number"
        },
        "ui": {
          "$ref": "#/$defs/LoadpointUi",
          "description": "Display-only UI settings."
        }
      },
      "required": [
        "name",
        "alwaysCharge",
        "batteryBoost",
        "chargeDuration",
        "chargePower",
        "chargedEnergy",
        "chargerFeatureAutodetectDisabled",
        "chargerFeatureAverage",
        "chargerFeatureCacheable",
        "chargerFeatureClimaterDisabled",
        "chargerFeatureCoarseCurrent",
        "chargerFeatureContinuous",
        "chargerFeatureDemandTemperature",
        "chargerFeatureDemandWeekday",
        "chargerFeatureHeating",
        "chargerFeatureIntegratedDevice",
        "chargerFeatureOffline",
        "chargerFeatureRetryable",
        "chargerFeatureStreaming",
        "chargerFeatureSwitchDevice",
        "chargerFeatureWakeUpDisabled",
        "chargerFeatureWelcomeCharge",
        "chargerIcon",
        "chargerPhases1p3p",
        "chargerSinglePhase",
        "charging",
        "connected",
        "connectedDuration",
        "disableDelay",
        "disableThreshold",
        "effectiveLimitSoc",
        "effectiveMaxCurrent",
        "effectiveMinCurrent",
        "effectiveMinSoc",
        "effectivePlanId",
        "effectivePlanSoc",
        "effectivePlanTime",
        "effectivePlanStrategy",
        "effectivePriority",
        "enableDelay",
        "enableThreshold",
        "enabled",
        "limitEnergy",
        "limitSoc",
        "maxCurrent",
        "minCurrent",
        "minSoc",
        "minSocNotReached",
        "mode",
        "offeredCurrent",
        "optimizerControlled",
        "phaseAction",
        "phaseRemaining",
        "phasesActive",
        "phasesConfigured",
        "plan",
        "planActive",
        "planEnergy",
        "planOverrun",
        "planStrategy",
        "planProjectedEnd",
        "planProjectedStart",
        "planTime",
        "priority",
        "pvAction",
        "pvRemaining",
        "sessionCo2PerKWh",
        "sessionEnergy",
        "sessionPrice",
        "sessionPricePerKWh",
        "sessionSolarPercentage",
        "smartCostActive",
        "smartCostLimit",
        "smartCostNextStart",
        "smartFeedInPriorityActive",
        "smartFeedInPriorityLimit",
        "smartFeedInPriorityNextStart",
        "solarShare",
        "title",
        "vehicleClimaterActive",
        "vehicleDetectionActive",
        "vehicleLimitSoc",
        "vehicleName",
        "vehicleOdometer",
        "vehicleRange",
        "vehicleSoc",
        "vehicleTitle",
        "vehicleWelcomeActive",
        "batteryBoostLimit"
      ]
    },
    "LoadpointSuggestion": {
      "description": "Battery optimizer suggestion for a loadpoint.",
      "type": "object",
      "properties": {
        "action": {
          "description": "Suggested charging action.",
          "type": "string",
          "enum": [
            "charge",
            "stop"
          ]
        },
        "charge": {
          "description": "Recommended charge power in W.",
          "type": "number"
        },
        "discharge": {
          "description": "Recommended discharge power in W.",
          "type": "number"
        },
        "grid": {
          "description": "Planned site grid flow of the slot in W, positive means import.",
          "type": "number"
        },
        "battery": {
          "description": "Planned home battery discharge feeding the site in W.",
          "type": "number"
        },
        "actionable": {
          "description": "Suggestion differs from the current operating mode.",
          "type": "boolean"
        }
      },
      "required": [
        "action"
      ]
    },
    "LoadpointUi": {
      "description": "Display-only UI settings of a loadpoint.",
      "type": "object",
      "properties": {
        "minTemp": {
          "description": "Lower bound of the temperature scale for heating devices, in degrees.",
          "type": "number"
        },
        "maxTemp": {
          "description": "Upper bound of the temperature scale for heating devices, in degrees.",
          "type": "number"
        }
      },
      "required": [
        "minTemp",
        "maxTemp"
      ]
    },
    "MessagingEvent": {
      "description": "A configured notification message.",
      "type": "object",
      "properties": {
        "title": {
          "description": "Message title template.",
          "type": "string"
        },
        "msg": {
          "description": "Message body template.",
          "type": "string"
        },
        "disabled": {
          "description": "Notifications for this event are disabled.",
          "type": "boolean"
        }
      },
      "required": [
        "title",
        "msg",
        "disabled"
      ]
    },
    "MessagingEvents": {
      "description": "Configured notification messages, keyed by event type.",
      "type": "object",
      "properties": {
        "start": {
          "$ref": "#/$defs/MessagingEvent"
        },
        "stop": {
          "$ref": "#/$defs/MessagingEvent"
        },
        "connect": {
          "$ref": "#/$defs/MessagingEvent"
        },
        "disconnect": {
          "$ref": "#/$defs/MessagingEvent"
        },
        "soc": {
          "$ref": "#/$defs/MessagingEvent"
        },
        "guest": {
          "$ref": "#/$defs/MessagingEvent"
        },
        "asleep": {
          "$ref": "#/$defs/MessagingEvent"
        },
        "planoverrun": {
          "$ref": "#/$defs/MessagingEvent"
        },
        "suggestion": {
          "$ref": "#/$defs/MessagingEvent"
        }
      },
      "required": [
        "start",
        "stop",
        "connect",
        "disconnect",
        "soc",
        "guest",
        "asleep",
        "planoverrun",
        "suggestion"
      ],
      "additionalProperties": false
    },
    "Meter": {
      "description": "Measurement data of a single meter.",
      "type": "object",
      "properties": {
        "name": {
          "description": "Unique device name of the meter.",
          "type": "string"
        },
        "power": {
          "description": "Current power in W.",
          "type": "number"
        },
        "title": {
          "description": "Meter title for UI display.",
          "type": "string"
        },
        "icon": {
          "description": "Meter icon name for UI display.",
          "type": "string"
        },
        "energy": {
          "description": "Total energy in kWh.",
          "type": "number"
        },
        "returnEnergy": {
          "description": "Total exported energy in kWh.",
          "type": "number"
        },
        "powers": {
          "description": "Power per phase in W.",
          "type": "array",
          "items": {
            "type": "number"
          }
        },
        "currents": {
          "description": "Current per phase in A.",
          "type": "array",
          "items": {
            "type": "number"
          }
        }
      },
      "required": [
        "power"
      ]
    },
    "ModbusBaudrate": {
      "description": "Serial baud rate.",
      "type": "number",
      "enum": [
        1200,
        9600,
        19200,
        38400,
        57600,
        115200
      ]
    },
    "ModbusComset": {
      "description": "Serial communication parameters.",
      "type": "string",
      "enum": [
        "8N1",
        "8E1",
        "8N2"
      ]
    },
    "ModbusProxy": {
      "description": "A Modbus proxy forwarding requests to a physical device.",
      "type": "object",
      "properties": {
        "port": {
          "description": "Port the proxy listens on.",
          "type": "number"
        },
        "readonly": {
          "$ref": "#/$defs/ModbusProxyReadonly",
          "description": "How write requests are handled."
        },
        "settings": {
          "$ref": "#/$defs/ModbusProxySettings",
          "description": "Connection settings of the physical device."
        }
      },
      "required": [
        "port",
        "readonly",
        "settings"
      ]
    },
    "ModbusProxyReadonly": {
      "description": "How the Modbus proxy handles write requests.",
      "type": "string",
      "enum": [
        "false",
        "true",
        "deny"
      ]
    },
    "ModbusProxySettings": {
      "description": "Connection settings of a Modbus device.",
      "type": "object",
      "properties": {
        "uri": {
          "description": "Device address for TCP connections.",
          "type": "string"
        },
        "rtu": {
          "description": "Use RTU protocol over TCP.",
          "type": "boolean"
        },
        "device": {
          "description": "Serial device path.",
          "type": "string"
        },
        "baudrate": {
          "$ref": "#/$defs/ModbusBaudrate",
          "description": "Serial baud rate."
        },
        "comset": {
          "$ref": "#/$defs/ModbusComset",
          "description": "Serial communication parameters."
        }
      }
    },
    "MqttConfig": {
      "description": "MQTT integration configuration.",
      "type": "object",
      "properties": {
        "broker": {
          "description": "Broker address.",
          "type": "string"
        },
        "topic": {
          "description": "Root topic all values are published under.",
          "type": "string"
        },
        "user": {
          "description": "Broker username.",
          "type": "string"
        },
        "password": {
          "description": "Broker password. Redacted.",
          "type": "string"
        },
        "clientID": {
          "description": "MQTT client id.",
          "type": "string"
        },
        "insecure": {
          "description": "Skip TLS certificate verification.",
          "type": "boolean"
        },
        "caCert": {
          "description": "CA certificate for TLS connections.",
          "type": "string"
        },
        "clientCert": {
          "description": "Client certificate for TLS connections.",
          "type": "string"
        },
        "clientKey": {
          "description": "Client key for TLS connections.",
          "type": "string"
        }
      },
      "required": [
        "broker",
        "topic"
      ]
    },
    "Network": {
      "description": "Network configuration.",
      "type": "object",
      "properties": {
        "schema": {
          "description": "URL schema, http or https.",
          "type": "string"
        },
        "host": {
          "description": "Hostname.",
          "type": "string"
        },
        "port": {
          "description": "HTTP port.",
          "type": "number"
        },
        "externalUrl": {
          "description": "Externally reachable URL.",
          "type": "string"
        },
        "internalUrl": {
          "description": "URL in the local network.",
          "type": "string"
        }
      },
      "required": [
        "host",
        "port"
      ]
    },
    "Ocpp": {
      "description": "OCPP server configuration and status.",
      "type": "object",
      "properties": {
        "config": {
          "$ref": "#/$defs/OcppConfig",
          "description": "OCPP server configuration."
        },
        "status": {
          "$ref": "#/$defs/OcppStatus",
          "description": "OCPP server status."
        }
      },
      "required": [
        "config",
        "status"
      ]
    },
    "OcppConfig": {
      "description": "OCPP server configuration.",
      "type": "object",
      "properties": {
        "port": {
          "description": "Port the OCPP server listens on.",
          "type": "number"
        }
      },
      "required": [
        "port"
      ]
    },
    "OcppConnectionStatus": {
      "description": "Connection status of an OCPP station.",
      "type": "string",
      "enum": [
        "unknown",
        "configured",
        "connected"
      ]
    },
    "OcppForwarder": {
      "description": "OCPP forwarder rules and upstream connection status.",
      "type": "object",
      "properties": {
        "config": {
          "description": "Static configuration.",
          "type": "array",
          "items": {
            "$ref": "#/$defs/OcppForwarderRule"
          }
        },
        "status": {
          "description": "Runtime status.",
          "type": "array",
          "items": {
            "$ref": "#/$defs/OcppForwarderSession"
          }
        },
        "yamlSource": {
          "description": "Source of the configuration, evcc.yaml file or database.",
          "type": "string",
          "enum": [
            "file",
            "db"
          ]
        }
      }
    },
    "OcppForwarderRule": {
      "description": "A rule forwarding an OCPP station to an upstream backend.",
      "type": "object",
      "properties": {
        "stationId": {
          "description": "Station id to forward.",
          "type": "string"
        },
        "upstreamUrl": {
          "description": "URL of the upstream OCPP backend.",
          "type": "string"
        },
        "password": {
          "description": "Password for upstream authentication. Redacted.",
          "type": "string"
        },
        "upstreamStationId": {
          "description": "Station id used towards the upstream backend.",
          "type": "string"
        },
        "username": {
          "description": "Username for upstream authentication.",
          "type": "string"
        },
        "insecure": {
          "description": "Skip TLS certificate verification.",
          "type": "boolean"
        },
        "caCert": {
          "description": "CA certificate for TLS connections.",
          "type": "string"
        },
        "readOnly": {
          "description": "Only forward read operations to the station.",
          "type": "boolean"
        }
      },
      "required": [
        "stationId",
        "upstreamUrl"
      ]
    },
    "OcppForwarderSession": {
      "description": "Connection status of an OCPP forwarder rule.",
      "type": "object",
      "properties": {
        "chargerId": {
          "description": "Charger id.",
          "type": "string"
        },
        "upstreamUrl": {
          "description": "URL of the upstream OCPP backend.",
          "type": "string"
        },
        "upstreamConnected": {
          "description": "Connection to the upstream backend is established.",
          "type": "boolean"
        },
        "error": {
          "description": "Last connection error.",
          "type": "string"
        }
      },
      "required": [
        "chargerId",
        "upstreamUrl",
        "upstreamConnected"
      ]
    },
    "OcppStationStatus": {
      "description": "Connection status of an OCPP station.",
      "type": "object",
      "properties": {
        "id": {
          "description": "Station id.",
          "type": "string"
        },
        "status": {
          "$ref": "#/$defs/OcppConnectionStatus",
          "description": "Connection status."
        }
      },
      "required": [
        "id",
        "status"
      ]
    },
    "OcppStatus": {
      "description": "OCPP server status.",
      "type": "object",
      "properties": {
        "externalUrl": {
          "description": "Externally reachable URL of the OCPP server.",
          "type": "string"
        },
        "stations": {
          "description": "Connection status per configured station.",
          "type": "array",
          "items": {
            "$ref": "#/$defs/OcppStationStatus"
          }
        }
      },
      "required": [
        "stations"
      ]
    },
    "OnboardingItem": {
      "description": "Setup checklist item.",
      "type": "string",
      "enum": [
        "battery",
        "pv",
        "grid",
        "loadpoint",
        "heater",
        "consumer",
        "gridImport",
        "gridExport",
        "co2",
        "solar"
      ]
    },
    "OnboardingState": {
      "description": "Setup wizard and checklist state.",
      "type": "object",
      "properties": {
        "done": {
          "description": "Setup wizard was finished or skipped.",
          "type": "boolean"
        },
        "dismissed": {
          "description": "Dismissed setup checklist items.",
          "type": "array",
          "items": {
            "$ref": "#/$defs/OnboardingItem"
          }
        }
      },
      "required": [
        "done",
        "dismissed"
      ]
    },
    "OptimizerAutomatic": {
      "type": "string",
      "enum": [
        "off",
        "battery",
        "full"
      ]
    },
    "PhaseAction": {
      "description": "Pending phase switching action in smart mode.",
      "type": "string",
      "enum": [
        "inactive",
        "scale1p",
        "scale3p"
      ]
    },
    "PlanStrategy": {
      "description": "Charging plan strategy.",
      "type": "object",
      "properties": {
        "continuous": {
          "description": "Force continuous charging without gaps.",
          "type": "boolean"
        },
        "precondition": {
          "description": "Duration of uninterrupted charging directly before the target time, in seconds.",
          "type": "number"
        }
      },
      "required": [
        "continuous",
        "precondition"
      ]
    },
    "PvAction": {
      "description": "Pending charge start or stop action in smart mode.",
      "type": "string",
      "enum": [
        "inactive",
        "enable",
        "disable"
      ]
    },
    "Rate": {
      "description": "A time slot with an associated price or emission value.",
      "type": "object",
      "properties": {
        "start": {
          "description": "Start of the time slot.",
          "type": "string",
          "format": "date-time"
        },
        "end": {
          "description": "End of the time slot.",
          "type": "string",
          "format": "date-time"
        },
        "value": {
          "description": "Price per kWh in the configured currency or emissions in g/kWh.",
          "type": "number"
        }
      },
      "required": [
        "start",
        "end",
        "value"
      ]
    },
    "Remote": {
      "description": "Remote access configuration and connection status.",
      "type": "object",
      "properties": {
        "config": {
          "$ref": "#/$defs/RemoteConfig",
          "description": "Static configuration."
        },
        "status": {
          "$ref": "#/$defs/RemoteStatus",
          "description": "Runtime status."
        },
        "yamlSource": {
          "description": "Source of the configuration, evcc.yaml file or database.",
          "type": "string",
          "enum": [
            "file",
            "db"
          ]
        }
      }
    },
    "RemoteConfig": {
      "description": "Remote access configuration.",
      "type": "object",
      "properties": {
        "enabled": {
          "description": "Remote access is enabled.",
          "type": "boolean"
        }
      },
      "required": [
        "enabled"
      ]
    },
    "RemoteStatus": {
      "description": "Remote access connection status.",
      "type": "object",
      "properties": {
        "connected": {
          "description": "Connection to the remote access server is established.",
          "type": "boolean"
        },
        "url": {
          "description": "Remote access URL.",
          "type": "string"
        },
        "loginBlocked": {
          "description": "Remote login attempts are currently blocked by the rate limiter.",
          "type": "boolean"
        },
        "lastSeen": {
          "description": "Last remote activity per client, keyed by username. RFC3339 timestamps.",
          "type": "object",
          "additionalProperties": {
            "type": "string"
          }
        },
        "error": {
          "description": "Last connection error.",
          "type": "string"
        }
      },
      "required": [
        "connected",
        "loginBlocked"
      ]
    },
    "RepeatingPlan": {
      "description": "A repeating charging plan.",
      "type": "object",
      "properties": {
        "weekdays": {
          "description": "Weekdays the plan is active. 0 is Sunday, 6 is Saturday.",
          "type": "array",
          "items": {
            "type": "number"
          }
        },
        "time": {
          "description": "Target time in HH:MM format.",
          "type": "string"
        },
        "tz": {
          "description": "Time zone of the target time, like Europe/Berlin.",
          "type": "string"
        },
        "soc": {
          "description": "SoC goal in %.",
          "type": "number"
        },
        "active": {
          "description": "Plan is active.",
          "type": "boolean"
        }
      },
      "required": [
        "weekdays",
        "time",
        "tz",
        "soc",
        "active"
      ]
    },
    "ShmConfig": {
      "description": "SMA Home Manager configuration.",
      "type": "object",
      "properties": {
        "vendorId": {
          "description": "SMA vendor id.",
          "type": "string"
        },
        "deviceId": {
          "description": "SMA device id.",
          "type": "string"
        },
        "deviceSerial": {
          "description": "SMA device serial.",
          "type": "string"
        }
      },
      "required": [
        "vendorId",
        "deviceId"
      ]
    },
    "SmartCostType": {
      "description": "Type of the smart charging limit.",
      "type": "string",
      "enum": [
        "co2",
        "pricedynamic",
        "priceforecast",
        "pricestatic"
      ]
    },
    "SolarDetails": {
      "description": "Solar production forecast.",
      "type": "object",
      "properties": {
        "scale": {
          "description": "Correction factor applied to the forecast based on past production.",
          "type": "number"
        },
        "today": {
          "$ref": "#/$defs/EnergyByDay",
          "description": "Expected production today."
        },
        "tomorrow": {
          "$ref": "#/$defs/EnergyByDay",
          "description": "Expected production tomorrow."
        },
        "dayAfterTomorrow": {
          "$ref": "#/$defs/EnergyByDay",
          "description": "Expected production the day after tomorrow."
        },
        "timeseries": {
          "description": "Expected production power over time.",
          "type": "array",
          "items": {
            "$ref": "#/$defs/TimeseriesEntry"
          }
        }
      }
    },
    "Sponsor": {
      "description": "Sponsorship status.",
      "type": "object",
      "properties": {
        "config": {
          "description": "Static configuration."
        },
        "status": {
          "$ref": "#/$defs/SponsorStatus",
          "description": "Runtime status."
        },
        "yamlSource": {
          "description": "Source of the configuration, evcc.yaml file or database.",
          "type": "string",
          "enum": [
            "file",
            "db"
          ]
        }
      }
    },
    "SponsorStatus": {
      "description": "Sponsorship status.",
      "type": "object",
      "properties": {
        "name": {
          "description": "Name of the sponsor.",
          "type": "string"
        },
        "expiresAt": {
          "description": "Expiry time of the sponsor token.",
          "type": "string",
          "format": "date-time"
        },
        "expiresSoon": {
          "description": "Sponsor token expires soon.",
          "type": "boolean"
        },
        "token": {
          "description": "Sponsor token. Redacted.",
          "type": "string"
        },
        "hardware": {
          "description": "Hardware sponsorship.",
          "type": "boolean"
        }
      }
    },
    "StaticEnergyPlan": {
      "description": "Charging plan with an energy goal.",
      "type": "object",
      "properties": {
        "energy": {
          "description": "Energy goal in kWh.",
          "type": "number"
        },
        "time": {
          "description": "Target time.",
          "type": "string",
          "format": "date-time"
        }
      },
      "required": [
        "energy",
        "time"
      ]
    },
    "StaticPlan": {
      "description": "Charging plan with a fixed target time and a SoC or energy goal.",
      "anyOf": [
        {
          "$ref": "#/$defs/StaticSocPlan"
        },
        {
          "$ref": "#/$defs/StaticEnergyPlan"
        }
      ]
    },
    "StaticSocPlan": {
      "description": "Charging plan with a SoC goal.",
      "type": "object",
      "properties": {
        "soc": {
          "description": "SoC goal in %.",
          "type": "number"
        },
        "time": {
          "description": "Target time.",
          "type": "string",
          "format": "date-time"
        }
      },
      "required": [
        "soc",
        "time"
      ]
    },
    "Statistics": {
      "description": "Charging statistics, keyed by time period.",
      "type": "object",
      "properties": {
        "30d": {
          "$ref": "#/$defs/StatisticsData"
        },
        "365d": {
          "$ref": "#/$defs/StatisticsData"
        },
        "thisYear": {
          "$ref": "#/$defs/StatisticsData"
        },
        "total": {
          "$ref": "#/$defs/StatisticsData"
        }
      },
      "required": [
        "30d",
        "365d",
        "thisYear",
        "total"
      ]
    },
    "StatisticsData": {
      "description": "Aggregated charging statistics for a time period.",
      "type": "object",
      "properties": {
        "avgCo2": {
          "description": "Average CO₂ emissions in g/kWh.",
          "type": "number"
        },
        "avgPrice": {
          "description": "Average energy price per kWh in the configured currency.",
          "type": "number"
        },
        "chargedKWh": {
          "description": "Total charged energy in kWh.",
          "type": "number"
        },
        "solarPercentage": {
          "description": "Share of solar energy in %.",
          "type": "number"
        }
      },
      "required": [
        "avgCo2",
        "avgPrice",
        "chargedKWh",
        "solarPercentage"
      ]
    },
    "TimeseriesEntry": {
      "description": "A forecast value at a point in time as [ts, val] array. ts is unix seconds, val is power in W.",
      "type": "array",
      "items": {
        "type": "number"
      },
      "minItems": 2,
      "maxItems": 2
    },
    "Vehicle": {
      "description": "A configured vehicle.",
      "type": "object",
      "properties": {
        "name": {
          "description": "Unique vehicle name used in API routes and configuration.",
          "type": "string"
        },
        "mode": {
          "description": "Charge mode applied when the vehicle connects.",
          "anyOf": [
            {
              "$ref": "#/$defs/ChargeMode"
            },
            {
              "type": "string",
              "enum": [
                ""
              ]
            }
          ]
        },
        "alwaysCharge": {
          "description": "Always charge state applied when the vehicle connects.",
          "anyOf": [
            {
              "$ref": "#/$defs/AlwaysCharge"
            },
            {
              "type": "string",
              "enum": [
                ""
              ]
            }
          ]
        },
        "minSoc": {
          "description": "Minimum SoC in %. Vehicle is fast-charged until this level is reached.",
          "type": "number"
        },
        "limitSoc": {
          "description": "SoC limit in %. Charging stops when reached.",
          "type": "number"
        },
        "plan": {
          "$ref": "#/$defs/StaticPlan",
          "description": "Charging plan with a fixed target time and SoC or energy goal."
        },
        "repeatingPlans": {
          "description": "Repeating charging plans.",
          "type": [
            "array",
            "null"
          ],
          "items": {
            "$ref": "#/$defs/RepeatingPlan"
          }
        },
        "planStrategy": {
          "$ref": "#/$defs/PlanStrategy",
          "description": "Charging plan strategy."
        },
        "title": {
          "description": "Vehicle title for UI display.",
          "type": "string"
        },
        "features": {
          "description": "Feature flags of the vehicle implementation.",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "capacity": {
          "description": "Usable battery capacity in kWh.",
          "type": "number"
        },
        "icon": {
          "description": "Vehicle icon name for UI display.",
          "type": "string"
        }
      },
      "required": [
        "repeatingPlans",
        "planStrategy",
        "title"
      ]
    }
  }
}