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
35 lines
679 B
Go
35 lines
679 B
Go
package cli
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"github.com/spf13/cobra"
|
|
)
|
|
|
|
func init() {
|
|
toggleCmd := &cobra.Command{
|
|
Use: "toggle <scenario>",
|
|
Short: "Toggle a scenario (gaming, cooking, ac-off)",
|
|
Args: cobra.ExactArgs(1),
|
|
RunE: func(cmd *cobra.Command, args []string) error {
|
|
p, err := getActiveProfile()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
name := args[0]
|
|
active, _ := db.GetActiveToggleNames(p.ID)
|
|
newState := !active[name]
|
|
if err := db.SetToggle(p.ID, name, newState); err != nil {
|
|
return err
|
|
}
|
|
state := "OFF"
|
|
if newState {
|
|
state = "ON"
|
|
}
|
|
fmt.Printf("Toggle %q: %s\n", name, state)
|
|
return nil
|
|
},
|
|
}
|
|
rootCmd.AddCommand(toggleCmd)
|
|
}
|