通过SensorThings API打通物联网应用层间的数据

在上一篇文章中我们介绍了物联网的第一步:MQTT协议。MQTT作为数据传递协议,解决了物联网数据传输的质量、性能、功耗问题。MQTT已经是公认的物联网主流协议标准。
在这一篇我们将介绍更上层的协议标准:SensorThings API

困惑我们的物联网孤岛问题

但当今每个物联网应用都是独立一套从物到平台到用户终端。
想象我们身边消费者C端的物联网平台,小米、美的、京东都是各为体系,一个用户需要多个终端APP才能完成自己所有智能家居的控制。
每个平台都是一个“从物到平台到用户终端”的孤岛。是否让不同厂家设备互通,或是不同的物联网平台互联?除非所有厂家遵循相同的“语义”标准,用同样的语言(而不只是协议)来读取传感,发布动作指令。

做为针对工业物联网设计的HandALM产品化也面临同样的问题。打通单一IOT平台容易,但如何最大可能的通用化,兼容不同的IoT平台?这就需要引入物联网“数据互操作性”标准。也就是OGC Sensorthing API。

OGC SensorThings API正在将众多脱节的物联网系统转变为一个完全连接的平台,可以在其中同步和执行复杂的任务。

关于SensorThings API

SensorThings API 是一个“开放地理空间联盟(OGC)标准”,提供一个开放和统一的框架,定义了应用层解析物联网信息的“语义”,也就是“数据模型”的结构标准。目的是在解决不同物联网系统使用和理解交换信息的能力。

OGC SensorThings API有两部分:

  • 第一部分 – 传感( Sensing):如何解析物体中传感器发出的测量信息
  • 第二部分 – 任务(Tasking):如何发送指令给执行器来操控物体。

OGC SensorThings API是一种极其轻量级的物联网数据互操作性标准,它可以兼容MQTT和HTTP REST协议。

SensorThings基本概念

以SensorThings传感部分为例,有以下基本概念:

  • 物体(Thing):可能是一个实体世界的物件(实体的物体,如设备、房间),也可能是信息世界(虚拟的物体,如控制系统)
  • 位置(Location):物体最后的已知位置,一般就是物体当前的有效位置。可能是一个点,或是以GeoJson格式划定的区域。
  • 历史位置(HistoricalLocation):物体历史位置,以及对应的时间。
  • 数据流(Datastream):一个集合,包括了用传感器(Sensor)够测量某个测量属性(ObservationProperty)得出的多个结果观测值(Observations)
  • 传感器(Sensor):测量仪器对象,一般对应一个物理上存在的传感器。
  • 观测属性(ObservationProperty):具体观测的现象,如压力、温度、振动……
  • 观测值(Observations):传感器(或其它数据源)得到的结果值。

在第二部分任务执行部分,有以下基本概念

  • 任务处理能力(TaskingCapabilities):  一个集合,包括了执行器与需要执行的任务集合。
  • 任务(Tasks): 一系列需要执行的任务指令。
  • 执行器(Actuator ): 一种将信号转换为某种现实行为或现象的元器件。一般与物理中的一个执行器对应

SensorThings作为一个开放的RESTful接口,可以提供对以上对象的创建、读取、更新、删除的方法。

SensorThings概念示例

注意,这不是一个符合SensorThing API标准的实例,仅为了示范大致的“语义”样式,以及说明上面几个实体概念的含义。

如果你需要了解一个真实的SensorThing结果可以参考:


SensorThings概念示例- Sensoring部分:

"Thing" : [{
"name" : "ASSET001#",   
"description": "中央空调"
}]
"Locations": [{
   "name": "B1-F2-AC",
    "description": "1#楼2层空调间",
    "location" : {
               "type": "point"
               "coordinates": "121.88, 24.970"     
}
}]
"Datastreams" : [{
   ObservationProperty:  [
        "气温".           
"UnitOfMeasurement": "摄氏度"
    },
    Observation: {
        "Result": 29,
        "Phenomenon Time": "2016/05/09 23:20"
   }.
   Feature of Interest: {
       "1#楼2层大厅"   
}
}]

SensorThings概念示例-Tasking部分:

"TaskingCapabilities": [{
    "name": "打开空调",
    "task": {
        " taskingParameters": {
            "ParameterID": "ON",
            "Value": "true"
        },
        " creationTime": "2016/05/09 23:20"
    },
    "Actuator": {
        "name":"智能空调开关"
    }
}]

访问

访问时可以用URL格式进行,例如 

获取当前楼层所有相关的观测结果
http://ExampleURL/v1.0/FeaturesOfInterest(id)/Overvations

获取楼层中的所有物体
http://ExampleURL/v1.0/Locations(id)/Things

获取所有温度类的数据流
http://ExampleURL/v1.0/ObserveProperties(id)/Datastreams

获取024#温度表的数据流以及观察结果
http://ExampleURL/v1.0/Sensors(024)/Datestreams?$expand=observations

获取024#温度表的数据流以及最新观察结果
http://ExampleURL/v1.0/Sensors(024)/Datestreams?$expand=observations($top=1)

获取024#温度表的数据流计量单位
http://ExampleURL/v1.0/Sensors(024)/Datestreams?$select=unitOfMeasurement

获取024#温度表的观测结果,第二页100-200,并按数值排序
http://ExampleURL/v1.0/Sensors(024)/Observations?$top=100&skip=100&orderby=result desc

获取024#温度表的值大于10.9的所有观测结果
http://ExampleURL/v1.0/Sensors(024)/Observations?$filter=result gt 10.9

相关参考:

发表评论