Add Pico detail screen view models
This commit is contained in:
@@ -0,0 +1,74 @@
|
||||
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",
|
||||
}
|
||||
Reference in New Issue
Block a user