Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Consider-none-equivalent-value-for-missing-data-pints-in-weather #417

Open
wants to merge 51 commits into
base: dev
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
51 commits
Select commit Hold shift + click to select a range
1f5bd95
Consider-none-equivalent-value-for-missing
staudtMarius Nov 29, 2022
e4db834
fmt
staudtMarius Nov 29, 2022
b503f06
Merge branch 'dev' into ms/#188-consider-none-equivalent-value-for-mi…
staudtMarius Nov 29, 2022
8b5c484
Fixing some problems
staudtMarius Nov 29, 2022
de89bac
Fixing problem with recursion.
staudtMarius Nov 29, 2022
c25d7b8
Fixing problem with recursion.
staudtMarius Nov 29, 2022
80cb59b
Changing from recursive to iterative approach.
staudtMarius Dec 1, 2022
16f3d54
Improving code, adding tests.
staudtMarius Dec 5, 2022
e026387
Fixing failing tests.
staudtMarius Dec 5, 2022
81cd8ac
Merge branch 'dev' into ms/#188-consider-none-equivalent-value-for-mi…
staudtMarius Dec 5, 2022
727281c
Adding tests, improving code quality.
staudtMarius Dec 6, 2022
067bde1
Merge remote-tracking branch 'origin/ms/#188-consider-none-equivalent…
staudtMarius Dec 6, 2022
12b093b
Merge branch 'dev' into ms/#188-consider-none-equivalent-value-for-mi…
staudtMarius Dec 8, 2022
4f39991
Merge branch 'dev' into ms/#188-consider-none-equivalent-value-for-mi…
staudtMarius Jan 19, 2023
cf970af
Adding logging for missing weather values.
staudtMarius Jan 19, 2023
a27d82a
Merge branch 'dev' into ms/#188-consider-none-equivalent-value-for-mi…
staudtMarius Jan 26, 2023
1af3dcd
Merge branch 'dev' into ms/#188-consider-none-equivalent-value-for-mi…
staudtMarius Feb 20, 2023
a265b52
Merge branch 'dev' into ms/#188-consider-none-equivalent-value-for-mi…
staudtMarius Feb 27, 2023
4f66dd7
Fixing codacy issues.
staudtMarius Feb 27, 2023
6e9e3f7
Merge branch 'dev' into ms/#188-consider-none-equivalent-value-for-mi…
staudtMarius Mar 1, 2023
c5305fc
Fixing codacy issues.
staudtMarius Mar 1, 2023
603a6e1
Some improvements.
staudtMarius Mar 3, 2023
6024730
Merge branch 'dev' into ms/#188-consider-none-equivalent-value-for-mi…
staudtMarius Apr 11, 2023
de88a70
Merge branch 'dev' into ms/#188-consider-none-equivalent-value-for-mi…
staudtMarius Apr 18, 2023
24a95be
Merge branch 'dev' into ms/#188-consider-none-equivalent-value-for-mi…
staudtMarius Apr 26, 2023
2ae5161
Merge branch 'dev' into ms/#188-consider-none-equivalent-value-for-mi…
staudtMarius May 2, 2023
11b0fa3
Merge branch 'dev' into ms/#188-consider-none-equivalent-value-for-mi…
staudtMarius May 4, 2023
3f7ec8e
Fixing failing tests.
staudtMarius May 4, 2023
21a32bb
Merge branch 'dev' into ms/#188-consider-none-equivalent-value-for-mi…
staudtMarius May 9, 2023
b07ed65
Merge branch 'dev' into ms/#188-consider-none-equivalent-value-for-mi…
staudtMarius May 16, 2023
616e784
Merge branch 'dev' into ms/#188-consider-none-equivalent-value-for-mi…
staudtMarius May 25, 2023
d05b839
Merge branch 'dev' into ms/#188-consider-none-equivalent-value-for-mi…
staudtMarius Jul 19, 2023
367175d
Merge branch 'dev' into ms/#188-consider-none-equivalent-value-for-mi…
staudtMarius Aug 14, 2023
4e68320
Merge branch 'dev' into ms/#188-consider-none-equivalent-value-for-mi…
staudtMarius Aug 24, 2023
369d0d9
Merge branch 'dev' into ms/#188-consider-none-equivalent-value-for-mi…
staudtMarius Sep 28, 2023
b8e68cd
Adapting to changes.
staudtMarius Sep 28, 2023
e50c589
Fixing ``Codacy`` issue.
staudtMarius Sep 28, 2023
d9b55ba
Merge branch 'dev' into ms/#188-consider-none-equivalent-value-for-mi…
staudtMarius Oct 6, 2023
4055ecb
Merge branch 'dev' into ms/#188-consider-none-equivalent-value-for-mi…
staudtMarius Oct 23, 2023
03504ea
Merge branch 'dev' into ms/#188-consider-none-equivalent-value-for-mi…
staudtMarius Nov 2, 2023
6fa3982
Merge branch 'dev' into ms/#188-consider-none-equivalent-value-for-mi…
staudtMarius Nov 14, 2023
303e871
Merge remote-tracking branch 'origin/ms/#188-consider-none-equivalent…
staudtMarius Nov 14, 2023
8ccb0e2
Merge branch 'dev' into ms/#188-consider-none-equivalent-value-for-mi…
staudtMarius Nov 16, 2023
cfe1346
Merge branch 'dev' into ms/#188-consider-none-equivalent-value-for-mi…
staudtMarius Nov 20, 2023
360223c
Merge branch 'dev' into ms/#188-consider-none-equivalent-value-for-mi…
staudtMarius Nov 21, 2023
62503bf
Merge remote-tracking branch 'origin/ms/#188-consider-none-equivalent…
staudtMarius Nov 21, 2023
54d0cd8
Merge branch 'dev' into ms/#188-consider-none-equivalent-value-for-mi…
staudtMarius Nov 29, 2023
543d496
Merge branch 'dev' into ms/#188-consider-none-equivalent-value-for-mi…
staudtMarius Jan 8, 2024
395ea9d
Resolving merge conflicts.
staudtMarius Jan 8, 2024
c5db94c
Merge branch 'dev' into ms/#188-consider-none-equivalent-value-for-mi…
staudtMarius Jan 18, 2024
981a3dd
Merge branch 'dev' into ms/#188-consider-none-equivalent-value-for-mi…
staudtMarius Jan 29, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Instantiation of Heat Pump Agents [#253](https://github.com/ie3-institute/simona/issues/253)
- Output of accompanying thermal result models
- Added JDK installation, Scala Plugin + SDK in usersguide [#324](https://github.com/ie3-institute/simona/issues/324)
- Added an interpolation for missing weather data [#188](https://github.com/ie3-institute/simona/issues/188)

### Changed
- Adapted to changed data source in PSDM [#435](https://github.com/ie3-institute/simona/issues/435)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@

package edu.ie3.simona.ontology.messages.services

import edu.ie3.datamodel.models.value.WeatherValue
import edu.ie3.simona.agent.participant.data.Data.SecondaryData
import edu.ie3.simona.ontology.messages.services.ServiceMessage.{
ProvisionMessage,
Expand Down Expand Up @@ -75,4 +76,17 @@ object WeatherMessage {
windVel: Velocity
) extends SecondaryData

/** Container class for a weather value with a weight. It is primarily used
* for interpolation.
* @param value
* weather value
* @param weight
* of the value
* @tparam V
* type of value
*/
final case class ValueWithWeight[V](
value: V,
weight: Long
)
}
109 changes: 66 additions & 43 deletions src/main/scala/edu/ie3/simona/service/weather/WeatherSource.scala
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,9 @@

package edu.ie3.simona.service.weather

import edu.ie3.datamodel.io.connectors.SqlConnector
import com.typesafe.scalalogging.LazyLogging
import edu.ie3.datamodel.io.connectors.SqlConnector

Check warning on line 11 in src/main/scala/edu/ie3/simona/service/weather/WeatherSource.scala

View check run for this annotation

SonarQubeGithubPRChecks / simona Sonarqube Results

src/main/scala/edu/ie3/simona/service/weather/WeatherSource.scala#L11

Duplicate import
import edu.ie3.datamodel.io.factory.timeseries.{
CosmoIdCoordinateFactory,
IconIdCoordinateFactory,
Expand All @@ -17,6 +19,7 @@
import edu.ie3.datamodel.io.source.IdCoordinateSource
import edu.ie3.datamodel.io.source.csv.{CsvDataSource, CsvIdCoordinateSource}
import edu.ie3.datamodel.io.source.sql.SqlIdCoordinateSource
import edu.ie3.datamodel.models.timeseries.individual.IndividualTimeSeries
import edu.ie3.datamodel.models.value.WeatherValue
import edu.ie3.simona.config.SimonaConfig
import edu.ie3.simona.config.SimonaConfig.BaseCsvParams
Expand All @@ -30,6 +33,7 @@
AgentCoordinates,
WeightedCoordinates
}
import edu.ie3.simona.service.weather.WeatherValueInterpolation.interpolate
import edu.ie3.simona.util.ConfigUtil.CsvConfigUtil.checkBaseCsvParams
import edu.ie3.simona.util.ConfigUtil.DatabaseConfigUtil.{
checkCouchbaseParams,
Expand All @@ -41,9 +45,14 @@
import edu.ie3.util.quantities.PowerSystemUnits
import edu.ie3.util.scala.quantities.WattsPerSquareMeter
import org.locationtech.jts.geom.{Coordinate, Point}
import edu.ie3.util.scala.quantities.QuantitySquantsConversions._
import edu.ie3.util.scala.quantities.{Irradiance, WattsPerSquareMeter}

Check warning on line 49 in src/main/scala/edu/ie3/simona/service/weather/WeatherSource.scala

View check run for this annotation

SonarQubeGithubPRChecks / simona Sonarqube Results

src/main/scala/edu/ie3/simona/service/weather/WeatherSource.scala#L49

Duplicate import
import org.locationtech.jts.geom.{Coordinate, Point}

Check warning on line 50 in src/main/scala/edu/ie3/simona/service/weather/WeatherSource.scala

View check run for this annotation

SonarQubeGithubPRChecks / simona Sonarqube Results

src/main/scala/edu/ie3/simona/service/weather/WeatherSource.scala#L50

Duplicate import

Check warning on line 50 in src/main/scala/edu/ie3/simona/service/weather/WeatherSource.scala

View check run for this annotation

SonarQubeGithubPRChecks / simona Sonarqube Results

src/main/scala/edu/ie3/simona/service/weather/WeatherSource.scala#L50

Duplicate import
import squants.motion.MetersPerSecond
import squants.thermal.Kelvin
import tech.units.indriya.ComparableQuantity
import squants.{Temperature, Velocity}
import tech.units.indriya.ComparableQuantity

Check warning on line 55 in src/main/scala/edu/ie3/simona/service/weather/WeatherSource.scala

View check run for this annotation

SonarQubeGithubPRChecks / simona Sonarqube Results

src/main/scala/edu/ie3/simona/service/weather/WeatherSource.scala#L55

Duplicate import
import tech.units.indriya.quantity.Quantities
import tech.units.indriya.unit.Units

Expand Down Expand Up @@ -290,7 +299,7 @@
): Array[Long]
}

object WeatherSource {
object WeatherSource extends LazyLogging {

def apply(
dataSourceConfig: SimonaConfig.Simona.Input.Weather.Datasource,
Expand Down Expand Up @@ -550,52 +559,66 @@
MetersPerSecond(0d)
)

def toWeatherData(
weatherValue: WeatherValue
/** Methode to get weather data from a time series. This method automatically
* interpolates missing values.
*
* @param timeSeries
* with weather values
* @param dateTime
* timestamp in question
* @return
* weather data object
*/
def getWeatherData(
timeSeries: IndividualTimeSeries[WeatherValue],
dateTime: ZonedDateTime
): WeatherData = {
// gets a value option
val valueOption = timeSeries.getValue(dateTime).toScala

// check which data is missing
val (diffIrr, dirIrr, temp, windVel) = getOptions(valueOption)

WeatherData(
weatherValue.getSolarIrradiance.getDiffuseIrradiance.toScala match {
case Some(irradiance) =>
WattsPerSquareMeter(
irradiance
.to(PowerSystemUnits.WATT_PER_SQUAREMETRE)
.getValue
.doubleValue()
)
case None => EMPTY_WEATHER_DATA.diffIrr
},
weatherValue.getSolarIrradiance.getDirectIrradiance.toScala match {
case Some(irradiance) =>
WattsPerSquareMeter(
irradiance
.to(PowerSystemUnits.WATT_PER_SQUAREMETRE)
.getValue
.doubleValue()
)
case None => EMPTY_WEATHER_DATA.dirIrr
},
weatherValue.getTemperature.getTemperature.toScala match {
case Some(temperature) =>
Kelvin(
temperature
.to(Units.KELVIN)
.getValue
.doubleValue()
)
case None => EMPTY_WEATHER_DATA.temp
},
weatherValue.getWind.getVelocity.toScala match {
case Some(windVel) =>
MetersPerSecond(
windVel
.to(Units.METRE_PER_SECOND)
.getValue
.doubleValue()
)
case None => EMPTY_WEATHER_DATA.windVel
}
diffIrr.getOrElse(
interpolate(timeSeries, dateTime, "diffIrr", EMPTY_WEATHER_DATA.diffIrr)
),
dirIrr.getOrElse(
interpolate(timeSeries, dateTime, "dirIrr", EMPTY_WEATHER_DATA.dirIrr)
),
temp.getOrElse(
interpolate(timeSeries, dateTime, "temp", EMPTY_WEATHER_DATA.temp)
),
windVel.getOrElse(
interpolate(timeSeries, dateTime, "windVel", EMPTY_WEATHER_DATA.windVel)
)
)
}

/** Method to get the data of a [[WeatherValue]].
*
* @param valueOption
* value with data
* @return
* a tuple of options
*/
def getOptions(valueOption: Option[WeatherValue]): (
Option[Irradiance],
Option[Irradiance],
Option[Temperature],
Option[Velocity]
) = {
valueOption match {
case Some(value) =>
val solar = value.getSolarIrradiance
(
solar.getDiffuseIrradiance.toScala.map(v => v.toSquants),
solar.getDirectIrradiance.toScala.map(v => v.toSquants),
value.getTemperature.getTemperature.toScala.map(v => v.toSquants),
value.getWind.getVelocity.toScala.map(v => v.toSquants)
)
case None => (None, None, None, None)
}
}

/** Weather package private case class to combine the provided agent
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ import edu.ie3.simona.ontology.messages.services.WeatherMessage.WeatherData
import edu.ie3.simona.service.weather.WeatherSource.{
EMPTY_WEATHER_DATA,
WeatherScheme,
toWeatherData
getWeatherData
}
import edu.ie3.simona.service.weather.WeatherSourceWrapper.WeightSum
import edu.ie3.simona.service.weather.{WeatherSource => SimonaWeatherSource}
Expand All @@ -49,9 +49,7 @@ import tech.units.indriya.ComparableQuantity
import java.nio.file.Path
import java.time.ZonedDateTime
import javax.measure.quantity.Length

import scala.jdk.CollectionConverters.{IterableHasAsJava, MapHasAsScala}
import scala.jdk.OptionConverters.RichOptional
import scala.util.{Failure, Success, Try}

/** This class provides an implementation of the SIMONA trait
Expand Down Expand Up @@ -102,12 +100,10 @@ private[weather] final case class WeatherSourceWrapper private (
)
.asScala
.toMap
val weatherDataMap = results.flatMap { case (point, timeSeries) =>
val weatherDataMap = results.map { case (point, timeSeries) =>
// change temperature scale for the upcoming calculations
timeSeries
.getValue(dateTime)
.toScala
.map(weatherValue => point -> toWeatherData(weatherValue))

point -> getWeatherData(timeSeries, dateTime)
}

weatherDataMap.foldLeft((EMPTY_WEATHER_DATA, WeightSum.EMPTY_WEIGHT_SUM)) {
Expand Down
Loading