赞
踩
Vantiq作为一个PaaS平台提供了一个强大的实时信息处理功能,并可根据实时的数据输入,预设的场景来实现人机交互,控制或生成新的事件。一个典型的Vantiq数据处理流程如下:
这些部分的作用:
在上面的所有的流程中,Vantiq也可以在任何一个环节,把事件流处理后,并重新生成新的事件流。这些事件流可以被新的业务,或其它的业务所使用。通过事件的重新发布,对各个业务实现解耦,为未来的业务的重构带来极大的方便。
从上面我们可以看出来,外面的物理事件是Vantiq平台流处理的开始。在今天的文章中,我们来介绍一下如何把这些事件接入到Vantiq平台,并介绍了各种方法的优缺点。有的方法可行,但不是event driven。在本文中,为了细述的方便,我省去了网路gateway。
由于Vantiq是一个云平台,任何设备想接入到Vantiq平台,这个设备必须先具备连网的功能。
总体来说,外面的数据接入到Vantiq平台有两种方式:
REST API是基于HTTP的一种通用互联网传输协议。在互联网中被广泛使用。在Vantiq平台中也被广泛运用。
首先想说的一点是:Vantiq平台里的任何一个东西都是可以通过REST API及Websocket 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。这些都是一些开箱即用的源。如果我们的数据的协议刚好和这里的相匹配,我们可以直接在系统里添加这些源,并加入少量的配置就可以。
这里有常见的一些物联网的协议,比如MQTT,KAFKA及AMQP。
MQTT是一种基于TCP/IP的通讯协议,在物联网的领域中非常普及。特别是它能够在有些网路条件不是很好的情况下也能发挥非常出色。通过MQTT协议,我们可以定义一个或多个上传的topic。每当有信息在这些topic中进行发布时,Vantiq里的MQTT对应的source就会有相应的数据产生。同时如果我们想把Vantiq平台的数据进行反向传输的话,我们也可以定义另外一组的topic。每当在Vantiq平台有数据发布到这些topic的话,设备也可以接收到这些信息,并进行控制等动作。如果大家想了解一个更详细的例子,可以参考我的视频“如何运用MQTT向Vantiq平台发送和接收数据”。
这里我们需要提到一点的是,在互联网的时代,有很多的设备自己就是一个服务,并有专有的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目前已经支持了大多通用的物联网平台的通讯协议,但也有一些没有支持的协议。我们改如何对它们进行支持呢?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提供的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平台有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和第三方网页对接”。
在未来的文章中或视频中,我讲重点介绍如何实现上面的这些功能。请大家关注我的博客。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。