一、什么是Eclipse Kura
大定义上讲,Eclipse Kura是一个Eclipse物联网项目,为建立物联网网关提供了一个平台。这是一个智能的应用程序容器,可以远程管理这些网关,并提供各种各样的API,让您可以编写和部署自己的物联网应用程序。
Kura运行在Java虚拟机(JVM)之上,并利用OSGi(一个用于Java的动态组件系统)来简化编写可重用软件构建块的过程。Kura API可以轻松访问底层硬件,包括serial ports,GPS,watchdog,USB,GPIOs,I2C等。它还提供OSGI bundle,以简化网络配置管理、与IoT服务器的通信以及网关远程管理。
总结一下那就是,Kura提供了一个容器,基于Java和OSGI,可以用于M2M应用在服务网关的运行。并且还提供了集成开发工具的支持,使其能够在EclipseIDE模拟环境中运行M2M应用,还可以部署在目标网关,最终在这个区域为Kura设备远程提供应用。
如果我们再精简一下定义,那么Kura就是一个运行IoT服务网关的环境。在了解Kura的结构和使用之前,我们先通过下面这张图来了解一下IoT网关的结构及其作用。从图中我们可以看到IoT网关起到了一个中介和桥梁的作用,将设备与系统连接了起来,根据Kura与IoT网关的关系,我们可知Kura的结构图与之类似,因此也有人会这样大胆地定义
Kura:Kura - A Gateway for the Internet of Things - D.J. Walker-Morgan.
其实这样的定义并不是非常的正确,因为Kura是一个服务于IoT网关的开源框架,并不是真正的IoT网关,但是这样的定义更便于理解,有助于接下来的一系列学习。
二、Kura在IoT中的作用
前面讲到,我们可以将Kura的定义简单化,将其理解为一种IoT网关,因此IoT网关在IoT中的作用即与Kura的作用相似。所以Kura扮演着云与控制器,传感器和智能设备之间传输数据的连接点的角色,还有为物联网网络及其传输的数据提供额外的安全性的作用等等。具体可以从Kura提供的服务中体现出来:
I/O服务
数据服务
云服务
配置服务
远程管理
网络连接
看门狗服务
Web管理界面
实现这些服务就需要对其进行一系列的配置。服务配置、Web管理界面、OSGI组件以及JDK之间的关系可由下面这张图概括
从这张图我们可以了解到Kura的配置与信息查看都是通过Web UI实现的,而Kura组件被设计成可配置的OSGi声明式服务来暴露服务API和引发事件。虽然有几个Kura组件是纯Java的,但是其他的都是通过JNI调用的,并且依赖于Linux操作系统。
详细内容可以浏览Eclipse Kura Overview查看
三、Kura的安装
Kura是基于OSGI的开源框架,因此Kura实现了实际运行环境和开发环境的分离,在开发环境中编写好的功能就是一个OSGI bundle,可以通过Eclipse中的插件远程部署到运行环境中,既提高了编程效率,也能使IoT功能模块化,结构更加清晰。
Kura运行环境可安装在树莓派或BeagleBone上,而开发环境则是导入到eclipse中(Windows、Linux、OSX均可),下面先来介绍Eclipse Kura开发环境的导入以及自带仿真服务器的运行。
1.安装JDK(JDK8)
2.安装Eclipse IDE(JavaEE版本)
3.安装mToolkit
需要额外的插件mToolkit,以允许远程连接到启用Kura的目标设备上的OSGi框架。要将mToolkit安装到Eclipse中,请使用以下步骤:
- 打开 Help | Install New Software… 菜单。
- 根据Eclipse版本添加以下URL作为更新站点
- Eclipse Mars及以上版本: http://mtoolkit-mars.s3-website-us-east-1.amazonaws.com
- Eclipse Neon: http://mtoolkit-neon.s3-website-us-east-1.amazonaws.com
- 安装“mToolkit”功能(您需要取消选中 Group items by category 复选框才能看到该功能)
- 重新启动Eclipse。在菜单 Window | Show View | Other ,应该有一个 mToolkit | Frameworks 选项。如果是这样,插件已正确安装。
4.创建一个Eclispe工作区
5.进入Kura官网下载Kura User Workspace archive(可选择不同的版本,注意选择带有Web UI的版本)
6.打开Eclipse,点击File | Import,选择 General | Existing Projects into Workspace,点击Next,选择Select archive file选项,然后点击Browse...,选择刚刚下载的User Workspace Archive文件,如user_workspace_archive_2.0.1.zip,然后点击Finish,就能看到工作区中导入的四个项目了。
导入成功后,不出意外我们会发现Eclipse会报错,怎么处理呢?我们打开左侧的target-definition项目,双击里面的kura-equinox_3.8.1.target文件,打开后在Definition窗口中,点击右上角的Set as Target Platform,这样就能重置目标平台,我们就能看到报错消失。
接下来我们就来了解一下这四个导入的项目有什么作用:
- org.eclipse.kura.api - 这是Kura的核心API。
- org.eclipse.kura.demo.heater - 这是一个示例项目,可以使用它作为创建自己包的起点。
- org.eclipse.kura.emulator - 这是在Eclipse中运行Kura的模拟器项目(仅适用于Linux / Mac)。
- target-definition - 这是一组需要的API,它们是API和Kura的依赖关系。
如果想要运行仿真服务器(模拟器),我们依次打开左侧的org.eclipse.kura.emulator | src/main/resources,右键点击Kura_Emulator_[os].launch(根据自己的操作系统选择Linux或者OSX),点击Run As | Kura_Emulator_[os],即启动了模拟器。打开浏览器,输入http://localhost:8080/kura,弹出登录框,初始账号密码为 admin/admin,登录成功后即可如下界面Kura的开发环境安装成功。
四、Kura在树莓派上的安装
1.dhcpcd5软件包与Kura不兼容,需要删除,执行以下命令:
sudo apt-get purge dhcpcd5
2.NetworkManager与Kura网络管理冲突,请确保未安装它执行以下命令:
sudo apt-get remove network-manager
3.安装gdebi命令行工具:
sudo apt-get update
sudo apt-get install gdebi-core
4.确保Java 8已经安装
java -version
如果没有安装OpenJDK 8执行以下命令:
sudo apt-get install openjdk-8-jre-headless
注:下载完以后还要进行环境变量的配置。
5.前往Eclipse Kura官方网站下载合适版本的Kura软件包,保存到/etc下
下载链接:http://www.eclipse.org/kura/archives.php
注:也可按照官网方法输入命令下载软件包,不过所下载的版本很有可能不带Web UI,因此最好前往Kura官网手动下载自己需要的版本。
6.安装Kura:
sudo gdebi kura_ <version> _raspberry-pi-2-3_installer.deb
7.重新启动树莓派:
sudo reboot
Kura重新启动后在目标平台上启动。
8.Kura通过以下方式设置了一个可通过浏览器访问的本地网络用户界面:
http://<device-ip>
初始账号密码为:admin/admin。
注:树莓派上安装完Kura可以通过输入ip地址进入Web操作界面,但是开发环境的模拟器运行后不能通过本机ip地址访问Web UI,而是通过http://localhost:8080或者http://127.0.0.1:8080进入。
重新启动后可能需要重新配置一下树莓派上的网络设置,因为Kura的安装更改了树莓派原有的网卡配置(Kura安装成功后,本地ip地址将会默认更改为 172.16.1.1)。
五、Kura工作流程
安装完Eclipse Kura的开发环境和运行环境后,我们需要了解Kura是如何将这两个环境整合起来,实现各种功能的,下面的图简单地展示了Kura的工作流程为了方便陈述,假设我们的Eclipse安装在了MAC OSX操作系统上。从图中我们可以看到,Web UI控制台既可以在树莓派上展现,也可以在OSX上展现,登录网址都是 http://<device—ip>(如:http://172.16.1.1)。
注:进入Web控制台后,最好改一下登录密码,提高安全性。
Eclipse工作环境中的Plug-in Project是编写的OSGI项目,即实现各个连接设备功能的模块,OSGI作为一个用于动态组件系统,实现了高度的模块化。Plug-in Project可以以JAR包的格式导出,而树莓派上的Kura运行环境可以引入导出的JAR包(也可以直接引入项目),转化为系统的一个OSGI bundle,实现运行环境与开发环境的交互。不过用这种方法引入会将引入的模块与系统自带的bundle混在一起,不易查找,而且非常不易管理,如下图所示:
如此多的bundle想要找到自己需要的谈何容易,因此我们可以将bundle部署到包中,依旧是通过JAR包的形式引入(也可以直接映入项目),再将包部署到运行环境中,这样我们在Web UI上点击左侧的package可以看到如下的画面:如此就能更加清晰地查看和管理部署的模块,具体操作步骤可点击https://eclipse.github.io/kura/dev/hello-example.html查看。
我们了解了Kura运行环境与开发环境的交互手段,那么这两者是通过什么手段连接起来的呢?从图中我们能看到Eclipse中的mToolkit插件起到了远程连接中介的作用,它允许远程连接到启用Kura的目标设备上的OSGi框架。当我们配置好mToolkit的连接后,我们能看到如下的画面,我们就能在这个窗口中进行Bundle和Package的远程部署了。
六、Kura与Reactive Blocks的整合使用
Reactive Blocks是一个可视化模型驱动的开发环境,支持正式模型分析,自动化代码生成,分层建模,以及为Java平台提供的大量随时可用的组件库。通过组合可重复使用的块,开发人员可以以图形方式创建复杂的应用程序。在IoT开发中,可视化应用程序开发能更直观地掌握复杂应用程序,使其一目了然。用于构建Reactive Blocks应用程序的图表基于UML图,这是一个既定的标准,因此易于识别和共享。
此外,Reactive Blocks还提供与基于OSGi的IoT堆栈的紧密集成,允许动态启动、停止和重新配置应用程序。