summaryrefslogtreecommitdiffstats
path: root/server/building.go
diff options
context:
space:
mode:
authorSam Anthony <sam@samanthony.xyz>2024-11-21 16:47:08 -0500
committerSam Anthony <sam@samanthony.xyz>2024-11-21 16:47:08 -0500
commitdbc71139a5708b371ffb0b7580f562674707c558 (patch)
tree1ee13dbfa44588a723a0d1fdf4eb24f5d76a9158 /server/building.go
parenta464e144485f69fd9ae6efee3e3fe5e00590e6de (diff)
downloadsoen422-dbc71139a5708b371ffb0b7580f562674707c558.zip
server dashboard
Diffstat (limited to 'server/building.go')
-rw-r--r--server/building.go40
1 files changed, 40 insertions, 0 deletions
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
+}