Configuration

A note to the SensorID

The SensorID is unique for each sensor instance installed/registered at an SPS. While registering (or later) our implementation allows to define your own alias of the sensor to have a better remindable name for the sensor. Our implementation automatically generates an ID for each new sensor instance, thus facilitating plug-and-play of sensors. The xml example files shipping with the SPS framework aliases the sensor CITE_Test-Plugin, so you can refer to this instance with the external representation of the sensor or its internal sensorID
  1. urn:ogc:object:feature:Sensor:IFGI:CITE_Test-Plugin or its one-to-one internal SensorID
  2. SID1195425696358333276211349795 which are both unique and mean the same instance of sensor. So do not wonder when you see this big number in some of our examples here.

SensorML document

Although the SensorML document is essential to describe a sensor, we hold it rather simple. The plugin only simulates its state, we do not need to know the exact model of the plugin. By contrast, the parameter definition described above lets you know what values of what parameters are needed to task the sensor.

Nevertheless, the SensorML is required so here it is (bare bone):

<SensorML xmlns:sml="http://www.opengis.net/sensorML/1.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <member>
        <ContactList>
            <ResponsibleParty>
                <individualName>52North</individualName>
            </ResponsibleParty>
            <ResponsibleParty>
                <individualName>ifgi</individualName>
            </ResponsibleParty>
        </ContactList>
    </member>
</SensorML>

SensorConfiguration

To register the plugin to the SPS it needs a configuration file, in which the sensorML document is embedded. In addition to this, the configuration describes the taskable parameters (and their constraints), given in SweCommon! types. In the table above listed parameters you should find here again (Currently the maximum mission duration is not taken over):

