Skip to content

Types

Pydantic models for request payloads and API responses.

busylib.types

HttpAccessMode module-attribute

HttpAccessMode = Literal['disabled', 'enabled', 'key']

BusySnapshotVariant module-attribute

BusySnapshotVariant = Annotated[BusySnapshotNotStarted | BusySnapshotInfinite | BusySnapshotSimple | BusySnapshotInterval, Field(discriminator='type')]

BusyTimerSettings module-attribute

BusyTimerSettings = Annotated[BusyTimerInfiniteSettings | BusyTimerSimpleSettings | BusySnapshotIntervalSettings, Field(discriminator='type')]

BusyProfileSlot module-attribute

BusyProfileSlot = Literal['busy', 'custom']

StorageListElement module-attribute

StorageListElement = StorageFileElement | StorageDirElement

DisplayFontName module-attribute

DisplayFontName = Literal['tiny', 'small', 'normal', 'condensed', 'bold', 'large', 'extra_large', 'global']

DisplayElement module-attribute

DisplayElement = Annotated[TextElement | ImageElement | AnimationElement | CountdownElement | RectangleElement, Field(discriminator='type')]

BrightnessValue module-attribute

BrightnessValue = Annotated[int, Field(ge=0, le=100)] | Literal['auto']

BaseModel

Bases: BaseModel

Base response model with domain-level validation error wrapping.

Any pydantic validation failure is converted into a BusyBar-specific exception so callers can rely on a stable error hierarchy.

model_validate classmethod

model_validate(obj: Any, *, strict: bool | None = None, from_attributes: bool | None = None, context: Any | None = None, by_alias: bool | None = None, by_name: bool | None = None, extra: Any | None = None) -> Any

Validate input object and convert schema errors to domain exceptions.

StrEnum

Bases: str, Enum

Enum that serializes to its value.

This keeps JSON payloads aligned with API strings.

WifiState

Bases: StrEnum

UNKNOWN class-attribute instance-attribute

UNKNOWN = 'unknown'

DISCONNECTED class-attribute instance-attribute

DISCONNECTED = 'disconnected'

CONNECTED class-attribute instance-attribute

CONNECTED = 'connected'

CONNECTING class-attribute instance-attribute

CONNECTING = 'connecting'

DISCONNECTING class-attribute instance-attribute

DISCONNECTING = 'disconnecting'

RECONNECTING class-attribute instance-attribute

RECONNECTING = 'reconnecting'

WifiSecurityMethod

Bases: StrEnum

OPEN class-attribute instance-attribute

OPEN = 'Open'

WPA class-attribute instance-attribute

WPA = 'WPA'

WPA2 class-attribute instance-attribute

WPA2 = 'WPA2'

WEP class-attribute instance-attribute

WEP = 'WEP'

WPA_WPA2 class-attribute instance-attribute

WPA_WPA2 = 'WPA/WPA2'

WPA3 class-attribute instance-attribute

WPA3 = 'WPA3'

WPA2_WPA3 class-attribute instance-attribute

WPA2_WPA3 = 'WPA2/WPA3'

UNSUPPORTED class-attribute instance-attribute

UNSUPPORTED = 'Unsupported'

WifiIpMethod

Bases: StrEnum

DHCP class-attribute instance-attribute

DHCP = 'dhcp'

STATIC class-attribute instance-attribute

STATIC = 'static'

WifiIpType

Bases: StrEnum

IPV4 class-attribute instance-attribute

IPV4 = 'ipv4'

IPV6 class-attribute instance-attribute

IPV6 = 'ipv6'

PowerState

Bases: StrEnum

DISCHARGING class-attribute instance-attribute

DISCHARGING = 'discharging'

CHARGING class-attribute instance-attribute

CHARGING = 'charging'

CHARGED class-attribute instance-attribute

CHARGED = 'charged'

ElementType

Bases: StrEnum

FILE class-attribute instance-attribute

FILE = 'file'

DIR class-attribute instance-attribute

DIR = 'dir'

DisplayElementType

Bases: StrEnum

TEXT class-attribute instance-attribute

TEXT = 'text'

IMAGE class-attribute instance-attribute

IMAGE = 'image'

ANIMATION class-attribute instance-attribute

ANIMATION = 'animation'

