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", }