mirror of
https://github.com/blakeblackshear/frigate.git
synced 2026-10-14 18:52:47 +03:00
CI / AMD64 Build (push) Canceled after 0s
CI / AMD64 Smoke Test (push) Canceled after 0s
CI / ARM Build (push) Canceled after 0s
CI / Jetson Jetpack 6 (push) Canceled after 0s
CI / AMD64 Extra Build (push) Canceled after 0s
CI / ARM Extra Build (push) Canceled after 0s
CI / Synaptics Build (push) Canceled after 0s
CI / Assemble and push default build (push) Canceled after 0s
go2rtc's create_config.py imported frigate.config.env, which ran the frigate.config package init and loaded every detector plugin. Since the onnxruntime 1.30 bump, importing onnxruntime takes about 5s on some hosts, so go2rtc started after Frigate's cameras and every ffmpeg process failed to connect to the restream until it came up. The env helpers now live in frigate.util.env, so go2rtc's config script no longer imports onnxruntime.
87 lines
2.9 KiB
Python
87 lines
2.9 KiB
Python
from typing import Self
|
|
|
|
from pydantic import Field, ValidationInfo, model_validator
|
|
|
|
from frigate.const import FREQUENCY_STATS_POINTS
|
|
from frigate.util.env import EnvString
|
|
|
|
from .base import FrigateBaseModel
|
|
|
|
__all__ = ["MqttConfig"]
|
|
|
|
|
|
class MqttConfig(FrigateBaseModel):
|
|
enabled: bool = Field(
|
|
default=True,
|
|
title="Enable MQTT",
|
|
description="Enable or disable MQTT integration for state, events, and snapshots.",
|
|
)
|
|
host: EnvString = Field(
|
|
default="",
|
|
title="MQTT host",
|
|
description="Hostname or IP address of the MQTT broker.",
|
|
)
|
|
port: int = Field(
|
|
default=1883,
|
|
title="MQTT port",
|
|
description="Port of the MQTT broker (usually 1883 for plain MQTT).",
|
|
)
|
|
topic_prefix: str = Field(
|
|
default="frigate",
|
|
title="Topic prefix",
|
|
description="MQTT topic prefix for all Frigate topics; must be unique if running multiple instances.",
|
|
)
|
|
client_id: str = Field(
|
|
default="frigate",
|
|
title="Client ID",
|
|
description="Client identifier used when connecting to the MQTT broker; should be unique per instance.",
|
|
)
|
|
stats_interval: int = Field(
|
|
default=60,
|
|
ge=FREQUENCY_STATS_POINTS,
|
|
title="Stats interval",
|
|
description="Interval in seconds for publishing system and camera stats to MQTT.",
|
|
)
|
|
user: EnvString | None = Field(
|
|
default=None,
|
|
title="MQTT username",
|
|
description="Optional MQTT username; can be provided via environment variables or secrets.",
|
|
)
|
|
password: EnvString | None = Field(
|
|
default=None,
|
|
title="MQTT password",
|
|
description="Optional MQTT password; can be provided via environment variables or secrets.",
|
|
validate_default=True,
|
|
)
|
|
tls_ca_certs: str | None = Field(
|
|
default=None,
|
|
title="TLS CA certs",
|
|
description="Path to CA certificate for TLS connections to the broker (for self-signed certs).",
|
|
)
|
|
tls_client_cert: str | None = Field(
|
|
default=None,
|
|
title="Client cert",
|
|
description="Client certificate path for TLS mutual authentication; do not set user/password when using client certs.",
|
|
)
|
|
tls_client_key: str | None = Field(
|
|
default=None,
|
|
title="Client key",
|
|
description="Private key path for the client certificate.",
|
|
)
|
|
tls_insecure: bool | None = Field(
|
|
default=None,
|
|
title="TLS insecure",
|
|
description="Allow insecure TLS connections by skipping hostname verification (not recommended).",
|
|
)
|
|
qos: int = Field(
|
|
default=0,
|
|
title="MQTT QoS",
|
|
description="Quality of Service level for MQTT publishes/subscriptions (0, 1, or 2).",
|
|
)
|
|
|
|
@model_validator(mode="after")
|
|
def user_requires_pass(self, info: ValidationInfo) -> Self:
|
|
if (self.user is None) != (self.password is None):
|
|
raise ValueError("Password must be provided with username.")
|
|
return self
|