Skip to main content

Framework for building easy Home Assistant devices

Project description

jhomeassistant

A Python library for Home Assistant MQTT device discovery based on jmqtt connections.

Installation

pip install jhomeassistant

Requirements

  • Python >=3.8
  • jmqtt
  • python-slugify

Quickstart

from jmqtt import MQTTBuilderV3
from jhomeassistant import HomeAssistantConnection, HomeAssistantDevice
from jhomeassistant.entities import HomeAssistantEntityBase
from jhomeassistant.types import Component

# 1) Build MQTT connection
connection = (
    MQTTBuilderV3(host="localhost", app_name="my-tool")
    .instance_id("main")
    .availability("my-tool/status")
    .fast_build()
)

# 2) Wrap it for Home Assistant discovery
ha = HomeAssistantConnection(connection)
ha.origin.name = "my-tool"

# 3) Define an entity by subclassing HomeAssistantEntityBase
class TemperatureEntity(HomeAssistantEntityBase):
    def __init__(self):
        super().__init__(Component.SENSOR, "Temperature")

entity = TemperatureEntity()
device = HomeAssistantDevice("Kitchen Sensor").add_entities(entity)

# 4) Register and run discovery + scheduler loop
ha.add_devices(device)

# Blocking mode (current default behavior)
ha.run()

# Non-blocking mode with runtime handle (alternative)
# runtime = ha.run(blocking=False)
# print(runtime.is_running)
# runtime.stop(timeout=5.0)
# runtime.join(timeout=5.0)

Core Concepts

HomeAssistantConnection

  • Holds a jmqtt connection (MQTTConnectionV3 or MQTTConnectionV5)
  • Builds and publishes Home Assistant device discovery payloads
  • Subscribes to homeassistant/status and dispatches birth/death hooks to entities

Main configuration:

  • discovery_prefix("homeassistant")
  • origin.name, origin.sw_version, origin.url
  • availability (connection-level availability inheritance)
  • qos, encoding (connection-level defaults inherited by devices)

HomeAssistantDevice

  • Represents one Home Assistant device block in discovery
  • Auto-detects runtime device facts using jmqtt.client_identity.facts
  • Derives stable identifiers for discovery and entity unique IDs
  • Supports prevent_device_merge=True to avoid connection-based merge identifiers

Common fields:

  • manufacturer, model, model_id
  • hw_version, sw_version
  • via_device, configuration_url
  • qos, encoding
  • availability

HomeAssistantEntityBase

  • Base class for entities that belong to a HomeAssistantDevice
  • Provides deterministic identifier and discovery payload base
  • Supports scheduled publisher functions via add_schedule(interval, function)
  • Lifecycle hooks:
    • home_assistant_birth(connection)
    • home_assistant_death(connection)

Discovery Output

HomeAssistantConnection.discovery_text() returns formatted discovery topics + payloads, useful for debugging and tests.

Runtime Control

HomeAssistantConnection.run(...) supports both runtime styles:

  • ha.run() or ha.run(blocking=True): runs discovery + HA status subscription + scheduler in the caller thread.
  • runtime = ha.run(blocking=False): starts the same runtime in a background thread and returns HomeAssistantRuntime.

Runtime handle API:

  • runtime.is_running
  • runtime.last_error
  • runtime.stop(timeout=...)
  • runtime.join(timeout=...) -> bool

Notes

  • origin.name is required by device-based discovery payload validation.
  • If not set explicitly, device name is used as fallback.
  • Entity names should be unique within a device to avoid unique_id collisions.

License

MIT (see LICENSE).

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

jhomeassistant-0.3.1.tar.gz (33.0 kB view details)

Uploaded Source

Built Distribution

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

jhomeassistant-0.3.1-py3-none-any.whl (64.3 kB view details)

Uploaded Python 3

File details

Details for the file jhomeassistant-0.3.1.tar.gz.

File metadata

  • Download URL: jhomeassistant-0.3.1.tar.gz
  • Upload date:
  • Size: 33.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.4

File hashes

Hashes for jhomeassistant-0.3.1.tar.gz
Algorithm Hash digest
SHA256 ed0a6fed02756092009dc81997dbbc3d35b7dd265b5fd6e7545949f131a5da78
MD5 3dac0a9f4e4f3849f4f9b88fe6f850fe
BLAKE2b-256 0ee964fa498c5b7b51a1054a2d74358ff7cc2d8283ac731b7c9c27e177cde95d

See more details on using hashes here.

File details

Details for the file jhomeassistant-0.3.1-py3-none-any.whl.

File metadata

  • Download URL: jhomeassistant-0.3.1-py3-none-any.whl
  • Upload date:
  • Size: 64.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.4

File hashes

Hashes for jhomeassistant-0.3.1-py3-none-any.whl
Algorithm Hash digest
SHA256 cfd408e1dcbd1b4fb853bed0740c165da905cdd2bc7d07385e4685eb79346be4
MD5 734396e3dfc1c09dddc68845486b3ad3
BLAKE2b-256 7a0a0dc5d3ceabb1ec3701234e73cbfa31787b55e76fd0ad0247846d61419505

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