Vantiq平台数据接口介绍

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/UbuntuTouch/article/details/86489032

Vantiq作为一个PaaS平台提供了一个强大的实时信息处理功能,并可根据实时的数据输入,预设的场景来实现人机交互,控制或生成新的事件。一个典型的Vantiq数据处理流程如下:

这些部分的作用:

  • External world: 外界的物理事件或事务流程产生的事件都可以接入到Vantiq平台。这些数据是按照一定的网路的协议接入到Vantiq平台,并且数据是以JSON的格式来表达的
  • Ingest: 通过Vantiq的规则引擎,每当数据源有数据变化时,Vantiq可以捕获这种变化,并结合本地数据生成新的数据流。比如一个传感器传入的数据含有一个传感器的id,但是它并不含有它的设备id及位置信息等。这个传感器的id可以和Vantiq本地数据结合来生成更加丰富的数据。
  • State of the world: Vantiq可以帮我们把这个数据保存于一个type里。这个type针对每个事件或传感器只生成一个record。通常会使用upsert的方法来生成这个record。这个唯一的record就会为后面的数据流不断地更新数据。在这里也可以丰富我们的数据,比如结合本地数据或其它更多的其它类型的传感器数据,生成新的数据流。结合Predictive models,比如人工智能虚拟现实,自然语音技术等
  • identify: 在这个过程中,我根据上面的model来识别我们的数据,比如说识别到的车牌号码,FaceAPI识别的脸数据等
  • Situation: 定义我们的场景。这个场景的定义非常重要。比如,温度及转速高过一个阈值,我们希望做什么事;FaceAPI返回的人脸识别是非法进入,我们应该去做什么。
  • Manage: 在这个过程里,我们通过规则引擎根据我们的场景来生成一些action。比如温度过高,Vantiq需要发出温度控制信号来控制温度,以保持温度在一个合适的范围。对于非法侵入,我们是否应该生成警告信号等
  • Collaborate: 在这个流程里,Vantiq可以帮我们发出信息到手机上,工作人员协同解决问题。比如机器坏了,或不在正常的工作范围,会发送这个信息到附近所有的技工的手机中,自动派单。如果有人接单了,并处理了,这个人工协同就算是完成了。如果在规定的时间里,没有人相应,系统也可以自动escalate到上级部门继续处理。这样形成一个闭环处理。

在上面的所有的流程中,Vantiq也可以在任何一个环节,把事件流处理后,并重新生成新的事件流。这些事件流可以被新的业务,或其它的业务所使用。通过事件的重新发布,对各个业务实现解耦,为未来的业务的重构带来极大的方便。

从上面我们可以看出来,外面的物理事件是Vantiq平台流处理的开始。在今天的文章中,我们来介绍一下如何把这些事件接入到Vantiq平台,并介绍了各种方法的优缺点。有的方法可行,但不是event driven。在本文中,为了细述的方便,我省去了网路gateway。

由于Vantiq是一个云平台,任何设备想接入到Vantiq平台,这个设备必须先具备连网的功能。

 

Vantiq平台数据接入总览

 

总体来说,外面的数据接入到Vantiq平台有两种方式:

  • 事件驱动式接入:在这种方式下,只要有事件发生时,才会把数据发送Vantiq平台。如果没有数据就不会发送数据。在这种方式下,我们可以通过Vantiq平台提供的开箱即用的源AMQP,KAFKA 及 MQTT来连接我们外部的数据。需要做一些配置就可以了。当然我们也可以使用Vantiq平台提供的REST API/Websocket API方式来把数据提交到Vantiq平台定义的一个type (数据表格)或发布到一个Vantiq内部的topic,或者调用在Vantiq平台定义的一个procedure。对于一些目前在平台不被支持的源,我们可以通过Vantiq所提供的extension框架来构建自己的Connector来连接到Vantiq平台。在下面的章节里介绍。这种方式的接入是被建议的方式。

一个典型的在Vantiq平台中定义的MQTT源

  • 被动式数据接入:在这种方式下,数据源不主动向Vantiq平台发送数据,而是以一种Web Service的方式提供接口。这个接口可以让Vantiq平台使用REST API的方式来调用。Vantiq平台可以利用REMOTE源(REST API方式)按照一个时间的周期来访问这个接口,并形成数据流。这种访问方式,可能会造成网路流量的浪费,比如在没有数据变化的情况下,每隔一段时间还需要我们来采集数据,显然这个数据并不有用。另外采样频率低的时候,也有可能会漏掉一些细节。这个看具体的实时性要求而定。详细的教程可以参阅视频“如何从Vantiq平台运用REST API访问外部资源”。

 

理解Vantiq平台和外面的接口

 

REST API及Websocket API

 

REST API是基于HTTP的一种通用互联网传输协议。在互联网中被广泛使用。在Vantiq平台中也被广泛运用。

