Add Pico display rendering abstraction
This commit is contained in:
@@ -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
|
||||
Reference in New Issue
Block a user