COUNTDOWN class-attribute instance-attribute

COUNTDOWN = 'countdown'

RECTANGLE class-attribute instance-attribute

RECTANGLE = 'rectangle'

DisplayName

Bases: StrEnum

FRONT class-attribute instance-attribute

FRONT = 'front'

BACK class-attribute instance-attribute

BACK = 'back'

InputKey

Bases: StrEnum

UP class-attribute instance-attribute

UP = 'up'

DOWN class-attribute instance-attribute

DOWN = 'down'

OK class-attribute instance-attribute

OK = 'ok'

BACK class-attribute instance-attribute

BACK = 'back'

START class-attribute instance-attribute

START = 'start'

BUSY class-attribute instance-attribute

BUSY = 'busy'

CUSTOM class-attribute instance-attribute

CUSTOM = 'custom'

OFF class-attribute instance-attribute

OFF = 'off'

APPS class-attribute instance-attribute

APPS = 'apps'

SETTINGS class-attribute instance-attribute

SETTINGS = 'settings'

InputEventState

Bases: StrEnum

PRESS class-attribute instance-attribute

PRESS = 'press'

RELEASE class-attribute instance-attribute

RELEASE = 'release'

InputEvent

Bases: BaseModel

key instance-attribute

key: InputKey

state instance-attribute

state: InputEventState

timestamp_ms class-attribute instance-attribute

timestamp_ms: int | None = None

model_config class-attribute instance-attribute

model_config = ConfigDict(extra='ignore')

SuccessResponse

Bases: BaseModel

result instance-attribute

result: str

model_config class-attribute instance-attribute

model_config = ConfigDict(extra='ignore')

LogDumpResponse

Bases: SuccessResponse

Response for POST /api/log_dump.

model_config is inherited from SuccessResponse (extra="ignore").

path class-attribute instance-attribute

path: str | None = None

VersionInfo

Bases: BaseModel

api_semver class-attribute instance-attribute

api_semver: str | None = None

version class-attribute instance-attribute

version: str | None = None

branch class-attribute instance-attribute

branch: str | None = None

build_date class-attribute instance-attribute

build_date: datetime | None = None

commit_hash class-attribute instance-attribute

commit_hash: str | None = None

model_config class-attribute instance-attribute

model_config = ConfigDict(extra='ignore')

StatusDevice

Bases: BaseModel

serial_number class-attribute instance-attribute

serial_number: str | None = None

usb_mac class-attribute instance-attribute

usb_mac: str | None = None

wifi_mac class-attribute instance-attribute

wifi_mac: str | None = None

ble_mac class-attribute instance-attribute

ble_mac: str | None = None

otp_valid class-attribute instance-attribute

otp_valid: bool | None = None

otp_model class-attribute instance-attribute

otp_model: str | None = None

otp_timestamp class-attribute instance-attribute

otp_timestamp: int | None = None

firmware_security class-attribute instance-attribute

firmware_security: str | None = Field(default=None, description='Firmware security status: secure, insecure, other, or unknown.')

model_config class-attribute instance-attribute

model_config = ConfigDict(extra='ignore')

StatusFirmware

Bases: BaseModel

version class-attribute instance-attribute

version: str | None = None

target class-attribute instance-attribute

target: int | None = None

branch class-attribute instance-attribute

branch: str | None = None

build_date class-attribute instance-attribute

build_date: str | None = None

commit_hash class-attribute instance-attribute

commit_hash: str | None = None

intercom_version class-attribute instance-attribute

intercom_version: str | None = None

nwp_version class-attribute instance-attribute

nwp_version: str | None = None

matter_version class-attribute instance-attribute

matter_version: str | None = None

model_config class-attribute instance-attribute

model_config = ConfigDict(extra='ignore')

StatusSystem

Bases: BaseModel

api_semver class-attribute instance-attribute

api_semver: str | None = None

version class-attribute instance-attribute

version: str | None = None

uptime class-attribute instance-attribute

uptime: str | None = None

branch class-attribute instance-attribute

branch: str | None = None

build_date class-attribute instance-attribute

build_date: datetime | None = None

commit_hash class-attribute instance-attribute

commit_hash: str | None = None

boot_time class-attribute instance-attribute

boot_time: int | None = None

