Skip to main content

Client to interact with Homie IoT devices via MQTT

Project description

Python Homie client

This is a very basic implementation of a client for IoT devices following the Homie MQTT convention. Currently, it only really supports sensor-like devices, i.e., those devices that publish retained non-settable properties, as this is at this point in time the only use-case I personally have for it.

Usage

Create an instance of the client, and connect it to your MQTT server:

from homieclient import HomieClient

c = HomieClient(server='10.42.0.1')

Various callbacks can be registered, that will be called when a device, a node or a property is discovered or updated:

# Called when a new device is found. Note that at this point not all the nodes
# of the devices might be discovered yet.
def device_discovered(device):
    print("Found device %s, state is %s" % (device.name, device.state))
c.on_device_discovered = device_discovered

# Called when an attribute on the device changes, such as $state
def device_updated(device, attribute, value):
    print('Device %s updated: %s = %s' % (device.name, attribute, value))
c.on_device_updated = device_updated

# Called when a node on a device is found. The device for this node can be
# accessed via node.device.
def node_discovered(node):
    print('Found node %s on device %s' % (node.name, node.device.name))
    print('Node properties: %s' % node.properties)
c.on_node_discovered = node_discovered

# Called when an attribute on a node changes.
def node_updated(node, attribute, value):
    print('%s, node %s: %s = %s' % (node.device.name, node.name, attribute, value))
c.on_node_updated = node_updated

# Called when a new property on a node is found.
def property_discovered(node, property):
    print('Found property %s on node %s, device %s' % (property, node.name, node.device.name))
c.on_property_discovered = property_discovered

# Called when a property on a node is updated. The value is a dict
# containing the name, value and unit of the property
def property_updated(node, property, value):
    print('%s: %s = %s' % (node.name, property, repr(value)))
c.on_property_updated = property_updated

After registering the callbacks you need to connect the client to the broker:

c.connect()

It is also possible to access all the devices, nodes and properties via the client, without using any of the callbacks. Every device is exposed as a property on the client, the nodes are exposed as properties on the device, and the properties as properties on the node. So if you have a device with id outdoor_sensor with node sensor and property temperature, you can do

temperature = c.outdoor_sensor.sensor.temperature
print('%s: %.1f %s' % (temperature.name, temperature.value, temperature.unit))

This will print something like

Temperature: 21.4 °C

assuming the name of the property is Temperature, and it reports a float value, and the weather is quite nice.

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

homieclient-0.0.1.tar.gz (6.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

homieclient-0.0.1-py3-none-any.whl (7.7 kB view details)

Uploaded Python 3

File details

Details for the file homieclient-0.0.1.tar.gz.

File metadata

  • Download URL: homieclient-0.0.1.tar.gz
  • Upload date:
  • Size: 6.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.3.0 pkginfo/1.7.0 requests/2.25.1 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.58.0 CPython/3.8.3

File hashes

Hashes for homieclient-0.0.1.tar.gz
Algorithm Hash digest
SHA256 36c5573263d4fd7d8af151b8b0a72ca5301394e1f059ba25615fad01c30900fb
MD5 09f4349814375008cd73496e65a654b2
BLAKE2b-256 3154decb74253a293ffba44311e12c3f31fd5f4179afce48abe2ea9c8b11d45e

See more details on using hashes here.

File details

Details for the file homieclient-0.0.1-py3-none-any.whl.

File metadata

  • Download URL: homieclient-0.0.1-py3-none-any.whl
  • Upload date:
  • Size: 7.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.3.0 pkginfo/1.7.0 requests/2.25.1 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.58.0 CPython/3.8.3

File hashes

Hashes for homieclient-0.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 d0f6fcf8572401dc9669af7f0bd65fffe05d069d516af818acb423c5846b96d9
MD5 f09df06c2fc82cca3c47c3c66986ef70
BLAKE2b-256 77a41bb1b6395af6878b5a582392b82a04e41cf5f5965d3fdaab2e05fa9cee85

See more details on using hashes here.

Supported by

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