首先想说的一点是:Vantiq平台里的任何一个东西都是可以通过REST APIWebsocket API的方式来访问的。任何一个东西都是一个服务。理解这点非常的重要。我们不需要去特意创建一个Web Server并为之创建API来访问它。Vantiq里的任何一个资源本身就是一个服务。它自己就带有接口来访问它。比如,我们可以通过https://dev.vantiq.cn/api/v1/resources/custom/Person来访问在Vantiq平台中的一个叫做Person的type(数据表)。

如果一个设备能够通过REST API或Websocket API 的方法来访问外部资源,那么这个设备的数据就可以传入的Vantiq平台中。

这些可以被访问的资源包括procedure, source, type,rules,及topic等。它们都可以被REST API或Websocket形式来进行创建,修改,启动,停止,删除等等的操作。这些都可以在Vantiq的帮助文件里找到。我也创建了一个视频来展示如何添加一个项到一个已经创建的type里。这个视频可以在“如何使用REST API来访问Vantiq的资源”找到。我们可以运用REST API及Websocket API把我们的数据写入到我们Vantiq平台(比如写到一个type中,用upsert的方法,这样在表格里对一个传感器或数据源,只生产一个唯一的record),或者发布到一个topic中去,也可以直接调用Vantiq平台中的一个procedure(相当于一个方法)。这样我们可以把我们想要的数据传入到Vantiq平台中,并在Vantiq平台中形成一个事件驱动的流,而且这种方法的好处是不浪费网路流量。我们可以控制在什么时候发送我们的信息。比如如果没有数据变化,我们就不发送数据到平台。这是一种事件驱动的方法传入流的数据。

 

REST API和Websocket的区别在于REST API对数据有比较好的解析,通过json来传输数据。缺点是由于它有比较大的header,不是那么高效,而且每次请求都需要认证。相比较而言,Websocket的数据需要进行解析,但是一旦创建一个连接,就是双向的。之后的每一次传输都不需要重新认证。对于一些实时性要求高的情况下,建议使用Websocket API。目前我们的Vantiq平台中的客户端里很多的Widget和平台直接的流处理很多都是通过Websocket API来实现的。由extension source所创建的Connector和Vantiq平台之间的连接也是通过Websocket API来实现的。针对JAVA语言,我创建了一个利用REST API的例子供大家参考。

也许很多的开发者并不想研究这些API的用法,觉得这样很麻烦。为此,Vantiq也提供如下的SDK:

这些SDK 其实也没有什么特别之处,只是它们都是对REST API进行了封装,让开发者更加容易使用而已。如果开发者对REST API及Websocket API用的很熟,也可以完全不使用这些SDK。当然这些SDK也只是封装了部分的REST API及Websocket API。如果涉及到这些SDK里的API不能完成的功能,我们也必须使用REST API及Websocket API。

更多阅读,请参阅文章“如何运用REST API接口用Java向Vantiq平台发送信息”。

 

Vantiq平台的Source

Vantiq平台目前提供了如下的一些source。这些都是一些开箱即用的源。如果我们的数据的协议刚好和这里的相匹配,我们可以直接在系统里添加这些源,并加入少量的配置就可以。

这里有常见的一些物联网的协议,比如MQTT,KAFKA及AMQP。

MQTT

MQTT是一种基于TCP/IP的通讯协议,在物联网的领域中非常普及。特别是它能够在有些网路条件不是很好的情况下也能发挥非常出色。通过MQTT协议,我们可以定义一个或多个上传的topic。每当有信息在这些topic中进行发布时,Vantiq里的MQTT对应的source就会有相应的数据产生。同时如果我们想把Vantiq平台的数据进行反向传输的话,我们也可以定义另外一组的topic。每当在Vantiq平台有数据发布到这些topic的话,设备也可以接收到这些信息,并进行控制等动作。如果大家想了解一个更详细的例子,可以参考我的视频“如何运用MQTT向Vantiq平台发送和接收数据”。

REMOTE

这里我们需要提到一点的是,在互联网的时代,有很多的设备自己就是一个服务,并有专有的web service接口。这个时候,我们可以通过使用 REMOTE source的方法来访问这些设备。这种方法即是我上面提到的REST API的方法,不过在这种情况下,这个REST API是由设备来提供的。

 

如果原来的设备已经提供了这样的REST API接口的话,那么设备接入到Vantiq中并不需要任何的改动。Vantiq提供一个周期的服务来访问设备所提供的接口,那么这样就会形成一个数据流来供Vantiq大脑来进行流处理。当然我们也可以通过这些提供的REST API接口来控制设备。这种方法的缺点是Vantiq平台需要不断地周期性地查询设备的数据,即使数据是没有变化,也会不断地轮询接口。一方面浪费网络的流量,另外由于REST API的效率并不是太高,对非常多的设备设备来说,并不是一种好的选择。详细的教程可以参阅视频“如何从Vantiq平台运用REST API访问外部资源”。我们也可以参照文章“如何运用REST API接口用Java向Vantiq平台发送信息”来如何通过REST API的方式来提交数据到Vantiq平台,如何运行一个在Vantiq平台上的procedure,如何发布一个消息到Vantiq平台的一个topic上。

 

