From 0ec424c224ac2f1734637be894211a75ed6589b5 Mon Sep 17 00:00:00 2001 From: Pierre-Olivier Mercier Date: Sun, 4 Dec 2022 11:20:32 +0100 Subject: [PATCH] Add more data about frequency --- frequency.go | 58 +++++++++++++++++++++++++++++++++++++++---------- measurements.go | 5 ++++- 2 files changed, 51 insertions(+), 12 deletions(-) diff --git a/frequency.go b/frequency.go index 17be790..f96f350 100644 --- a/frequency.go +++ b/frequency.go @@ -12,6 +12,19 @@ import ( const SwissGridAPI = "https://www.swissgrid.ch/bin/services/apicache?path=/content/swissgrid/fr/home/operation/grid-data/current-data/jcr:content/parsys/livedatawidget_10292" +var ( + LastFreqPlan = 50.0 + GridTz *time.Location +) + +func init() { + var err error + GridTz, err = time.LoadLocation("Europe/Zurich") + if err != nil { + panic(err) + } +} + type SwissGridItem struct { Id string `json:"id"` Label string `json:"label"` @@ -67,30 +80,53 @@ func FetchFrequency() (*SwissGridData, error) { } func WriteFrequency(writer TICWriter, freq *SwissGridData) error { + points := map[string]Point{} + horodate := time.Now() + for _, i := range freq.Data.Table { - if i.Id == "FreqAct" { + if i.Id == "FreqPlan" { f, err := strconv.ParseFloat(strings.Fields(i.Value)[0], 64) if err != nil { return err } - point := Point{ + if LastFreqPlan != f { + points["FREQPLAN"] = Point{ + Data: []byte(fmt.Sprintf("%.0f", f*1000)), + } + LastFreqPlan = f + } + } else if i.Id == "FreqAct" { + f, err := strconv.ParseFloat(strings.Fields(i.Value)[0], 64) + if err != nil { + return err + } + + points["FREQ"] = Point{ Data: []byte(fmt.Sprintf("%.0f", f*1000)), } - - err = writer.AddPoints( - map[string]Point{ - "FREQ": point, - }, - time.Now(), - ) + } else if i.Id == "GridTimeDev" { + f, err := strconv.ParseFloat(strings.Fields(i.Value)[0], 64) if err != nil { - log.Println("Unable to write frequency point:", err) + return err } - break + points["GRIDTIMEDEV"] = Point{ + Data: []byte(fmt.Sprintf("%.0f", f*1000)), + } + } else if i.Id == "SampleTimestamp" { + var err error + horodate, err = time.ParseInLocation("02.01.2006 15:04:05", i.Value, GridTz) + if err != nil { + return err + } } } + err := writer.AddPoints(points, horodate) + if err != nil { + log.Println("Unable to write frequency point:", err) + } + return nil } diff --git a/measurements.go b/measurements.go index 8571ae6..f1b2f4f 100644 --- a/measurements.go +++ b/measurements.go @@ -51,7 +51,10 @@ var ( } MeasurementUnits = map[string]string{ - "FREQ": "mHz", + "FREQ": "mHz", + "FREQPLAN": "mHz", + "GRIDTIMEDEV": "ms", + "EAST": "Wh", "EASF01": "Wh", "EASF02": "Wh",