大家好,我是帅气小伙,好久没更新了,今天写这篇文章的目的是:介绍一下我们父子共同合作过的智能家居解决方案。谨此记录大学4年与父亲欢度的时光。
需求分析
有一套硬件设备接入到了路由器,有一个独立的ip地址,硬件有网络通讯模块,能够通过socket通信协议控件硬件根据相应的命令完成指定的操作,由于硬件设备接入的是内网,ip是(192.168.1.x),因此无法通过外网直接控制硬件设备。为此需要开发一个管理系统去实现外网控制硬件的需求。
解决方案
一、Android和iOS同时开发一套Socket长连接(不建议使用)
大三的时候,在学Android开发,我确实采用了这个解决方案,后来因为Socket长连接这块没有实现好,导致了自动重连的多次失败,内存占用过高,而导致了APP的不稳定,显然达不到产品级的需求,并且iOS开发也需要成本,因此把这种解决方案做为调试硬件用。
方案一实现思路是如下:
1.注册一个花生壳域名,绑定你的家庭的IP地址,因此这个IP地址是不固定的,除非你向电信申请一个公网的IP。
2.在路由器配置花生壳的登陆(官网有教),然后配置内网和外网的映射。例如
硬件设备IP地址 192.168.1.119 监听端口是20108
路由器配置经过以上的配置你就可以通过外网访问到硬件设备了(注册域名:20108)
3.在Android开发中使用Socket连接服务器(注册域名:20108)
二、使用HBuilder混合开发APP,省去开发iOS的成本
实际开发出来的demo这个解决方案,虽然能够省去开发iOS的开发成本,但是同样存在解决方案一的不足,因为是混合型开发,对于底层Socket的封装也不够完善,更别提写长连接了。但是值得一提的是,这个混合开发框架,开发效率还是有的。
三、搭建Web服务器,Web服务器控制硬件设备,移动端连接Web服务器
以上2种App直连的解决方案,显然不可行,于是我们提出方案三,但是Web服务器有2种搭建形式:内嵌,外设。
内嵌Web服务器
现在有一些硬件模块,例如(STM32F107开发板),支持内嵌Web服务器,也就是将html代码编译成16进制,写入到开发板中。
内嵌 这是手机访问的样子内嵌的好处就是,不用专门搭建Web服务器,跟硬件的运行状态一致,但是缺点是很多的
1.HTML转成16进制,写入开发板,这样调试略麻烦。
2.可扩展性和性能差,硬件设备的内存和CPU都有限。
3.开发效率低,产品质量差,我都不知道,我要贴个图,弄个样式,搞个插件该怎么写入开发板了。
外设Web服务器(推荐)
外设Web服务器1.可扩展性强,一个Web服务器可以同时与多台硬件设备进行通讯和交互
2.性能由于前面的解决方案,开发效率高。
功能模块
4个模块1.设备管理
录入设备的IP和监听端口
发布硬件设备(真正建立Socket长连接)
实时展示硬件的运行状态
2.硬件调试
可通过Socket与硬件设备进行通信
可通过Socket指令形式向硬件设备写入程序
3.指令管理
常用的指令,可以做完模板保存
4.运行日志
硬件设备的故障情况,运行情况需要及时的记录,方便及时排查。
技术选型
后端
Spring boot tio swagger
前端
easyui
总结
读了4年的软件,只是为你能够与你软硬兼施,我们在一起的时间太少了。
网友评论