Background to EFAS SOS
EFAS SOS is a web API for retrieving EFAS forecasts as data. The API returns an xml file. Example api requests can be found on the SOS services's web page. Note that in order to download recent forecasts, EFAS SOS credentials are required. These can be requested from the EFAS project.
Within EFAS version 4.0, four streamflow forecast products are produced. These are listed in below table which includes various characteristics that are relevant for the configuration of the present Delft-FEWS import. All forecasts are available at a 6-hour time step. Note that the composition of products and their characteristics may change with future EFAS versions.
Forcing | Type | Ensemble range | procedure |
---|
DWD ICON | deterministic |
| dwd_lisflood |
COSMO-LEPS | ensemble | 1 - 20 | cos_lisflood |
ECMWF-HRES | deterministic |
| eud_lisflood |
ECMWF-ENS | ensemble | 1 - 50 | eue_lisflood |
The Delft-FEWS import
The European Flood Awareness System(EFAS) Sensor Observation Service(SOS) import function (<importType>EfasSosServer</importType>) imports XML files throughthe EFAS SOS API. The time0 of the workflow task will be used to identify which forecast is requested.
Warning |
---|
|
- At times, the EFAS SOS API server response can be very slow. This may cause the import to take long, or even a time-out of the Delft-FEWS import.
- EFAS SOS time-outs happen frequently.
- We found that the EFAS SOS service isn't always updated with new data very quickly; most recent data in EFAS-IS may take a few hours to find its way to the EFAS SOS service.
- Consecutive data requests from the same browser or from the same Delft-FEWS application may result in data requests to be denied.
|
Example import module xml file
Below is an example of an xml config for the EFAS SOS Import Module Instance. Some highlights include:
- import type is
<importTypeStandard>EfasSosServer</importTypeStandard>
- credentials are required to download recent EFAS forecasts, i.e. forecasts that were produced in the last 30 days.
- The procedure property specifies which product is requested. See above table for possible options.
- For ensemble products:
- the following property should be included:
<bool key="ensemble" value="true"/>
- the timeSeriesSet element should include both an
<ensembleId>
and an <ensembleMemberIndexRange>
element. The latter should specify which ensemble members should be requested. Example: <ensembleMemberIndexRange start="1" end="20"/>
Code Block |
---|
language | xml |
---|
linenumbers | true |
---|
collapse | true |
---|
|
<?xml version="1.0" encoding="UTF-8"?>
<timeSeriesImportRun xmlns="http://www.wldelft.nl/fews" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.wldelft.nl/fews http://fews.wldelft.nl/schemas/version1.0/timeSeriesImportRun.xsd">
<import>
<general>
<importTypeStandard>EfasSosServer</importTypeStandard>
<serverUrl>https |
...
://efas-sos.efas.eu/sos/?service=SOS&version=2.0.0</serverUrl>
<user>xxxx</user>
<password>xxxxxxxxxx</password>
<idMapId>id_import_efas_sos</idMapId>
</general>
<properties>
<string key="procedure" value="dwd_lisflood"/>
</properties>
<timeSeriesSet>
<moduleInstanceId>import_efas_sos</moduleInstanceId>
<valueType>scalar</valueType>
<parameterId>Q</parameterId>
<locationId>X007318</locationId>
<timeSeriesType>external forecasting</timeSeriesType>
<timeStep unit="hour" multiplier="6"/>
<readWriteMode>add originals</readWriteMode>
<ensembleId>dwd_lisflood</ensembleId>
</timeSeriesSet>
</import>
<import>
<general>
<importTypeStandard>EfasSosServer</importTypeStandard>
<serverUrl>https://efas-sos.efas.eu/sos/?service=SOS&version=2.0.0</serverUrl>
<user>xxxx</user>
<password>xxxx</password>
<idMapId>id_import_efas_sos</idMapId>
</general>
<properties>
<string key="procedure" value="cos_lisflood"/>
<bool key="ensemble" value="true"/>
</properties>
<timeSeriesSet>
<moduleInstanceId>import_efas_sos</moduleInstanceId>
<valueType>scalar</valueType>
<parameterId>Q</parameterId>
<locationId>X007318</locationId>
<timeSeriesType>external forecasting</timeSeriesType>
<timeStep unit="hour" multiplier="6"/>
<readWriteMode>add originals</readWriteMode>
<ensembleId>cos_lisflood</ensembleId>
<ensembleMemberIndexRange start="1" end="20"/>
</timeSeriesSet>
</import>
<import>
<general>
<importTypeStandard>EfasSosServer</importTypeStandard>
<serverUrl>https://efas-sos.efas.eu/sos/?service=SOS&version=2.0.0</serverUrl>
<user>xxxx</user>
<password>xxxx</password>
<idMapId>id_import_efas_sos</idMapId>
</general>
<properties>
<string key="procedure" value="eud_lisflood"/>
</properties>
<timeSeriesSet>
<moduleInstanceId>import_efas_sos</moduleInstanceId>
<valueType>scalar</valueType>
<parameterId>Q</parameterId>
<locationId>X007318</locationId>
<timeSeriesType>external forecasting</timeSeriesType>
<timeStep unit="hour" multiplier="6"/>
<readWriteMode>add originals</readWriteMode>
<ensembleId>eud_lisflood</ensembleId>
</timeSeriesSet>
</import>
<import>
<general>
<importTypeStandard>EfasSosServer</importTypeStandard>
<serverUrl>https://efas-sos.efas.eu/sos/?service=SOS&version=2.0.0</serverUrl>
<user>xxxx</user>
<password>xxxx</password>
<idMapId>id_import_efas_sos</idMapId>
</general>
<properties>
<string key="procedure" value="eue_lisflood"/>
<bool key="ensemble" value="true"/>
</properties>
<timeSeriesSet>
<moduleInstanceId>import_efas_sos</moduleInstanceId>
<valueType>scalar</valueType>
<parameterId>Q</parameterId>
<locationId>X007318</locationId>
<timeSeriesType>external forecasting</timeSeriesType>
<timeStep unit="hour" multiplier="6"/>
<readWriteMode>add originals</readWriteMode>
<ensembleId>eue_lisflood</ensembleId>
<ensembleMemberIndexRange start="1" end="50"/>
</timeSeriesSet>
</import>
</timeSeriesImportRun>
|
Debugging
When the data request and/or import fails, there is the option to retrieve the data request url from the log. This requires that the module is run in debug mode. You may want to copy the url into a browser and identify what the browser response is.&request=GetObservation&featureOfInterest=ID_1&procedure=eue_lisflood_50&temporalFilter=om:resultTime,2020-08-10T00:00:00Z