mirror of
https://github.com/mgerb/mywebsite
synced 2026-01-10 09:52:51 +00:00
150 lines
3.3 KiB
Go
150 lines
3.3 KiB
Go
package raw_sensor
|
|
|
|
import (
|
|
"encoding/json"
|
|
"errors"
|
|
"github.com/mgerb42/mywebsite/db"
|
|
"gopkg.in/mgo.v2/bson"
|
|
"log"
|
|
"time"
|
|
)
|
|
|
|
const (
|
|
collection = "raw_sensor"
|
|
)
|
|
|
|
type Data struct {
|
|
ID bson.ObjectId `bson:"_id,omitempty"`
|
|
Temperature float64 `json:"temperature" bson:"temperature"`
|
|
Location string `json:"location" bson:"location"`
|
|
Updated time.Time `json:"updated" bson:"updated"`
|
|
}
|
|
|
|
//convert struct to json string
|
|
func (s *Data) toJson() string {
|
|
|
|
b, err := json.MarshalIndent(s, "", " ")
|
|
|
|
if err != nil {
|
|
log.Println(err.Error)
|
|
}
|
|
|
|
return string(b)
|
|
|
|
}
|
|
|
|
func (s *Data) StoreData() error {
|
|
|
|
if db.Mongo.Connected() {
|
|
|
|
log.Println("Inserting data into " + collection)
|
|
|
|
session := db.Mongo.Session.Copy()
|
|
defer session.Close()
|
|
|
|
c := session.DB(db.Mongo.Info.Database).C(collection)
|
|
|
|
// Insert Datas
|
|
err := c.Insert(s)
|
|
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
//handle queries for all sensors page
|
|
//********************************************************************************
|
|
type DataStore_AllSensors struct {
|
|
ID string `json:"location" bson:"_id"`
|
|
Temperature float64 `json:"temperature" bson:"temperature"`
|
|
Updated time.Time `json:"updated" bson:"updated"`
|
|
}
|
|
|
|
func GetAllSensors() ([]DataStore_AllSensors, error) {
|
|
|
|
s := []DataStore_AllSensors{}
|
|
|
|
if db.Mongo.Connected() == true {
|
|
|
|
session := db.Mongo.Session.Copy()
|
|
defer session.Close()
|
|
|
|
c := session.DB(db.Mongo.Info.Database).C(collection)
|
|
|
|
err := c.Pipe([]bson.M{{"$group": bson.M{"_id": "$location", "temperature": bson.M{"$last": "$temperature"},
|
|
"updated": bson.M{"$last": "$updated"}}},
|
|
bson.M{"$sort": bson.M{"_id": 1}}}).All(&s)
|
|
|
|
if err != nil {
|
|
return s, nil
|
|
}
|
|
|
|
return s, nil
|
|
|
|
} else {
|
|
return s, errors.New("Query failed")
|
|
}
|
|
}
|
|
|
|
//********************************************************************************
|
|
|
|
//get sensor information by location
|
|
//********************************************************************************
|
|
type DataStore_SensorByLocation struct {
|
|
Id sensorByLocation `json:"_id" bson:"_id"`
|
|
}
|
|
|
|
type sensorByLocation struct {
|
|
Year int `json:"year" bson:"year"`
|
|
Month int `json:"month" bson:"month"`
|
|
Location string `json:"location" bson:"location"`
|
|
}
|
|
|
|
/*
|
|
func GetSensorInfoByLocation(sensor_location string) ([]DataStore_SensorByLocation, error) {
|
|
|
|
s := []DataStore_SensorByLocation{}
|
|
|
|
if db.Mongo.Connected() == true {
|
|
|
|
session := db.Mongo.Session.Copy()
|
|
defer session.Close()
|
|
|
|
c := session.DB(db.Mongo.Info.Database).C(collection)
|
|
|
|
err := c.Pipe([]bson.M{{"$project": bson.M{"location": "$location", "year": bson.M{"$year": "$updated"}, "month": bson.M{"$month": "$updated"}}},
|
|
bson.M{"$match": bson.M{"location": sensor_location}},
|
|
bson.M{"$group": bson.M{"_id": bson.M{"year": "$year", "month": "$month", "location": "$location"}}},
|
|
bson.M{"$sort": bson.M{"_id.year": -1, "_id.month": -1}}}).All(&s)
|
|
|
|
if err != nil {
|
|
log.Println(err)
|
|
return s, nil
|
|
}
|
|
|
|
return s, nil
|
|
|
|
} else {
|
|
return s, errors.New("Query failed")
|
|
}
|
|
|
|
}
|
|
*/
|
|
|
|
//********************************************************************************
|
|
|
|
/*************************
|
|
|
|
testStore := model.SensorData{
|
|
ID: bson.NewObjectId(),
|
|
Temperature: 34.2,
|
|
Humidity: 33.22,
|
|
Location: "Grand Meadow",
|
|
Updated: time.Now(),
|
|
}
|
|
|
|
**************************/
|