Skip to content

ernetas/junghome

Repository files navigation

What?

HACS Custom GitHub release

This is a custom Jung Home integration based on WebSocket communication with Jung Home Gateway. A gateway is required.

Currently functional things:

  • On/Off light switches.
  • BT S1 B2 U switch actuators.
  • Dimmers (DALI, etc.) - color and brightness as well as On/Off.
  • Sockets - On/Off, energy statistics, etc.
  • Blinds / shutters (covers) - open/close/stop, position, and slat tilt. Awnings, which report position inverted, can be flagged in the integration's options.
  • Thermostats (room temperature regulators) - target temperature and presets.
  • Scenes - recall any Jung Home scene from Home Assistant.
  • Measurement sensors (e.g. ambient brightness on presence detectors).
  • IoT integration for Rocker Switches - allows triggering any script or automation in HomeAssistant via button presses.
  • Button LED On/Off (unfortunately, color can only be configured via app or BT Mesh/NRF).
  • Rooms - each device is placed in the Home Assistant area matching its Jung Home group. A device is only ever placed if it has no area yet, and each device is considered just once, so this never moves a device you placed yourself and never re-adds one whose area you deliberately cleared. A group matching an existing area links to it instead of creating a duplicate.

Note: awnings report cover position inverted, so flag them inverted under Settings → Devices & Services → Jung Home → Configure.

All communication is via WebSockets. I've managed to reliably automate (using the provided blueprint):

  • Single click
  • Double click
  • Triple click
  • Hold

Any feedback is welcome, this is my first integration with HomeAssistant.

Installation

HACS (recommended)

Until this is in the HACS default store, add it as a custom repository:

Open your Home Assistant instance and open this repository inside HACS.

  1. HACS → ⋮ (top right) → Custom repositories.
  2. Repository: https://github.com/ernetas/junghome, Category: Integration. Add.
  3. Find Jung Home in HACS, Download the latest release, then restart Home Assistant.
  4. Settings → Devices & Services → Add Integration → Jung Home (see Setup).

Manual

Copy custom_components/junghome/ into your Home Assistant config/custom_components/ directory and restart.

Setup

You no longer need to fetch a token by hand. In most cases the gateway is discovered automatically over mDNS and appears under Settings → Devices & Services as a discovered device — just click Configure. If it isn't discovered, go to Add Integration → Jung Home to start setup manually.

Either way you then pick how to connect:

  • Approve the connection in the Jung Home app. Home Assistant asks the gateway for access and waits; open the Jung Home app and approve the request under Settings → Gateway → Access Permissions → Open Requests. Setup finishes automatically once you approve (within ~3 minutes) — if it times out, submit again and re-approve. (Uses POST /api/junghome/register.)
  • Enter the gateway network-key password. Connects immediately, with no app approval, by exchanging the gateway's network-key password for a token (uses POST /api/junghome/register/by-password). You can find the password in the Jung Home app.

The gateway address is filled in for you when it was discovered; otherwise it defaults to junghome.local (which works on many networks) and you can change it to your gateway's IP (e.g. 192.168.1.50) if that name doesn't resolve.

The issued token is stored in the config entry. Devices added or removed in the Jung Home app afterwards are picked up automatically. If the gateway's IP later changes, discovery updates it automatically, or you can Reconfigure the entry to point at the new address.

Button automations (rocker switches)

Rocker buttons show up as Home Assistant event entities (one per up/down side). The gateway only reports raw press/release, so single/double/hold gestures are derived in an automation — a ready-made blueprint does this for you:

Import the blueprint by URL (Settings → Automations & scenes → Blueprints → Import), select all of the button's event entities (JUNG alternates between the up/down events), and assign actions for single / double / hold.

Scenes

Scenes defined in the JUNG app appear as Home Assistant scene.* entities — activating one (or calling scene.turn_on) recalls it on the gateway.

The gateway also reports when a scene is recalled by any source, including a physical wall button. The integration re-emits that as a Home Assistant event, junghome_scene_recalled, so you can trigger automations from a physical scene button:

automation:
  - trigger:
      - platform: event
        event_type: junghome_scene_recalled
        event_data:
          label: "Išjungti WC"
    action:
      - service: notify.notify
        data:
          message: "WC scene was triggered"

The event data is { scene_id, label, entry_id }.

How updates work

The integration is local push: it holds a WebSocket to the gateway and applies state changes the moment the gateway broadcasts them, so device states update in real time. It also re-fetches the full device list over REST once a minute as a backstop, and on every WebSocket reconnect. If the WebSocket drops it reconnects automatically with backoff. No cloud and no account are involved.

Known limitations

  • Metering sockets report instantaneous power (W) and current (A), not cumulative energy (kWh), so they can't go straight onto the Energy Dashboard. To track energy/cost, add a Riemann-sum Integration helper on the socket's power sensor (Settings → Devices & Services → Helpers → Riemann sum), then add that kWh sensor to the Energy Dashboard.
  • Button gestures (single/double/hold) aren't native — derive them with the blueprint.
  • The rocker status-LED colour can't be set from here (on/off only); colour is configured in the JUNG app or over BT-Mesh.
  • The puck isn't supported/validated yet.

Gateway internals (for contributors)

The local gateway API (REST + WebSocket), its registration flow, and the device-mesh architecture are documented in docs/. Release and HACS-publishing steps are in docs/publishing.md.

TODO

  • Puck support.

Development / Testing

You can run a throwaway Home Assistant instance with this integration loaded, without touching a real deployment.

Docker Compose (no local Python needed)

docker compose up          # Home Assistant at http://localhost:8123
docker compose down        # stop
docker compose down -v     # stop and wipe HA state

The repo's custom_components/ is bind-mounted into the container, so editing the integration and running docker compose restart picks up changes without a rebuild. Pin a specific HA version by replacing stable in docker-compose.yml.

Local (devcontainer / venv)

scripts/setup     # install dependencies
scripts/develop   # run Home Assistant against ./config with the integration on PYTHONPATH
scripts/lint      # ruff

About

Jung Home integration for Home Assistant

Topics

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages