43 lines
1.3 KiB
Python
43 lines
1.3 KiB
Python
"""Configuration loaded from environment variables / .env."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from pydantic import Field
|
|
from pydantic_settings import BaseSettings, SettingsConfigDict
|
|
|
|
|
|
class Settings(BaseSettings):
|
|
"""Settings for the homey-mcp server.
|
|
|
|
Values are read from environment variables (prefix ``HOMEY_``) or a
|
|
local ``.env`` file.
|
|
"""
|
|
|
|
model_config = SettingsConfigDict(
|
|
env_prefix="HOMEY_",
|
|
env_file=".env",
|
|
env_file_encoding="utf-8",
|
|
extra="ignore",
|
|
)
|
|
|
|
host: str = Field(..., description="IP or hostname of the Homey Pro.")
|
|
token: str = Field(..., description="Personal Access Token (Bearer).")
|
|
scheme: str = Field("http", description="http or https.")
|
|
port: int | None = Field(
|
|
None,
|
|
description="Optional TCP port (e.g. 4859 when Homey runs in a container).",
|
|
)
|
|
timeout: float = Field(10.0, description="HTTP timeout in seconds.")
|
|
event_buffer: int = Field(200, description="Max realtime events to retain.")
|
|
realtime: bool = Field(True, description="Enable Socket.IO realtime events.")
|
|
|
|
@property
|
|
def base_url(self) -> str:
|
|
if self.port is None:
|
|
return f"{self.scheme}://{self.host}"
|
|
return f"{self.scheme}://{self.host}:{self.port}"
|
|
|
|
|
|
def load_settings() -> Settings:
|
|
return Settings() # type: ignore[call-arg]
|