auto_update_enabled class-attribute instance-attribute

auto_update_enabled: bool | None = None

model_config class-attribute instance-attribute

model_config = ConfigDict(extra='ignore')

NetworkInterfaceInfo

Bases: BaseModel

type class-attribute instance-attribute

type: str | None = None

model_config class-attribute instance-attribute

model_config = ConfigDict(extra='ignore')

StatusPower

Bases: BaseModel

state class-attribute instance-attribute

state: PowerState | None = None

battery_charge class-attribute instance-attribute

battery_charge: int | None = Field(default=None, ge=0, le=100)

battery_voltage class-attribute instance-attribute

battery_voltage: int | None = None

battery_current class-attribute instance-attribute

battery_current: int | None = None

usb_voltage class-attribute instance-attribute

usb_voltage: int | None = None

model_config class-attribute instance-attribute

model_config = ConfigDict(extra='ignore')

Status

Bases: BaseModel

device class-attribute instance-attribute

device: StatusDevice | None = None

firmware class-attribute instance-attribute

firmware: StatusFirmware | None = None

system class-attribute instance-attribute

system: StatusSystem | None = None

power class-attribute instance-attribute

power: StatusPower | None = None

model_config class-attribute instance-attribute

model_config = ConfigDict(extra='ignore')

DeviceNameResponse

Bases: BaseModel

name class-attribute instance-attribute

name: str | None = None

device class-attribute instance-attribute

device: str | None = None

value class-attribute instance-attribute

value: str | None = None

model_config class-attribute instance-attribute

model_config = ConfigDict(extra='ignore')

DeviceNameUpdate

Bases: BaseModel

name class-attribute instance-attribute

name: str = Field(min_length=1)

model_config class-attribute instance-attribute

model_config = ConfigDict(extra='ignore')

DeviceTimeResponse

Bases: BaseModel

timestamp class-attribute instance-attribute

timestamp: str | None = None

model_config class-attribute instance-attribute

model_config = ConfigDict(extra='ignore')

TimezoneInfo

Bases: BaseModel

name instance-attribute

name: str

offset instance-attribute

offset: str

abbr instance-attribute

abbr: str

model_config class-attribute instance-attribute

model_config = ConfigDict(extra='ignore')

TimezoneListResponse

Bases: BaseModel

list instance-attribute

list: list[TimezoneInfo]

model_config class-attribute instance-attribute

model_config = ConfigDict(extra='ignore')

HttpAccessInfo

Bases: BaseModel

mode class-attribute instance-attribute

mode: HttpAccessMode | None = None

key_valid class-attribute instance-attribute

key_valid: bool | None = None

model_config class-attribute instance-attribute

model_config = ConfigDict(extra='ignore')

TimestampInfo

Bases: BaseModel

timestamp instance-attribute

timestamp: str

model_config class-attribute instance-attribute

model_config = ConfigDict(extra='ignore')

BusySnapshotNotStarted

Bases: BaseModel

type instance-attribute

type: Literal['NOT_STARTED']

model_config class-attribute instance-attribute

model_config = ConfigDict(extra='ignore')

BusySnapshotInfinite

Bases: BaseModel

type instance-attribute

type: Literal['INFINITE']

card_id instance-attribute

card_id: str

is_paused instance-attribute

is_paused: bool

model_config class-attribute instance-attribute

model_config = ConfigDict(extra='ignore')

BusySnapshotSimple

Bases: BaseModel

type instance-attribute

type: Literal['SIMPLE']

card_id instance-attribute

card_id: str

time_left_ms instance-attribute

time_left_ms: int

is_paused instance-attribute

is_paused: bool

model_config class-attribute instance-attribute

model_config = ConfigDict(extra='ignore')

BusySnapshotIntervalSettings

Bases: BaseModel

type instance-attribute

type: Literal['INTERVAL']

interval_work_ms instance-attribute

interval_work_ms: int

interval_rest_ms instance-attribute

interval_rest_ms: int

interval_work_cycles_count instance-attribute

interval_work_cycles_count: int

is_autostart_enabled instance-attribute

is_autostart_enabled: bool

model_config class-attribute instance-attribute

model_config = ConfigDict(extra='ignore')

BusySnapshotInterval

Bases: BaseModel

