与火花控制器的通信

brewblox-devcon-spark的Python项目详细描述


< P>![构建状态](https://travis-ci.org/brewblox/brewblox-devcon-spark.svg?分支=开发

#Spark服务

Spark服务处理Brewpi Spark控制器的连接。

这包括与控制器的USB/TCP通信,还包括编码、解码和广播数据。

< P>![命令转换]("命令转换")

##功能

###SparkConduit([communication.py](/brewblox_devcon_spark/communication.py))

这里处理与Spark的直接通信,包括USB和TCP连接。数据不会被解码或解释,而是传递给sparkcommander。

###控制箱协议([commands.py](/brewblox_devcon_spark/commands.py))

Spark使用[ControlBox协议](https://brewblox.netlify.com/dev/reference/spark_commands.html)进行通信。定义了一组命令来管理控制器上的块。

在命令模块中,位和字节的协议由命令类封装。它们能够将python dict转换为十六进制字节字符串,反之亦然。

###spark commander([commander.py](/brewblox_devcon_spark/commander.py))

串行通信是异步的nchronous:请求和响应在传输层没有链接。

sparkcommander负责生成和发送命令,然后将其与随后收到的响应匹配。

###模拟指挥官([commander_sim.py](/brewblox_devcon_spark/commander_sim.py))

因为当使用一个实际的火花是不方便的,有一个模拟版本。它作为真正的commander的替换:它处理命令并返回合理的值。 命令被编码/解码,以与实际情况紧密匹配。

###数据存储([datastore.py](/brewblox_devcon_spark/datastore.py))

服务必须跟踪控制器未直接持久化的对象元数据。这包括用户定义的对象名称和描述。

服务能够与具有预先存在的块的brewpi spark交互,但无法显示具有人类意义的名称的对象。

对象元数据被持久化到文件中。这不包括对象设置-这些是火花本身的责任。

###编解码器([codec.py](/brewblox_devcon_spark/codec/codec.py))

当controller<;->;服务通信使用controlbox协议时,使用google的[协议缓冲区](https://developers.google.com/protocol-buffers/" rel="nofollow">https://developers.google.com/protocol buffers/)分别对各个对象进行编码。

编解码器负责将json可序列化的dict转换为字节数组,反之亦然。为每个对象定义一个特定的转码器。

因此,controlbox中的对象有效载荷由两部分组成:数字对象类型id和对象数据字节。

###SPARKController([device.py](/brewblox_devcon_spark/device.py))

SPARKController结合了命令指挥官数据存储编解码器的功能,允许使用pythonic函数与Spark交互。

任何命令在传入和传出时都会被修改:id将使用数据存储进行转换,数据将发送到编解码器,并且在发送到sparkcommander之前,所有内容都将包装在正确的命令中。

###播音员([broadcaster.py](/brewblox_devcon_spark/broadcaster.py))

Spark服务不负责保留任何对象数据。任何请求都将被编码并转发到SPARK。

为了减少这一瓶颈的影响,并保持历史数据,广播服务器每隔几秒钟读取所有对象,并将其值广播到EventBus。

在这里,数据可能会被[历史记录服务](https://github.com/brewblox/brewblox-history" rel="nofollow">https://github.com/brewblox/brewblox history)。

###播种机([seeder.py](/brewblox_devcon_spark/seeder.py))

连接到(新的)火花控制器时需要执行一些操作。 播种机功能等待建立连接,然后执行这些一次性任务。

例如: *设置火花系统时钟 *从远程数据存储读取特定于控制器的数据

##rest api

###object api([object_api.py](/brewblox_devcon_spark/api/object_api.py))

为Spark对象提供完整的CRUD(创建、读取、更新、删除)功能。

###system api([system_api.py](/brewblox_devcon_spark/api/system_api.py))

系统对象不同于普通对象,因为用户无法创建或删除它们。

###remote api([remote_api.py](/brewblox_devcon_spark/api/remote_api.py))

有时,需要多个火花协同工作。一个连接到温度传感器,另一个控制加热器。

远程块允许主块和从块之间的同步。

在传感器/加热器示例中,带有加热器的火花可以配置一个虚拟传感器对象连接到加热器。

该虚拟对象不是直接读取传感器,而是由服务在从主对象(真实传感器)接收更新时更新的。

###别名api([alias_api.py](/brewblox_devcon_spark/api/alias_api.py))

所有对象都可以有用户定义的名称。AliasAPI允许用户设置或更改这些名称。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
如何用java表示这个数学函数的算法   Java/Stream帮助:仅使用streams将嵌套的映射列表转换为映射   使用Selenium连接到数据库时发生java未知主机异常   java如何了解jvm内存使用:“堆内存”和“堆外内存”   java Oracle BI报告导入模板   java如何使用Spring将xml转换为bean?   java线程。join()以保证执行顺序   java从THINGSPEAK到ANDROID应用程序获取JSON数据   使用Java的stanford库中的异常   java正确使用来自其他类文件的方法   如果集合中的元素类型为接口类型,如何填充集合?(爪哇)   记录java。util。记录器创建的文件超过了应有的数量   类Java对象uniq值   尝试调用无法应用于()的方法时出现java错误