Add Pico display rendering abstraction

This commit is contained in:
2026-06-03 02:49:22 -06:00
parent b5e8bf43fc
commit d2583baf5a
3 changed files with 138 additions and 0 deletions
+51
View File
@@ -0,0 +1,51 @@
class DashboardRenderer:
def __init__(self, display):
self.display = display
def render(self, view_model):
vm = view_model.as_dict()
self.display.clear()
top = vm["top_bar"]
self.display.text(0, 0, f'SOC {top["soc"]}')
self.display.text(120, 0, top["comms"])
self.display.text(260, 0, f'ALM {top["alarms"]}')
battery = vm["battery"]
self.display.text(0, 48, "Battery")
self.display.text(
0,
72,
f'{battery["voltage"]} {battery["current"]} {battery["runtime"]}',
)
fridge = vm["fridge"]
self.display.text(0, 128, "Fridge")
self.display.text(0, 152, f'Zone 1: {fridge["zone_1"]}')
self.display.text(0, 176, f'Zone 2: {fridge["zone_2"]}')
power = vm["power"]
self.display.text(0, 232, "Power")
self.display.text(
0,
256,
f'Starlink {power["starlink"]} Fridge {power["fridge"]}',
)
self.render_nav("dashboard")
def render_nav(self, active_screen):
labels = [
("dashboard", "Dash"),
("battery", "Bat"),
("temps", "Temps"),
("power", "Power"),
("system", "System"),
]
x = 0
for screen, label in labels:
text = f"[{label}]" if screen == active_screen else label
self.display.text(x, 440, text)
x += 64