| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- """
- Pydantic schemas for Device API (hardware devices).
- """
- from datetime import datetime
- from typing import Any
- from pydantic import BaseModel, Field
- class DeviceAuthRequest(BaseModel):
- """Device authentication request."""
- mac_address: str = Field(
- ...,
- description="MAC address of the device",
- pattern=r"^([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})$",
- )
- class DeviceAuthResponse(BaseModel):
- """Device authentication response."""
- access_token: str
- token_type: str = "bearer"
- device_id: int
- simple_id: int
- organization_id: int | None
- class DeviceConfigResponse(BaseModel):
- """Device configuration response."""
- device_id: int
- simple_id: int
- organization_id: int | None
- config: dict[str, Any]
- status: str
- class HeartbeatRequest(BaseModel):
- """Device heartbeat request."""
- status: str = Field(..., description="Device status: online, offline, error")
- metadata: dict[str, Any] | None = Field(
- None, description="Additional device metadata"
- )
- class HeartbeatResponse(BaseModel):
- """Device heartbeat response."""
- success: bool
- last_seen_at: datetime
- class DeviceEvent(BaseModel):
- """Single device event."""
- event_type: str = Field(
- ..., description="Event type: wifi_probe, ble_scan, etc."
- )
- timestamp: datetime
- data: dict[str, Any]
- class DeviceEventsRequest(BaseModel):
- """Batch device events request."""
- events: list[DeviceEvent] = Field(
- ..., description="List of events to process", max_length=1000
- )
- class DeviceEventsResponse(BaseModel):
- """Device events response."""
- success: bool
- processed: int
- failed: int = 0
- errors: list[str] | None = None
|