Add envitron support

This commit is contained in:
Nise Void 2018-06-19 15:20:02 +02:00
parent 6643217fdb
commit c6e735950f
Signed by: NiseVoid
GPG key ID: FBA14AC83EA602F3
12 changed files with 402 additions and 238 deletions

73
fortop/fetch.go Normal file
View 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
View 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"`
}