Add envitron support
This commit is contained in:
parent
6643217fdb
commit
c6e735950f
12 changed files with 402 additions and 238 deletions
73
fortop/fetch.go
Normal file
73
fortop/fetch.go
Normal file
|
@ -0,0 +1,73 @@
|
|||
package fortop
|
||||
|
||||
import (
|
||||
"encoding/xml"
|
||||
"net/http"
|
||||
"strconv"
|
||||
"time"
|
||||
|
||||
"git.fuyu.moe/5GPowerQuality/parser/data"
|
||||
"golang.org/x/net/html/charset"
|
||||
)
|
||||
|
||||
var start time.Time
|
||||
|
||||
func FetchData() {
|
||||
if start.IsZero() {
|
||||
start = data.GetStartDate(data.SourceFortop)
|
||||
}
|
||||
|
||||
end := start.Add(time.Hour)
|
||||
|
||||
resp := getFortopData(start, end)
|
||||
|
||||
sets := data.Sets{}
|
||||
for _, meter := range resp {
|
||||
mID := data.GetMeterID(data.SourceFortop, meter.MeterID)
|
||||
|
||||
for _, v := range meter.Meetwaarde {
|
||||
valName := v.Naam
|
||||
|
||||
for _, r := range v.Range {
|
||||
key := data.Key{Meter: mID, Time: time.Time(r.Date)}
|
||||
if _, ok := sets[key]; !ok {
|
||||
sets[key] = data.Set{}
|
||||
}
|
||||
|
||||
sets[key][valName] = r.Value
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
data.InsertSets(sets)
|
||||
|
||||
if end.Before(time.Now()) {
|
||||
start = end.Add(time.Second)
|
||||
return
|
||||
}
|
||||
|
||||
time.Sleep(time.Minute)
|
||||
start = data.GetStartDate(data.SourceFortop)
|
||||
}
|
||||
|
||||
func getFortopData(startDate, endDate time.Time) []Meter {
|
||||
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 {
|
||||
panic(`Got status code:` + strconv.Itoa(resp.StatusCode))
|
||||
}
|
||||
|
||||
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
|
||||
}
|
36
fortop/type.go
Normal file
36
fortop/type.go
Normal file
|
@ -0,0 +1,36 @@
|
|||
package fortop
|
||||
|
||||
import (
|
||||
"encoding/xml"
|
||||
|
||||
"git.fuyu.moe/5GPowerQuality/parser/shared"
|
||||
)
|
||||
|
||||
// FortopFormat ..
|
||||
type FortopFormat struct {
|
||||
XMLName xml.Name `xml:"Trafo-Details"`
|
||||
Trafo struct {
|
||||
TrafoNummer int `xml:"trafonummer"`
|
||||
Meter []Meter `xml:"meter"`
|
||||
} `xml:"trafo"`
|
||||
}
|
||||
|
||||
// Meter contains all data from one specific meter
|
||||
type Meter struct {
|
||||
MeterID string `xml:"meter-id"`
|
||||
StartDate shared.UnixTimestamp `xml:"startdate"`
|
||||
EndDate shared.UnixTimestamp `xml:"enddate"`
|
||||
Meetwaarde []Meetwaarde `xml:"meetwaarde"`
|
||||
}
|
||||
|
||||
// Meetwaarde contains the data that is not pointless garbage
|
||||
type Meetwaarde struct {
|
||||
Naam string `xml:"naam"`
|
||||
Range []Range `xml:"range"`
|
||||
}
|
||||
|
||||
// Range is a single set of data
|
||||
type Range struct {
|
||||
Date shared.UnixTimestamp `xml:"date"`
|
||||
Value float64 `xml:"value"`
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue