将来自qtopenzwave的MQTT消息转换为Python对象和事件

python-openzwave-mqtt的Python项目详细描述


python openzwave mqtt

用于OpenZWave MQTT实现的Python库。在

使用来自https://github.com/OpenZWave/qt-openzwave的MQTT输出

有关Home Assistant集成,请参阅自定义组件homeassistant-zwave_mqtt。在

安装

  • python3.7+是必需的。我们支持随时发布的两个最新的python3版本。在
pip install python-openzwave-mqtt

结构

每个对象映射到主题中的一个或两个部分。主题可以包含以下部分:

  • <Prefix>:每个主题的前缀。这在处理过程中被忽略。通常是openzwave/。在
  • <CollectionType>/<CollectionID>:集合类型和集合中项的ID。示例:value/3
  • <CollectionID>:某些对象将有一个未在主题中键入的直接集合。示例是<Prefix>/1中的OZW实例
  • <ObjectType>:如果父级下只有一个类型的实例。例如node/2/statistics。在

示例

消息被发送到主题openzwave/1/node/2/statistics。这映射到:

TypeID
Prefix-
^{}^{}
^{}^{}
^{}-

消息排序

当事情发生变化时,我们用信号来给听众发信号。然而,当我们连接到MQTT时,我们将一次收到许多保留的消息。为了防止信号被无序发送,我们将保留所有子级消息,直到父级接收到它的信息。在

已对OZWManagerOZWInstance禁用此功能。在

如果我们收到关于以下主题的消息:

  1. openzwave/1/node/2/statistics
  2. openzwave/1/node/2

我们将按相反的顺序处理消息:

  1. openzwave/1/node/2
  2. openzwave/1/node/2/statistics

建模规则

这个图书馆不应该以做花哨的事为目标。我们应该尽可能按原样表示来自MQTT的数据。我们不想改变名字,除了让它们变成Python(CamelCase->;snake\u case)。在

自动添加辅助对象

模型将根据其子模型添加自动辅助对象。例如,Node模型有以下子集合:

^{pr2}$

这意味着Node创建了以下自动函数:

  • get_instance(item_id)按ID获取实例
  • instances()获取所有可用实例的迭代器。在
  • get_statistics()获取直接子对象。在

收集数据

这个库是使用从MQTT接收的消息实例化的。为了简化开发,我们创建了两个助手脚本。一个将转储所有MQTT消息,另一个将从文本文件中读取消息并用所有数据实例化一个OZWManager。这可以用于开发、测试或重现bug。在

python3 -m script.dump_mqtt > dump.csv
python3 -m script.instance_from_file dump.csv

发展

  • 安装所有要求:

    pip install -r requirements_dev.txt
    
  • 我们使用black来格式化代码:

    black ./
    
  • 使用tox运行测试和linting:

    tox
    

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

推荐PyPI第三方库


热门话题
java Apache Camel JAXB解组在从Camel从2.20.4升级到2.21.2或2.22.1后返回空属性   java JavaFX系统输出打印LN   在java jersey api中使用map<String,Arraylist<String>>时,它只给出map的键,即String   java Android游戏垃圾收集滞后的替代方案?   java Hibernate映射最近失败,SAX解析器异常:必须声明元素“hibernatemapping”   如何在java中使用itext获取pdf文件的标题   javaaes加密时间分析   java为什么字符串数组可以分配给对象数组,而字符串数组列表不能分配给对象数组列表?   jar文件中的java源代码可见   java After maven build有些类文件不是在JAR中创建的   java(从PDFBox)重建PDDocument的最佳方法是什么?   java移除JasperReports生成的空白页面:如何隐藏空子报表?   java基于子对象列表从列表创建映射   java我应该如何在安卓中使用JWT?