-
Notifications
You must be signed in to change notification settings - Fork 4
Open
Description
After importing the data, I noticed that the raw data included the same values for each minute of the hour. See screenshot:

The data returned from SmartHub (for me) seems to be hourly, see sample debug output:
DEBUG: Parsed data from poll endpoint:
&{Status:COMPLETE Data:map[ELECTRIC:[{Type:USAGE Series:[{Name:336288847 Data:[{UnixMillis:1719532800000 Value:2.26} {UnixMillis:1719536400000 Value:2.24} {UnixMillis:1719540000000 Value:0.97}
I modified the local code to change the WriteMetrics function to write one point per hour which fixed the problem for me, and now I have single row for each hour with hourly value.
func WriteMetrics(records []ElectricUsage, config InfluxConfig) error {
opts := influxdb2.DefaultOptions()
if config.Insecure {
opts.SetTLSConfig(&tls.Config{InsecureSkipVerify: true})
}
client := influxdb2.NewClientWithOptions(config.Host, config.AuthToken, opts)
writeApi := client.WriteAPIBlocking(config.Org, config.Database)
for _, record := range records {
// Calculate the duration in hours, assuming the record spans an hour
hours := record.EndTime.Sub(record.StartTime).Hours()
if hours == 0 {
hours = 1 // Avoid division by zero, assume at least one hour
}
// Create a point for the record
point := influxdb2.NewPointWithMeasurement("electric").
SetTime(record.StartTime).
AddField("watts", float64(record.WattHours)/hours)
if record.CostInCents != nil {
point.AddField("cost", float64(*record.CostInCents)/hours)
}
if record.MeterName != nil {
point.AddTag("name", *record.MeterName)
}
// Write the point to the database
err := writeApi.WritePoint(context.Background(), point)
if err != nil {
return err
}
}
return nil
}I'm not sure if my utility provider returns different data vs. yours, but some customization here would be nice to control the point interval.
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels