1,本设计版权归本人所有;2、本博客禁止转载或者用本博客技术用于商业用途。

还有个重要原因我不喜欢写博客,因为linux下编辑太痛苦了。所有 的这些图纸都是我用一个叫“DIA”的软件画的,然后导出成图片,这个软件不支持中文输入。所以待会看到,原来我是个英语爱好者。

废话不多说了。一下东西都是摘自我的记录性文档。

顺便说下我们的网站:http://115.28.80.200/

立马我们的域名就会备案成功了,到时候用域名访问更合适:www.threesoft.net

谢谢大家。有UI设计高手,单片机高手,诚信邀请这两方面的人才入伙,我们一起打土豪去。

Sanliao智能家居平台软件设计

项目

Sanliao智能家居平台软件设计

作者

曾金龙

470910357@qq.com

时间

2014-08-17

1,架构设计

1.1 总体架构

服务器采用openfire

家庭控制端需要一个android设备,例如闲置的android手机,作为homedevice controller。它通过wifi家庭网关(路由器)连接到服务器,同时通过蓝牙,wifi等其他无线方式连接到受控设备。

控制端是一台android手机(或者其他),用于发送控制命令。

1.2 Home Device Controller

家庭控制器,作为家庭内部设备的控制中心。内置Asmack,并定义智能家居的描述语言。和外设的连接通过插件apk来通信。

插件式管理有利于我们的sdk推广,成为真正的通用型平台。

1.3 家庭设备

通过无线来通信的家电设备

1.4 一次控制的交互时序图

2 实现层

2.1 包及类图结构

包的依赖关系

我们的 SmartHome依赖Eim,而Eim又依赖asmack。

1)IActivitySupport接口

/**

* 获取EimApplication.

*/

public abstract EimApplication getEimApplication();

/**

* 开启服务.

*/

public abstract void startService();

/**

* 终止服务.

*/

public abstract void stopService();

/**

* 校验网络-如果没有网络就弹出设置,并返回true.

*/

public abstract booleanvalidateInternet();

/**

* 校验网络-如果没有网络就返回true.

*/

public abstract booleanhasInternetConnected();

/**

* 退出应用.

*/

public abstract void isExit();

/**

* 判断GPS是否已经开启.

*/

public abstract booleanhasLocationGPS();

/**

* 判断基站是否已经开启.

*/

public abstract booleanhasLocationNetWork();

/**

* 检查内存卡.

*/

public abstract voidcheckMemoryCard();

/**

* 显示toast.

*/

public abstract voidshowToast(String text,int longint);

/**

* 短时间显示toast.

*/

public abstract voidshowToast(String text);

/**

* 获取进度条.

*/

public abstract ProgressDialog getProgressDialog();

/**

* 返回当前Activity上下文.

*/

public abstract Context getContext();

/**

* 获取当前登录用户的SharedPreferences配置.

*/

publicSharedPreferences getLoginUserSharedPre();

/**

* 保存用户配置.

*/

public void saveLoginConfig(LoginConfig loginConfig);

/**

* 获取用户配置.

*/

public LoginConfiggetLoginConfig();

/**

* 用户是否在线(当前网络是否重连成功)

*/

public boolean getUserOnlineState();

/**

* 设置用户在线状态 true在线 false不在线

*/

public void setUserOnlineState(boolean isOnline);

/**

* 发出Notification的method.

*/

public void setNotiType(int iconId, StringcontentTitle,

StringcontentText, Class activity, String from);

2) ActivitySupport

主要是检查网络,sdcard以及用户配置等基本环境,然后通过startService来开启四个服务。

 3)AContactorSupport

它主要是包含一个广播接收器成员,该接收器类是它的内部类。它监听着那些它感兴趣的action。

4)IMContactservice

联系人服务类,它主要是维护用户的花名册(联系人),它是一个服务,对外传送数据是通过广播的形式。

该服务主要是监听用户联系人的变化,asmack提供了几组对数据包的回调函数,即linstener。IMContactService是监听了(packet listener)Presence.Type.subscribe,别人加它为好友的时候回调;还有一个RosterListener,监听整个花名册的变化。

这个类是设计的最失败的类,因为太复杂了。应该解耦。例如花名册的消息就应该和chat的分来来。揉在一起,很痛苦的。

RosterListener是一个接口,它包含了的方法有:

增加/更新/删除/改变,具体含义去看相应代码,在此不列出。

/**

* Called when rosterentries are added.

*/

public voidentriesAdded(Collection<String> addresses);

/**

* Called when a rosterentries are updated.

*/

public void entriesUpdated(Collection<String> addresses);

/**

* Called when a rosterentries are removed.

*/

public voidentriesDeleted(Collection<String> addresses);

/**

* Called when thepresence of a roster entry is changed. Care should be taken

*/

public voidpresenceChanged(Presence presence);

5)IMChatService

聊天服务

该服务,只是向XMPPConnection注册了个chat类型的数据包监听器,当connect收到chat类型的数据包之后会调用这里的processPacket函数。

6)IMSystemMsgService

系统消息服务类,监听系统消息,就是那种系统广播,如QQ的弹框消息。

7)ReConnectService

重连服务类,主要是通过一个广播监听器来监听系统网络的变化CONNECTIVITY_ACTION,如果网络改变,则对xmppconnection连接进行重连。

从上面的类图关系我们可以看出,这个设计其实并不合理的。服务不应该在ActivitySupport里面启动,这种设计的扩展性是非常的差,不过,startService在EIM中也只调用了一次,在LoginTask类里面。我个人觉得这个服务开启应该单独开来,和activity无关。先凑合用吧。哎,懒惰是一剂毒药,它会让你慢慢死去,勤奋也是一剂毒药,它会让你撕心裂肺。

