Add Null values and new measurements
This commit is contained in:
parent
c6e735950f
commit
c83feeb845
33
data/data.go
33
data/data.go
@ -66,24 +66,36 @@ func InsertSets(sets Sets) {
|
|||||||
|
|
||||||
m := model.Measurement()
|
m := model.Measurement()
|
||||||
q := m.Insert(m.Time, m.MeterID,
|
q := m.Insert(m.Time, m.MeterID,
|
||||||
m.CGem1, m.CGem2, m.CGem3,
|
m.CGem1, m.CGem2, m.CGem3, m.CGemN,
|
||||||
m.Ep1, m.Ep2, m.Ep3,
|
m.Ep1, m.Ep2, m.Ep3,
|
||||||
m.IGem1, m.IGem2, m.IGem3,
|
m.IGem1, m.IGem2, m.IGem3, m.IGemN,
|
||||||
m.IMax1, m.IMax2, m.IMax3,
|
m.IMax1, m.IMax2, m.IMax3,
|
||||||
m.PMax1, m.PMax2, m.PMax3,
|
m.PMax1, m.PMax2, m.PMax3,
|
||||||
m.SMax1, m.SMax2, m.SMax3,
|
m.SMax1, m.SMax2, m.SMax3,
|
||||||
m.UGem1, m.UGem2, m.UGem3,
|
m.UGem1, m.UGem2, m.UGem3, m.UGemN,
|
||||||
|
m.BGem1, m.BGem2, m.BGem3, m.BGemN,
|
||||||
|
m.SGem1, m.SGem2, m.SGem3, m.SGemN,
|
||||||
|
m.PGem1, m.PGem2, m.PGem3, m.PGemN,
|
||||||
|
m.Ithd1, m.Ithd2, m.Ithd3, m.IthdN,
|
||||||
|
m.Uthd1, m.Uthd2, m.Uthd3, m.UthdN,
|
||||||
|
m.Freq,
|
||||||
)
|
)
|
||||||
|
|
||||||
for k, v := range sets {
|
for k, v := range sets {
|
||||||
q.Values(k.Time, k.Meter,
|
q.Values(k.Time, k.Meter,
|
||||||
v[`CGem1`], v[`CGem2`], v[`CGem3`],
|
v[`CGem1`], v[`CGem2`], v[`CGem3`], ifExists(v, `CGemN`),
|
||||||
v[`EP1`], v[`EP2`], v[`EP3`],
|
v[`EP1`], v[`EP2`], v[`EP3`],
|
||||||
v[`IGem1`], v[`IGem2`], v[`IGem3`],
|
v[`IGem1`], v[`IGem2`], v[`IGem3`], ifExists(v, `IGemN`),
|
||||||
v[`IMax1`], v[`IMax2`], v[`IMax3`],
|
v[`IMax1`], v[`IMax2`], v[`IMax3`],
|
||||||
v[`PMax1`], v[`PMax2`], v[`PMax3`],
|
v[`PMax1`], v[`PMax2`], v[`PMax3`],
|
||||||
v[`SMax1`], v[`SMax2`], v[`SMax3`],
|
v[`SMax1`], v[`SMax2`], v[`SMax3`],
|
||||||
v[`UGem1`], v[`UGem2`], v[`UGem3`],
|
v[`UGem1`], v[`UGem2`], v[`UGem3`], ifExists(v, `UGemN`),
|
||||||
|
v[`BGem1`], v[`BGem2`], v[`BGem3`], ifExists(v, `BGemN`),
|
||||||
|
v[`SGem1`], v[`SGem2`], v[`SGem3`], ifExists(v, `SGemN`),
|
||||||
|
v[`PGem1`], v[`PGem2`], v[`PGem3`], ifExists(v, `PGemN`),
|
||||||
|
v[`ITHD1`], v[`ITHD2`], v[`ITHD3`], ifExists(v, `ITHDN`),
|
||||||
|
v[`UTHD1`], v[`UTHD2`], v[`UTHD3`], ifExists(v, `UTHDN`),
|
||||||
|
v[`FREQ`],
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -92,3 +104,12 @@ func InsertSets(sets Sets) {
|
|||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func ifExists(set Set, k string) interface{} {
|
||||||
|
v, ok := set[k]
|
||||||
|
if !ok {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
return v
|
||||||
|
}
|
||||||
|
@ -46,10 +46,10 @@ func handleReq(c echo.Context) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
for _, m := range v.Modules {
|
for _, m := range v.Modules {
|
||||||
if m.Port == 4 {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
p := strconv.Itoa(m.Port)
|
p := strconv.Itoa(m.Port)
|
||||||
|
if p == `4` {
|
||||||
|
p = `N`
|
||||||
|
}
|
||||||
|
|
||||||
sets[key][`UGem`+p] = m.Voltage
|
sets[key][`UGem`+p] = m.Voltage
|
||||||
sets[key][`IGem`+p] = m.Ampere
|
sets[key][`IGem`+p] = m.Ampere
|
||||||
|
113
fortoprt/fetch.go
Normal file
113
fortoprt/fetch.go
Normal file
@ -0,0 +1,113 @@
|
|||||||
|
package fortoprt
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
|
"strconv"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"git.fuyu.moe/5GPowerQuality/parser/data"
|
||||||
|
"git.fuyu.moe/5GPowerQuality/parser/shared"
|
||||||
|
"golang.org/x/net/websocket"
|
||||||
|
)
|
||||||
|
|
||||||
|
type message struct {
|
||||||
|
MessageInfo struct {
|
||||||
|
Version string
|
||||||
|
Application string
|
||||||
|
Module string
|
||||||
|
Function string
|
||||||
|
}
|
||||||
|
Data map[string]measurement
|
||||||
|
}
|
||||||
|
|
||||||
|
type measurement struct {
|
||||||
|
DeviceID int
|
||||||
|
Timestamp shared.UnixTimestamp
|
||||||
|
Value float64
|
||||||
|
Unit string
|
||||||
|
}
|
||||||
|
|
||||||
|
var host = `dcem5g.ddns.net`
|
||||||
|
|
||||||
|
func FetchData() {
|
||||||
|
fmt.Println(`Connecting`)
|
||||||
|
|
||||||
|
conn, err := websocket.Dial(`ws://`+host+`/ValuesSocketServer/VMvalues`, ``, `http://localhost`)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
defer conn.Close()
|
||||||
|
|
||||||
|
requestData(conn, 1)
|
||||||
|
requestData(conn, 2)
|
||||||
|
|
||||||
|
for {
|
||||||
|
b, n := make([]byte, 16384), 0
|
||||||
|
|
||||||
|
msg := message{}
|
||||||
|
|
||||||
|
for {
|
||||||
|
nn, err := conn.Read(b[n:])
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
n += nn
|
||||||
|
|
||||||
|
err = json.Unmarshal(b[:n], &msg)
|
||||||
|
if err != nil {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
break
|
||||||
|
}
|
||||||
|
|
||||||
|
// sets := data.Sets{}
|
||||||
|
mID := data.GetMeterID(data.SourceFortop, host+`-`+strconv.Itoa(msg.Data["U1"].DeviceID))
|
||||||
|
|
||||||
|
sets := data.Sets{}
|
||||||
|
for k, v := range msg.Data {
|
||||||
|
key := data.Key{Meter: mID, Time: time.Time(v.Timestamp)}
|
||||||
|
if _, ok := sets[key]; !ok {
|
||||||
|
sets[key] = data.Set{}
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(k) == 2 {
|
||||||
|
n := k[1:]
|
||||||
|
if n == `4` {
|
||||||
|
n = `N`
|
||||||
|
}
|
||||||
|
|
||||||
|
k = k[:1] + `Gem` + n
|
||||||
|
}
|
||||||
|
|
||||||
|
sets[key][k] = v.Value
|
||||||
|
}
|
||||||
|
|
||||||
|
data.InsertSets(sets)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func requestData(conn *websocket.Conn, meter int) {
|
||||||
|
write(conn, `{"MESSAGEINFO":{"VERSION":1,"APPLICATION":"DCEM_ENTERPRISE","MODULE":"LIVEDATA","FUNCTION":"REQUEST_DATASTREAM","REVISION":1},"VARS":{"DEVICEID":`+strconv.Itoa(meter)+`,"VALUES":`+values+`}}`)
|
||||||
|
}
|
||||||
|
|
||||||
|
func write(conn *websocket.Conn, msg string) {
|
||||||
|
_, err := conn.Write([]byte(msg))
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var values = `[
|
||||||
|
"U1", "U2", "U3", "U4",
|
||||||
|
"I1", "I2", "I3", "I4",
|
||||||
|
"P1", "P2", "P3", "P4",
|
||||||
|
"B1", "B2", "B3", "B4",
|
||||||
|
"S1", "S2", "S3", "S4",
|
||||||
|
"C1", "C2", "C3", "C4",
|
||||||
|
"EP1", "EP2", "EP3", "EP4",
|
||||||
|
"UTHD1", "UTHD2", "UTHD3", "UTHD4",
|
||||||
|
"ITHD1", "ITHD2", "ITHD3", "ITHD4",
|
||||||
|
"FREQ"
|
||||||
|
]`
|
3
internal/migrations/files/0006.sql
Normal file
3
internal/migrations/files/0006.sql
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
ALTER TABLE measurement
|
||||||
|
ADD i_gem_n DOUBLE PRECISION,
|
||||||
|
ADD u_gem_n DOUBLE PRECISION;
|
29
internal/migrations/files/0007.sql
Normal file
29
internal/migrations/files/0007.sql
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
ALTER TABLE measurement
|
||||||
|
ADD b_gem_1 DOUBLE PRECISION,
|
||||||
|
ADD b_gem_2 DOUBLE PRECISION,
|
||||||
|
ADD b_gem_3 DOUBLE PRECISION,
|
||||||
|
ADD b_gem_n DOUBLE PRECISION,
|
||||||
|
|
||||||
|
ADD s_gem_1 DOUBLE PRECISION,
|
||||||
|
ADD s_gem_2 DOUBLE PRECISION,
|
||||||
|
ADD s_gem_3 DOUBLE PRECISION,
|
||||||
|
ADD s_gem_n DOUBLE PRECISION,
|
||||||
|
|
||||||
|
ADD p_gem_1 DOUBLE PRECISION,
|
||||||
|
ADD p_gem_2 DOUBLE PRECISION,
|
||||||
|
ADD p_gem_3 DOUBLE PRECISION,
|
||||||
|
ADD p_gem_n DOUBLE PRECISION,
|
||||||
|
|
||||||
|
ADD uthd_1 DOUBLE PRECISION,
|
||||||
|
ADD uthd_2 DOUBLE PRECISION,
|
||||||
|
ADD uthd_3 DOUBLE PRECISION,
|
||||||
|
ADD uthd_n DOUBLE PRECISION,
|
||||||
|
|
||||||
|
ADD ithd_1 DOUBLE PRECISION,
|
||||||
|
ADD ithd_2 DOUBLE PRECISION,
|
||||||
|
ADD ithd_3 DOUBLE PRECISION,
|
||||||
|
ADD ithd_n DOUBLE PRECISION,
|
||||||
|
|
||||||
|
ADD c_gem_n DOUBLE PRECISION,
|
||||||
|
|
||||||
|
ADD freq DOUBLE PRECISION;
|
@ -2,6 +2,30 @@
|
|||||||
{
|
{
|
||||||
"name": "public.measurement",
|
"name": "public.measurement",
|
||||||
"fields": [
|
"fields": [
|
||||||
|
{
|
||||||
|
"name": "b_gem_1",
|
||||||
|
"data_type": "double precision",
|
||||||
|
"null": true,
|
||||||
|
"size": 8
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "b_gem_2",
|
||||||
|
"data_type": "double precision",
|
||||||
|
"null": true,
|
||||||
|
"size": 8
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "b_gem_3",
|
||||||
|
"data_type": "double precision",
|
||||||
|
"null": true,
|
||||||
|
"size": 8
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "b_gem_n",
|
||||||
|
"data_type": "double precision",
|
||||||
|
"null": true,
|
||||||
|
"size": 8
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "c_gem_1",
|
"name": "c_gem_1",
|
||||||
"data_type": "double precision",
|
"data_type": "double precision",
|
||||||
@ -17,6 +41,12 @@
|
|||||||
"data_type": "double precision",
|
"data_type": "double precision",
|
||||||
"size": 8
|
"size": 8
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "c_gem_n",
|
||||||
|
"data_type": "double precision",
|
||||||
|
"null": true,
|
||||||
|
"size": 8
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "ep_1",
|
"name": "ep_1",
|
||||||
"data_type": "double precision",
|
"data_type": "double precision",
|
||||||
@ -32,6 +62,12 @@
|
|||||||
"data_type": "double precision",
|
"data_type": "double precision",
|
||||||
"size": 8
|
"size": 8
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "freq",
|
||||||
|
"data_type": "double precision",
|
||||||
|
"null": true,
|
||||||
|
"size": 8
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "i_gem_1",
|
"name": "i_gem_1",
|
||||||
"data_type": "double precision",
|
"data_type": "double precision",
|
||||||
@ -47,6 +83,12 @@
|
|||||||
"data_type": "double precision",
|
"data_type": "double precision",
|
||||||
"size": 8
|
"size": 8
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "i_gem_n",
|
||||||
|
"data_type": "double precision",
|
||||||
|
"null": true,
|
||||||
|
"size": 8
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "i_max_1",
|
"name": "i_max_1",
|
||||||
"data_type": "double precision",
|
"data_type": "double precision",
|
||||||
@ -62,11 +104,59 @@
|
|||||||
"data_type": "double precision",
|
"data_type": "double precision",
|
||||||
"size": 8
|
"size": 8
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "ithd_1",
|
||||||
|
"data_type": "double precision",
|
||||||
|
"null": true,
|
||||||
|
"size": 8
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "ithd_2",
|
||||||
|
"data_type": "double precision",
|
||||||
|
"null": true,
|
||||||
|
"size": 8
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "ithd_3",
|
||||||
|
"data_type": "double precision",
|
||||||
|
"null": true,
|
||||||
|
"size": 8
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "ithd_n",
|
||||||
|
"data_type": "double precision",
|
||||||
|
"null": true,
|
||||||
|
"size": 8
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "meter_id",
|
"name": "meter_id",
|
||||||
"data_type": "integer",
|
"data_type": "integer",
|
||||||
"size": 4
|
"size": 4
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "p_gem_1",
|
||||||
|
"data_type": "double precision",
|
||||||
|
"null": true,
|
||||||
|
"size": 8
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "p_gem_2",
|
||||||
|
"data_type": "double precision",
|
||||||
|
"null": true,
|
||||||
|
"size": 8
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "p_gem_3",
|
||||||
|
"data_type": "double precision",
|
||||||
|
"null": true,
|
||||||
|
"size": 8
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "p_gem_n",
|
||||||
|
"data_type": "double precision",
|
||||||
|
"null": true,
|
||||||
|
"size": 8
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "p_max_1",
|
"name": "p_max_1",
|
||||||
"data_type": "double precision",
|
"data_type": "double precision",
|
||||||
@ -82,6 +172,30 @@
|
|||||||
"data_type": "double precision",
|
"data_type": "double precision",
|
||||||
"size": 8
|
"size": 8
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "s_gem_1",
|
||||||
|
"data_type": "double precision",
|
||||||
|
"null": true,
|
||||||
|
"size": 8
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "s_gem_2",
|
||||||
|
"data_type": "double precision",
|
||||||
|
"null": true,
|
||||||
|
"size": 8
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "s_gem_3",
|
||||||
|
"data_type": "double precision",
|
||||||
|
"null": true,
|
||||||
|
"size": 8
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "s_gem_n",
|
||||||
|
"data_type": "double precision",
|
||||||
|
"null": true,
|
||||||
|
"size": 8
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "s_max_1",
|
"name": "s_max_1",
|
||||||
"data_type": "double precision",
|
"data_type": "double precision",
|
||||||
@ -116,6 +230,36 @@
|
|||||||
"name": "u_gem_3",
|
"name": "u_gem_3",
|
||||||
"data_type": "double precision",
|
"data_type": "double precision",
|
||||||
"size": 8
|
"size": 8
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "u_gem_n",
|
||||||
|
"data_type": "double precision",
|
||||||
|
"null": true,
|
||||||
|
"size": 8
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "uthd_1",
|
||||||
|
"data_type": "double precision",
|
||||||
|
"null": true,
|
||||||
|
"size": 8
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "uthd_2",
|
||||||
|
"data_type": "double precision",
|
||||||
|
"null": true,
|
||||||
|
"size": 8
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "uthd_3",
|
||||||
|
"data_type": "double precision",
|
||||||
|
"null": true,
|
||||||
|
"size": 8
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "uthd_n",
|
||||||
|
"data_type": "double precision",
|
||||||
|
"null": true,
|
||||||
|
"size": 8
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
4
main.go
4
main.go
@ -4,6 +4,7 @@ import (
|
|||||||
"git.fuyu.moe/5GPowerQuality/parser/data"
|
"git.fuyu.moe/5GPowerQuality/parser/data"
|
||||||
"git.fuyu.moe/5GPowerQuality/parser/envitron"
|
"git.fuyu.moe/5GPowerQuality/parser/envitron"
|
||||||
"git.fuyu.moe/5GPowerQuality/parser/fortop"
|
"git.fuyu.moe/5GPowerQuality/parser/fortop"
|
||||||
|
"git.fuyu.moe/5GPowerQuality/parser/fortoprt"
|
||||||
"git.fuyu.moe/Fuyu/flog"
|
"git.fuyu.moe/Fuyu/flog"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -16,7 +17,8 @@ func main() {
|
|||||||
|
|
||||||
data.InitDB()
|
data.InitDB()
|
||||||
|
|
||||||
go fetchFortopData()
|
// go fetchFortopData()
|
||||||
|
go fortoprt.FetchData()
|
||||||
envitron.ReceiveData()
|
envitron.ReceiveData()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -14,7 +14,15 @@ func (t *UnixTimestamp) UnmarshalText(b []byte) error {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
*t = UnixTimestamp(time.Unix(i, 0))
|
|
||||||
|
var tt time.Time
|
||||||
|
if len(b) > 10 {
|
||||||
|
tt = time.Unix(0, i)
|
||||||
|
} else {
|
||||||
|
tt = time.Unix(i, 0)
|
||||||
|
}
|
||||||
|
|
||||||
|
*t = UnixTimestamp(tt)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user