feat: Pydantic schemas and EMQX REST API client

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
walkpan
2026-03-29 21:32:45 +08:00
parent 455ed4ad5e
commit 79b2878b3d
3 changed files with 166 additions and 0 deletions

70
src/mqtt_home/schemas.py Normal file
View File

@@ -0,0 +1,70 @@
from datetime import datetime
from typing import Optional
from pydantic import BaseModel, Field
class DeviceCreate(BaseModel):
name: str
type: str = "switch"
protocol: str = "custom"
mqtt_topic: str
command_topic: Optional[str] = None
class DeviceUpdate(BaseModel):
name: Optional[str] = None
type: Optional[str] = None
command_topic: Optional[str] = None
class DeviceCommand(BaseModel):
payload: str
class DeviceResponse(BaseModel):
id: str
name: str
type: str
protocol: str
mqtt_topic: str
command_topic: Optional[str] = None
state: Optional[str] = None
is_online: bool
last_seen: Optional[datetime] = None
created_at: datetime
updated_at: datetime
model_config = {"from_attributes": True}
class DeviceLogResponse(BaseModel):
id: int
device_id: str
direction: str
topic: str
payload: str
timestamp: datetime
model_config = {"from_attributes": True}
class BrokerClient(BaseModel):
clientid: str
username: Optional[str] = None
ip_address: Optional[str] = None
connected: bool
keepalive: int
proto_ver: Optional[int] = None
clean_start: Optional[bool] = None
class BrokerTopic(BaseModel):
topic: str
node: Optional[str] = None
class DashboardStats(BaseModel):
total_devices: int
online_devices: int
offline_devices: int
recent_logs: list[DeviceLogResponse]