中移物联网 多协议接入能力,支持包括MQTT协议在内的多种协议接入。我们可以搭建WEB服务,实现网页访问,远程控制采用MQTT协议的设备(这里只演示了MQTT协议,实际多种协议都可以通过OneNET的协议封装,提供一致的网页服务。
关注点:通过WEB服务,将MQTT的技术细节屏蔽,提供用户更加易用的业务体验和随时随地控制设备的能力。
注意:本程序因为没有固化 apiKey ,因此任何人只要有产品的apiKey,即可控制该产品下所有设备(通过设备的ID)实现远程控制能力。但实际的应用中,不建议直接在页面上填写产品apiKey,因此这个项目仅仅作为培训演示使用。
- jdk 1.8
- maven 3.0+,构建工具
- IntelliJ IDEA,IDE
- git,版本维护工具
--使用 IDEA 导入本项目目录中 pom.xml 文件:
- 服务端口参看配置文件
- 服务Context修改,参看java代码文件
该类实现url映射服务context方法,以及实现控制参数获取,向OneNET平台发送MQTT控制命令等逻辑。
public String hello(Map<String, Object> map, HttpServletRequest request){
//提交的数据
String deviceid = request.getParameter("deviceid");
String apiKey = request.getParameter("apikey");
String command = request.getParameter("command");
logger.info("deviceid = " + deviceid+" apiKey = " + apiKey+ " command = " + command);
String url = Config.getDomainName() + "/cmds?device_id=" + deviceid;
JSONObject re = HttpSendCenter.postStr(apiKey, url, command);
logger.info("return info = " + re.toString());
map.put("msg", re.toString());
return "login";
}
该类实现SpringBoot服务发现和运行入口,以及配置页面静态资源。
protected void addResourceHandlers(ResourceHandlerRegistry registry) {
//配置静态资源(js/css/html等)路径
registry.addResourceHandler("/static/**").addResourceLocations(ResourceUtils.CLASSPATH_URL_PREFIX+"/static/");
registry.addResourceHandler("/hplus/**").addResourceLocations(ResourceUtils.CLASSPATH_URL_PREFIX+"/hplus/");
super.addResourceHandlers(registry);
}
该文件实现WEB页面,供参数填写以及请求提交。
代码略
略
在服务器上安装 JDK1.8,将生成的 MQTT-control-0.0.1-SNAPSHOT.jar 拷贝到自建的服务器上,假设ip为127.0.0.1。然后运行:
java -jar MQTT-light-control-0.0.1-SNAPSHOT.jar --server.port=80
这样,在 127.0.0.1 服务器上,启动Web 服务监听 80 端口
浏览器访问 http://127.0.0.1 地址,打开如下页面: