Initial commit
This commit is contained in:
commit
2c4366ff1f
8 changed files with 438 additions and 0 deletions
132
main.go
Normal file
132
main.go
Normal file
|
@ -0,0 +1,132 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"database/sql"
|
||||
"encoding/xml"
|
||||
"fmt"
|
||||
"net/http"
|
||||
"strconv"
|
||||
"time"
|
||||
|
||||
"git.fuyu.moe/5GPowerQuality/parser/internal/model"
|
||||
"git.ultraware.nl/NiseVoid/qb/qbdb"
|
||||
"git.ultraware.nl/NiseVoid/qb/qf"
|
||||
"golang.org/x/net/html/charset"
|
||||
)
|
||||
|
||||
var db *qbdb.DB
|
||||
|
||||
func main() {
|
||||
initDB()
|
||||
|
||||
startDate := GetStartDate()
|
||||
|
||||
for time.Now().After(startDate) {
|
||||
start, end := startDate, startDate.AddDate(0, 0, 7)
|
||||
|
||||
data := GetFortopData(start, end)
|
||||
ranges := map[string][]Range{}
|
||||
for _, v := range data {
|
||||
ranges[v.Naam] = v.Range
|
||||
}
|
||||
|
||||
sets := Sets{}
|
||||
for k, v := range ranges {
|
||||
for _, r := range v {
|
||||
date := time.Time(r.Date)
|
||||
set, ok := sets[date]
|
||||
if !ok {
|
||||
sets[date] = Set{}
|
||||
set = sets[date]
|
||||
}
|
||||
|
||||
set[k] = r.Value
|
||||
}
|
||||
}
|
||||
|
||||
insertSets(sets)
|
||||
|
||||
startDate = end
|
||||
}
|
||||
}
|
||||
|
||||
// GetStartDate gets the last measurement date
|
||||
func GetStartDate() time.Time {
|
||||
m := model.Measurement()
|
||||
var t *time.Time
|
||||
|
||||
q := m.Select(qf.Max(m.Time))
|
||||
err := db.QueryRow(q).Scan(&t)
|
||||
if t == nil || err == sql.ErrNoRows {
|
||||
return time.Date(2018, 1, 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.CGem1, m.CGem2, m.CGem3,
|
||||
m.Ep1, m.Ep2, m.Ep3,
|
||||
m.IGem1, m.IGem2, m.IGem3,
|
||||
m.IMax1, m.IMax2, m.IMax3,
|
||||
m.PGem1, m.PGem2, m.PGem3,
|
||||
m.PMax1, m.PMax2, m.PMax3,
|
||||
m.SGem1, m.SGem2, m.SGem3,
|
||||
m.SMax1, m.SMax2, m.SMax3,
|
||||
m.UGem1, m.UGem2, m.UGem3,
|
||||
)
|
||||
|
||||
for k, v := range sets {
|
||||
q.Values(k,
|
||||
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[`PGem1`], v[`PGem2`], v[`PGem3`],
|
||||
v[`PMax1`], v[`PMax2`], v[`PMax3`],
|
||||
v[`SGem1`], v[`SGem2`], v[`SGem3`],
|
||||
v[`SMax1`], v[`SMax2`], v[`SMax3`],
|
||||
v[`UGem1`], v[`UGem2`], v[`UGem3`],
|
||||
)
|
||||
}
|
||||
|
||||
err := db.Exec(q)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
|
||||
// GetFortopData retrieves data from fortop
|
||||
func GetFortopData(startDate, endDate time.Time) []Meetwaarde {
|
||||
url := `https://energy4all.energyportal.online/index?p5g=S_1_` + strconv.FormatInt(startDate.Unix(), 10) + `_` + strconv.FormatInt(endDate.Unix(), 10)
|
||||
resp, err := http.Get(url)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
if resp.StatusCode != 200 {
|
||||
fmt.Println(`Got status code:`, resp.StatusCode)
|
||||
return nil
|
||||
}
|
||||
|
||||
decoder := xml.NewDecoder(resp.Body)
|
||||
decoder.CharsetReader = charset.NewReaderLabel
|
||||
|
||||
var data FortopFormat
|
||||
err = decoder.Decode(&data)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
return data.Trafo.Meter.Meetwaarde
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue