diff options
| author | Sam Anthony <sam@samanthony.xyz> | 2024-11-26 12:12:43 -0500 |
|---|---|---|
| committer | Sam Anthony <sam@samanthony.xyz> | 2024-11-26 12:12:43 -0500 |
| commit | 25ca0eaea3f8c83d2a209a4790b27b712bcba09c (patch) | |
| tree | 729b80155e5c953518709add004bde7660ebfadf | |
| parent | ea85258e026265656bdad9fb45d263d9f5e3e05d (diff) | |
| download | soen422-25ca0eaea3f8c83d2a209a4790b27b712bcba09c.zip | |
server: display target humidity
| -rw-r--r-- | server/dashboard.go | 11 | ||||
| -rw-r--r-- | server/dashboard.html | 3 | ||||
| -rw-r--r-- | server/server.go | 13 | ||||
| -rw-r--r-- | server/target.go | 19 |
4 files changed, 29 insertions, 17 deletions
diff --git a/server/dashboard.go b/server/dashboard.go index 9a9c0b5..48a9423 100644 --- a/server/dashboard.go +++ b/server/dashboard.go @@ -15,12 +15,14 @@ var dashboardHtml string var dashboard = template.Must(template.New("dashboard").Parse(dashboardHtml)) type Dashboard struct { + Target Humidity Average Humidity DutyCycle DutyCycle Rooms map[RoomID]Humidity } type DashboardHandler struct { + target share.Val[Humidity] building Building dutyCycle share.Val[DutyCycle] } @@ -42,6 +44,13 @@ func (h DashboardHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { } func (h DashboardHandler) buildDashboard() Dashboard { + var target Humidity + if targetp, ok := h.target.TryGet(); ok { + target = *targetp + } else { + target = 0 + } + average, ok := h.building.average() if !ok { average = -1 @@ -65,5 +74,5 @@ func (h DashboardHandler) buildDashboard() Dashboard { rooms[id] = humidity } - return Dashboard{average, duty, rooms} + return Dashboard{target, average, duty, rooms} } diff --git a/server/dashboard.html b/server/dashboard.html index 29f1f8b..23e1d97 100644 --- a/server/dashboard.html +++ b/server/dashboard.html @@ -4,7 +4,8 @@ <title>HVAC Dashboard</title> </head> <body> - <p>Average humidity: + <p>Target humidity: {{ printf "%.1f%%" .Target }}</p> + <p>Average measured humidity: {{/* A value less than 0 means no data. */}} {{- if ge .Average 0.0 -}} {{ printf "%.1f%%" .Average }} diff --git a/server/server.go b/server/server.go index b104bbb..fc19d94 100644 --- a/server/server.go +++ b/server/server.go @@ -7,7 +7,11 @@ import ( "net/http" ) -const addr = ":9090" +const ( + addr = ":9090" + + targetHumidityDefault = 35.0 +) var roomIDs = []RoomID{ "SNbeEcs7XVWMEvjeEYgwZnp9XYjToVhh", @@ -17,14 +21,17 @@ var roomIDs = []RoomID{ type RoomID string func main() { + target := share.NewVal[Humidity]() + target.Set <- targetHumidityDefault building := newBuilding(roomIDs) dutyCycle := share.NewVal[DutyCycle]() + defer target.Close() defer building.Close() defer dutyCycle.Close() - http.Handle("/", DashboardHandler{building, dutyCycle}) + http.Handle("/", DashboardHandler{target, building, dutyCycle}) http.Handle("/humidity", HumidityHandler{building}) - http.Handle("/target_humidity", new(TargetHumidityHandler)) + http.Handle("/target_humidity", TargetHumidityHandler{target}) http.Handle("/duty_cycle", DutyCycleHandler{dutyCycle}) fmt.Printf("Listening on %s...\n", addr) diff --git a/server/target.go b/server/target.go index 4c58f1d..2d7ca80 100644 --- a/server/target.go +++ b/server/target.go @@ -2,18 +2,17 @@ package main import ( "fmt" + "github.com/sam-rba/share" "log" "net/http" "strconv" - "sync" ) type TargetHumidityHandler struct { - mu sync.Mutex - target Humidity + target share.Val[Humidity] } -func (h *TargetHumidityHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { +func (h TargetHumidityHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { log.Println(r.Method, r.URL) switch r.Method { case http.MethodGet: @@ -26,20 +25,16 @@ func (h *TargetHumidityHandler) ServeHTTP(w http.ResponseWriter, r *http.Request } } -func (h *TargetHumidityHandler) get(w http.ResponseWriter, r *http.Request) { - h.mu.Lock() - defer h.mu.Unlock() - fmt.Fprintf(w, "%.2f", h.target) +func (h TargetHumidityHandler) get(w http.ResponseWriter, r *http.Request) { + fmt.Fprintf(w, "%.2f", h.target.Get()) } -func (h *TargetHumidityHandler) post(w http.ResponseWriter, r *http.Request) { +func (h TargetHumidityHandler) post(w http.ResponseWriter, r *http.Request) { target, err := strconv.ParseFloat(r.URL.RawQuery, 32) if err != nil { badRequest(w, "invalid humidity: '%s'", r.URL.RawQuery) return } - h.mu.Lock() - defer h.mu.Unlock() - h.target = Humidity(target) + h.target.Set <- Humidity(target) } |