type instance-attribute

type: Literal['INTERVAL']

card_id instance-attribute

card_id: str

current_interval instance-attribute

current_interval: int

current_interval_time_total_ms instance-attribute

current_interval_time_total_ms: int

current_interval_time_left_ms instance-attribute

current_interval_time_left_ms: int

is_paused instance-attribute

is_paused: bool

interval_settings instance-attribute

interval_settings: BusySnapshotIntervalSettings

model_config class-attribute instance-attribute

model_config = ConfigDict(extra='ignore')

BusySnapshot

Bases: BaseModel

snapshot instance-attribute

snapshot: BusySnapshotVariant

snapshot_timestamp_ms instance-attribute

snapshot_timestamp_ms: int

model_config class-attribute instance-attribute

model_config = ConfigDict(extra='ignore')

BusyTimerInfiniteSettings

Bases: BaseModel

type instance-attribute

type: Literal['INFINITE']

model_config class-attribute instance-attribute

model_config = ConfigDict(extra='ignore')

BusyTimerSimpleSettings

Bases: BaseModel

type instance-attribute

type: Literal['SIMPLE']

total_time_ms instance-attribute

total_time_ms: int

model_config class-attribute instance-attribute

model_config = ConfigDict(extra='ignore')

BusyBarSettings

Bases: BaseModel

theme instance-attribute

theme: str

show_work_phase_only instance-attribute

show_work_phase_only: bool

trigger_smart_home instance-attribute

trigger_smart_home: bool

model_config class-attribute instance-attribute

model_config = ConfigDict(extra='ignore')

BusyProfile

Bases: BaseModel

sort_order instance-attribute

sort_order: int

title instance-attribute

title: str

id instance-attribute

id: str

timer_settings instance-attribute

timer_settings: BusyTimerSettings

busy_bar_settings instance-attribute

busy_bar_settings: BusyBarSettings

profile_timestamp_ms instance-attribute

profile_timestamp_ms: int

model_config class-attribute instance-attribute

model_config = ConfigDict(extra='ignore')

AccountInfo

Bases: BaseModel

linked class-attribute instance-attribute

linked: bool | None = None

id class-attribute instance-attribute

id: str | None = None

email class-attribute instance-attribute

email: str | None = None

user_id class-attribute instance-attribute

user_id: str | None = None

model_config class-attribute instance-attribute

model_config = ConfigDict(extra='ignore')

AccountState

Bases: BaseModel

status class-attribute instance-attribute

status: str | None = None

state class-attribute instance-attribute

state: str | None = Field(default=None, exclude=True)

model_config class-attribute instance-attribute

model_config = ConfigDict(extra='ignore')

AccountProfile

Bases: BaseModel

state class-attribute instance-attribute

state: Literal['dev', 'prod', 'local', 'custom'] | None = None

custom_url class-attribute instance-attribute

custom_url: str | None = None

model_config class-attribute instance-attribute

model_config = ConfigDict(extra='ignore')

AccountBackend

Bases: BaseModel

server_url instance-attribute

server_url: str

client_cert_type instance-attribute

client_cert_type: str

ignore_server_cert instance-attribute

ignore_server_cert: bool

model_config class-attribute instance-attribute

model_config = ConfigDict(extra='ignore')

Bases: BaseModel

code class-attribute instance-attribute

code: str | None = None

expires_at class-attribute instance-attribute

expires_at: int | None = None

model_config class-attribute instance-attribute

model_config = ConfigDict(extra='ignore')

UpdateInstallDownload

Bases: BaseModel

speed_bytes_per_sec class-attribute instance-attribute

speed_bytes_per_sec: int | None = None

received_bytes class-attribute instance-attribute

received_bytes: int | None = None

total_bytes class-attribute instance-attribute

total_bytes: int | None = None

model_config class-attribute instance-attribute

model_config = ConfigDict(extra='ignore')

UpdateInstallStatus

Bases: BaseModel

is_allowed class-attribute instance-attribute

is_allowed: bool | None = None

event class-attribute instance-attribute

event: str | None = None

action class-attribute instance-attribute

action: str | None = None

status class-attribute instance-attribute

status: str | None = None

detail class-attribute instance-attribute

detail: str | None = None

download class-attribute instance-attribute

