From 1083d56c501ca1e49347c5007d17bf3350afa476 Mon Sep 17 00:00:00 2001 From: Kelvin Ly Date: Sun, 30 Jul 2023 23:36:20 -0400 Subject: [PATCH] Add support for second humdifier to server --- shroom_internals/sql.go | 18 ++++++++++-------- shroom_internals/tcp_server.go | 25 ++++++++++++++++--------- shroom_server.go | 15 +++++++++------ 3 files changed, 35 insertions(+), 23 deletions(-) diff --git a/shroom_internals/sql.go b/shroom_internals/sql.go index 7499393..0cad09f 100644 --- a/shroom_internals/sql.go +++ b/shroom_internals/sql.go @@ -15,6 +15,7 @@ func CreateTable(db *sql.DB) error { humidity REAL, temperature REAL, humidifier_volts REAL + humidifier_volts2 REAL );` _, err := db.Exec(create_table) @@ -22,14 +23,15 @@ func CreateTable(db *sql.DB) error { } type Datapoint struct { - Time uint64 `json:"t"` - Temperature float32 `json:"temp"` - Humidity float32 `json:"hum"` - HumidifierVolts float32 `json:"hv"` + Time uint64 `json:"t"` + Temperature float32 `json:"temp"` + Humidity float32 `json:"hum"` + HumidifierVolts float32 `json:"hv"` + HumidifierVolts2 float32 `json:"hv2"` } func QueryHistory(db *sql.DB, start int64) ([]Datapoint, error) { - query := "SELECT time, temperature, humidity, humidifier_volts FROM shrooms WHERE time > ?" + query := "SELECT time, temperature, humidity, humidifier_volts, humidifier_volts2 FROM shrooms WHERE time > ?" rows, err := db.Query(query, start) if err != nil { return nil, fmt.Errorf("sql error: %w", err) @@ -38,7 +40,7 @@ func QueryHistory(db *sql.DB, start int64) ([]Datapoint, error) { results := make([]Datapoint, 0) for rows.Next() { d := Datapoint{} - err = rows.Scan(&d.Time, &d.Temperature, &d.Humidity, &d.HumidifierVolts) + err = rows.Scan(&d.Time, &d.Temperature, &d.Humidity, &d.HumidifierVolts, &d.HumidifierVolts2) if err != nil { return nil, fmt.Errorf("sql scan error: %w", err) } @@ -86,8 +88,8 @@ func OldestTime(db *sql.DB) (int64, error) { } func InsertRow(db *sql.DB, s *DataJson) error { - _, err := db.Exec("INSERT INTO shrooms (time, temperature, humidity, humidifier_volts) VALUES (?, ?, ?, ?)", - *s.Time, *s.Temperature, *s.Humidity, *s.HumidifierVolts) + _, err := db.Exec("INSERT INTO shrooms (time, temperature, humidity, humidifier_volts, humidifier_volts2) VALUES (?, ?, ?, ?)", + *s.Time, *s.Temperature, *s.Humidity, *s.HumidifierVolts, *s.HumidifierVolts2) return err } diff --git a/shroom_internals/tcp_server.go b/shroom_internals/tcp_server.go index 5840472..05adf1e 100644 --- a/shroom_internals/tcp_server.go +++ b/shroom_internals/tcp_server.go @@ -23,22 +23,25 @@ func newlinePos(s []byte) int { type StatusJson struct { HumOn *bool `json:"humidifier"` + Hum2On *bool `json:"humidifier2"` ManualMode *bool `json:"manual_mode"` } type DataJson struct { - Time *uint64 `json:"time"` - Temperature *float32 `json:"temp"` - Humidity *float32 `json:"hum"` - HumidifierVolts *float32 `json:"hv"` + Time *uint64 `json:"time"` + Temperature *float32 `json:"temp"` + Humidity *float32 `json:"hum"` + HumidifierVolts *float32 `json:"hv"` + HumidifierVolts2 *float32 `json:"hv2"` } func (dj *DataJson) ToDatapoint() *Datapoint { return &Datapoint{ - Time: *dj.Time, - Temperature: *dj.Temperature, - Humidity: *dj.Humidity, - HumidifierVolts: *dj.HumidifierVolts, + Time: *dj.Time, + Temperature: *dj.Temperature, + Humidity: *dj.Humidity, + HumidifierVolts: *dj.HumidifierVolts, + HumidifierVolts2: *dj.HumidifierVolts2, } } @@ -51,6 +54,7 @@ type ShroomPacket struct { type ShroomState struct { sync.RWMutex HumidifierOn bool + Humidifier2On bool ManualMode bool NumConnections int @@ -169,7 +173,7 @@ func parseMsg(line []byte, db *sql.DB, state *ShroomState) { } //log.Println("received data ", data) if packet.Data != nil { - if packet.Data.Time != nil && packet.Data.Temperature != nil && packet.Data.Humidity != nil && packet.Data.HumidifierVolts != nil { + if packet.Data.Time != nil && packet.Data.Temperature != nil && packet.Data.Humidity != nil && packet.Data.HumidifierVolts != nil && packet.Data.HumidifierVolts2 != nil { err = InsertRow(db, packet.Data) state.Cache.Add(packet.Data.ToDatapoint()) if err != nil { @@ -184,6 +188,9 @@ func parseMsg(line []byte, db *sql.DB, state *ShroomState) { if packet.Status.HumOn != nil { state.HumidifierOn = *packet.Status.HumOn } + if packet.Status.Hum2On != nil { + state.Humidifier2On = *packet.Status.Hum2On + } if packet.Status.ManualMode != nil { state.ManualMode = *packet.Status.ManualMode } diff --git a/shroom_server.go b/shroom_server.go index 5d3146c..e9472a2 100644 --- a/shroom_server.go +++ b/shroom_server.go @@ -28,9 +28,10 @@ var auth_secret string var content embed.FS type statusJson struct { - Connected bool `json:"connected"` - Humidifier bool `json:"humidifier"` - ManualMode bool `json:"manual_mode"` + Connected bool `json:"connected"` + Humidifier bool `json:"humidifier"` + Humidifier2 bool `json:"humidifier2"` + ManualMode bool `json:"manual_mode"` } type adminMsg struct { @@ -118,12 +119,14 @@ func main() { state.RLock() num_connections := state.NumConnections humidifier := state.HumidifierOn + humidifier2 := state.Humidifier2On manual_mode := state.ManualMode state.RUnlock() s := statusJson{ - Connected: num_connections > 0, - Humidifier: humidifier, - ManualMode: manual_mode, + Connected: num_connections > 0, + Humidifier: humidifier, + Humidifier2: humidifier2, + ManualMode: manual_mode, } msg, err := json.Marshal(s) if err != nil {