<n52sps:SensorConfiguration>

      <testconfig:TestPluginConfiguration
         xmlns:swe="http://www.opengis.net/swe/1.0"
         xmlns:xlink="http://www.w3.org/1999/xlink"
         xmlns:gml="http://www.opengis.net/gml"
         xmlns:ows="http://www.opengis.net/ows"
         xmlns:sps="http://www.opengis.net/sps/1.0"
         xmlns:n52sps="http://www.52north.org/sps/v1"
         xmlns:testconfig="http://www.52north.org/sps/plugin/testconfig"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://www.52north.org/sps/plugin/testconfig ./testpluginConfiguration.xsd">
         <testconfig:InstanceConfig>
            <testconfig:Phenomenon>
               urn:ogc:feature:phenomenon:AOI
            </testconfig:Phenomenon>
            <testconfig:DefaultDataServices>
               <n52sps:Service>
                  <n52sps:ServiceType>SOS</n52sps:ServiceType>
                  <n52sps:ServiceURL>
                     http://mars.uni-muenster.de:8080/OWS5SOS/sos
                  </n52sps:ServiceURL>
               </n52sps:Service>
            </testconfig:DefaultDataServices>
            <testconfig:SensorDescription>
               <n52sps:SensorML>
                  <SensorML
                     xmlns:sml="http://www.opengis.net/sensorML/1.0"
                     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
                     <member>
                        <ContactList>
                            <ResponsibleParty>
                              <individualName>52North</individualName>
                           </ResponsibleParty>
                            <ResponsibleParty>
                              <individualName>ifgi</individualName>
                           </ResponsibleParty>
                        </ContactList>
                     </member>
                  </SensorML>
               </n52sps:SensorML>
            </testconfig:SensorDescription>
            <testconfig:AreaOfService>
               <ows:WGS84BoundingBox>
                  <!-- lon/lat order -->
                  <ows:LowerCorner>-180.0 -90.0</ows:LowerCorner>
                  <ows:UpperCorner>180.0 90.0</ows:UpperCorner>
               </ows:WGS84BoundingBox>
            </testconfig:AreaOfService>
            <testconfig:TaskAccess>
               <testconfig:DataServices>
                  <n52sps:TaskService>
                     <n52sps:ServiceType>SOS</n52sps:ServiceType>
                     <n52sps:ServiceURL>
                        http://mars.uni-muenster.de:8080/OWS5SOS/sos
                     </n52sps:ServiceURL>
                  </n52sps:TaskService>
               </testconfig:DataServices>
            </testconfig:TaskAccess>
         </testconfig:InstanceConfig>

         <testconfig:InputDescription>
            <sps:InputDescriptor parameterID="measurementFrequency"
               use="optional" updateable="true">
               <sps:definition>
                  <sps:commonData>
                     <swe:Quantity>
                        <swe:uom code="Hz"
                           xlink:href="urn:x-ogc:def:uom:OGC:Hz" />
                     </swe:Quantity>
                  </sps:commonData>
               </sps:definition>
            </sps:InputDescriptor>
            <sps:InputDescriptor parameterID="measurementLocation"
               use="required" updateable="false">
               <sps:definition>
                  <sps:commonData>
                     <swe:Position
                        referenceFrame="urn:ogc:def:crs:OGC:2:84"
                        definition="urn:ogc:def:phenomenon:measurement_location">
                        <swe:location>
                           <swe:Vector>
                              <swe:coordinate
                                 name="Geodetic longitude">
                                 <swe:Quantity
                                    axisID="Long">
                                    <swe:uom code="deg" />
                                    <swe:constraint>
                                       <swe:AllowedValues>
                                          <swe:interval>
                                             -180 180
                                          </swe:interval>
                                       </swe:AllowedValues>
                                    </swe:constraint>
                                 </swe:Quantity>
                              </swe:coordinate>
                              <swe:coordinate
                                 name="Geodetic latitude">
                                 <swe:Quantity
                                    axisID="Lat">
                                    <swe:uom code="deg" />
                                    <swe:constraint>
                                       <swe:AllowedValues>
                                          <swe:interval>
                                             -90 90
                                          </swe:interval>
                                       </swe:AllowedValues>
                                    </swe:constraint>
                                 </swe:Quantity>
                              </swe:coordinate>
                           </swe:Vector>
                        </swe:location>
                     </swe:Position>
                  </sps:commonData>
               </sps:definition>
            </sps:InputDescriptor>
            <sps:InputDescriptor parameterID="measurementCount"
               use="optional" updateable="false">
               <sps:definition>
                  <sps:commonData>
                     <swe:Count>
                        <swe:constraint>
                           <swe:AllowedValues>
                              <swe:max>10</swe:max>
                           </swe:AllowedValues>
                        </swe:constraint>
                     </swe:Count>
                  </sps:commonData>
               </sps:definition>
            </sps:InputDescriptor>
            <sps:InputDescriptor parameterID="measurementPurpose"
               use="optional" updateable="false">
               <sps:definition>
                  <sps:commonData>
                     <swe:Text />
                  </sps:commonData>
               </sps:definition>
            </sps:InputDescriptor>
            <sps:InputDescriptor parameterID="measurementPriority"
               use="required" updateable="false">
               <sps:definition>
                  <sps:commonData>
                     <swe:Category>
                        <swe:constraint>
                           <swe:AllowedTokens>
                              <swe:valueList>
                                 low medium high
                              </swe:valueList>
                           </swe:AllowedTokens>
                        </swe:constraint>
                     </swe:Category>
                  </sps:commonData>
               </sps:definition>
            </sps:InputDescriptor>
            <sps:InputDescriptor parameterID="shallMeasure"
               use="required" updateable="true">
               <sps:definition>
                  <sps:commonData>
                     <swe:Boolean />
                  </sps:commonData>
               </sps:definition>
            </sps:InputDescriptor>
            <sps:InputDescriptor parameterID="maxMissionDuration"
               use="optional" updateable="false">
               <sps:definition>
                  <sps:commonData>
                     <swe:Time>
                        <swe:constraint>
                           <swe:AllowedTimes>
                              <swe:interval>
                                 1990-01-01 2009-01-01
                              </swe:interval>
                           </swe:AllowedTimes>
                        </swe:constraint>
                     </swe:Time>
                  </sps:commonData>
               </sps:definition>
            </sps:InputDescriptor>
         </testconfig:InputDescription>
      </testconfig:TestPluginConfiguration>

   </n52sps:SensorConfiguration>

Some draft test requests

For testing your SPS you can use the TEAM engine of the OGC OWS-5 project or you copy/paste the requests in the spsTestClient which comes with the SPS. The URL to retrieve the client is dependent to the name you gave your webapplication, but it should look like http://{your.url.here}:{port}/{sps webappname}/SPS/spsTestClient.html.