download: UpdateInstallDownload | None = None

model_config class-attribute instance-attribute

model_config = ConfigDict(extra='ignore')

UpdateCheckStatus

Bases: BaseModel

available_version class-attribute instance-attribute

available_version: str | None = None

event class-attribute instance-attribute

event: str | None = None

status class-attribute instance-attribute

status: str | None = None

result class-attribute instance-attribute

result: str | None = Field(default=None, exclude=True)

model_config class-attribute instance-attribute

model_config = ConfigDict(extra='ignore')

UpdateStatus

Bases: BaseModel

install class-attribute instance-attribute

install: UpdateInstallStatus | None = None

check class-attribute instance-attribute

check: UpdateCheckStatus | None = None

model_config class-attribute instance-attribute

model_config = ConfigDict(extra='ignore')

UpdateChangelogResponse

Bases: BaseModel

changelog class-attribute instance-attribute

changelog: str | None = None

model_config class-attribute instance-attribute

model_config = ConfigDict(extra='ignore')

AutoupdateSettings

Bases: BaseModel

is_enabled class-attribute instance-attribute

is_enabled: bool | None = None

interval_start class-attribute instance-attribute

interval_start: str | None = None

interval_end class-attribute instance-attribute

interval_end: str | None = None

model_config class-attribute instance-attribute

model_config = ConfigDict(extra='ignore')

StorageFileElement

Bases: BaseModel

type class-attribute instance-attribute

type: Literal['file'] = 'file'

name instance-attribute

name: str

size class-attribute instance-attribute

size: int = Field(ge=0)

model_config class-attribute instance-attribute

model_config = ConfigDict(extra='ignore')

StorageDirElement

Bases: BaseModel

type class-attribute instance-attribute

type: Literal['dir'] = 'dir'

name instance-attribute

name: str

model_config class-attribute instance-attribute

model_config = ConfigDict(extra='ignore')

StorageList

Bases: BaseModel

list instance-attribute

list: list[StorageListElement]

model_config class-attribute instance-attribute

model_config = ConfigDict(extra='ignore')

StorageStatus

Bases: BaseModel

total class-attribute instance-attribute

total: int | None = Field(default=None, alias='total_bytes')

used class-attribute instance-attribute

used: int | None = Field(default=None, alias='used_bytes')

free class-attribute instance-attribute

free: int | None = Field(default=None, alias='free_bytes')

model_config class-attribute instance-attribute

model_config = ConfigDict(extra='ignore', populate_by_name=True)

DisplayElementBase

Bases: BaseModel

id instance-attribute

id: str

timeout class-attribute instance-attribute

timeout: int | None = Field(default=None, ge=0)

display_until class-attribute instance-attribute

display_until: str | None = None

x class-attribute instance-attribute

x: int = Field(default=0, ge=-4096, le=4095)

y class-attribute instance-attribute

y: int = Field(default=0, ge=-4096, le=4095)

display class-attribute instance-attribute

display: DisplayName | None = DisplayName.FRONT

align class-attribute instance-attribute

align: Literal['top_left', 'top_mid', 'top_right', 'mid_left', 'center', 'mid_right', 'bottom_left', 'bottom_mid', 'bottom_right'] | None = None

model_config class-attribute instance-attribute

model_config = ConfigDict(extra='allow')

TextElement

Bases: DisplayElementBase

type class-attribute instance-attribute

type: Literal['text'] = 'text'

text instance-attribute

text: str

font instance-attribute

font: DisplayFontName

color class-attribute instance-attribute

color: ColorInput | None = None

width class-attribute instance-attribute

width: int | None = Field(default=None, gt=0)

scroll_rate class-attribute instance-attribute

scroll_rate: int | None = Field(default=None, ge=0)

scroll_start_delay class-attribute instance-attribute

scroll_start_delay: int | None = Field(default=None, ge=0)

scroll_repeat_delay class-attribute instance-attribute

scroll_repeat_delay: int | None = Field(default=None, ge=0)

ImageElement

Bases: DisplayElementBase

type class-attribute instance-attribute

type: Literal['image'] = 'image'

path class-attribute instance-attribute

path: str | None = None

stock_path class-attribute instance-attribute

stock_path: str | None = None

opacity class-attribute instance-attribute

