...
Data Delivery Web Service
XML request
Root
element name | dataDeliveryRequest |
---|---|
defined in | http://solargis.info/schema/ws-data.xsd |
description | The root element of the XML request is the <dataDeliveryRequest> with required attributes 'dateFrom' and 'dateTo' for setting desired data period in the response. Accepted is a date string in the form of ''YYYY-mm-dd" e.g., "2017-09-30". It is assumed UTC (GMT+00) time zone for both dates unless otherwise specified by the <timeZone> element of the <processing>. |
content | required one <site> , required one <processing> |
@dateFrom* | start of the data period, ''YYYY-mm-dd" |
@dateTo* | end of the data period, ''YYYY-mm-dd" |
Explanation of the table above: The element name is that what you can see in the XML request. If the element is of simple type, the content is a literal (text or number), otherwise the content can be list of another <element> or none. Attribute of the element is prefixed by '@' character. Required attribute is marked by '*' character.
Processing
element name | processing |
---|---|
defined in | http://solargis.info/schema/data-request.xsd |
description | Complex element with instructions about how response should be generated. |
content | optional one <timeZone>, optional one <timestampType> |
@summarization* | required, time frequency in the response. One of YEARLY, MONTHLY, DAILY, HOURLY, MIN_30, MIN_15, MIN_10, MIN_5 |
@key* | required, list of output data parameters. Example: key="GHI GTI TEMP WS PVOUT". See below table for all supported parameters. |
@terrainShading | optional, boolean, if 'true', the distant horizon taken from SRTM data is considered, default is 'false' (no horizon obstructions at all), Note: a user can also apply custom horizon data by providing <horizon> element within the <site> element |
...
element name | timestampType |
---|---|
defined in | http://solargis.info/schema/data-request.xsd |
description | Simple element provides how aggregated time intervals in the response should be labeled. Valid for [sub]hourly summarization. Intervals can be time-stamped at the center (default) or at start or at end. In other words, users can choose left or right edge of the time interval for its label (besides center). |
content | required, one of START, CENTER, END |
Site
element name | site |
---|---|
defined in | http://solargis.info/schema/data-request.xsd |
description | Complex element representing site location, optionally with a PV technology installed |
content | optional one <geometry>, optional one <system>, optional one <terrain>, optional one <horizon> |
@id* | required, site identification, cannot start with number, cannot have white space |
@lat* | required, site latitude in decimal degrees e.g, 48.61259 |
@lng* | required, site longitude in decimal degrees e.g, 20.827079 |
@name | optional, any name of the site, default is empty string |
...
GeometryFixedOneAngle | GeometryOneAxisVertical | GeometryOneAxisInclinedNS | GeometryOneAxisHorizontalNS | GeometryTwoAxisAstronomical |
---|---|---|---|---|
|
|
|
|
|
PV system
element name | system |
---|---|
defined in | http://solargis.info/schema/common-pv.xsd |
description | Parametrization of the PV system. Required for simulating PVOUT parameter. |
content | required one <module> element, required one <inverter> element, required one <losses> element, optional one <topology> element, |
@installedPower* | required float value (greater than zero). Total installed DC power of the PV system in kilowatts-peak (kWp). The total PV system rating consists of a summation of the panel ratings measured in STC. |
@installationType | optional, use one from FREE_STANDING (default), ROOF_MOUNTED, BUILDING_INTEGRATED. This property of the PV system helps to estimate how modules are cooled by air. For sloped roof with PV modules on rails tilted at the same angle as the roof choose 'ROOF_MOUNTED' value. For PV modules incorporated into building facade choose 'BUILDING_INTEGRATED' value. This option is considered as the worst ventilated. As the best ventilated option is considered 'FREE_STANDING' installation. This typically means stand-alone installation on tilted racks anchored into the ground. Also choose this option if a PV system is installed on a flat roof. |
@dateStartup | optional string formatted as "yyyy-mm-dd" (example 2015-01-01). Start-up date of the PV system (unpacking of modules). This parameter is used for calculation of degradation of modules caused by aging. If omitted, the degradation is not taken into account. |
@selfShading | optional, default is 'false'. The parameter affects PV power calculation for 'GeometryFixedOneAngle' geometry, then 'GeometryOneAxisInclinedNS' and 'GeometryOneAxisHorizontalNS' trackers if backTracking="false". When 'selfShading' is switched on, the simulated PV power is typically lower comparing to standalone PV construction not affected by shading from its neighbors. With trackers, always switch off 'backTracking' attribute, because the back tracking avoids self-shading. |
...
element name | topology |
---|---|
defined in | http://solargis.info/schema/common-pv.xsd |
description | The element is for defining PV plant layout on the ground. The reason is to provide inputs for calculation of self-shading impact on PV power (e.g., how close to each other are PV constructions). |
content | none |
@type* | XML element type, required, concrete type of how topology should be modeled. Use one from TopologyRow (applies for the 'GeometryFixedOneAngle' geometry), TopologyColumn (use for all trackers). It is assumed trackers are spaced equally in both directions (rows and columns) creating a regular grid. |
@relativeSpacing | required, unitless ratio. The attribute specifies the ratio of distance between the neighboring PV table legs and PV table width. Direction of the distance depends on whether topology is specified as TopologyRow or TopologyColumn. See picture below how to calculate the value. |
@type | optional. This parameter estimates a magnitude of loss of PV power when modules are shaded or semi-shaded. The effect depends on wiring interconnections within a module. Shading influence ranges from 0% (no influence) to 100% (full influence) and it is classified into following categories (based on the influence value): PROPORTIONAL = 20% |
...
FTP data delivery
Data request CSV file must have header with parameter names on a first row. Below header, there can be unlimited number of rows with parameter values (site requests). Order of parameters is optional.
Regular data request example for monitoring
Note, there are no "fromDate" and "toDate" parameters. Date period is resolved according to contract and managed by the automated process.
...
On-time data request example
Parameters "fromDate" and "toDate" are required in this case. Such request is processed only once. Note, only radiation and temperature is requested in this case, so no PV system settings are needed.
...
Forecast data request example
Note the usage of "forecastFromDay" and "forecastToDay" parameters. Typically data will processed each 12 hours forecasting period since today (forecastFromDay=0) up to 7 days ahead (forecastToDay=7).
...
Minimalist PV data request example for monitoring
Note, degradation is not considered (missing "dateStartup" parameter). This request will be processed each day according to schedule for any given satellite as soon as local day is finished. The DAY-1 is delivered.
...
Minimalist solar radiation data request example for monitoring
This request will be processed each day according to schedule for any given satellite as soon as local day is finished. The DAY-1 is delivered.
...
Web Services
The client (typically a computer) will send the request and wait for the response. Developers can test various requests directly from web browser by using e.g. REST Client for Firefox or via native application like Postman. Before sending requests user must set the HTTP Method to "POST", define endpoint URL to: https://solargis.info/ws/rest/datadelivery/request?key=demo and also set a header to "Content-Type: application/xml". Then send the examples below in the body of the request and explore response. Typically, developers will create client code to send requests and handle responses scheduled in time. For all technicalities visit this link. In the next section there are examples of XML requests. They can serve as starter templates for typical scenarios.
Figure: Calculation of relative row spacing value (= x3/x2).
XML request examples
Example of XML request:
...
all options
Some elements or attributes are mutually exclusive and are commented-out in the listing e.g., user must decide which geometry type to simulate.
Code Block | ||||
---|---|---|---|---|
| ||||
<ws:dataDeliveryRequest dateFrom="2017-09-22" dateTo="2017-09-30" xmlns="http://geomodel.eu/schema/data/request" xmlns:ws="http://geomodel.eu/schema/ws/data" xmlns:geo="http://geomodel.eu/schema/common/geo" xmlns:pv="http://geomodel.eu/schema/common/pv" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <site id="demo" lat="48.61259" lng="20.827079"> <geo:terrain elevation="120" azimuth="180" tilt="5"/> <geo:horizon>0:3.6 123:5.6 359:6</geo:horizon> <pv:geometry xsi:type="pv:GeometryFixedOneAngle" azimuth="180" tilt="25"/> <!-- <pv:geometry xsi:type="pv:GeometryOneAxisHorizontalNS" rotationLimitEast="-90" rotationLimitWest="90" backTracking="true"/> --> <!-- <pv:geometry xsi:type="pv:GeometryOneAxisInclinedNS" axisTilt="30" rotationLimitEast="-90" rotationLimitWest="90" backTracking="true"/> --> <!-- <pv:geometry xsi:type="pv:GeometryOneAxisVertical" tilt="25" rotationLimitEast="-180" rotationLimitWest="180" backTracking="true"/> --> <!-- <pv:geometry xsi:type="pv:GeometryTwoAxisAstronomical" rotationLimitEast="-180" rotationLimitWest="180" tiltLimitMin="10" tiltLimitMax="60" backTracking="true"/> --> <pv:system installedPower="1000" installationType="FREE_STANDING" dateStartup="2014-01-03" selfShading="true"> <pv:module type="CSI"> <pv:degradation>0.3</pv:degradation> <pv:degradationFirstYear>0.8</pv:degradationFirstYear> <pv:nominalOperatingCellTemp>45</pv:nominalOperatingCellTemp> <pv:PmaxCoeff>-0.38</pv:PmaxCoeff> </pv:module> <pv:inverter> <pv:efficiency xsi:type="pv:EfficiencyConstant" percent="97.5"/> <!--<pv:efficiency xsi:type="pv:EfficiencyCurve" dataPairs="0:20 50:60 100:80 150:90 233:97.5 350:97 466:96.5 583:96 700:95.5 750:93.33 800:87.5 850:82.35 900:77.8 950:73.7"/>--> <pv:limitationACPower>900</pv:limitationACPower> </pv:inverter> <pv:losses> <pv:acLosses cables="0.1" transformer="0.9"/> <pv:dcLosses cables="0.2" mismatch="0.3" snowPollution="3.0"/> <!-- <pv:dcLosses cables="0.2" mismatch="0.3" monthlySnowPollution="5 5.2 3 1 1 1 1 1 1 1 2 4"/> --> </pv:losses> <pv:topology xsi:type="pv:TopologySimple" relativeSpacing="2.4" type="UNPROPORTIONAL2"/> <!-- <pv:topology xsi:type="pv:TopologyColumn" relativeSpacing="2.5" type="UNPROPORTIONAL2"/> --> </pv:system> </site> <processing key="GHI GTI TEMP WS PVOUT" summarization="HOURLY" terrainShading="true"> <timeZone>GMT+01</timeZone> <timestampType>END</timestampType> </processing> </ws:dataDeliveryRequest> |
Example of XML request: fixed mounted PV system
Code Block | ||||
---|---|---|---|---|
| ||||
<ws:dataDeliveryRequest dateFrom="2018-02-11" dateTo="2018-02-11" xmlns="http://geomodel.eu/schema/data/request" xmlns:ws="http://geomodel.eu/schema/ws/data" xmlns:geo="http://geomodel.eu/schema/common/geo" xmlns:pv="http://geomodel.eu/schema/common/pv" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <site id="demo" lat="48.61259" lng="20.827079"> <geo:terrain elevation="246" azimuth="180" tilt="2"/> <!--azimuth and tilt of terrain affects PVOUT values only if selfShading attribute of the system is true--> <pv:geometry xsi:type="pv:GeometryFixedOneAngle" tilt="25" azimuth="180"/> <!--azimuth and tilt attributes are required--> <pv:system installedPower="1" installationType="FREE_STANDING" selfShading="true"> <!--by setting selfShading=true we can switch on the impact of inter-row shading on PVOUT--> <pv:module type="CSI"></pv:module> <pv:inverter></pv:inverter> <pv:losses></pv:losses> <pv:topology xsi:type="pv:TopologyRow" relativeSpacing="2.5" type="UNPROPORTIONAL2"/> </pv:system> </site> <processing key="GTI TEMP PVOUT" summarization="HOURLY" terrainShading="true"> <timeZone>GMT+01</timeZone> <timestampType>CENTER</timestampType> </processing> </ws:dataDeliveryRequest> |
Example of XML request: tracking PV system with one horizontal axis in the north-south direction
Code Block | ||||
---|---|---|---|---|
| ||||
<ws:dataDeliveryRequest dateFrom="2018-02-11" dateTo="2018-02-11" xmlns="http://geomodel.eu/schema/data/request" xmlns:ws="http://geomodel.eu/schema/ws/data" xmlns:geo="http://geomodel.eu/schema/common/geo" xmlns:pv="http://geomodel.eu/schema/common/pv" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <site id="demo" lat="48.61259" lng="20.827079"> <pv:geometry xsi:type="pv:GeometryOneAxisHorizontalNS" rotationLimitEast="-90" rotationLimitWest="90" backTracking="true"/> <!-- rotation limits are defined as tilt of tracker table relative to its central position (horizontal=0 deg.), limits are usually symmetrical--> <pv:system installedPower="1" installationType="FREE_STANDING" selfShading="false"> <!--by setting selfShading=true and backTtracking=false we can switch on the impact of inter-row shading on PVOUT--> <pv:module type="CSI"></pv:module> <pv:inverter></pv:inverter> <pv:losses></pv:losses> <pv:topology xsi:type="pv:TopologyColumn" relativeSpacing="2.5" type="UNPROPORTIONAL2"/> </pv:system> </site> <processing key="GTI PVOUT TEMP" summarization="HOURLY" terrainShading="true"> <timeZone>GMT+01</timeZone> <timestampType>CENTER</timestampType> </processing> </ws:dataDeliveryRequest> |
Example of XML request: tracking PV system with one inclined axis in the north-south direction
Code Block | ||||
---|---|---|---|---|
| ||||
<ws:dataDeliveryRequest dateFrom="2018-02-11" dateTo="2018-02-11" xmlns="http://geomodel.eu/schema/data/request" xmlns:ws="http://geomodel.eu/schema/ws/data" xmlns:geo="http://geomodel.eu/schema/common/geo" xmlns:pv="http://geomodel.eu/schema/common/pv" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <site id="demo" lat="48.61259" lng="20.827079"> <pv:geometry xsi:type="pv:GeometryOneAxisInclinedNS" axisTilt="30" rotationLimitEast="-90" rotationLimitWest="90" backTracking="true"/> <!-- tilt of tracker axis defaults to 30 degrees if the attribute axisTilt is omitted --> <!-- tracker axis is tilted towards equator on each Earth hemisphere, e.g. towards 180 deg. azimuth on the Northern hemisphere, 0 deg. azimuth for the Southern hemisphere--> <!-- rotation limits are defined as tilt of tracker table relative to its central position (in this case inclined plane), limits are usually symmetrical--> <pv:system installedPower="1" installationType="FREE_STANDING" selfShading="false"> <!--by setting selfShading=true and backTtracking=false we can switch on the impact of inter-row shading on PVOUT --> <pv:module type="CSI"></pv:module> <pv:inverter></pv:inverter> <pv:losses></pv:losses> <pv:topology xsi:type="pv:TopologyColumn" relativeSpacing="2.4" type="UNPROPORTIONAL2"/> </pv:system> </site> <processing key="GTI PVOUT TEMP" summarization="HOURLY" terrainShading="true"> <timeZone>GMT+01</timeZone> <timestampType>CENTER</timestampType> </processing> </ws:dataDeliveryRequest> |
Example of XML request: tracking PV system with one vertical axis
Code Block | ||||
---|---|---|---|---|
| ||||
<ws:dataDeliveryRequest dateFrom="2018-02-11" dateTo="2018-02-11" xmlns="http://geomodel.eu/schema/data/request" xmlns:ws="http://geomodel.eu/schema/ws/data" xmlns:geo="http://geomodel.eu/schema/common/geo" xmlns:pv="http://geomodel.eu/schema/common/pv" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <site id="demo" lat="48.61259" lng="20.827079"> <pv:geometry xsi:type="pv:GeometryOneAxisVertical" tilt="25" rotationLimitEast="-180" rotationLimitWest="180" backTracking="true"/> <!-- tilt of module defaults to 30 degrees if the attribute tilt is omitted --> <!--rotation limits of the vertical axis are defined relative to 0 deg. (initial tracker position) from -180 to 180 deg with -90 deg.(east) and +90 deg. (west), regardless of the hemisphere--> <pv:system installedPower="1" installationType="FREE_STANDING"> <pv:module type="CSI"></pv:module> <pv:inverter></pv:inverter> <pv:losses></pv:losses> <pv:topology xsi:type="pv:TopologyColumn" relativeSpacing="2.5" type="UNPROPORTIONAL2"/> <!--with this tracker, constructions are equally distributed in both directions, i.e. column spacing = row spacing --> </pv:system> </site> <processing key="GTI PVOUT TEMP" summarization="HOURLY" terrainShading="true"> <timeZone>GMT+01</timeZone> <timestampType>CENTER</timestampType> </processing> </ws:dataDeliveryRequest> |
Example of XML request: tracking PV system with two axis
Code Block | ||||
---|---|---|---|---|
| ||||
<ws:dataDeliveryRequest dateFrom="2018-02-11" dateTo="2018-02-11" xmlns="http://geomodel.eu/schema/data/request" xmlns:ws="http://geomodel.eu/schema/ws/data" xmlns:geo="http://geomodel.eu/schema/common/geo" xmlns:pv="http://geomodel.eu/schema/common/pv" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <site id="demo" lat="48.61259" lng="20.827079"> <pv:geometry xsi:type="pv:GeometryTwoAxisAstronomical" rotationLimitEast="-180" rotationLimitWest="180" tiltLimitMin="10" tiltLimitMax="60" backTracking="true"/> <!--rotation limits of vertical axis are defined relative to 0 deg. (initial tracker position) from -180 to 180 deg with -90 deg.=east and +90 deg.=west, regardless of hemisphere--> <!--rotation limits of horizontal axis defined in the range of degrees (-90, +90), relative to horizontal position of the surface (0 deg.)--> <pv:system installedPower="1" installationType="FREE_STANDING"> <pv:module type="CSI"></pv:module> <pv:inverter></pv:inverter> <pv:losses></pv:losses> <pv:topology xsi:type="pv:TopologyColumn" relativeSpacing="1.5" type="UNPROPORTIONAL2"/> <!--with this tracker, constructions are equally distributed in both directions, i.e. column spacing = row spacing --> </pv:system> </site> <processing key="GTI PVOUT" summarization="DAILY" terrainShading="true"> <timeZone>GMT+01</timeZone> <timestampType>CENTER</timestampType> </processing> </ws:dataDeliveryRequest> |
Request Examples
FTP data delivery
Data request CSV file must have header with parameter names on a first row. Below header, there can be unlimited number of rows with parameter values (site requests). Order of parameters is optional.
Regular data request example for monitoring
Note, there are no "fromDate" and "toDate" parameters. Date period is resolved according to contract and managed by the automated process.
siteId | lat | lng | alt | geometry | azimuth | tilt | summarization | terrainShading | processingKeys | pvModuleTechnology | pvInstallationType | pvInstalledPower | pvInverterEffConstant | pvModuleTempNOCT | pvModuleTempCoeffPmax | pvLossesDCPollutionSnow | pvLossesDCCables | pvLossesDCMismatch | pvLossesACTransformer | pvLossesACCable | pvModuleDegradation | pvModuleDegradationFirstYear | dateStartup | pvFieldColumnSpacingRelative | pvTrackerBackTrack | pvTrackerRotMin | pvFieldTerrainSlope | pvFieldTerrainAzimuth | pvFieldSelfShading | pvFieldTopologyType | active |
PV_plant_example | 48.61259 | 20.827079 | 20 | OneAxisHorizontalNS | 0 | 0 | hourly | TRUE | GHI GTI DIF TEMP PVOUT | CSI | FREE_STANDING | 40020 | 98.4 | 45 | -0.45 | 3.5 | 2 | 0.5 | 0.9 | 0.8 | 0.5 | 0.8 | 20150701 | 2.53 | TRUE | -45,45 | 0.5 | 45 | TRUE | UNPROPORTIONAL_1 | TRUE |
On-time data request example
Parameters "fromDate" and "toDate" are required in this case. Such request is processed only once. Note, only radiation and temperature is requested in this case, so no PV system settings are needed.
siteId | lat | lng | alt | geometry | azimuth | tilt | summarization | terrainShading | processingKeys | fromDate | toDate | active | timeZone | satelliteTimeStamp | timeStampType |
Variant_4 | 48.61259 | 20.827079 | 20 | FixedOneAngle | 180 | 20 | min15 | FALSE | GHI GTI DIF TEMP | 20120601 | 20121130 | TRUE | 0 | TRUE | CENTER |
Forecast data request example
Note the usage of "forecastFromDay" and "forecastToDay" parameters. Typically data will processed each 12 hours forecasting period since today (forecastFromDay=0) up to 7 days ahead (forecastToDay=7).
siteId | lat | lng | geometry | azimuth | tilt | summarization | forecastFromDay | forecastToDay | terrainShading | processingKeys | pvModuleTechnology | pvInstallationType | pvInstalledPower | pvInverterEffConstant | pvModuleTempNOCT | pvModuleTempCoeffPmax | pvLossesDCPollutionSnow | pvLossesDCCables | pvLossesDCMismatch | pvLossesACTransformer | pvLossesACCable | pvModuleDegradation | pvModuleDegradationFirstYear | dateStartup | pvFieldRowSpacingRelative | pvFieldColumnSpacingRelative | pvTrackerBackTrack | pvFieldTerrainSlope | pvFieldTerrainAzimuth | pvFieldSelfShading | pvFieldTopologyType | active | pvInverterLimitationACPower | timezone | timestamptype |
1 | 48.612591 | 17.346977 | FixedOneAngle | 0 | 31 | hourly | 0 | 7 | TRUE | GHI GTI TEMP PVOUT | CSI | FREE_STANDING | 100 | 97.3 | 45 | -0.45 | 3.5 | 2 | 0.8 | 1 | 0.5 | 0.5 | 0.8 | 20150521 | 1.73 | 1.73 | FALSE | 1 | 180 | TRUE | UNPROPORTIONAL_1 | TRUE | 30000 | 2 | START |
Minimalist PV data request example for monitoring
Note, degradation is not considered (missing "dateStartup" parameter). This request will be processed each day according to schedule for any given satellite as soon as local day is finished. The DAY-1 is delivered.
siteId | lat | lng | alt | geometry | azimuth | tilt | summarization | processingKeys | pvModuleTechnology | pvInstallationType | pvInstalledPower | active |
PV_plant_example | 48.61259 | 17.650402 | 20 | FixedOneAngle | 180 | 0 | hourly | GHI GTI DIF TEMP PVOUT | CSI | FREE_STANDING | 100 | TRUE |
Minimalist solar radiation data request example for monitoring
This request will be processed each day according to schedule for any given satellite as soon as local day is finished. The DAY-1 is delivered.
siteId | lat | lng | alt | summarization | processingKeys | active |
MySite1 | 48.61259 | 17.650402 | 20 | hourly | GHI DIF TEMP | TRUE |
Web Services
The client (typically a computer) will send the request and wait for the response. Developers can test various requests directly from web browser by using e.g. REST Client for Firefox or via native application like Postman. Before sending requests user must set the HTTP Method to "POST", define endpoint URL to: https://solargis.info/ws/rest/datadelivery/request?key=demo and also set a header to "Content-Type: application/xml". Then send the examples below in the body of the request and explore response. Typically, developers will create client code to send requests and handle responses scheduled in time. For all technicalities visit this link. In the next section there are examples of XML requests. They can serve as starter templates for typical scenarios.
Setting "dateFrom" and "dateTo" is required in all cases. User can control time zone for output data in two ways. Either by using "timeZone" element or by the "dateFrom" and "dateTo" attributes of "dataDeliveryRequest" element. The "timeZone" element takes precedence over "dateFrom" and "dateTo" attributes.
...
There is no difference between historical an forecast data in case of XML request. Note, there are no "forecastFromDay" and "forecastToDay" parameters as with FTP data delivery. Instead, user can explicitly set the date period needed to be forecast-ed (max. 10 days ahead).
Example of XML response
The root element of the XML response is the <dataDeliveryResponse> element with one <site> element inside. The <site> has the 'id' attribute referencing the site in the request. The <site> consists of <metadata> section, one <columns> element and multiple <row> items. The <row> holds timestamp information in the 'dateTime' attribute and the numeric values in space-separated text value of the 'values' attribute. Values are sorted in the same order as the value of <columns> element to pair value with the parameter name.
...