Add support for second humdifier to server
This commit is contained in:
parent
8dae2ce83c
commit
1083d56c50
|
@ -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
|
||||
}
|
||||
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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 {
|
||||
|
|
Loading…
Reference in New Issue