opacity: int = Field(default=100, ge=0, le=100)

AnimationElement

Bases: DisplayElementBase

type class-attribute instance-attribute

type: Literal['animation'] = 'animation'

path class-attribute instance-attribute

path: str | None = None

stock_path class-attribute instance-attribute

stock_path: str | None = None

loop class-attribute instance-attribute

loop: bool = False

await_previous_end class-attribute instance-attribute

await_previous_end: bool = False

section class-attribute instance-attribute

section: str | None = None

opacity class-attribute instance-attribute

opacity: int = Field(default=100, ge=0, le=100)

CountdownElement

Bases: DisplayElementBase

type class-attribute instance-attribute

type: Literal['countdown'] = 'countdown'

timestamp instance-attribute

timestamp: str

color class-attribute instance-attribute

color: ColorInput | None = None

direction instance-attribute

direction: Literal['time_left', 'time_since']

show_hours instance-attribute

show_hours: Literal['when_non_zero', 'always']

RectangleElement

Bases: DisplayElementBase

type class-attribute instance-attribute

type: Literal['rectangle'] = 'rectangle'

width class-attribute instance-attribute

width: int = Field(gt=0)

height class-attribute instance-attribute

height: int = Field(gt=0)

radius class-attribute instance-attribute

radius: int = Field(default=0, ge=0)

fill class-attribute instance-attribute

fill: Literal['none', 'solid', 'gradient_h', 'gradient_v'] = 'none'

fill_colors class-attribute instance-attribute

fill_colors: list[ColorInput] = Field(default_factory=lambda: ['#FFFFFFFF', '#00000000'], min_length=1, max_length=2)

border_width class-attribute instance-attribute

border_width: int = Field(default=1, ge=0)

border_color class-attribute instance-attribute

border_color: ColorInput = '#FFFFFFFF'

DisplayElements

Bases: BaseModel

application_name class-attribute instance-attribute

application_name: str = Field(min_length=1)

priority class-attribute instance-attribute

priority: int = Field(default=50, ge=1, le=100)

led_notification_color class-attribute instance-attribute

led_notification_color: ColorInput | None = None

elements class-attribute instance-attribute

elements: list[DisplayElement] = Field(min_length=1)

model_config class-attribute instance-attribute

model_config = ConfigDict(extra='ignore', populate_by_name=True)

DisplayBrightnessInfo

Bases: BaseModel

value class-attribute instance-attribute

value: str | None = None

front class-attribute instance-attribute

front: str | None = None

back class-attribute instance-attribute

back: str | None = None

model_config class-attribute instance-attribute

model_config = ConfigDict(extra='ignore')

DisplayBrightnessUpdate

Bases: BaseModel

value instance-attribute

value: BrightnessValue

model_config class-attribute instance-attribute

model_config = ConfigDict(extra='forbid')

AudioVolumeInfo

Bases: BaseModel

volume class-attribute instance-attribute

volume: float | None = Field(default=None, ge=0, le=100)

model_config class-attribute instance-attribute

model_config = ConfigDict(extra='ignore')

AudioVolumeUpdate

Bases: BaseModel

volume class-attribute instance-attribute

volume: int = Field(ge=0, le=100)

model_config class-attribute instance-attribute

model_config = ConfigDict(extra='forbid')

AudioPlayRequest

Bases: BaseModel

path class-attribute instance-attribute

path: str | None = Field(default=None, min_length=1)

stock_path class-attribute instance-attribute

stock_path: str | None = Field(default=None, min_length=1)

model_config class-attribute instance-attribute

model_config = ConfigDict(extra='forbid')

WifiIpConfig

Bases: BaseModel

ip_method class-attribute instance-attribute

ip_method: WifiIpMethod | None = None

ip_type class-attribute instance-attribute

ip_type: WifiIpType | None = None

address class-attribute instance-attribute

address: str | None = None

mask class-attribute instance-attribute

mask: str | None = None

gateway class-attribute instance-attribute

gateway: str | None = None

model_config class-attribute instance-attribute

model_config = ConfigDict(extra='ignore')

Network

Bases: BaseModel

ssid class-attribute instance-attribute

ssid: str | None = None

security class-attribute instance-attribute

security: WifiSecurityMethod | None = None

