Add FlexMeasures plugins, USEF protocol, and Cariflex simulator
- flexmeasures-entsoe: ENTSO-E data plugin - flexmeasures-weather: Weather data plugin - USEF Flex Trading Protocol PDF (2.4MB) - Cariflex simulator (publishes to Redis) - Dashboard Grafana updated with correct InfluxDB queries - All tools extracted in /tools/
This commit is contained in:
@@ -0,0 +1,43 @@
|
||||
from marshmallow import (
|
||||
Schema,
|
||||
validates,
|
||||
ValidationError,
|
||||
fields,
|
||||
validate,
|
||||
)
|
||||
|
||||
import pytz
|
||||
|
||||
from ...utils.weather import get_supported_sensor_spec, get_supported_sensors_str
|
||||
|
||||
|
||||
class WeatherSensorSchema(Schema):
|
||||
"""
|
||||
Schema for the weather sensor registration.
|
||||
Based on flexmeasures.Sensor, plus some attributes for the weather station asset.
|
||||
"""
|
||||
|
||||
name = fields.Str(required=True)
|
||||
timezone = fields.Str()
|
||||
asset_id = fields.Int(required=False, allow_none=True)
|
||||
latitude = fields.Float(
|
||||
required=False, validate=validate.Range(min=-90, max=90), allow_none=True
|
||||
)
|
||||
longitude = fields.Float(
|
||||
required=False, validate=validate.Range(min=-180, max=180), allow_none=True
|
||||
)
|
||||
|
||||
@validates("name")
|
||||
def validate_name_is_supported(self, name: str, **kwargs):
|
||||
if get_supported_sensor_spec(name):
|
||||
return
|
||||
raise ValidationError(
|
||||
f"Weather sensors with name '{name}' are not supported by flexmeasures-weather. For now, the following is supported: [{get_supported_sensors_str()}]"
|
||||
)
|
||||
|
||||
@validates("timezone")
|
||||
def validate_timezone(self, timezone: str, **kwargs):
|
||||
try:
|
||||
pytz.timezone(timezone)
|
||||
except pytz.UnknownTimeZoneError:
|
||||
raise ValidationError(f"Timezone {timezone} is unknown!")
|
||||
Reference in New Issue
Block a user