Skip to content

Commit 578b323

Browse files
committed
dashboard: show pin indicators and update them with htmx
1 parent 59fddb4 commit 578b323

File tree

3 files changed

+40
-0
lines changed

3 files changed

+40
-0
lines changed

data/index.html

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,24 @@ <h1>ESP Solar Boy</h1>
1616
<a href="/update">Firmware</a>
1717
</nav>
1818
<h2>Dashboard</h2>
19+
<div class="pins">
20+
<div id="pin0">
21+
<span>Pin 0</span>
22+
<div class="pin-indicator"
23+
hx-get="/data/pin0indicator"
24+
hx-trigger="load, every 10s"
25+
hx-swap="outerHTML">
26+
</div>
27+
</div>
28+
<div id="pin1">
29+
<span>Pin 1</span>
30+
<div class="pin-indicator"></div>
31+
</div>
32+
<div id="pin2">
33+
<span>Pin 2</span>
34+
<div class="pin-indicator"></div>
35+
</div>
36+
</div>
1937
<p>Battery: <span id="battery" hx-get="/data/battery" hx-trigger="load, every 10s" hx-swap="innerHTML">...</span> %</p>
2038
<p>Battery charge rate: <span id="battery-charge-rate" hx-get="/data/batteryChargeRate" hx-trigger="load, every 10s" hx-swap="innerHTML">...</span> W</p>
2139
<p>Plant power: <span id="plant-power" hx-get="/data/plantPower" hx-trigger="load, every 10s" hx-swap="innerHTML">...</span> W</p>

data/style.css

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,3 +28,16 @@ input[type="checkbox"] {
2828
width: auto;
2929
margin-left: 6px;
3030
}
31+
.pins {
32+
display: flex;
33+
column-gap: 20px;
34+
}
35+
.pin-indicator {
36+
width: 23px;
37+
height: 23px;
38+
border-radius: 50px;
39+
background-color: gray;
40+
}
41+
.pin-active {
42+
background-color: seagreen;
43+
}

src/main.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -169,6 +169,14 @@ void handlePostSettings() {
169169

170170
void handleNotFound() { httpServer.send(404, "text/html", "<h1>404: Not found</h1>"); }
171171

172+
void handlePin0Indicator() {
173+
String pinIndicator = is_pin0_on
174+
? R"(<div class="pin-indicator pin-active" hx-get="/data/pin0indicator" hx-trigger="load, every 10s" hx-swap="outerHTML"></div>)"
175+
: R"(<div class="pin-indicator" hx-get="/data/pin0indicator" hx-trigger="load, every 10s" hx-swap="outerHTML"></div>)";
176+
177+
httpServer.send(200, "text/html", pinIndicator);
178+
}
179+
172180
bool switch_pin(uint8_t pin) {
173181
bool is_on;
174182
auto min_battery = *std::min_element(battery_charge_history.begin(), battery_charge_history.end());
@@ -247,6 +255,7 @@ void setup() {
247255
httpServer.on("/data/plantPower", HTTP_GET, handlePlantPower);
248256
httpServer.on("/data/powerMeterActivePower", HTTP_GET, handlePowerMeterActivePower);
249257
httpServer.on("/data/firmwareVersion", HTTP_GET, handleFirmwareVersion);
258+
httpServer.on("/data/pin0indicator", HTTP_GET, handlePin0Indicator);
250259
httpServer.on("/settings", HTTP_GET, handleSettings);
251260
httpServer.on("/settings", HTTP_POST, handlePostSettings);
252261
httpServer.onNotFound(handleNotFound);

0 commit comments

Comments
 (0)