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,
|
humidity REAL,
|
||||||
temperature REAL,
|
temperature REAL,
|
||||||
humidifier_volts REAL
|
humidifier_volts REAL
|
||||||
|
humidifier_volts2 REAL
|
||||||
);`
|
);`
|
||||||
|
|
||||||
_, err := db.Exec(create_table)
|
_, err := db.Exec(create_table)
|
||||||
|
@ -22,14 +23,15 @@ func CreateTable(db *sql.DB) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
type Datapoint struct {
|
type Datapoint struct {
|
||||||
Time uint64 `json:"t"`
|
Time uint64 `json:"t"`
|
||||||
Temperature float32 `json:"temp"`
|
Temperature float32 `json:"temp"`
|
||||||
Humidity float32 `json:"hum"`
|
Humidity float32 `json:"hum"`
|
||||||
HumidifierVolts float32 `json:"hv"`
|
HumidifierVolts float32 `json:"hv"`
|
||||||
|
HumidifierVolts2 float32 `json:"hv2"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func QueryHistory(db *sql.DB, start int64) ([]Datapoint, error) {
|
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)
|
rows, err := db.Query(query, start)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("sql error: %w", err)
|
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)
|
results := make([]Datapoint, 0)
|
||||||
for rows.Next() {
|
for rows.Next() {
|
||||||
d := Datapoint{}
|
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 {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("sql scan error: %w", err)
|
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 {
|
func InsertRow(db *sql.DB, s *DataJson) error {
|
||||||
_, err := db.Exec("INSERT INTO shrooms (time, temperature, humidity, humidifier_volts) VALUES (?, ?, ?, ?)",
|
_, err := db.Exec("INSERT INTO shrooms (time, temperature, humidity, humidifier_volts, humidifier_volts2) VALUES (?, ?, ?, ?)",
|
||||||
*s.Time, *s.Temperature, *s.Humidity, *s.HumidifierVolts)
|
*s.Time, *s.Temperature, *s.Humidity, *s.HumidifierVolts, *s.HumidifierVolts2)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -23,22 +23,25 @@ func newlinePos(s []byte) int {
|
||||||
|
|
||||||
type StatusJson struct {
|
type StatusJson struct {
|
||||||
HumOn *bool `json:"humidifier"`
|
HumOn *bool `json:"humidifier"`
|
||||||
|
Hum2On *bool `json:"humidifier2"`
|
||||||
ManualMode *bool `json:"manual_mode"`
|
ManualMode *bool `json:"manual_mode"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type DataJson struct {
|
type DataJson struct {
|
||||||
Time *uint64 `json:"time"`
|
Time *uint64 `json:"time"`
|
||||||
Temperature *float32 `json:"temp"`
|
Temperature *float32 `json:"temp"`
|
||||||
Humidity *float32 `json:"hum"`
|
Humidity *float32 `json:"hum"`
|
||||||
HumidifierVolts *float32 `json:"hv"`
|
HumidifierVolts *float32 `json:"hv"`
|
||||||
|
HumidifierVolts2 *float32 `json:"hv2"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (dj *DataJson) ToDatapoint() *Datapoint {
|
func (dj *DataJson) ToDatapoint() *Datapoint {
|
||||||
return &Datapoint{
|
return &Datapoint{
|
||||||
Time: *dj.Time,
|
Time: *dj.Time,
|
||||||
Temperature: *dj.Temperature,
|
Temperature: *dj.Temperature,
|
||||||
Humidity: *dj.Humidity,
|
Humidity: *dj.Humidity,
|
||||||
HumidifierVolts: *dj.HumidifierVolts,
|
HumidifierVolts: *dj.HumidifierVolts,
|
||||||
|
HumidifierVolts2: *dj.HumidifierVolts2,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -51,6 +54,7 @@ type ShroomPacket struct {
|
||||||
type ShroomState struct {
|
type ShroomState struct {
|
||||||
sync.RWMutex
|
sync.RWMutex
|
||||||
HumidifierOn bool
|
HumidifierOn bool
|
||||||
|
Humidifier2On bool
|
||||||
ManualMode bool
|
ManualMode bool
|
||||||
NumConnections int
|
NumConnections int
|
||||||
|
|
||||||
|
@ -169,7 +173,7 @@ func parseMsg(line []byte, db *sql.DB, state *ShroomState) {
|
||||||
}
|
}
|
||||||
//log.Println("received data ", data)
|
//log.Println("received data ", data)
|
||||||
if packet.Data != nil {
|
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)
|
err = InsertRow(db, packet.Data)
|
||||||
state.Cache.Add(packet.Data.ToDatapoint())
|
state.Cache.Add(packet.Data.ToDatapoint())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -184,6 +188,9 @@ func parseMsg(line []byte, db *sql.DB, state *ShroomState) {
|
||||||
if packet.Status.HumOn != nil {
|
if packet.Status.HumOn != nil {
|
||||||
state.HumidifierOn = *packet.Status.HumOn
|
state.HumidifierOn = *packet.Status.HumOn
|
||||||
}
|
}
|
||||||
|
if packet.Status.Hum2On != nil {
|
||||||
|
state.Humidifier2On = *packet.Status.Hum2On
|
||||||
|
}
|
||||||
if packet.Status.ManualMode != nil {
|
if packet.Status.ManualMode != nil {
|
||||||
state.ManualMode = *packet.Status.ManualMode
|
state.ManualMode = *packet.Status.ManualMode
|
||||||
}
|
}
|
||||||
|
|
|
@ -28,9 +28,10 @@ var auth_secret string
|
||||||
var content embed.FS
|
var content embed.FS
|
||||||
|
|
||||||
type statusJson struct {
|
type statusJson struct {
|
||||||
Connected bool `json:"connected"`
|
Connected bool `json:"connected"`
|
||||||
Humidifier bool `json:"humidifier"`
|
Humidifier bool `json:"humidifier"`
|
||||||
ManualMode bool `json:"manual_mode"`
|
Humidifier2 bool `json:"humidifier2"`
|
||||||
|
ManualMode bool `json:"manual_mode"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type adminMsg struct {
|
type adminMsg struct {
|
||||||
|
@ -118,12 +119,14 @@ func main() {
|
||||||
state.RLock()
|
state.RLock()
|
||||||
num_connections := state.NumConnections
|
num_connections := state.NumConnections
|
||||||
humidifier := state.HumidifierOn
|
humidifier := state.HumidifierOn
|
||||||
|
humidifier2 := state.Humidifier2On
|
||||||
manual_mode := state.ManualMode
|
manual_mode := state.ManualMode
|
||||||
state.RUnlock()
|
state.RUnlock()
|
||||||
s := statusJson{
|
s := statusJson{
|
||||||
Connected: num_connections > 0,
|
Connected: num_connections > 0,
|
||||||
Humidifier: humidifier,
|
Humidifier: humidifier,
|
||||||
ManualMode: manual_mode,
|
Humidifier2: humidifier2,
|
||||||
|
ManualMode: manual_mode,
|
||||||
}
|
}
|
||||||
msg, err := json.Marshal(s)
|
msg, err := json.Marshal(s)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
Loading…
Reference in New Issue