Skip to main content

Python SDK for Homie MQTT Convention (eBus)

Project description

ebus-sdk

Python SDK for the Electrification Bus (eBus) integration framework, which adopts and supports the Homie Convention.

Installation

pip install ebus-sdk

Quick Start

Device Role

Create a Homie device that publishes sensor data:

from ebus_sdk import Device, Node, PropertyDatatype, Unit

# Create device
device = Device('my-device-id', name='My Sensor', mqtt_cfg={
    'host': 'mqtt.example.com',
    'port': 1883
})

# Add a node with properties
node = device.add_node_from_dict({
    'id': 'sensors',
    'name': 'Sensors',
    'type': 'sensor'
})

# Add a temperature property
temp = node.add_property_from_dict({
    'id': 'temperature',
    'name': 'Temperature',
    'datatype': PropertyDatatype.FLOAT,
    'unit': Unit.DEGREE_CELSIUS
})

# Start and publish
device.start_mqtt_client()
temp.set_value(23.5)

Controller Role

Discover and monitor Homie devices:

from ebus_sdk import Controller, DiscoveredDevice

def on_device_discovered(device: DiscoveredDevice):
    print(f'Found: {device.device_id}')

def on_property_changed(device_id, node_id, prop_id, new_val, old_val):
    print(f'{device_id}/{node_id}/{prop_id} = {new_val}')

controller = Controller(mqtt_cfg={'host': 'mqtt.example.com', 'port': 1883})
controller.set_on_device_discovered_callback(on_device_discovered)
controller.set_on_property_changed_callback(on_property_changed)
controller.start_discovery()

Module Structure

src/ebus_sdk/
├── __init__.py     # Package exports
├── homie.py        # Homie convention implementation
├── mqtt.py         # MQTT client wrapper
└── property.py     # Property abstractions

homie.py

Core Homie convention implementation:

  • Device - Represents a Homie device with nodes and properties
  • Node - Groups related properties within a device
  • Property - Individual data points (sensors, controls)
  • Controller - Discovers and monitors Homie devices on a broker
  • DiscoveredDevice - Represents a device found by the controller
  • DeviceState - Enum: init, ready, disconnected, sleeping, lost
  • PropertyDatatype - Enum: STRING, INTEGER, FLOAT, BOOLEAN, ENUM, COLOR, DATETIME, DURATION, JSON
  • Unit - Common units: DEGREE_CELSIUS, PERCENT, WATT, KILOWATT_HOUR, etc.

mqtt.py

  • MqttClient - Wrapper around paho-mqtt with automatic reconnection, TLS support, and subscription management

property.py

Application-level property abstractions for bridging application state to Homie:

  • Property - Thread-safe observable property with change callbacks
  • GroupedPropertyDict - Two-level dictionary organizing properties by group
  • PropertyDict - Simple property dictionary
  • ChangeEvent - Enum for property change event types

Examples

See examples/README.md for example scripts demonstrating device and controller usage.

Requirements

  • Python 3.10+
  • paho-mqtt >= 1.6.1

License

MIT

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

ebus_sdk-0.1.0.tar.gz (27.1 kB view details)

Uploaded Source

Built Distribution

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

ebus_sdk-0.1.0-py3-none-any.whl (26.8 kB view details)

Uploaded Python 3

File details

Details for the file ebus_sdk-0.1.0.tar.gz.

File metadata

  • Download URL: ebus_sdk-0.1.0.tar.gz
  • Upload date:
  • Size: 27.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.19

File hashes

Hashes for ebus_sdk-0.1.0.tar.gz
Algorithm Hash digest
SHA256 90e6c2e2767b292679b1391bcffd04607bfa5f34e2ed6f3a9e4e513290f98312
MD5 502ac0d1c7950517278f53fa80b14c4d
BLAKE2b-256 cc62e0d6cfa6d01a829fe2bf2ef99a50aa407d7210a8169cd184f65416d976dc

See more details on using hashes here.

File details

Details for the file ebus_sdk-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: ebus_sdk-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 26.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.19

File hashes

Hashes for ebus_sdk-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 4451f48d1ebb633a8cadc9f3e62246837988b6e65655da3d108561ed4945f376
MD5 1a9868193d799fe0c065e2c92685cba5
BLAKE2b-256 853f349f4bd5b507e685c29ae2cca2f9af3ae6b53d330e05775da1f154d335d2

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