summaryrefslogtreecommitdiffstats
path: root/server/building.go
diff options
context:
space:
mode:
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
+}