Add envitron support
This commit is contained in:
parent
6643217fdb
commit
c6e735950f
12 changed files with 402 additions and 238 deletions
94
data/data.go
Normal file
94
data/data.go
Normal file
|
@ -0,0 +1,94 @@
|
|||
package data
|
||||
|
||||
import (
|
||||
"database/sql"
|
||||
"time"
|
||||
|
||||
"git.fuyu.moe/5GPowerQuality/parser/internal/model"
|
||||
"git.ultraware.nl/NiseVoid/qb"
|
||||
"git.ultraware.nl/NiseVoid/qb/qc"
|
||||
"git.ultraware.nl/NiseVoid/qb/qf"
|
||||
)
|
||||
|
||||
// GetMeterID gets the meter ID, if there is none yet a new record is add to meter
|
||||
func GetMeterID(source Source, meterID string) (id int) {
|
||||
me := model.Meter()
|
||||
q := me.Select(me.ID).
|
||||
Where(
|
||||
qc.Eq(me.UID, meterID),
|
||||
qc.Eq(me.Source, source),
|
||||
)
|
||||
|
||||
err := db.QueryRow(q).Scan(&id)
|
||||
switch err {
|
||||
case nil:
|
||||
case sql.ErrNoRows:
|
||||
iq := me.Insert(me.Name, me.UID, me.Source).
|
||||
Values(``, meterID, source)
|
||||
|
||||
err = db.QueryRow(qb.Returning(iq, me.ID)).Scan(&id)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
default:
|
||||
panic(err)
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
// GetStartDate gets the last measurement date
|
||||
func GetStartDate(source Source) time.Time {
|
||||
m, me := model.Measurement(), model.Meter()
|
||||
|
||||
q := m.Select(qf.Max(m.Time)).
|
||||
InnerJoin(me.ID, m.MeterID).
|
||||
Where(qc.Eq(me.Source, source))
|
||||
|
||||
var t *time.Time
|
||||
err := db.QueryRow(q).Scan(&t)
|
||||
if (err == nil && t == nil) || err == sql.ErrNoRows {
|
||||
return time.Date(2018, 4, 1, 0, 0, 0, 0, time.Local)
|
||||
}
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
*t = t.Add(time.Second)
|
||||
|
||||
return *t
|
||||
}
|
||||
|
||||
func InsertSets(sets Sets) {
|
||||
if len(sets) == 0 {
|
||||
return
|
||||
}
|
||||
|
||||
m := model.Measurement()
|
||||
q := m.Insert(m.Time, m.MeterID,
|
||||
m.CGem1, m.CGem2, m.CGem3,
|
||||
m.Ep1, m.Ep2, m.Ep3,
|
||||
m.IGem1, m.IGem2, m.IGem3,
|
||||
m.IMax1, m.IMax2, m.IMax3,
|
||||
m.PMax1, m.PMax2, m.PMax3,
|
||||
m.SMax1, m.SMax2, m.SMax3,
|
||||
m.UGem1, m.UGem2, m.UGem3,
|
||||
)
|
||||
|
||||
for k, v := range sets {
|
||||
q.Values(k.Time, k.Meter,
|
||||
v[`CGem1`], v[`CGem2`], v[`CGem3`],
|
||||
v[`EP1`], v[`EP2`], v[`EP3`],
|
||||
v[`IGem1`], v[`IGem2`], v[`IGem3`],
|
||||
v[`IMax1`], v[`IMax2`], v[`IMax3`],
|
||||
v[`PMax1`], v[`PMax2`], v[`PMax3`],
|
||||
v[`SMax1`], v[`SMax2`], v[`SMax3`],
|
||||
v[`UGem1`], v[`UGem2`], v[`UGem3`],
|
||||
)
|
||||
}
|
||||
|
||||
err := db.Exec(q)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
28
data/db.go
Normal file
28
data/db.go
Normal file
|
@ -0,0 +1,28 @@
|
|||
package data
|
||||
|
||||
import (
|
||||
"database/sql"
|
||||
|
||||
"git.fuyu.moe/5GPowerQuality/parser/internal/migrations"
|
||||
"git.ultraware.nl/NiseVoid/qb/driver/autoqb"
|
||||
"git.ultraware.nl/NiseVoid/qb/qbdb"
|
||||
|
||||
_ "github.com/lib/pq" // PostgreSQL driver
|
||||
)
|
||||
|
||||
var db *qbdb.DB
|
||||
|
||||
func InitDB() {
|
||||
d, err := sql.Open(`postgres`, `host=/tmp dbname=power_quality`)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
err = migrations.RunMigrations(d)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
db = autoqb.New(d)
|
||||
|
||||
}
|
27
data/type.go
Normal file
27
data/type.go
Normal file
|
@ -0,0 +1,27 @@
|
|||
package data
|
||||
|
||||
import "time"
|
||||
|
||||
// Source is a source of power quality data
|
||||
type Source uint8
|
||||
|
||||
// All known source
|
||||
const (
|
||||
SourceFortop = iota + 1
|
||||
SourceEnvitron
|
||||
)
|
||||
|
||||
func (s Source) String() string {
|
||||
return []string{``, `Fortop`, `Envitron`}[s]
|
||||
}
|
||||
|
||||
// Sets are multiple sets of date
|
||||
type Sets map[Key]Set
|
||||
|
||||
// Set is a set of data
|
||||
type Set map[string]float64
|
||||
|
||||
type Key struct {
|
||||
Time time.Time
|
||||
Meter int
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue