2025-11-18 13:06:15 +02:00
|
|
|
import json
|
2025-12-15 09:32:35 +02:00
|
|
|
import os
|
2025-11-18 12:51:30 +02:00
|
|
|
import panel
|
2025-11-18 20:40:56 +02:00
|
|
|
from typing import Any
|
2025-11-18 12:51:30 +02:00
|
|
|
|
|
|
|
|
from watt42_viewlib import attach_w42_state
|
|
|
|
|
|
2025-12-15 09:32:35 +02:00
|
|
|
panel.extension('echarts', 'ace', 'jsoneditor')
|
2025-11-18 12:51:30 +02:00
|
|
|
|
2025-12-15 09:32:35 +02:00
|
|
|
SYSTEM_ID = os.environ.get("WATT42_SYSTEM_ID", "invalid-system-id")
|
|
|
|
|
API_TOKEN = os.environ.get("WATT42_API_TOKEN", "invalid-api-token")
|
2025-11-18 20:40:56 +02:00
|
|
|
|
2025-12-15 09:32:35 +02:00
|
|
|
w42_state = panel.rx(None)
|
2025-11-18 20:40:56 +02:00
|
|
|
|
2025-12-15 09:32:35 +02:00
|
|
|
attach_w42_state(rx_var=w42_state, system_id=SYSTEM_ID, token=API_TOKEN)
|
2025-11-18 20:40:56 +02:00
|
|
|
|
2025-12-15 09:32:35 +02:00
|
|
|
def state_to_text(state: dict[str, Any]) -> str:
|
2025-12-19 15:39:23 +02:00
|
|
|
return f"Watt42 State:\n\n```\n{json.dumps(state, indent=2)}\n```\n\nReplace this with some awesome visuals"
|
2025-11-18 20:40:56 +02:00
|
|
|
|
2025-12-15 09:32:35 +02:00
|
|
|
state_as_text = panel.bind(state_to_text, w42_state)
|
2025-11-18 20:40:56 +02:00
|
|
|
|
2025-12-15 09:32:35 +02:00
|
|
|
state_pane = panel.pane.Markdown(state_as_text, sizing_mode='stretch_width')
|
2025-11-18 20:40:56 +02:00
|
|
|
|
2025-12-15 09:32:35 +02:00
|
|
|
sidebar_content = """
|
|
|
|
|
This example shows how to build a front end for a Watt42 system: Watt42 API
|
|
|
|
|
manages the state of the system, this app visualizes it.
|
2025-11-18 20:40:56 +02:00
|
|
|
|
2025-12-15 09:32:35 +02:00
|
|
|
Find instructions on [how to use this example
|
|
|
|
|
here](https://source.c3.uber5.com/watt42-public/watt42_viewlib/src/branch/main/README.md#how-to-use).
|
2025-11-18 20:40:56 +02:00
|
|
|
|
2025-12-15 09:32:35 +02:00
|
|
|
"""
|
2025-11-18 20:40:56 +02:00
|
|
|
|
2025-11-18 12:51:30 +02:00
|
|
|
_ = panel.template.FastListTemplate(
|
2025-12-19 15:39:23 +02:00
|
|
|
title="Sample Watt42 App",
|
2025-12-15 09:32:35 +02:00
|
|
|
sidebar=[panel.pane.Markdown(sidebar_content, sizing_mode='stretch_width')],
|
2025-11-18 20:40:56 +02:00
|
|
|
main=[
|
2025-12-15 09:32:35 +02:00
|
|
|
state_pane,
|
|
|
|
|
w42_state,
|
2025-11-18 20:40:56 +02:00
|
|
|
],
|
2025-11-18 12:51:30 +02:00
|
|
|
).servable()
|