diff --git a/controllers/addTemp.go b/controllers/addTemp.go new file mode 100644 index 0000000..c77d7e6 --- /dev/null +++ b/controllers/addTemp.go @@ -0,0 +1,28 @@ +package controllers + +import ( + "strconv" + + "github.com/astaxie/beego" + + "datahouse/models/temperature" + "datahouse/models/sensor" +) + +type AddTempController struct { + beego.Controller +} + +func (c *AddTempController) Get() { + sens := c.Ctx.Input.Param(":sensor") + val, _ := strconv.Atoi(c.Ctx.Input.Param(":val")) + + idSensor := sensor.GetSensorId(sens) + if idSensor == -1 { + sensor.AddSensor(sens) + idSensor = sensor.GetSensorId(sens) + } + + temperature.AddData(idSensor, int64(val)) + c.Ctx.Output.Body([]byte("OK")) +} diff --git a/models/sensor/sensor.go b/models/sensor/sensor.go new file mode 100644 index 0000000..09e6b06 --- /dev/null +++ b/models/sensor/sensor.go @@ -0,0 +1,45 @@ +package sensor + +import ( + "github.com/astaxie/beego/orm" + + "datahouse/models/database" + "datahouse/models/utils" +) + +type SensorTable struct { + Id int64 + SensorMAC string + Description string +} + +func init() { + orm.RegisterModel(new(SensorTable)) +} + + +func GetSensorId(sensorMac string) int64 { + o := orm.NewOrm() + o.Using(database.Alias) + + sensor := new(SensorTable) + var ret int64 + ret = -1 + var maps []orm.Params + _, err := o.QueryTable(sensor).Filter("SensorMAC", sensorMac).Values(&maps) + if err == nil { + for _, m := range maps { + ret = utils.GetInt(m, "Id") + break + } + } + + return ret +} + + +func AddSensor(sensorMac string) { + o := orm.NewOrm() + o.Using(database.Alias) + _, _ = o.Insert(&SensorTable{SensorMAC: sensorMac}) +} diff --git a/models/temperature/temperature.go b/models/temperature/temperature.go index 343645b..467c73a 100644 --- a/models/temperature/temperature.go +++ b/models/temperature/temperature.go @@ -11,6 +11,7 @@ import ( type tempTable struct { Id int64 HorodateGMT time.Time `orm:"auto_now;type(datetime)"` + SensorID int64 Value int64 } @@ -22,11 +23,12 @@ func init() { /** * Add the value into the database. */ -func AddData(value int64) { +func AddData(sensor, value int64) { o := orm.NewOrm() o.Using(database.Alias) tmpTable := new(tempTable) tmpTable.Value = value + tmpTable.SensorID = sensor o.Insert(tmpTable) } diff --git a/models/utils/utils.go b/models/utils/utils.go new file mode 100644 index 0000000..38cea6e --- /dev/null +++ b/models/utils/utils.go @@ -0,0 +1,28 @@ +package utils + +import ( + "github.com/astaxie/beego/orm" +) + + +func GetString(m orm.Params, param string) string { + ret := "" + switch i := m[param].(type) { + case string: + ret = i + } + + return ret +} + +func GetInt(m orm.Params, param string) int64 { + var ret int64 + ret = -1 + + switch i := m[param].(type) { + case int, int32, int64: + ret = i.(int64) + } + + return ret +} diff --git a/routers/router.go b/routers/router.go index 37f19eb..7bae4e8 100644 --- a/routers/router.go +++ b/routers/router.go @@ -7,4 +7,5 @@ import ( func init() { beego.Router("/", &controllers.MainController{}) + beego.Router("/addTemp/:sensor([0-9A-F:]+)/:val([0-9]+)", &controllers.AddTempController{}) }