Temp Sensor
Event
Bus
Native protocol through e.g. UART
Sensor
Driver
Push Events
Data Stream Description:
<swe:DataStream id="EXAMPLE_01">
<swe:elementType name="weather_data">
<swe:DataRecord>
<swe:field name="time">
<swe:Time definition="http://www.opengis.net/def/property/OGC/0/SamplingTime">
<swe:label>Sampling Time</swe:label>
<swe:uom xlink:href="http://www.opengis.net/def/uom/ISO-8601/0/Gregorian"/>
</swe:Time>
</swe:field>
<swe:field name="temperature">
<swe:Quantity definition="http://mmisw.org/ont/cf/parameter/air_temperature">
<swe:label>Air Temperature</swe:label>
<swe:uom xlink:href="Cel"/>
<swe:constraint>
<swe:AllowedValues>
<swe:interval>-50 +50</swe:interval>
<swe:significantFigures>2</swe:significantFigures>
</swe:AllowedValues>
</swe:constraint>
</swe:Quantity>
</swe:field>
<swe:field name="pressure">
<swe:Quantity definition="http://mmisw.org/ont/cf/parameter/air_pressure">
<swe:label>Atmospheric Pressure</swe:label>
<swe:quality>
<swe:Quantity definition="http://sweet.jpl.nasa.gov/2.0/sciUncertainty.owl#Accuracy">
<swe:uom code="%"/>
<swe:value>10</swe:value>
</swe:Quantity>
</swe:quality>
<swe:uom code="mbar"/>
</swe:Quantity>
</swe:field>
</swe:DataRecord>
</swe:elementType>
<swe:encoding>
<swe:TextEncoding tokenSeparator="," blockSeparator=" " decimalSeparator="."/>
</swe:encoding>
</swe:DataStream>
Actual Data Values:
2009-01-01T10:00:25Z,25.3,1098,5,56
2009-01-01T10:00:35Z,25.4,1098,15,59
2009-01-01T10:00:45Z,25.4,1098,12,42
2009-01-01T10:00:55Z,25.4,1098,5,40
2009-01-01T10:01:05Z,25.3,1098,5,66
OSH provides helper classes to avoid that each driver reinvents the wheel...
<sos:InsertObservation service="SOS" version="2.0.0">
<sos:offering>http://www.my_namespace.org/water_gage_2_observations</sos:offering>
<sos:observation>
<om:OM_Observation gml:id="obsTest1">
<om:type xlink:href="http://www.opengis.net/def/observationType/OGC-OM/2.0/OM_ComplexObservation"/>
<om:phenomenonTime>
<gml:TimeInstant gml:id="phenomenonTime">
<gml:timePosition>2010-08-31T17:45:15.000+00:00</gml:timePosition>
</gml:TimeInstant>
</om:phenomenonTime>
<om:resultTime xlink:href="#phenomenonTime"/>
<om:procedure xlink:href="http://www.my_namespace.org/sensors/Water_Gage_2"/>
<om:observedProperty xlink:href="http://sweet.jpl.nasa.gov/2.0/hydroSurface.owl#WaterMeasurements"/>
<om:featureOfInterest xlink:href="http://wfs.example.org?request=getFeature&featureid=river1"/>
<om:result xsi:type="swe:DataRecordPropertyType">
<swe:DataRecord> ... </swe:DataRecord>
</om:result>
</om:OM_Observation>
</sos:observation>
</sos:InsertObservation>
<swes:InsertSensor service="SOS" version="2.0.0">
<swes:procedureDescriptionFormat>http://www.opengis.net/sensorML/1.0.1</swes:procedureDescriptionFormat>
<swes:procedureDescription>
<sml:SensorML/>
</swes:procedureDescription>
<swes:observableProperty>http://sweet.jpl.nasa.gov/2.0/hydroSurface.owl#WaterHeight</swes:observableProperty>
<swes:metadata>
<sos:SosInsertionMetadata>
<sos:observationType>http://www.opengis.net/def/observationType/OGC-OM/2.0/OM_Measurement</sos:observationType>
<sos:observationType>http://www.opengis.net/def/observationType/OGC-OM/2.0/OM_Observation</sos:observationType>
<sos:featureOfInterestType>http://www.opengis.net/def/samplingFeatureType/OGC-OM/2.0/SF_SamplingPoint</sos:featureOfInterestType>
</sos:SosInsertionMetadata>
</swes:metadata>
</swes:InsertSensor>
Virtual Sensors
SOS-T Service
SOS-T Client
ESP8266 µC Board (with WiFi)
OSH Instance
Data Storage
Event
Bus
to UART
Running OSH Arduino C++ Lib
Running OSH Java
POST /v1.0/Sensors
{
"description": "SensorUp Tempomatic 2000",
"encodingType": "http://schema.org/description",
"metadata": "Calibration date: Jan 1, 2014"
}
POST /v1.0/DataStreams
{
"unitOfMeasurement": {
"symbol": "%",
"name": "Percentage",
"definition": "http://www.qudt.org/qudt/owl/1.0.0/unit/Instances.html"
},
"observationType":"http://www.opengis.net/def/observationType/OGC-OM/2.0/OM_Measurement",
"description": "Temperature measurement",
"Thing": {"@iot.id": 29761},
"ObservedProperty": {"@iot.id": 5394816},
"Sensor": {"@iot.id": 5394815}
}
POST /v1.0/DataStreams(id)/Observations
{
"phenomenonTime": "2015-04-13T00:00:00Z",
"resultTime" : "2015-04-13T00:00:05Z",
"result" : 38
}