rssi class-attribute instance-attribute

rssi: int | None = None

model_config class-attribute instance-attribute

model_config = ConfigDict(extra='ignore')

StatusResponse

Bases: BaseModel

state class-attribute instance-attribute

state: WifiState | None = None

ssid class-attribute instance-attribute

ssid: str | None = None

bssid class-attribute instance-attribute

bssid: str | None = None

channel class-attribute instance-attribute

channel: int | None = None

rssi class-attribute instance-attribute

rssi: int | None = None

security class-attribute instance-attribute

security: WifiSecurityMethod | None = None

ip_config class-attribute instance-attribute

ip_config: WifiIpConfig | None = None

model_config class-attribute instance-attribute

model_config = ConfigDict(extra='ignore')

ConnectRequestConfig

Bases: BaseModel

ssid class-attribute instance-attribute

ssid: str = Field(min_length=1, max_length=32)

password class-attribute instance-attribute

password: str | None = Field(default=None, max_length=64)

security class-attribute instance-attribute

security: WifiSecurityMethod | None = None

ip_config class-attribute instance-attribute

ip_config: WifiIpConfig | None = None

model_config class-attribute instance-attribute

model_config = ConfigDict(extra='forbid')

NetworkResponse

Bases: BaseModel

count class-attribute instance-attribute

count: int | None = None

networks class-attribute instance-attribute

networks: list[Network] | None = None

model_config class-attribute instance-attribute

model_config = ConfigDict(extra='ignore')

ScreenResponse

Bases: BaseModel

data instance-attribute

data: str

model_config class-attribute instance-attribute

model_config = ConfigDict(extra='ignore')

BleStatus

Bases: BaseModel

status class-attribute instance-attribute

status: str | None = None

state class-attribute instance-attribute

state: str | None = Field(default=None, exclude=True)

address class-attribute instance-attribute

address: str | None = None

model_config class-attribute instance-attribute

model_config = ConfigDict(extra='ignore')

SmartHomePairingStatus

Bases: BaseModel

value class-attribute instance-attribute

value: str | None = None

timestamp class-attribute instance-attribute

timestamp: int | None = None

model_config class-attribute instance-attribute

model_config = ConfigDict(extra='ignore')

SmartHomePairingInfo

Bases: BaseModel

fabric_count class-attribute instance-attribute

fabric_count: int | None = None

latest_pairing_status class-attribute instance-attribute

latest_pairing_status: SmartHomePairingStatus | None = None

model_config class-attribute instance-attribute

model_config = ConfigDict(extra='ignore')

SmartHomePairingPayload

Bases: BaseModel

available_until class-attribute instance-attribute

available_until: str | None = None

qr_code class-attribute instance-attribute

qr_code: str | None = None

manual_code class-attribute instance-attribute

manual_code: str | None = None

model_config class-attribute instance-attribute

model_config = ConfigDict(extra='ignore')

SmartHomeSwitchState

Bases: BaseModel

state class-attribute instance-attribute

state: bool | None = None

startup class-attribute instance-attribute

startup: str | None = None

model_config class-attribute instance-attribute

model_config = ConfigDict(extra='ignore')

AccessToken

Bases: BaseModel

short_id instance-attribute

short_id: str

display_id instance-attribute

display_id: str

name instance-attribute

name: str

created_at instance-attribute

created_at: int

last_used_at instance-attribute

last_used_at: int

token class-attribute instance-attribute

token: str | None = None

model_config class-attribute instance-attribute

model_config = ConfigDict(extra='forbid')

AccessTokensInfo

Bases: BaseModel

tokens instance-attribute

tokens: list[AccessToken]

model_config class-attribute instance-attribute

model_config = ConfigDict(extra='ignore')

AccessTokenMintRequest

Bases: BaseModel

name instance-attribute

name: str

model_config class-attribute instance-attribute

model_config = ConfigDict(extra='ignore')

whole_volume

whole_volume(value: float) -> int

Round a volume to the whole number the device requires.

The OpenAPI document says number, but the device rejects a decimal point: ?volume=42 is accepted and ?volume=42.0 answers 400. Callers may still pass a float, so it is rounded here - half up, not with round, whose banker's rounding would send 42.5 as 42 and 55.5 as 56.