对Vantiq目前不支持的source如何支持?

 

Vantiq目前已经支持了大多通用的物联网平台的通讯协议,但也有一些没有支持的协议。我们改如何对它们进行支持呢?Vantiq平台是一个非常容易扩展的平台。Vantiq可以通过extension source框架来扩展对这些source的支持。

 

这是目前Vantiq的extension source的框架。对于一个目前没有被支持的源来说需要使用JAVA来生产一个extension的应用。该应用可以运行于一个PC或能够运行JAVA的设备。它一边连接event data source(可以是网路设备,或remote service等),另外一边连接Vantiq平台。通过上面描述的7个步骤,它可以帮我们把一个外部的源接入到Vantiq系统中。

目前Vantiq已经在github上建立了几个extension source的项目。extension source的项目可以在https://github.com/Vantiq/vantiq-extension-sources找到。目前已经被支持的extension source有:

我已经把上面的几个source的用法录制下来了。如果你有不清楚的地方,可以观看我的视频文件:

如果开发者觉得自己的源不被支持,可以开发自己的定制的extension source来接入到Vantiq平台中。当然我们也可以通过其它的工具来帮我们转为Vantiq可以识别的源,比如可以通过Node-RED来把modbus转化为MQTT从而很方便地接入到Vantiq平台。

 

微处理器收集到的数据如何传入到Vantiq平台

 

如果微处理没有操作系统,那么建议采用Vantiq提供的Micro Edition来接入数据。这个Micro Edition对内存的需求有1M多一点。它是一个标准的C语言库。可以把Vantiq的这个库集成到系统中。通过轮询的办法,查看是否有数据变化,如果有的话,通过Micro Edition提供的接口传入到Vantiq平台。当然前提是这个微处理自己也能够连网。

如果微处理自己本身带有操作系统,比如Linux,我们还是可以使用Micro Edition中所使用的库来做。但是我个人更建议使用MQTT通讯协议把数据接入到Vantiq平台中。每个语言都能找到相应的MQTT库,我们只需要它的client API接口。Vantiq平台自己已经提供一个broker。对于很多开源的开发者来说,大家可以参阅https://mqtt.org/tag/paho来实现在设备中的MQTT。

 

 

请注意:对于https://dev.vantiq.cn/来说,MQTT服务器的地址是tcp://public.vantiq.cn:1883。一旦客户端和服务器建立了连接,Vantiq和设备就可以通过MQTT进行双向通信了。

 

如何把Vantiq平台的数据以事件驱动的方式传入到定制的客户端

 

Vantiq平台有Client Builder。我们可以利用它来创建自己的客户端,并和Vantiq平台的数据完美的融合在一起。但是也有情况,开发者想有自己的客户端开发,并用自己所熟悉的工具来开发自己的喜欢的页面。这个客户端就是完全独立于Vantiq平台。那么,我们怎么把数据传输到这个客户端呢?

 

对于不是流的数据

对于一些数据不是以流的形式存在的,比如就是一个静态的数据表格。对于这些数据的访问,我们可以采用我在这篇文章开始所提到的REST API的方式来访问。每一个资源可以用REST API的方式来访问。当然我们也可以采用Websocket的方式。

 

对于流的数据

如果一个数据本身就是流,也就是它可能时时刻刻会发生变化,而且我们的客户端需要实时地显示这些数据,比如传感器数据。当然我们也可以采用上面的REST API的方法来做,通过一个周期性的轮询来查询数据,并展示数据。这个方法的缺点是可能会浪费网路资源,比如轮询过勤,或遗失显示数据,比如轮询周期比较长。REST API本带来的效率也不是很高。

针对这种情况,我们可以采用Websocket的方法来实现对流的数据的展示。是一事件来驱动的。我们可以通过Websocket发送如下的数据到Vantiq平台来订阅一个事件,比如当一个叫做system.sources的type (表格)每当有插入的动作时,将会产生一个事件,并通知客户端。那么在你的连接的Websocket的onmessage事件中就可以收到相应的消息。我们甚至不需要主动去读取这个数据。在下面的这个accessToken相应于一个namespace。

{
    "accessToken": "2XlLjXgMqJkgwI4V_wU67M2ddOngPkW55EjFOqf01Jk
    "op": "subscribe",
    "resourceName": "events",
    "resourceId": "/types/system.sources/insert",
    "parameters": {
        "requestId": "system.sources/insert"
    }
}

具体实现,请观看我的视频“如何运用Websocket来把Vantiq和第三方网页对接”。

在未来的文章中或视频中,我讲重点介绍如何实现上面的这些功能。请大家关注我的博客。

 

 

没有更多推荐了,返回首页