describeResultAccess

<?xml version="1.0" encoding="UTF-8"?>
<DescribeResultAccess xmlns="http://www.opengis.net/sps/1.0"
   service="SPS" version="1.0.0">
   <!-- <v1:SensorID>SID1195425696358333276211349795</v1:SensorID> -->
   <sensorID>
      urn:ogc:object:feature:Sensor:IFGI:CITE_Test-Plugin
   </sensorID>
</DescribeResultAccess>

describeTasking

<?xml version="1.0" encoding="UTF-8"?>
<DescribeTasking xmlns="http://www.opengis.net/sps/1.0" service="SPS" version="1.0.0">
   <sensorID>urn:ogc:object:feature:Sensor:IFGI:CITE_Test-Plugin</sensorID>
</DescribeTasking>

getFeasibility

Note, that the WNS part is not tested here. The current implemenation deals with an optional WNS registration, to make life easier for people who don�t need such a feature. The whole
notificationTarget
will be untested here.

<?xml version="1.0" encoding="UTF-8"?>
<GetFeasibility xmlns="http://www.opengis.net/sps/1.0"
   xmlns:gml="http://www.opengis.net/gml"
   xmlns:swe="http://www.opengis.net/swe/1.0" service="SPS"
   version="1.0.0">
   <notificationTarget>
      <notificationID>1234</notificationID>
      <notificationURL>
         http://mars.uni-muenster.de:8080/WNS/wns
      </notificationURL>
   </notificationTarget>
   <sensorID>
      <!-- SID1195425696358333276211349795-->
      urn:ogc:object:feature:Sensor:IFGI:CITE_Test-Plugin
   </sensorID>
   <parameters>
      <!-- REQUIRED PARAMETERS -->
      <InputParameter parameterID="measurementFrequency">
         <value>
            <swe:Quantity>
               <swe:value>1000</swe:value>
            </swe:Quantity>
         </value>
      </InputParameter>
      <InputParameter parameterID="measurementLocation">
         <value>
            <swe:Position
               referenceFrame="urn:ogc:def:crs:OGC:2:84"
               definition="urn:ogc:def:phenomenon:measurement_location">
               <swe:location>
                  <swe:Vector>
                     <swe:coordinate name="Geodetic longitude">
                        <swe:Quantity axisID="Long">
                           <swe:uom code="deg" />
                           <swe:value>7.30</swe:value>
                        </swe:Quantity>
                        <swe:coordinate name="Geodetic latitude">
                        <swe:Quantity axisID="Lat">
                           <swe:uom code="deg" />
                           <swe:value>52</swe:value>
                        </swe:Quantity>
                     </swe:coordinate>
                     </swe:coordinate>
                  </swe:Vector>
               </swe:location>
            </swe:Position>
         </value>
      </InputParameter>
      <InputParameter parameterID="measurementCount">
         <value>
            <swe:Count>
               <swe:value>5</swe:value>
            </swe:Count>
         </value>
      </InputParameter>
      <InputParameter parameterID="measurementPurpose">
         <value>
            <swe:Time>
               The Measurement is a simulation if the sensor and
               SPS behaves correctly on requests/responses
            </swe:Time>
         </value>
      </InputParameter>
      <InputParameter parameterID="measurementPriority">
         <value>
            <swe:Category>
               <swe:value>
                  <!-- allowed: noPriority low medium high -->
                  low
               </swe:value>
            </swe:Category>
         </value>
      </InputParameter>
      <InputParameter parameterID="shallMeasure">
         <value>
            <swe:Boolean>
               <swe:value>true</swe:value>
            </swe:Boolean>
         </value>
      </InputParameter>
   </parameters>
   <timeFrame>
      <gml:TimeInstant>
         <gml:timePosition>2008-10-05T12:00:00Z</gml:timePosition>
      </gml:TimeInstant>
   </timeFrame>
</GetFeasibility>

Submit with FeasibilityID

With a responding FeasibilityID you will be able to do a Submit without putting the whole parameter set in your request again. If the FID is still cached it will do the same as a fresh Submit.

