Skip to content

Models

flow_it_api.models

Data models for the FlowIt VMC API.

Classes

AuthResponse

Bases: BaseModel

Authentication response with JWT token.

Source code in src/flow_it_api/models.py
class AuthResponse(BaseModel):
    """Authentication response with JWT token."""

    token: str
    user: str
    expires_in: int

CommandRequest

Bases: BaseModel

Request model for sending commands to the machine.

Source code in src/flow_it_api/models.py
class CommandRequest(BaseModel):
    """Request model for sending commands to the machine."""

    type_message: str = "set_parameters"
    speed: Speed
    flowIn: bool
    flowOut: bool

CommandResponse

Bases: BaseModel

Response from a command execution.

Source code in src/flow_it_api/models.py
class CommandResponse(BaseModel):
    """Response from a command execution."""

    status: str
    speed: Speed
    flowIn: bool
    flowOut: bool

FilterDetail

Bases: BaseModel

Detailed filter information.

Source code in src/flow_it_api/models.py
class FilterDetail(BaseModel):
    """Detailed filter information."""

    status: FilterStatus
    changed: int

MachineAlert

Bases: BaseModel

Machine alerts and diagnostic status.

Source code in src/flow_it_api/models.py
class MachineAlert(BaseModel):
    """Machine alerts and diagnostic status."""

    update_reboot: FlowItBool
    worries: FlowItBool
    ice: FlowItBool
    condensation: FlowItBool
    filterS: AlertFilterStatus
    filterI: AlertFilterStatus
    warmup: FlowItBool
    service: FlowItBool
    fault_code: str = Field(..., alias="fault-code")
    net_fault_code: str = Field(..., alias="net-fault-code")
    version: str

MachineData

Bases: BaseModel

Complete machine data container.

Source code in src/flow_it_api/models.py
class MachineData(BaseModel):
    """Complete machine data container."""

    event: str
    sensors: MachineSensors
    mode: MachineMode
    filter: MachineFilter
    alert: MachineAlert

MachineFilter

Bases: BaseModel

Machine filter status (HEPA and G4).

Source code in src/flow_it_api/models.py
class MachineFilter(BaseModel):
    """Machine filter status (HEPA and G4)."""

    hepa: FilterDetail
    g4: FilterDetail

MachineInfoResponse

Bases: BaseModel

Machine information response (version info).

Source code in src/flow_it_api/models.py
class MachineInfoResponse(BaseModel):
    """Machine information response (version info)."""

    model: str
    api_ver: str
    fw_ver: str
    hw_ver: str
    hostname: str

MachineMode

Bases: BaseModel

Machine operation mode and environmental data.

Source code in src/flow_it_api/models.py
class MachineMode(BaseModel):
    """Machine operation mode and environmental data."""

    speed: Speed
    autoSpeed: str
    flowIn: FlowItBool
    flowOut: FlowItBool
    bypassMode: BypassMode
    iaq: int
    temperatureIn: FlowItSensorValue
    temperatureOut: FlowItSensorValue
    humidityIn: FlowItSensorValue
    humidityOut: FlowItSensorValue
    pressureIn: FlowItSensorValue
    pressureOut: FlowItSensorValue
    bypassOn: FlowItBool = False

    @property
    def temperatureIn_celsius(self) -> float | None:
        """Return inflow temperature in Celsius."""
        if self.temperatureIn is None:
            return None
        return round(self.temperatureIn - 273.15, 2)

    @property
    def temperatureOut_celsius(self) -> float | None:
        """Return outflow temperature in Celsius."""
        if self.temperatureOut is None:
            return None
        return round(self.temperatureOut - 273.15, 2)
Attributes
temperatureIn_celsius property

Return inflow temperature in Celsius.

temperatureOut_celsius property

Return outflow temperature in Celsius.

MachineSensors

Bases: BaseModel

Collection of all machine sensors.

Source code in src/flow_it_api/models.py
class MachineSensors(BaseModel):
    """Collection of all machine sensors."""

    Sin: SensorReadings = Field(..., description="Inflow sensor before fan")
    Sout: SensorReadings = Field(..., description="Inflow sensor after fan")
    Iin: SensorReadings = Field(..., description="Extraction sensor before fan")
    Iout: SensorReadings = Field(..., description="Extraction sensor after fan")

MachineStatusResponse

Bases: BaseModel

Full machine status response from REST/WS.

Source code in src/flow_it_api/models.py
class MachineStatusResponse(BaseModel):
    """Full machine status response from REST/WS."""

    model_config = ConfigDict(populate_by_name=True)

    lastUpdate: int
    chrono_id: str
    status: FlowItBool
    name: str
    data: MachineData

SensorReadings

Bases: BaseModel

Raw sensor readings (pressure, temperature, humidity).

Source code in src/flow_it_api/models.py
class SensorReadings(BaseModel):
    """Raw sensor readings (pressure, temperature, humidity)."""

    pressure: FlowItSensorValue
    temperature: FlowItSensorValue
    humidity: FlowItSensorValue

    @property
    def temperature_celsius(self) -> float | None:
        """Return temperature in Celsius."""
        if self.temperature is None:
            return None
        return round(self.temperature - 273.15, 2)
Attributes
temperature_celsius property

Return temperature in Celsius.

Functions:

parse_bool(v)

Parse a value as a boolean.

Supports string values like "TRUE" and "FALSE".

Source code in src/flow_it_api/models.py
def parse_bool(v: Any) -> bool:
    """
    Parse a value as a boolean.

    Supports string values like "TRUE" and "FALSE".
    """
    if isinstance(v, str):
        if v.upper() == "TRUE":
            return True
        if v.upper() == "FALSE":
            return False
    return bool(v)

parse_sensor_value(v)

Parse sensor reading, returning None if 0.

Source code in src/flow_it_api/models.py
def parse_sensor_value(v: Any) -> float | None:
    """Parse sensor reading, returning None if 0."""
    try:
        val = float(v)
        if val == 0.0:
            return None
        return val
    except (TypeError, ValueError):
        return None