Harmonium — a fast, activity-based universal-remote (and browser) platform for Home Assistant (open beta via HACS)

The nav is what I’ve already build. I have created a “Home” page, with subpages for “Living Room”, “Office Room”, … On the “Home” page I have added the nav tile as you described.
I was just wondering if I could directly access the “living room” page, e.g., to add a shortcut in my browser (e.g., https://.../harmonium/main/index.html?page=living_room)

Harmonium v0.85.7 is out: Release v0.85.7-Beta · skavan/harmonium · GitHub

The short version: a config ownership system (updates refresh built-ins without ever touching your edits), the physical keys now follow one routing doctrine (:warning: the hold keys moved — hardware remotes need a small Key Mapper update, covered in the notes), a redesigned Music Library, and remotes that keep themselves on the current engine.

@Mi8 — your ask is in: .../harmonium/main/index.html#page=living_room opens a page directly, so a bookmark per room just works. Every page in the Studio shows a click-to-copy link under its Name.

@fahrer (and everyone else with a hardware remote and a tv streamer) — I’d value your take on this one: the D-pad targeting discussion at Discuss - Approaches for using a Hardware Remote for Navigation (D-Pad targeting) · Issue #5 · skavan/harmonium · GitHub — today the D-pad/Back/Home drive the on-screen remote everywhere except TV pages, where taps drive the television. Does that match your instincts on the Apple TV, or would an explicit device mode fit better? Is the AppleTV dialect working now?

As always: export your config before updating, and if anything looks off, an issue with that file attached gets it fixed fast.

Thanks for the quick iteration, it’s been exciting to see the fast progress on this project! That latest change took care of my hardware button issues.

As far as the discussion point around what the hardware buttons should do, my personal preference is that the hardware buttons should primarily drive the media components, including the back and home buttons. I don’t foresee myself using the remote buttons to navigate around the remote’s own display since it’s a touchscreen. How it is now has felt pretty intuitive to me :+1:

I’d LOVE to see some screenshots of your setup. To inspire me and others!
Is AppleTV working for you?
Meanwhile next up on my end!

Sure thing, here are a few of where I stand so far. That app selection looks great!

Thats awesome. Is AppleTV, XBOX and playstation working?

Apple TV is definitely working. I don’t have the XBOX or PlayStation integrated with Home Assistant, so I wouldn’t be able to drive them from the remote. Maybe I’ll try that out though for the sake of completeness.

One thought I had was the ability to add in more icons. The icons currently being used on those screens I set up are pretty generic, but it’d be great to somehow use the icons provided by the Custom Brand Icons integration: GitHub - elax46/custom-brand-icons: Custom brand icons for Home Assistant · GitHub

I just got this setup in an afternoon. Really slick! HACS install went just fine. I was able to get a Watch TV activity running really quickly, and then I started to build out more of the activities in my “Theater” room/page

One note: this integration is most easily used by people who were already trying to use Astrion ROS and feeling limited by the current Sanytron software. I easily spent the same time over and again getting all my media devices into Home Assistant, including the Fire TV. But that work was easily reused for Harmonium!

Screenshots

As requested, I included some screenshots of my setup. Just one page so far. I’m planning to add some presets that allow me to add a 2nd zone audio, make changes to the TV picture setting (movie vs TV) and keep iterating on the app library and media player availability (Plex, other music apps, etc).

Minor Problems

As I started to do more configuration, I ran into minor issues/nags:

  • There were minor remap issues that occurred on an Activity when I changed a device name and all related entity names. I wouldn’t expect Harmonium to handle that entity change automatically, but I just couldn’t get every reference changed easily (or there were hidden references). In the end I just deleted the Activity(s) and recreated, which was probably easier anyway.
  • FireTV’s use of ADB rather than a native AndroidTV implementation has notoriously slow response through the remote commands, to the point where I took the time to follow the guides here Android Debug Bridge - Actions to get all my sendevent command codes. I will be working those into my Fire TV dialect or remote commands, but I don’t see where it’s immediately obvious to do that. I thought I found somewhere to do it, so I’ll keep digging but native sendevent support would help make the Fire TV remotes feel snappier.
  • The Save + Reload Astrion selection doesn’t function/fails silently until you name your device/entities from the FullyKiosk integration as astrion1, and you need to exclude any area mapping to the entity names. Might need a mapping to entity similar to the battery option.
  • I like the use of Fully Kiosk here as a quick solution on the remote, but I didn’t realize when starting that a number of the solutions you developed (remote access of battery and reload, autostart) required a Plus license for that software :smile: not a big cost overall, but it can add up with multiple devices, plus it’s another config hurdle to manage.
  • My Denon and Panasonic devices are going to need custom commands over IP (not Android devices). I can provide help on testing and documentation if you plan to expand dialects to more devices.
  • I noticed the Music Media Player and TV Media Player have different buttons at the bottom of the controller screen (back, home, harmonium label). Is this by design?
  • The Advanced checkbox in several locations activates but does not select the checkbox, preventing the advanced view from being hidden. Navigating away from that area within the Studio fixes it.

Issues

My only real persistent bug now is an issue where I can’t get the Volume Band in either the Music or TV Media Player to change type anymore (I’m stuck on the theme default or “fat” one). I could have sworn I could do it earlier today, so maybe it’s some issue with my configurations since. OK if I start a new issue on GitHub with the documentation?

Let me know if you want me to record any of the others as issues to keep discussion in this thread clean. Thank you again for your hard work, and it is impressive how quickly you’ve iterated on this!

I have several Denon AVR’s and haven’t needed to do anything special to control them, I have them added via both the Denon AVR integration and the HEOS integration in Home Assistant.

I haven’t done a lot of media integrations that you mentioned though, maybe that’ll be my next step!

Pics look great btw, I really like the theater picture up at the top of that page.

Interesting, thanks for this. I have 2 aging Harmony remotes and hubs and I fear at least one will die soon (if Logitech don’t abandon it first). I have been considering a way forward, touchscreen is the way to go and I have configured firemote in HA with cards on room pages on my HA dash, but this goes a step further and is more polished. I’ll follow along to see where it goes, I’m away this week but will have a play when I get back.

This list was gold — nearly all of it is addressed in v0.86.0, and two items changed the release’s shape. Point by point:

**Volume band stuck on the fat one — your bug, confirmed and fixed.** The Controller tab’s Volume style dropdown sets the activity *default*, and a per-row :gear: style or per-member volume option silently outranked it — which is exactly the state you were in. In 0.86.0 the overrides are listed right beside the dropdown (“:gear: pinned: …”), each with a one-tap ↺ to clear. No need for the GitHub issue unless you’d like to confirm the fix.

**Fire TV sendevent — now first-class, and your ask set the design.** Platforms (the editor formerly known as Apps) can now **derive a class**: clone Fire TV into your own (say FireTV-SE), and the built-in keeps flowing underneath — new stock apps still arrive, your changes win, your removals hold. D-pad commands accept full HA actions (the `androidtv.adb_command` → `sendevent` fast path) with a proper :high_voltage: editor — no more Code tab, and no more `[object Object]`. The recipe and the field-measured key codes are in `docs/design-fast-dpad.md`.

**Save + Reload Astrion silent-fail — fixed.** It was hardcoded to `astrion1`-named buttons. It’s now **Save + Reload Remote**: wire your remote’s Fully buttons in map → Startup & Home → Remote reload, and if a button doesn’t exist it fails loudly and names it. No device-naming or area gymnastics needed.

**Fully PLUS license — you’re right, we now say it up front.** Getting-started and the hardware guide both flag the ~$10/device requirement (remote admin, autostart, and the battery/reload wiring all need PLUS).

**Entity renames breaking activities — real limitation, now documented.** There’s no automatic entity-rename; references live in several places and delete-and-recreate is honestly the fastest path (as you found). Troubleshooting now says so.

**Music vs TV bottom buttons — by design, now documented.** TV pages hand the physical Back/Home to the device, so Harmonium pins its own touch pair there; music pages don’t need it.

**Denon/Panasonic over IP — a different answer than you might expect.** Harmonium deliberately doesn’t grow its own IP transports: if the receivers are set up through their HA integrations they’re media_players already, and anything beyond (surround modes, zones) rides HA services — which every Harmonium action, preset, and tile can call. If a command you need isn’t reachable through the HA integration, that’s worth raising with that integration — and if you hit a gap where Harmonium can’t *express* an HA service call you need, that we absolutely want to hear. The offer to test and document is gratefully taken up in that form.

Thanks again — Advanced-checkbox is fixed too (it was a tab in checkbox clothing). Update to v0.86.0 via HACS, restart HA, Save & Deploy once.

v.0.86.0-Beta is released!

It’s a large release. If it doesn’t break some things, I’ll be amazed, but I promise I’ll hop on fixes ASAP. Please Export your workspaces before updating.

My favorite which it doesn’t talk about much – wireless ADB. I can scrcpy or adb into any of my remotes - screw the cover plate back on and charge properly!

icon support and some very cool features are next in 0.87!

Awesome! Thanks for the fixes; I’ll install and verify the fixes tomorrow. I appreciate the documentation updates too! Glad the testing can benefit others and the project.

I want to try out wireless ADB as well - sounds convenient! And I’ll be definitely using the KeyMapper Expert Mode fix you deployed - nice find.

Fire TV sendevent

Right after I posted, I found the dpad_commands entry under the Apps/Platform, which was just what I needed. The sendevent commands worked as expected just pasted in, but it’s nice to have them be a full feature now! They are much faster than default commands on Fire TV and will make any remote (Astrion, phone, tablet) feel great.

Denon/Panasonic over IP — a different answer than you might expect.

I’ll get working on creating HA entities or automations for Denon get_command that will expose what I want as Harmonium buttons. That works for me.

I went through the upgrade, but I can’t seem to load the new version of Harmonium Studio (and none of the new features are available). I rebooted HA, and also removed and re-added the service and I seem to still be stuck on 0.85.7 for the Studio page. Integration backing it is up-to-date.

Weird.
I presume you hard refreshed the browser (i.e. F12 for dev tools, right click on refresh and Empty Cache and Hard Reload).

And when you go to HACS, and click on Harmonium, it says v0.86.0?

and when you downloaded it it said v0.86.0?

Let me know those answers and I’ll start scratching my head!

s.

That fixed it. Hard refresh wasn’t enough, the empty cache did the trick, thanks.

OK, boys and girls.
Need your input on feature requests.

Here’s what’s on deck for 0.87:

  1. A consistent design language for every tile
  2. Support for more entity types (number, cover, and more)
  3. Support for icons from other sources (custom brands etc…)
  4. More inline renderers.

What would you all like that would make this more useful?

I don’t want to mimic a full blown tablet view – as I think that belongs in HA native territory.
My instinct is this platform should be about getting activities and actions launched with feedback - but no expectation of staring at a tiny screen for 5 minutes. But - the wiring is powerful - so totally open to ideas and direction.

Throw it at me!

I think 2 and 3 would be great.

One other thing I’ve been thinking about is getting the microphone button working, especially with another project that exists for piping that audio to Siri on Apple TV’s (or could go to Home Assistant Assist). I saw you actually have a blurb in one of the md files on the GitHub about that being on the roadmap but I assume that will be a bit tougher to crack because the Harmonium URL would need to be https for it to work with Fully Kiosk.

By the way, I followed your guide for setting up an Astrion remote and it went great using the raw adb commands. I had some trouble getting the store to work but I skipped that. I think that made my remote itself much more solid with this setup than some of the hacks I had implemented along the way!

The available functions in the device controller view from the activity’s cast is limited to a few functions. If we could define what we could use in those device pages (or just activate all the roles of the pre-wired device), it would allow you to quickly change settings in the individual device (and keeps you from having to fish out the old remote).

Design:
Given you are in an active activity, and you select one of the devices in the cast from the activity, then the functions of the remote change to the roles of the pre-wired device (not the activity) until returning to the activity page.
Example:

My Watch TV activity gives the D-Pad role to a Fire TV and the volume role to an AVR and no roles to the Sony TV, but if I click on the Sony TV from the cast, all roles switch to the Sony TV and I can use the button map (physical remote or phone) for the D-pad and the volume on the Sony TV.

You asked, you shall receive.
Maybe tomorrow. Working through testing. It was 80% there - adding some polish…
0.87 will be a pretty big release and will need some heavy duty testing in the field.

Sneak peek: