- 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/
44 lines
1.3 KiB
Python
44 lines
1.3 KiB
Python
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!")
|