Skip to main content

pyHomee

PyPI PyPI - Python Version GitHub last commit

pyHomee is the backbone of the Home Assistant homee integration.

pyHomee is an unofficial python library for interacting with the homee smart home/home automation platform. It uses the websockets library to connect to a local homee cube and maintains a list of nodes (devices), attributes, groups, users and more that are updated whenever new data arrives from homee.

Large parts of this library are directly ported from the awesome homeeApi javascript library.

This library was initially developed as "pymee" by FreshlyBrewedCode.

Installation

Install from PyPI:

pip install pyHomee

Usage

Getting started

pyHomee should be used with asyncio:

from pyHomee import Homee
import asyncio
import logging

# Set debug level so we get verbose logs
logging.getLogger().setLevel(logging.DEBUG)

# Define a simple async entry point function
async def main():
    # Create an instance of Homee
    homee = Homee("<HOMEE IP>", "<USERNAME>", "<PASSWORD>")

    # Connect and start listening on a new task
    homeeTask = asyncio.create_task(homee.run())

    # Wait until the connection is live and all data has been received
    await homee.wait_until_connected()

    # Do something here...

    # Close the connection and wait until we are disconnected
    homee.disconnect()
    await homee.wait_until_disconnected()

# Start our entry point function
asyncio.run(main())

Access devices and attributes

Devices are represented as "nodes" in the api. All nodes are available in the list Homee.nodes and are represented by the HomeeNode class. Each node has a list of attributes accessible from HomeeNode.attributes. The attributes on a node represent the different attributes on a device, i.e. if a light is turned on or the target temperature of a thermostat. Attributes can be identified by the HomeeAttribute.type property. You can compare the type with the values from pyHomee.const.AttributeType to figure out what each attribute represents. The value can be accessed with the HomeeAttribute.current_value property.

If you need to change the value of an attribute you can use Homee.set_value():

# Get some node, for example using get_node_by_id
node = homee.get_node_by_id(5)

# Turn on the device. You need to pass the id of the node and the attribute as well as the value.
# Using get_attribute_by_type you can quickly find the desired attribute.
await homee.set_value(node.id, node.get_attribute_by_type(AttributeType.ON_OFF).id, 1)

Receiving updates

The Homee class can be inherited to receive events:

class MyHomee(Homee):
    # Called once the websocket connection has been established.
    async def on_connected(self):
        pass

    # Called after the websocket connection has been closed.
    async def on_disconnected(self):
        pass

    # Called after an error has occurred.
    async def on_error(self, error: str):
        pass

    # Called when the websocket receives a message.
    # The message is automatically parsed from json into a dictionary.
    async def on_message(self, msg: dict):
        pass

    # Called when an 'attribute' message was received and an attribute was updated.
    # Contains the parsed json attribute data and the corresponding node instance.
    async def on_attribute_updated(self, attribute_data: dict, node: HomeeNode):
        pass

You can also add a listener to specific nodes to receive attribute updates:

# A listener is just a function that takes a node and an attribute
def my_node_handler(node: HomeeNode, attribute: HomeeAttribute):
    logging.info(f"Attribute {attribute.id} of node {node.name} was updated!")

node = homee.get_node_by_id(5)

# Adding the listener will return a function that can be called to remove the listener again
remove_listener = node.add_on_changed_listener(my_node_handler)

# If you don't need the listener anymore...
remove_listener()

To manually request updates from Homee, you can use the following functions:

homee.update_node(self, nodeId: int)
"""Request current data for a node."""

homee.update_attribute(self, nodeId: int, attributeId: int)
"""Request current data for an attribute"""

More examples

Example implementation that dumps all info into a json file and logs whenever a light is turned on or off:

from pyHomee.const import NodeProfile, AttributeType
from pyHomee.model import HomeeAttribute

class JsonHomee(Homee):
    async def on_message(self, msg: dict):
        # Homee sends an "all" message at the beginning of each connection
        # or after 'GET:all' was send.
        if list(msg)[0] == "all":
            f = open("homee.json", "w")
            f.write(json.dumps(msg))
            f.close()

    async def on_attribute_updated(self, attribute_data, node):
        # Wrap the attribute data with the HomeeAttribute class for easier access
        attribute = HomeeAttribute(attribute_data)

        # We only care for changes
        if attribute.current_value == attribute.target_value:
            return

        # Check node profile (the type of device) and attribute type
        if (
            node.profile == NodeProfile.DIMMABLE_EXTENDED_COLOR_LIGHT
            and attribute.type == AttributeType.ON_OFF
        ):
            self._log(
                f"[Light] {node.name} turned {'on' if attribute.target_value == 1 else 'off'}"
            )

License

MIT

Metadata

Release files for pyHomee 1.4.4

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for pyHomee 1.4.4
File Size Uploaded
pyhomee-1.4.4.tar.gz 29.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for pyHomee 1.4.4
File Interpreter ABI Platform
pyhomee-1.4.4-py3-none-any.whl Python 3 none any Details

Total release size: 56.8 kB

Release files / pyhomee-1.4.4.tar.gz

Download URL pyhomee-1.4.4.tar.gz
Size 29.2 kB
Tags Source
SHA-256 checksum
How to use checksums
d1f8b938893d5c0a175141bd6ec5cf541a5fcede57cf443252d58ce7fb2da8b2
BLAKE2b-256 checksum
How to use checksums
61f6b775e775e7d3faf5d3d6741b4155f6d40c482ae1588cdc325d58fe25305e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 25, 2026.

Transparency log

Release files / pyhomee-1.4.4-py3-none-any.whl

Download URL pyhomee-1.4.4-py3-none-any.whl
Size 27.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
970956f1cf277501de25ed6eb5991f9d6ebce8ffa47fcd9451ede2049a2fbd09
BLAKE2b-256 checksum
How to use checksums
1b04e463b62ba49c7ae648d13a5f7eb9d5bd70258dae6bca1069a5d58cd29ced
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 25, 2026.

Transparency log

Release history Release notifications | RSS feed

1.4.6

2 release files

This release

1.4.4 This release

2 release files

1.4.3

2 release files

1.4.2

2 release files

1.4.1

2 release files

1.4.0

2 release files

1.3.8

2 release files

1.3.3

2 release files

1.3.2

2 release files

1.3.1

2 release files

1.3.0

2 release files

1.2.10

2 release files

1.2.9

2 release files

1.2.8

2 release files

1.2.7

2 release files

1.2.6

2 release files

1.2.5

2 release files

1.2.4

2 release files

1.2.3

2 release files

1.2.2

2 release files

1.2.1

2 release files

1.2.0

2 release files

1.1.0

2 release files

1.0.3

2 release files

1.0.2

2 release files

1.0.1

2 release files

1.0.0

2 release files

0.0.4

2 release files

0.0.3

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page