Skip to main content

homey-energy-dongle-ws

PyPI version PyPI downloads Python CI License: MIT

Async Python client for the Homey Energy Dongle WebSocket API. It streams DSMR smart-meter data in three layers: raw WebSocket payloads, complete telegram strings, or parsed (dsmr-parser) telegram objects.

Prerequisites

  • Python 3.11+
  • A Homey Energy Dongle
  • Enabling the local API on the Homey Energy Dongle in the Homey app. Please reference this knowledge base article

See Athom’s Homey Energy Dongle WebSocket example for more context.

Install

pip install homey-energy-dongle-ws

Or install from Git:

pip install git+https://github.com/Doekse/homey-energy-dongle-ws.git

Quick start (discovery first)

On the same LAN as the Energy Dongle, call **discover_energy_dongles()**, pick a result that has **ws_path** set when possible, then open **EnergyDongleClient** (or use **build_ws_url** with the chosen host, port, and path).

import asyncio

from homey_energy_dongle_ws import (
    DiscoveredEnergyDongle,
    EnergyDongleClient,
    discover_energy_dongles,
)


async def main() -> None:
    found: list[DiscoveredEnergyDongle] = await discover_energy_dongles(timeout_s=5.0)
    if not found:
        print("No Energy Dongles discovered; use manual connection (below).")
        return

    d = next((x for x in found if x.ws_path is not None), None)
    if d is None:
        print("No advertised WebSocket path (TXT p); enable Local API or use manual connection.")
        return

    async with EnergyDongleClient(d.host, port=d.port, path=d.ws_path) as client:
        async for telegram in client.stream_parsed():
            print(telegram)
            break


asyncio.run(main())

TXT records (mDNS):

  • **p** — WebSocket path (e.g. /ws). If missing, the library sets ws_path to None (WebSocket not advertised / Local API off).
  • **v** — Version string (DiscoveredEnergyDongle.version). Full decoded TXT is in **DiscoveredEnergyDongle.txt**.

Firewall / network: the client host must allow mDNS (UDP 5353 inbound/outbound) and LAN traffic to the Energy Dongle. Routers, VLANs, VPNs, or “guest” Wi‑Fi often block multicast, use manual connection instead.

Manual connection (fallback)

Use this when discovery returns nothing, times out, **p** is missing and you know Local API should work, or you are not on the same L2 segment:

  1. Open the Homey app → your Energy Dongle → Settings → Advanced Settings, then note the IP address which is listed.
  2. Connect with defaults **ws://<host>:80/ws** (or pass port / path if yours differ). For IPv6 literals, build_ws_url() and EnergyDongleClient.ws_url use bracketed hosts (e.g. ws://[2001:db8::1]:80/ws) as required by the WebSocket URL syntax.
import asyncio
from homey_energy_dongle_ws import EnergyDongleClient


async def main() -> None:
    async with EnergyDongleClient("192.168.x.x") as client:
        async for telegram in client.stream_parsed():
            print(telegram)
            break


asyncio.run(main())

DSMR version

Parsing uses telegram_specification from [dsmr_parser.telegram_specifications](https://dsmr-parser.readthedocs.io/) (default: V5). If your meter uses another DSMR version, pass the matching spec to EnergyDongleClient(..., telegram_specification=...). A wrong spec typically causes parse errors, not silent wrong data.

For long-running processes, stream_parsed(skip_parse_errors=True) logs and skips a bad telegram instead of stopping the stream (default remains fail-fast).

Limits

The Energy Dongle allows at most two concurrent WebSocket clients. A third connection is rejected with close code 1008; this library raises **ConnectionLimitError**.

Troubleshooting

  • Local API disabled in the app → the server closes with 1008 and this library raises **LocalApiDisabledError** (check **close_code** / **close_reason** on **HomeyWebSocketError** subclasses for logging).
  • Connection limit → **ConnectionLimitError** (1008).

For maintainers

Development setup, local checks, and pull requests: see CONTRIBUTING.md. Release history: CHANGELOG.md.

Metadata

Release files for homey-energy-dongle-ws 0.2.0

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

Source distribution (sdist)

Source distribution for homey-energy-dongle-ws 0.2.0
File Size Uploaded Provenance Actions
homey_energy_dongle_ws-0.2.0.tar.gz 52.3 kB With provenance Details for homey_energy_dongle_ws-0.2.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for homey-energy-dongle-ws 0.2.0
File Interpreter ABI Platform Actions
homey_energy_dongle_ws-0.2.0-py3-none-any.whl Python 3 none any Details for homey_energy_dongle_ws-0.2.0-py3-none-any.whl

Total release size: 67.4 kB

Release files / homey_energy_dongle_ws-0.2.0.tar.gz

Download URL homey_energy_dongle_ws-0.2.0.tar.gz
Size 52.3 kB
Tags Source
SHA-256 checksum
How to use checksums
eabfe8ffdd2786308bb5e2fdc841ba0be8ab121608e403de88f46363f7de8c31
BLAKE2b-256 checksum
How to use checksums
d2eb9b2278aba15c5d3f831461aabd44bc38cc04205740f392d3b1b448f9276a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

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 Apr 11, 2026.

Transparency log

Release files / homey_energy_dongle_ws-0.2.0-py3-none-any.whl

Download URL homey_energy_dongle_ws-0.2.0-py3-none-any.whl
Size 15.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
485238812e08279cd4cfec82e4245383d46878badbb945088f663fe4b051df42
BLAKE2b-256 checksum
How to use checksums
d68b089f16e40ab524904abb2e8ead3f8b7704a178b5da7f8aded2129c19d1bb
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

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 Apr 11, 2026.

Transparency log

Security for homey-energy-dongle-ws 0.2.0

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.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for homey_energy_dongle_ws-0.2.0.tar.gz

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 Apr 11, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.2.0 This release

2 release files Full provenance

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