将来自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
。这映射到:
Type | ID |
---|---|
Prefix | - |
^{ | ^{ |
^{ | ^{ |
^{ | - |
消息排序
当事情发生变化时,我们用信号来给听众发信号。然而,当我们连接到MQTT时,我们将一次收到许多保留的消息。为了防止信号被无序发送,我们将保留所有子级消息,直到父级接收到它的信息。在
已对OZWManager
和OZWInstance
禁用此功能。在
如果我们收到关于以下主题的消息:
openzwave/1/node/2/statistics
openzwave/1/node/2
我们将按相反的顺序处理消息:
openzwave/1/node/2
openzwave/1/node/2/statistics
建模规则
这个图书馆不应该以做花哨的事为目标。我们应该尽可能按原样表示来自MQTT的数据。我们不想改变名字,除了让它们变成Python(CamelCase->;snake\u case)。在
自动添加辅助对象
模型将根据其子模型添加自动辅助对象。例如,Node
模型有以下子集合:
这意味着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
发展
- 项目
标签: