基于_mq构建分布式认知应用的极简框架
Pabiana的Python项目详细描述
帕比亚纳
智能家居由各种远程控制设备和传感器组成,所有这些设备和传感器都具有独特的接口。 这些设备可以通过应用程序手动控制,也可以通过基于传感器输入的自适应算法控制。 要从软件中进行控制,这些接口中的每一个都必须用代码表示。 这就要求一个特别的模块化软件设计是可维护的。 此外,大型智能家庭的物理距离需要一个分布式控制系统。
处理和集成来自不同来源和类型的传感器输入,并根据结果控制多个设备,包括反馈回路,可以很快变得非常复杂。 A^ {EM1}层次数据处理模型EME>可以将复杂度限制在可管理的程度。 另一方面,分层系统控制模型可以实现对多个半自治系统的稳定监控。
pabiana是一个极简的python框架,它允许您构建符合这些原则的软件。 应用程序由许多并行运行的子模块组成,这些子模块分布在多个节点上。 然而,这些模块是紧密相连的。 恒定的消息流作为一种通信手段在它们之间传递。 网络上的消息传递由mq库处理。
除了家庭自动化系统,pabiana还可以用于开发智能助手、机器人控制系统或任何其他基于感官输入控制执行器的软件。
安装
pabiana目前使用python≥3.5进行测试。 它托管在pypi上。 要将pabiana集成到您的项目中,您可以使用以下命令安装它:
pip install --upgrade pabiana
建议对项目使用虚拟环境。
应用程序设计
开发pabiana应用程序的第一步是考虑应用程序将被拆分到的不同子模块。 在层次结构的底部,您通常会找到用于不同通信媒体的I/O模块。 一个模块可能负责http,另一个模块负责uhf无线信号,第三个模块负责音频信号。 这些模块强烈依赖于操作系统提供的驱动程序等资源。 但是,它们相当通用,可以在应用程序之间共享。 如果在通信介质中出现重要的反馈回路,在并行运行的两个模块之间分割输入和输出可能是有意义的。
上层模块接收下层模块的输入。 他们整合了来自不同传播媒介的信息,以及随着时间的推移。 这些模块负责表示现实并跟踪其状态。 对于家庭自动化系统,在这一层中,您可以为每个重要的现实设备创建单独的模块。
顶层模块监控底层模块的操作和状态,并在必要时进行干预。 它们实现复杂的逻辑来协调设备之间的交互。
用法
运行pabiana模块的进程称为areas。每个区域可以发布消息、订阅消息、触发其他区域的过程和接收触发器调用。要启动区域,必须使用以下命令:
python -m pabiana module_name:area_name
要使此命令工作,必须在工作目录中提供一个名为interfaces.json
的json文件,指定应用程序所有区域的两个网络接口的地址。
此文件的结构如下:
{
"area1-pub": {"ip": "127.0.0.1", "port": 10001},
"area1-rcv": {"ip": "127.0.0.1", "port": 10002},
"area2-pub": {"ip": "127.0.0.1", "port": 10003},
"area2-rcv": {"ip": "127.0.0.1", "port": 10004, "host": "0.0.0.0"}
}
在当前的工作目录中,还必须有一个类似于模块的文件夹,其中包含一个名为__init__.py
(python模块)的python文件。
在此文件中,您将定义该区域的功能。
from pabiana import Area, repo
area = Area(repo['area-name'], repo['interfaces'])
config = {
'subscriptions': {'area2': ['ran', 'dom']}
}
@area.alteration(source='area2', slot='ran')
def input(recent, complete):
print(recent)
@area.register
def procedure(parameter):
area.publish({'foo': 'bar'}, slot='important')
这段代码创建一个区域,该区域将监听来自两个插槽上area2
的消息。
如果它从area2
接收消息,它将优先新台币。
需要注意的是,消息在一起处理之前会排队一段时间。
过程被定义为从其他区域调用。
忽略过程的返回值。
建议为消息处理程序和过程创建单独的文件。
如果模块需要第三方库,则可以在模块目录中的requirements.txt
文件中指定它。
指定的库将在启动时通过pip安装。
包含此功能是为了支持在不同平台上自动部署应用程序。