Files

75 lines
2.4 KiB
Python

from .dashboard_view_model import format_value, format_bool
class BatteryViewModel:
def __init__(self, state):
self.state = state
def as_dict(self):
battery = self.state.battery
return {
"soc": format_value(battery.get("soc"), "%", decimals=0),
"voltage": format_value(battery.get("voltage"), "V", decimals=1),
"current": format_value(battery.get("current"), "A", decimals=1),
"remaining_ah": format_value(battery.get("remaining_ah"), "Ah", decimals=1),
"runtime_hours": format_value(battery.get("runtime_hours"), " hr", decimals=1),
"temperature_f": format_value(battery.get("temperature_f"), "°F", decimals=1),
}
class TempsViewModel:
SENSOR_LABELS = {
"fridge_zone_1": "Fridge Zone 1",
"fridge_zone_2": "Fridge Zone 2",
"rear_seat": "Rear Seat",
"outside": "Outside Air",
}
def __init__(self, state):
self.state = state
def as_list(self):
rows = []
for key, label in self.SENSOR_LABELS.items():
online = self.state.sensor_health.get(key, False)
temp = self.state.temps.get(key)
rows.append({
"key": key,
"label": label,
"temperature": format_value(temp, "°F", decimals=1),
"status": "OK" if online else "FAULT",
})
return rows
class PowerViewModel:
def __init__(self, state):
self.state = state
def as_dict(self):
return {
"starlink": format_bool(self.state.relays.get("starlink")),
"fridge": format_bool(self.state.relays.get("fridge")),
}
class SystemViewModel:
def __init__(self, state):
self.state = state
def as_dict(self):
sensor_count = sum(1 for online in self.state.sensor_health.values() if online)
total_sensors = len(self.state.sensor_health)
return {
"esp32": "Online" if self.state.network.get("uart_connected") else "Unknown",
"uart": "Connected" if self.state.network.get("uart_connected") else "Disconnected",
"wifi_api": "Available" if self.state.network.get("wifi_enabled") else "Unavailable",
"sensors": f"{sensor_count} / {total_sensors} OK",
"ignition": "On" if self.state.vehicle.get("ignition_on") else "Off",
}