YHGW/loadconfig.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
}