<?xml version="1.0" encoding="UTF-8"?>
<Submit xmlns="http://www.opengis.net/sps/1.0" 
   xmlns:gml="http://www.opengis.net/gml" service="SPS" version="1.0.0">
   <notificationTarget>
      <notificationID>1234</notificationID>
      <notificationURL>http://mars.uni-muenster.de:8080/WNS/wns</notificationURL>
   </notificationTarget>
   <feasibilityID>FID119541527495631149082710512</feasibilityID>
</Submit>

Submit

Doing a Submit without checking the sensors feasibility before.

Note, that the WNS part is not tested here. The current implemenation deals with an optional WNS registration, to make life easier for people who don�t need such a feature. The whole
notificationTarget
will be untested here.

<?xml version="1.0" encoding="UTF-8"?>
<Submit xmlns="http://www.opengis.net/sps/1.0"
   xmlns:gml="http://www.opengis.net/gml"
   xmlns:swe="http://www.opengis.net/swe/1.0" service="SPS"
   version="1.0.0">
   <notificationTarget>
      <notificationID>1234</notificationID>
      <notificationURL>
         http://mars.uni-muenster.de:8080/WNS/wns
      </notificationURL>
   </notificationTarget>
   <sensorParam>
      <sensorID>
         <!-- SID1195425696358333276211349795-->
         urn:ogc:object:feature:Sensor:IFGI:CITE_Test-Plugin
      </sensorID>
      <parameters>
         <!-- REQUIRED PARAMETERS -->
         <InputParameter parameterID="measurementFrequency">
            <value>
               <swe:Quantity>
                  <swe:value>1000</swe:value>
               </swe:Quantity>
            </value>
         </InputParameter>
         <InputParameter parameterID="measurementLocation">
            <value>
               <swe:Position
                  referenceFrame="urn:ogc:def:crs:OGC:2:84"
                  definition="urn:ogc:def:phenomenon:measurement_location">
                  <swe:location>
                     <swe:Vector>
                        <swe:coordinate
                           name="Geodetic longitude">
                           <swe:Quantity axisID="Long">
                              <swe:uom code="deg" />
                              <swe:value>7.30</swe:value>
                           </swe:Quantity>
                        </swe:coordinate>
                        <swe:coordinate
                           name="Geodetic latitude">
                           <swe:Quantity axisID="Lat">
                              <swe:uom code="deg" />
                              <swe:value>52</swe:value>
                           </swe:Quantity>
                        </swe:coordinate>
                     </swe:Vector>
                  </swe:location>
               </swe:Position>
            </value>
         </InputParameter>
         <InputParameter parameterID="measurementCount">
            <value>
               <swe:Count>
                  <swe:value>5</swe:value>
               </swe:Count>
            </value>
         </InputParameter>
         <InputParameter parameterID="measurementPurpose">
            <value>
               <swe:Time>
                  The Measurement is a simulation if the sensor
                  and SPS behaves correctly on requests/responses
               </swe:Time>
            </value>
         </InputParameter>
         <InputParameter parameterID="measurementPriority">
            <value>
               <swe:Category>
                  <swe:value>
                     <!-- allowed: noPriority low medium high -->
                     low
                  </swe:value>
               </swe:Category>
            </value>
         </InputParameter>
         <InputParameter parameterID="shallMeasure">
            <value>
               <swe:Boolean>
                  <swe:value>true</swe:value>
               </swe:Boolean>
            </value>
         </InputParameter>
      </parameters>
   </sensorParam>
   <timeFrame>
      <gml:TimeInstant>
         <gml:timePosition>2009-10-05T12:00:00Z</gml:timePosition>
      </gml:TimeInstant>
   </timeFrame>
</Submit>

Cancel

To cancel a task, use its TaskID (this may result in an Exception with code TaskIDExpired if that ID is no longer known to the SPS).

<?xml version="1.0" encoding="UTF-8"?>
<Cancel xmlns="http://www.opengis.net/sps/1.0" service="SPS" version="1.0.0">
   <taskID>TID119541620962032083739655179</taskID>
</Cancel>

Update

Since the sensor can only handle one task at once, the sensor doesn�t support the Update feature. As this is not tested in this testbed, we do not provide any example requests.

-- HenningBredel - 03 Mar 2008
Topic revision: r2 - 23 May 2008, HenningBredel
Legal Notice | Privacy Statement


This site is powered by FoswikiCopyright © by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding Wiki? Send feedback