50 lines
1.4 KiB
Python
50 lines
1.4 KiB
Python
from datetime import datetime
|
|
|
|
from pydantic import BaseModel, ConfigDict, Field
|
|
|
|
|
|
class ScadaDeviceResponse(BaseModel):
|
|
"""Project SCADA metadata keyed by the canonical device identifier."""
|
|
|
|
device_id: str
|
|
device_type: str
|
|
node_id: str | None = None
|
|
link_id: str | None = None
|
|
api_query_id: str | None = None
|
|
measurement_unit: str
|
|
transmission_mode: str
|
|
transmission_frequency: str
|
|
reliability: int | None = None
|
|
x: float | None = None
|
|
y: float | None = None
|
|
longitude: float | None = None
|
|
latitude: float | None = None
|
|
|
|
|
|
class ScadaLatestReadingResponse(BaseModel):
|
|
"""Latest persisted observation for one project SCADA device."""
|
|
|
|
model_config = ConfigDict(extra="forbid", allow_inf_nan=False)
|
|
|
|
device_id: str
|
|
device_type: str
|
|
measurement_unit: str
|
|
transmission_mode: str
|
|
transmission_frequency: str
|
|
observed_at: datetime | None = None
|
|
monitored_value: float | None = None
|
|
cleaned_value: float | None = None
|
|
|
|
|
|
class ScadaLatestReadingsResponse(BaseModel):
|
|
"""Bounded device page with each device's latest persisted observation."""
|
|
|
|
model_config = ConfigDict(extra="forbid", allow_inf_nan=False)
|
|
|
|
items: list[ScadaLatestReadingResponse]
|
|
total: int = Field(ge=0)
|
|
limit: int = Field(ge=1, le=500)
|
|
offset: int = Field(ge=0)
|
|
observed_count: int = Field(ge=0)
|
|
latest_observed_at: datetime | None = None
|