52 lines
1.4 KiB
Python
52 lines
1.4 KiB
Python
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
|