[0036] 以下是本发明的具体实施例并结合附图,对本发明的技术方案作进一步的描述,但本发明并不限于这些实施例。
[0037] 一个智能网关后台服务器需要具有管理几百万个智能硬件的能力,为了实现这种业务需求本发明使用Akka的事件驱动模型实现管理大量智能硬件的能力。Akka的主要目的是编写应用程序,使它们能更简单的部署在云上或运行在分布式环境中,并能有效的利用全部计算机资源进行业务处理。Akka是一个用Scala编写的库,用于简化编写容错的、高可伸缩性的Java和Scala角色模型应用。
[0038] 在智能网关后台管理系统中这些智能设备相当于一个Actor(角色)。它有以下特点:
[0039] 1.角色是一个非常小的模块,1G的内存可以部署250万个角色,所以满足内存的容量要求。
[0040] 2.角色是单线程的,彼此间通过传递消息来进行交互,如果没有消息发送给这个角色,角色不会消耗资源,不需要使用轮询的方式获取数据,没有线程环境下的上下文切换,减少CPU的使用。
[0041] 3.角色一次只能处理一个消息请求,所以无论是动作消息还是请求某个响应或状态的消息,在角色内部都是顺序处理的,这个保证了指令按照下发的顺序进行处理。
[0042] 4.如果一个角色在处理业务过程中发生异常,它会自动终止或重启,不会对系统中的其它的角色的产生影响,提高了系统的稳定性。
[0043] 5.角色使用不可变数据,从根本上消除了线程同步问题,减少了系统的复杂度,有利于后期的维护和升级。
[0044] 通过使用基于角色的事件驱动模型,智能网关后台管理系统可以实现大量智能硬件的管理能力,同时保证系统运行的可靠性。
[0045] 以下为本发明具体实施例。
[0046] 实施例一
[0047] 如图1所示为本实施例中一种基于事件驱动模型的智能网关管理方法流程图,所述事件驱动模型中包括一个多层级的角色管理目录,该管理方法包括:
[0048] S1.当所述智能网关为在线状态时,查找所述智能网关对应的智能网关角色;
[0049] 本步骤之前,当系统启动后,会自动创建一个根结点,该根结点用于创建智能网关对应的智能网关角色。
[0050] 本步骤中,后台管理系统监测到智能网关为在线状态时,根据所述智能网关序列号信息,开始查找所述智能网关对应的智能网关角色。
[0051] 若根据智能网关序列号信息不能查找到所述智能网关对应的智能网关角色,则创建一个新的智能网关角色。
[0052] S2.当所述智能网关管理的智能设备为在线状态时,创建智能设备角色;
[0053] 本步骤中,后台管理系统监测到智能网关管理的智能设备为在线状态时,根据所述智能设备序列号信息,创建智能设备角色。
[0054] S3.接收用户发送的控制指令,并将所述控制指令发送至智能设备角色;
[0055] 本步骤中,后台管理系统接收到用户发送的控制指令后,将所述控制指令发送至智能设备角色。
[0056] S4.智能设备角色判断所述控制指令是否为可执行指令,若是,则智能设备角色将所述控制指令发送至智能网关角色,智能网关角色将所述控制指令发送至智能网关。
[0057] 本步骤中,智能设备角色接收后台管理系统发送的用户控制指令,并根据所述智能设备状态判断所述控制指令是否为可执行指令:
[0058] 若所述控制指令为可执行指令,则智能设备角色将所述控制指令发送至智能网关角色,智能网关角色再将所述控制指令发送至智能网关。
[0059] 如图2所示为本实施例中一种基于事件驱动模型的智能网关管理系统结构图,该系统包括:
[0060] 查找模块100,用于当所述智能网关为在线状态时,查找所述智能网关对应的智能网关角色;
[0061] 创建模块200,用于当所述智能网关管理的智能设备为在线状态时,创建智能设备角色;
[0062] 转发模块300,用于接收用户发送的控制指令,并将所述控制指令发送至智能设备角色;
[0063] 判断模块400,用于判断所述控制指令是否为可执行指令。
[0064] 所述创建模块200还用于当根据智能网关序列号信息不能查找到所述智能网关对应的智能网关角色时,创建一个新的智能网关角色。
[0065] 本实施例旨在解决智能网关后台管理系统对大量智能硬件进行控制时系统运行的效率问题。
[0066] 实施例二
[0067] 本实施例使用飞利浦智能灯业务模型对实施例一进行详细方案阐述。
[0068] 如图3所示为本实施例中系统角色结构图,系统模型相当于一个树形结构。
[0069] 本实施例中,硬件系统由智能网关,飞利浦网络控制器(hub),飞利浦智能灯组成。
[0070] 系统启动后,自动创建一个根结点,名字为supervisor,这个根结点负责智能网关角色的创建,在系统中的路径为:/user/supervisor。
[0071] 智能网关后台管理系统接收到智能网关在线消息后,在根角色中根据智能网关的序列号查找这个智能网关对应的智能网关角色。
[0072] 如果没有,则创建一个新的智能网关角色,这个智能网关的名字为:gateway-SN值,在系统中的路径为:/user/supervisor/gateway-SN。
[0073] 智能网关管理的智能设备上线后,根据智能设备的厂商序列号在智能网关角色下生成智能设备角色,例如智能灯在系统中的路径为:/user/supervisor/gateway-SN/led-SN。
[0074] 由于角色是基于消息事件驱动的模型,为了控制角色的动作,需要给角色发送事件消息,角色接收事件消息后(onReceive方法),根据事件类型进行处理。
[0075] 智能网关角色有以下消息事件组成:
[0076] 1.OnLine:网关在线
[0077] 后台管理系统接收智能网关在线消息后,把网关在线消息发送给智能网关角色。
[0078] 智能网关角色在后台管理系统中根据SN生成或更新数据库中的网关对象,例如创建时间、最新上线时间、网关上线状态,软件版本等,最后把智能网关上线命令处理结果返回给返智能网关,返回值需要包括智能网关在后台管理系统的ID值(数据库表主键)。
[0079] 2.OffLine:网关离线
[0080] 当后台管理系统与智能网关TCP连接通道中断后,给智能网关角色发送停止消息。
[0081] 智能网关角色接收所述停止消息后,给它管理的所有智能设备角色发送停止消息,完成后停止(stop方法),释放资源。
[0082] 发送停止命令为:
[0083]
[0084] 3.DeviceOnLine:智能硬件在线
[0085] 智能网关管理的智能硬件上线后,在智能网关角色中根据设置类型创建不同的智能设备角色,它属于智能网关角色的孩子。
[0086] 智能设备角色的名字为:设备类型-设备SN。
[0087] 例如网络控制器对应路径为:
[0088] /user/supervisor/gateway-FXGW00000001/hub-00:17:88:01:02:31:a5-0b[0089] 4.OnLineRsp:回复消息
[0090] 后台管理系统对智能网关或智能硬件发送的消息处理结束后,都需要给智能网关发送处理结果消息。
[0091] 这些消息通过智能网关角色统一处理,以保证命令处理的顺序性。智能网关角色接收到这个消息后,把消息保存在消息队列中,依次处理。
[0092] 5.DeviceSet:智能硬件控制消息
[0093] 用户通过手机应用程序管理智能硬件时,把相关命令发送给后台管理系统。
[0094] 后台管理系统接收用户发送的控制指令后,将控制指令发送给智能设备角色的步骤具体为:
[0095] (1)生成智能设备角色的路径;
[0096] (2)把控制指令流包装进控制消息中,把消息发送给智能设备角色。
[0097] 智能设备角色判断所述控制指令是否为可执行指令:
[0098] 若是,则智能设备角色将所述控制指令发送至智能网关角色,智能网关角色将所述控制指令发送至智能网关。
[0099] 示例开灯过程如下:
[0100] (1)把开灯指令发送给智能灯角色
[0101]
[0102] led:智能灯
[0103] userId:手机用户标识符
[0104] power:1-开灯0-关灯
[0105] (2)在智能灯角色对指令进行判断,如果是可执行命令,把控制命令交给智能网关角色(相当于智能灯角色的父亲)处理
[0106] getContext().parent().tell(new GatewayActor.DeviceSet(指令),this.getSelf());
[0107] 指令格式为:
[0108] {"type":"set","commandId":4,"userId":"2","deviceId":"2","devData":{"power":"1"}}
[0109] 需要注意的是,本实施例中,当智能网关角色停止时,由它所生成的所有智能设备角色都将自动停止运行,以便释放资源。
[0110] 本实施例具有以下优点:
[0111] 1)通过角色减少内存消耗量,容易满足对资源的要求;
[0112] 2)通过事件触发机制,减少CPU的使用量,提高系统处理的吞吐量;
[0113] 3)取消线程模型,减少系统的复杂性,有得于后期的维护和运行的稳定性。
[0114] 实施例三
[0115] 本实施例与之前的实施例不同之处在于,本实施例中还包括对智能设备角色的状态监控。
[0116] 本实施例中,智能网关角色还包括以下消息事件:
[0117] Terminated:智能设备角色终止消息
[0118] 创建智能设备角色时,使用监听方法(watch)监听智能设备角色的状态信息。
[0119] 当监听的智能设备角色发生异常终止时,会给智能网关角色发送消息,智能网关角色获取到这个消息后,从消息体中获取智能设备角色信息以便做进一步处理。
[0120] 本实施例中一种基于事件驱动模型的智能网关管理方法包括:
[0121] S1.当所述智能网关为在线状态时,查找所述智能网关对应的智能网关角色;
[0122] S2.当所述智能网关管理的智能设备为在线状态时,创建智能设备角色;
[0123] 本实施例中,步骤S2中还包括:
[0124] 智能设备角色创建完成后,开启对所述智能设备角色的状态监测;
[0125] 当所述智能设备角色发生异常时,向所述智能网关角色发送通知消息。
[0126] S3.接收用户发送的控制指令,并将所述控制指令发送至智能设备角色;
[0127] S4.智能设备角色判断所述控制指令是否为可执行指令,若是,则智能设备角色将所述控制指令发送至智能网关角色,智能网关角色将所述控制指令发送至智能网关。
[0128] 本实施例中一种基于事件驱动模型的智能网关管理系统包括:
[0129] 查找模块100;
[0130] 创建模块200;
[0131] 转发模块300;
[0132] 判断模块400。
[0133] 还包括:
[0134] 状态监测模块500,用于当智能设备角色创建完成后,开启对所述智能设备角色的状态监测。
[0135] 本实施例通过对对智能设备角色进行状态监控,能有效提高系统稳定性。
[0136] 本文中所描述的具体实施例仅仅是对本发明精神作举例说明。本发明所属技术领域的技术人员可以对所描述的具体实施例做各种各样的修改或补充或采用类似的方式替代,但并不会偏离本发明的精神或者超越所附权利要求书所定义的范围。