Skip to main content

Converts MQTT messages from qt-openzwave into Python objects and events

Project description

python-openzwave-mqtt

Python library for the OpenZWave MQTT implementation.

Consumes MQTT output from https://github.com/OpenZWave/qt-openzwave

For Home Assistant integration, see the custom component homeassistant-zwave_mqtt.

Install

  • Python 3.7+ is required. We support the two latest Python 3 versions released at any one time.
pip install python-openzwave-mqtt

Structure

Each object maps to one or two parts in the topic. A topic can contain the following parts:

  • <Prefix>: the prefix of each topic. This is ignored in the processing. Usually openzwave/.
  • <CollectionType>/<CollectionID>: The collection type and the ID of the item in the collection. Example: value/3
  • <CollectionID>: Some objects will have a direct collection that is not typed in the topic. Example is the OZW instance in <Prefix>/1
  • <ObjectType>: If there is only a single instance of a type under a parent. For example node/2/statistics.

Example

A message is sent to topic openzwave/1/node/2/statistics. This maps to:

Type ID
Prefix -
OZWInstance 1
OZWNode 2
OZWNodeStatistics -

Message ordering

We work with signals to signal listeners when things change. However, when we connect to MQTT we will receive a lot of retained messages at once. To prevent signals being sent out of order, we will hold all messages for children until the parent has received its information.

This has been disabled for OZWManager and OZWInstance.

If we receive messages on the following topics:

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

We will process the messages in the reverse order:

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

Modelling Rules

This library should not aim to do fancy things. We should, as much as possible, represent the data from MQTT as-is. We don't want to change names besides making them Pythonic (CamelCase -> snake_case).

Automatic added helpers

Models will have automatic helpers added based on their child models. For example, the Node model has the following child collections:

    def create_collections(self):
        """Create collections that Node supports."""
        return {
            # A collection of children
            "instance": ItemCollection(OZWNodeInstance),
            # A single child
            "statistics": OZWNodeStatistics,
        }

This means that Node has the following automatic functions created:

  • get_instance(item_id) to get an instance by ID.
  • instances() to get an iterator over all available instances.
  • get_statistics() get the direct child.

Gathering Data

This library is instantiated using messages received from MQTT. To make development easier, we have created two helper scripts. One that will dump all MQTT messages and one that will read messages from a text file and instantiate an OZWManager with all the data. This can be used to develop, test or reproduce bugs.

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

Development

  • Install all requirements:

    pip install -r requirements_dev.txt
    
  • We use black to format the code:

    black ./
    
  • Use tox to run tests and linting:

    tox
    

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

python-openzwave-mqtt-1.0.1.tar.gz (18.5 kB view details)

Uploaded Source

Built Distribution

python_openzwave_mqtt-1.0.1-py3-none-any.whl (24.5 kB view details)

Uploaded Python 3

File details

Details for the file python-openzwave-mqtt-1.0.1.tar.gz.

File metadata

  • Download URL: python-openzwave-mqtt-1.0.1.tar.gz
  • Upload date:
  • Size: 18.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/46.1.3 requests-toolbelt/0.9.1 tqdm/4.45.0 CPython/3.7.7

File hashes

Hashes for python-openzwave-mqtt-1.0.1.tar.gz
Algorithm Hash digest
SHA256 59d5e7d17270640effb8fa69dc0e5b35f4a5aec6d91d0f028ee0acb9d798e92d
MD5 e1fbeb8a3e921412a90de7a98d0b67e3
BLAKE2b-256 64f2088b6a1d34bfd382e2da209ebdd3915aa8eb883e855cb370b4c98f9a1cc6

See more details on using hashes here.

File details

Details for the file python_openzwave_mqtt-1.0.1-py3-none-any.whl.

File metadata

  • Download URL: python_openzwave_mqtt-1.0.1-py3-none-any.whl
  • Upload date:
  • Size: 24.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/46.1.3 requests-toolbelt/0.9.1 tqdm/4.45.0 CPython/3.7.7

File hashes

Hashes for python_openzwave_mqtt-1.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 255dfe0e2b762e6d814875160c5066c5ad40382396ec5a5510ef07a2bf103c7c
MD5 9bfdbdddd03facb053c911ceaaf3a015
BLAKE2b-256 972fdc1c24be2b0feee0433ae6afefcd9a1a2be4f8405464f933d50727d56995

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page