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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
36c5573263d4fd7d8af151b8b0a72ca5301394e1f059ba25615fad01c30900fb
|
|
| MD5 |
09f4349814375008cd73496e65a654b2
|
|
| BLAKE2b-256 |
3154decb74253a293ffba44311e12c3f31fd5f4179afce48abe2ea9c8b11d45e
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d0f6fcf8572401dc9669af7f0bd65fffe05d069d516af818acb423c5846b96d9
|
|
| MD5 |
f09df06c2fc82cca3c47c3c66986ef70
|
|
| BLAKE2b-256 |
77a41bb1b6395af6878b5a582392b82a04e41cf5f5965d3fdaab2e05fa9cee85
|