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.3.tar.gz (34.1 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.3-py3-none-any.whl (65.6 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: jhomeassistant-0.3.3.tar.gz
  • Upload date:
  • Size: 34.1 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.3.tar.gz
Algorithm Hash digest
SHA256 d4f861ed8236a398379e65b7392904280e0fc780c7acfb8181b5a83ab63bca08
MD5 46522f6928d2929d0fdf2c39d0d329f7
BLAKE2b-256 bf585407a69ee4a87c10a08c5b3475213d01f50e8ed378f848b1a8aeba98089d

See more details on using hashes here.

File details

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

File metadata

  • Download URL: jhomeassistant-0.3.3-py3-none-any.whl
  • Upload date:
  • Size: 65.6 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.3-py3-none-any.whl
Algorithm Hash digest
SHA256 70b26fbb1be0a2d6f183a088c69e2ee61a2bb9bef740cb70a469e112499b1427
MD5 ebbea833d9f42473e4beca8ecfef2754
BLAKE2b-256 59742d1d14d6add80413a957bb77af2a8db79f0b6c3d84eb6ea10d43ef46c886

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