Add server-side rendered setup UI accessible via `heatwave web`. The dashboard is now re-rendered per request and includes a nav bar linking to the new /setup page. Setup provides full CRUD for profiles, rooms, devices, occupants, AC units (with room assignment), scenario toggles, and forecast fetching — all via POST/redirect/GET forms. - Add ShowNav field to DashboardData for conditional nav bar - Extract fetchForecastForProfile() for reuse by web handler - Create setup.html.tmpl with Tailwind-styled entity sections - Create web_handlers.go with 15 route handlers and flash cookies - Switch web.go from pre-rendered to per-request dashboard rendering - Graceful dashboard fallback when no forecast data exists
15 lines
303 B
Go
15 lines
303 B
Go
package heat
|
|
|
|
// 1 Watt = 3.41214 BTU/h
|
|
const wattToBTUH = 3.41214
|
|
|
|
// WattsToBTUH converts watts to BTU per hour.
|
|
func WattsToBTUH(watts float64) float64 {
|
|
return watts * wattToBTUH
|
|
}
|
|
|
|
// BTUHToWatts converts BTU per hour to watts.
|
|
func BTUHToWatts(btuh float64) float64 {
|
|
return btuh / wattToBTUH
|
|
}
|