From dbc71139a5708b371ffb0b7580f562674707c558 Mon Sep 17 00:00:00 2001 From: Sam Anthony Date: Thu, 21 Nov 2024 16:47:08 -0500 Subject: server dashboard --- server/building.go | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 server/building.go (limited to 'server/building.go') diff --git a/server/building.go b/server/building.go new file mode 100644 index 0000000..c7d298f --- /dev/null +++ b/server/building.go @@ -0,0 +1,40 @@ +package main + +import "log" + +type Building map[RoomID]Record[Humidity] + +func newBuilding(roomIDs []RoomID) Building { + b := make(Building) + for _, id := range roomIDs { + b[id] = newRecord[Humidity]() + } + return b +} + +func (b Building) Close() { + for _, record := range b { + record.Close() + } +} + +// Calculate the average humidity in the building. Returns false if there is not enough data available. +func (b Building) average() (Humidity, bool) { + var sum Humidity = 0 + nRooms := 0 + for room, record := range b { + c := make(chan Humidity) + record.getRecent <- c + if humidity, ok := <-c; ok { + sum += humidity + nRooms++ + } else { + log.Printf("Warning: no humidity for room '%s'\n", room) + } + } + if nRooms == 0 { + log.Println("Warning: not enough data to calculate average humidity") + return -1.0, false + } + return sum / Humidity(nRooms), true +} -- cgit v1.2.3