126 lines
3.2 KiB
Go
126 lines
3.2 KiB
Go
package main
|
|
|
|
import (
|
|
"database/sql"
|
|
"encoding/json"
|
|
_ "github.com/mattn/go-sqlite3"
|
|
"os"
|
|
"time"
|
|
)
|
|
|
|
type Traffic struct {
|
|
TRAFFIC uint16 `json:"traffic"`
|
|
}
|
|
|
|
type Satisfaction struct {
|
|
SATISFACTION float64 `json:"satisfaction"`
|
|
}
|
|
|
|
type Conf struct {
|
|
GATEWAY_INFO Gateway_info `json:"gateway_info"`
|
|
DEVICES_LIST [][]string `json:"devices_list`
|
|
SERIALPORTS_LIST map[string]Serialconf `json:"serialports_list"`
|
|
RS485DEVICES map[string]Rs485devices `json:"rs485devices"`
|
|
ICONURL string `json:"iconurl`
|
|
WEBSOCKETURL []string `json:"websocketurl"`
|
|
POST_TO_SERVER string `json:"post_to_server"`
|
|
DEBUG bool `json:"debug"`
|
|
}
|
|
|
|
type Gateway_info struct {
|
|
ID string `json:"id"`
|
|
VERSION string `json:"version"`
|
|
LOCATION []float32 `json:"location"`
|
|
UNITNAME string `json:"单位"`
|
|
CONFIG []Config `json:"config"`
|
|
}
|
|
|
|
type Config struct {
|
|
ID string `json:"id"`
|
|
VERAION string `json:"version"`
|
|
DATA [][]interface{} `json:"data"`
|
|
}
|
|
|
|
type Rs485devices struct {
|
|
VERSION string `json:"version"`
|
|
NUM string `json:"num"`
|
|
COMMAND [][]byte `json:"command"`
|
|
}
|
|
|
|
type Serialconf struct {
|
|
COM string `json:"com"`
|
|
BAUDS int `json:"bauds"`
|
|
SIZE uint16 `json:"size"`
|
|
PARITY string `json:"parity"`
|
|
STOPBITS int `json:"stopbits"`
|
|
READTIMEOUT int `json:"readtimeout"`
|
|
NOTE string `json:"note"`
|
|
}
|
|
|
|
var conf Conf
|
|
var DEVICEDATAS Devicedatas
|
|
|
|
var db, _ = sql.Open("sqlite3", "./db/gateway.db")
|
|
|
|
func init() {
|
|
configfile, err := os.Open("conf/gateway.conf")
|
|
check(err)
|
|
defer configfile.Close()
|
|
err = json.NewDecoder(configfile).Decode(&conf)
|
|
check(err)
|
|
var device Device
|
|
|
|
DEVICEDATAS.Lock()
|
|
DEVICEDATAS.DATA = make(map[string]Device)
|
|
for _, i := range conf.DEVICES_LIST {
|
|
device.DATA = make(map[string]interface{})
|
|
device.ID = i[0]
|
|
device.VERSION = i[2]
|
|
DEVICEDATAS.DATA[i[2]+"_"+i[3]] = device
|
|
}
|
|
DEVICEDATAS.Unlock()
|
|
dbdata_init()
|
|
}
|
|
|
|
var good, bad float32
|
|
var traffic_data Traffic
|
|
var satisfaction_data Satisfaction
|
|
|
|
func dbdata_init() {
|
|
rows, err := db.Query("SELECT good, bad FROM satisfaction order by id DESC limit 1")
|
|
if err != nil {
|
|
good = 1
|
|
bad = 0
|
|
} else {
|
|
rows.Next()
|
|
rows.Scan(&good, &bad)
|
|
rows.Close()
|
|
}
|
|
rows.Close()
|
|
rows, err = db.Query("SELECT traffic FROM traffic t where datetime(t.create_time) > datetime('now','start of day','-1 day') order by id DESC limit 1 ")
|
|
if err != nil {
|
|
traffic_data.TRAFFIC = 0
|
|
} else {
|
|
rows.Next()
|
|
rows.Scan(&traffic_data.TRAFFIC)
|
|
rows.Close()
|
|
}
|
|
}
|
|
|
|
func savedata_cron() {
|
|
T := time.Now().Format("2006-01-02")
|
|
stmt, err := db.Prepare("UPDATE satisfaction set good=?, bad=? ,create_time=? where id=(SELECT max(id) FROM satisfaction)")
|
|
check(err)
|
|
stmt.Exec(&good, &bad, &T)
|
|
stmt, err = db.Prepare("UPDATE traffic set traffic=?, create_time=? where id=(SELECT max(id) FROM traffic)")
|
|
check(err)
|
|
stmt.Exec(&traffic_data.TRAFFIC, &T)
|
|
}
|
|
|
|
func insertdata() {
|
|
T := time.Now().Format("2006-01-02")
|
|
stmt, _ := db.Prepare(`INSERT INTO traffic (traffic, create_time) values (?, ?)`)
|
|
stmt.Exec(&traffic_data.TRAFFIC, &T)
|
|
traffic_data.TRAFFIC = 0
|
|
}
|