Add support for second humdifier to server

This commit is contained in:
Kelvin Ly 2023-07-30 23:36:20 -04:00
parent 8dae2ce83c
commit 1083d56c50
3 changed files with 35 additions and 23 deletions

View File

@ -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
}

View File

@ -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
}

View File

@ -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 {