diff --git a/core/database/powerUsage.go b/core/database/powerUsage.go index 21041062..1566a9db 100644 --- a/core/database/powerUsage.go +++ b/core/database/powerUsage.go @@ -44,7 +44,7 @@ func createPowerUsageTable() error { } // Inserts a new data point into the power usage time record table -func AddPowerUsagePoint(onData PowerDrawData, offData PowerDrawData, entryTime time.Time) (uint, error) { +func AddPowerUsagePoint(onData PowerDrawData, offData PowerDrawData, entryTime time.Time) (uint64, error) { query, err := db.Prepare(` INSERT INTO powerUsage( @@ -86,7 +86,7 @@ func AddPowerUsagePoint(onData PowerDrawData, offData PowerDrawData, entryTime t log.Error("Failed to add power usage point: obtaining id failed: ", err.Error()) return 0, err } - return uint(newId), nil + return uint64(newId), nil } // Returns records from the power usage records diff --git a/core/database/weather.go b/core/database/weather.go index 857eb176..8419bcd3 100644 --- a/core/database/weather.go +++ b/core/database/weather.go @@ -2,6 +2,7 @@ package database import ( "database/sql" + "fmt" "time" ) @@ -46,7 +47,7 @@ func GetWeatherDataRecords(maxAgeMinutes int) ([]WeatherMeasurement, error) { Temperature, FeelsLike, Humidity - From weather + FROM weather ` if maxAgeMinutes >= 0 { @@ -100,13 +101,18 @@ func GetWeatherDataRecords(maxAgeMinutes int) ([]WeatherMeasurement, error) { func AddWeatherDataRecord( weatherTitle string, - weatherTime time.Time, + weatherTime *time.Time, weatherDescription string, temperature float32, feelsLike float32, humidity uint8, ) (uint64, error) { - query, err := db.Prepare(` + defaultOrQuestionMark := "DEFAULT" + if weatherTime != nil { + defaultOrQuestionMark = "?" + } + + query, err := db.Prepare(fmt.Sprintf(` INSERT INTO weather( Id, @@ -117,21 +123,35 @@ func AddWeatherDataRecord( FeelsLike, Humidity ) - VALUES(DEFAULT, ?, ?, ?, ?, ?, ?) - `) + VALUES(DEFAULT, %s, ?, ?, ?, ?, ?) + `, defaultOrQuestionMark)) if err != nil { log.Error("Failed to add weather measurement: preparing query failed: ", err.Error()) return 0, err } defer query.Close() - res, err := query.Exec( - weatherTime, - weatherTitle, - weatherDescription, - temperature, - feelsLike, - humidity, - ) + + var res sql.Result + + if weatherTime != nil { + res, err = query.Exec( + weatherTime, + weatherTitle, + weatherDescription, + temperature, + feelsLike, + humidity, + ) + } else { + res, err = query.Exec( + weatherTitle, + weatherDescription, + temperature, + feelsLike, + humidity, + ) + } + if err != nil { log.Error("Failed to add weather measurement: executing query failed: ", err.Error()) return 0, err diff --git a/core/database/weather_test.go b/core/database/weather_test.go index f0d58c29..66170346 100644 --- a/core/database/weather_test.go +++ b/core/database/weather_test.go @@ -15,7 +15,7 @@ func TestWeatherData(t *testing.T) { // Add a dummy weather record id, err := AddWeatherDataRecord( "cloudy", - time.Now(), + time.Now().Local(), "some clouds", 42.1, 3.1415926, diff --git a/core/import.go b/core/import.go index 7c071df8..927b4a50 100644 --- a/core/import.go +++ b/core/import.go @@ -453,9 +453,10 @@ func createCacheDataInDatabase(cacheData config.SetupCacheData) error { log.Trace("Importing weather data...") defer func() { wg.Done() }() for _, weatherEntry := range cacheData.WeatherHistory { + timestamp := time.UnixMilli(int64(weatherEntry.Time)).Local() if _, err := database.AddWeatherDataRecord( weatherEntry.WeatherTitle, - time.UnixMilli(int64(weatherEntry.Time)), + ×tamp, weatherEntry.WeatherDescription, weatherEntry.Temperature, weatherEntry.FeelsLike, diff --git a/services/weather/weather.go b/services/weather/weather.go index 7964fa15..e9ba2cd9 100644 --- a/services/weather/weather.go +++ b/services/weather/weather.go @@ -97,7 +97,7 @@ func GetCurrentWeather() (WeatherMeasurement, error) { // Insert the new record into the database id, err := database.AddWeatherDataRecord( newLabel, - time.Now(), + nil, newDescription, float32(freshData.Main.Temp), float32(freshData.Main.FeelsLike),