8)AchatActivity

抽象对话类关系

总结下,可以得出EIM的组件图如下:

XMPPConnection对象是连接对象,负责和服务器的连接。整个就一个连接。

各种服务Service通过对XMPPConnection注册回调的方式来监听它们想要的包。当监测的包到来的时候,出了保存到本地,同时也广播出去。Activity会有个广播接收器,接收Service广播的消息,如果是感兴趣的,则处理,更新相应的UI。

这就是整个EIM的结构。

Sanliao智能家居平台软件设计相关推荐

  1. 智能家居系统的设计与实现

    摘自:http://www.csmayi.cn/yjzc/hyzc/201103/127410.html 论文关键词:智能家居 嵌入式系统 Windows CE Visual C++ Delphi 论 ...

  2. 智能家居系列之智能家居平台设计

    系列介绍 很久没有写文章了,近来断断续续地在思考一些东西.在去工作的地铁上,终于想好,决定分享自己在智能家居方面的思考.本系列文章计划分为7部分,不排除会对部分内容合并. 智能门锁 中控屏 智能音箱 ...

  3. 嵌入式linux智能家居系统,以Arm-Linux为平台的智能家居控制系统的设计详解

    嵌入式系统以其占用资源少.专用性强.功耗低的特点使其广泛应用在移动通信.工业生产.安全监控等领域.针对人们对高效.舒适.安全.便利.环保的居住环境的要求,提出了以Arm-Linux为平台的智能家居控制 ...

  4. 基于单片机(STM32F103ZE)的智能家居集成控制器设计

    目 录 1.引言 1 1.1 智能家居的简介 1 1.2 国内外的现状及发展趋势 1 1.3 本课题研究的目的和意义 3 1.4 本课题研究的基本内容 3 1.5 本章小结 3 2.系统的总体方案设计 ...

  5. ARM及ZigBee技术实现智能家居控制器的设计

      来源:飞象网   2011-7-29 10:08:25     关键词: ARM  ZigBee  智能家居   [提要]本文所介绍的智能家居控制器利用ZigBee技术将家庭中许多相对独立的家用电 ...

  6. android智能家居使用的协议,基于Android的智能家居APP的设计与实现论文.docx

    基于Android的智能家居APP的设计与实现中文摘要I I 基于 Android 的智能家居 APP 的设计与实现 中文摘要 本课题来源于某 IT 企业"智能家居系统"项目.移动 ...

  7. 几个智能家居平台研究——xlively,乐联网,majordomo,housemon,webmote,opensourceautomation...

    第一个最好研究也最容易懂的自然是乐联网与yeelink,谁他是中文的呢,还是比如符合中国人的习惯的.你配置自己的智能设备主动给乐联网提供采集数据后.用户就可以通过乐联网的管理平台或者APP来监控连接了 ...

  8. 米家?华为?阿里?Homekit?有没有你在用的智能家居平台?

    大家好,今天小编想给大家整理一些小编有所了解的智能家居APP. 1.米家APP是连接小米及生态链公司的智能产品,同时也开放接入第三方智能硬件,小米拥有一套完整的生态链,同时自家产品也在不断出新品,他们 ...

  9. 基于ZigBee和STM32的智能家居控制系统的设计与实现(五)--终结篇

    基于ZigBee和STM32的智能家居控制系统的设计与实现(五)–终结篇 说明 首先祝贺自己顺利的完成了毕业答辩工作,想起整个过程还是挺让自己感动的.最后还被评为优秀毕业设计,虽然并没有什么luan用 ...

最新文章

  1. WINCE 按键驱动编写
  2. NOIp2018 Mission Failed Level F
  3. go语言中及格比较特殊的switch语法
  4. 机器人学习--智能移动机器人的有关技术演讲(浙大-熊蓉教授-2021年)
  5. 王小川 python_Python与量化投资:从基础到实战
  6. 5.中文问题(自身,操作系统级别,应用软件的本身),mysql数据库备份
  7. [译] 虚拟现实是如何改变用户体验的:从原型到设备的设计
  8. dotNetCharting使用总结
  9. 聚合项目访问后台接口失败_聚合支付系统和免签支付系统对未来支付市场有哪些影响...
  10. 全局唯一递增的id_生成全局唯一id的几种方式
  11. Rust 生命周期太难学、最想实现与 C++ 互操作,Rust 2020 调查报告发布!
  12. 发那科karel机器人环境配置_Fanuc-你没用到的Karel编译方式
  13. 四川大学计算机学院管理手册,机房管理_规章制度_计算机基础教学实验中心 - Powered by 四川大学计算机基础教学实验中心...
  14. 创建variation model (差异模型)
  15. python三阶魔方_三阶魔方还原公式
  16. 基于FPGA的目标颜色识别追踪三——FIFO(同/异步FIFO)、DDR3
  17. 浪潮服务器u盘安装系统_浪潮服务器U盘安装系统无法识别到电脑硬题的解决
  18. IT英语中英文对照:著名的软件产品
  19. 沐阳Git笔记02Git工作区与缓存区
  20. 支付宝服务商条码付,直接打款给签约子商户方法

热门文章

  1. NY8A051H /8位EPROM-Based 6 I/O 单片机
  2. 那些年我曾经读过的书
  3. [Spring] 注入Bean属性
  4. SEC官员Hinman表示一些ICO可能有资格获得无异议函
  5. 译见赋能跨语言大数据渠道生态
  6. python阴阳鱼绘制(使用turtle)
  7. pytorch训练神经网络loss刚开始下降后来停止下降的原因
  8. 谷歌(google)全球网址
  9. 谷歌浏览器为什么不能自动保存账户密码?
  10. 快盘做网站服务器,快盘云服务器地址