Add temporaire BDD table to store temporaire incomming temperature.

Save only every interval set.
This commit is contained in:
Chteufleur 2015-10-05 23:07:55 +02:00
parent fb6be459c2
commit 0d495e41bb
3 changed files with 107 additions and 7 deletions

View File

@ -2,11 +2,12 @@ package controllers
import (
"strconv"
"fmt"
"time"
"github.com/astaxie/beego"
"datahouse/models/temperature"
temperatureTmp "datahouse/models/temperature/temp"
"datahouse/models/sensor"
)
@ -18,14 +19,39 @@ func (c *AddTempController) Get() {
mac := c.Ctx.Input.Param(":sensor")
val, _ := strconv.Atoi(c.Ctx.Input.Param(":val"))
fmt.Println("MAC: ", mac)
s := sensor.GetSensorByMac(mac)
if s == nil {
if s == nil || s.Id == 0 {
sensor.AddSensor(mac)
s = sensor.GetSensorByMac(mac)
}
temperature.AddData(s.Id, int64(val))
addToTempBdd(s, val)
saveInBDD(s, val)
c.Ctx.Output.Body([]byte(strconv.FormatInt(s.Interval, 10)))
}
/**
* Save into temporaire database.
*/
func addToTempBdd(snsor *sensor.SensorTable, val int) {
nowUTC := time.Now().UTC()
tempTmp := temperatureTmp.GetTemp(snsor.Id)
if tempTmp == nil || tempTmp.Id == 0 { // Add new entry for sensor
temperatureTmp.AddData(snsor.Id, int64(val))
} else { // Update entry for sensor
temperatureTmp.UpdateTemp(snsor.Id, int64(val), nowUTC)
}
}
/**
* Save into database.
*/
func saveInBDD(snsor *sensor.SensorTable, val int) {
nowUTC := time.Now()
lastTempRecord := temperature.GetLastTempForSensor(snsor.Id)
intervalTmp := nowUTC.Unix() - lastTempRecord.HorodateGMT.Unix() - int64(timezoneOffset)
if intervalTmp >= snsor.Interval {
temperature.AddData(snsor.Id, int64(val))
}
}

View File

@ -4,7 +4,8 @@ import (
"github.com/astaxie/beego"
"datahouse/models/sensor"
"datahouse/models/temperature"
// "datahouse/models/temperature"
temperatureTmp "datahouse/models/temperature/temp"
"strconv"
"time"
@ -43,7 +44,8 @@ func getLastTemps() ([]SensorPrint) {
sens.Name = s.SensorMAC
}
t := temperature.GetLastTempForSensor(s.Id)
// t := temperature.GetLastTempForSensor(s.Id)
t := temperatureTmp.GetTemp(s.Id)
sens.Value = strconv.FormatInt(t.Value, 10)
sens.Unit = "°C"

View File

@ -0,0 +1,72 @@
package temp
import (
"github.com/astaxie/beego/orm"
"datahouse/models/database"
"datahouse/models/utils"
"time"
)
/**
* Store last received data.
*/
type TempTableTmp struct {
Id int64
HorodateGMT time.Time `orm:"auto_now;type(datetime)"`
SensorID int64
Value int64
}
func init() {
orm.RegisterModel(new(TempTableTmp))
}
/**
* Add the value into the database.
*/
func AddData(sensor, value int64) {
o := orm.NewOrm()
o.Using(database.Alias)
tmpTable := new(TempTableTmp)
tmpTable.Value = value
tmpTable.SensorID = sensor
o.Insert(tmpTable)
}
func GetTemp(sensorId int64) (*TempTableTmp) {
o := orm.NewOrm()
o.Using(database.Alias)
data := new(TempTableTmp)
var maps []orm.Params
_, err := o.QueryTable(new(TempTableTmp)).Filter("SensorID", sensorId).Values(&maps)
if err == nil {
for _, m := range maps {
data.Id = utils.GetInt(m, "Id")
data.HorodateGMT = utils.GetTime(m, "HorodateGMT")
data.SensorID = utils.GetInt(m, "SensorID")
data.Value = utils.GetInt(m, "Value")
}
}
return data
}
func UpdateTemp(sensorId, val int64, date time.Time) {
o := orm.NewOrm()
o.Using(database.Alias)
temp := GetTemp(sensorId)
if o.Read(temp) == nil {
temp.HorodateGMT = date
temp.Value = val
o.Update(temp)
}
}