Quick backstory. At home, HA is great. The moment I leave the wifi it gets annoying.
I had Tailscale for remote access and it works fine, until it doesn’t. Pull into the driveway, phone’s still on LTE, Tailscale is up, or maybe not, who knows. Open the HA app, spinner. Wifi kicks in, the app still hangs on to the old connection. Kill it, reopen, spinner again. And there I am in the car in front of a closed garage door, poking at my phone like it’s 2009. Pretty much the opposite of what I set up home automation for.
Port forwarding on my router? Nope. Nabu Casa just so I can toggle one cover? Didn’t feel right either. And I really didn’t want another VPN that needs to be “up” before anything works.
So I built ha-iroh. Small Android app + a HACS integration, talking over iroh, a peer-to-peer QUIC thing. The phone and your HA each get a keypair, everything is end-to-end encrypted, iroh punches through NAT when it can and goes via a relay when it can’t. The relay only sees ciphertext.
The part that actually fixed my problem: there’s nothing to “connect” first. Open the power menu, tap the garage cover, it opens. The app dials HA on demand over whatever network the phone currently has (wifi, LTE, crappy hotel wifi), and drops the connection when you’re done. Switching networks is a non-issue because there’s no long-lived tunnel to lose in the first place.
What you get
- Device Controls in the Android power menu / quick settings: lights, switches, fans, climate, covers, locks, scenes, scripts, buttons, with live state
- Assist from a quick settings tile or launcher shortcut (text for now, voice is on the list)
- your normal HA dashboard inside the app, log in once, works with any auth provider incl. MFA
- multiple HA instances in one app
- nothing exposed on your router. Pair by scanning a QR code in HA, delete the device in HA to kick the phone out again
What it’s not
Not a replacement for the official app, and not trying to be. No sensors, no location, no notifications, no widgets, no Wear OS, no iOS. I run both: official app for all of that, ha-iroh for the “I’m standing outside and want the thing to happen now” moments.
Where it’s at, honestly
- v0.2.x. I use it daily, so the tester count is roughly one. Expect rough edges.
- Android 12+, arm64 APK via GitHub Releases / Obtainium. Not on Play.
- HA side: HACS custom repo, HA 2026.3 or newer. The integration runs a small Rust bridge as a subprocess, bundled for x86_64 and aarch64, so HA OS / Container / Supervised all work.
- Want lower latency from outside? You can forward one UDP port and iroh goes direct. Totally optional, the relay path works everywhere.
- Two HA settings that can bite you, both in the README:
ip_ban_enabled(the bridge talks to HA from localhost, so a few wrong passwords from any phone lock out 127.0.0.1 = every phone), and never put loopback intotrusted_networks.
Links
- Repo + install guide: https://github.com/pzeinlinger/ha-iroh
- Design doc if you want to know how the pipe works: SPEC.md in the repo
- MIT
- Buy me a coffee if you feel like it: https://buymeacoffee.com/pzeinlinger
Bug reports very welcome, especially from people behind CGNAT, on Fritz!Box / MikroTik, or with unusual HA setups. If it saves you one minute in front of a garage door, mission accomplished.
I was away from home and had the opportunity to test this out. Mind you, I do have a subdomain pointed to my instance so it knew to use that, but even so, it connected perfectly fast via the Iroh app. I use the beta Home Assistant app and lately it’s been taking some time to load. Your app beats it to the punch with load times.
Thank you for putting this one out there!
That’s very cool, thank you for sharing.
thanks! :-)
A cool project! Sure hope it’s not AI slop!
em dashes in code comments
sigh
I mean, listen.
I am also against the slop machine. However this is the HA community and if you want to talk to other smart home enthusiasts without bumping into any AI glazers, you’re gonna have a bad time.
This is a security-important project though.
yep, claude and me. it does the em dashes, i do the garage rage. although, 4 in the whole repo? might have to let it write more :-)
Just to put this out there, a Nabu Casa sub directly supports the development of HA. For me the remote connectivity is just a bonus (that I honestly don’t need since I could easily put it through a cloudflared tunnel or set it up through NGINX proxy manager.
Not that this isn’t cool, having more ways to use HA is always great. Personally I expose my garage doors as Apple Home devices through HA and so get buttons on CarPlay that generally work well (as long as I have any signal which isn’t always the case in the driveway).
100% agree, nabu casa is worth it for the support alone, not trying to replace that! this is for the “i dont want HA reachable from the internet, period” crowd and me. the android power menu is my version of the carplay button. and my initial problem wasn’t no signal, rather the opposite: coming home and my phone connecting to wifi outside the garage - and that messing up ha + tailscale’s connection.
@Wxfisch
And the offsite backup.
When you have no internet, how does it work then? As far as I understood, if you have internet you can use nobu casa or tailscale.
no internet = no remote access, same as everything else. on your home wifi it talks to HA directly, no internet needed. the difference to tailscale/nabu casa isnt “works offline”, its no port forwarding, no vpn running, no cloud in the middle
Nobu casa is not like that either. I dont get the appeal here
Automation trigger: I go off my home WiFi SSID
Action: activate WireGuard vpn to my home.
Trigger: I join home WiFi
Action: disconnect WireGuard VPN
This solved my garage problems without an app.
nice! tried that too. does yours survive the handover? mine broke exactly there, phone grabs wifi at the gate, vpn drops, app stuck loading
I get thus is the HA community, but how is fumbling with a smartphone in yiur car more convenient than dedicated button built/clipped to your car’s sun visor?
Physical button: 1 action, no logic
Software button: infinite actions, complete logic over everything in HA
It’s like ‘why should I use HA, the light switch is right there’ yes technically but you’re missing the whole point. Why should you go on trips and see the sights of other places, Google Street View is right there.
E: real world example, though my network reaches far beyond my driveway so no button required:
Automation
alias: Midnight - Travel, Arriving Home description: '' triggers: - trigger: zone entity_id: person.midnight zone: zone.home event: enter conditions: - condition: state entity_id: input_boolean.midnight_awake state: - 'on' - condition: time after: '10:00:00' actions: - if: - condition: not conditions: - alias: Connected to home wifi network condition: state entity_id: sensor.midnights_phone_wi_fi_connection state: - input_text.home_network then: - wait_for_trigger: - trigger: state entity_id: - sensor.midnights_phone_wi_fi_connection to: - input_text.home_network timeout: hours: 0 minutes: 1 seconds: 0 milliseconds: 0 continue_on_timeout: true - if: - condition: state entity_id: light.midnight_s_bedroom state: - 'off' then: - action: light.turn_on metadata: {} target: entity_id: light.midnight_s_bedroom data: brightness_pct: 35 - action: input_boolean.turn_on target: entity_id: input_boolean.midnight_s_light_override data: {} - if: - condition: numeric_state entity_id: light.midnight_s_bedroom attribute: brightness below: 35 then: - action: light.turn_on metadata: {} target: entity_id: light.midnight_s_bedroom data: brightness_pct: 35 - delay: hours: 0 minutes: 0 seconds: 15 milliseconds: 0 enabled: true - action: automation.trigger metadata: {} target: entity_id: - automation.battery_low - automation.midnight_s_bedroom_midnight_s_thermostat_outside_is_cooler - automation.midnight_s_bedroom_midnight_s_thermostat_outside_is_warmer data: skip_condition: false - action: tts.speak metadata: {} target: entity_id: tts.piper data: cache: false media_player_entity_id: media_player.midnight_s_bedroom_home_assistant_voice_media_player message: Welcome home, Midnight! mode: singleWhy should you go on trips and see the sights of other places, Google Street View is right there.
This is a terrible argument because it’s the exact opposite of what you’re trying to push. OP’s spending all this time trying to optimize a garage door opener and it’s not working, while they could have just gotten a basic button set up in 5 minutes and be done with it, giving them more time to do something they actually enjoy.
Home automation is supposed to save you time and make your life easier. Spending a bunch of time programming your house to greet you so you can cosplay as Tony Stark isn’t that.
Maybe you don’t care and you find enjoyment in the tinkering on it’s own. That’s valid, but don’t get all defensive when other people don’t value the same things.
OP is getting frustrated about an issue they’re having with home automation that’s easily bypassed with less tech. If they want to keep tinkering that’s their right. But maybe they were considering cutting their losses already and wanted validation. Maybe they got caught up with automating everything that they never considered not automating everything. I don’t know, I’m not psychic. But they can step back and make a conscious decision as to whether they keep going
…it’s supposed to be a bad (sarcastic) argument, for the reader to see that it is bad and reflect on the rest of the argument, followed by a light-bulb moment.
crickets
But I digress. I stopped reading after you called me defensive - you asked a question, I gave you an answer. That you don’t like the answer is your problem. Lead a horse to water but can’t make it drink…
…it’s supposed to be a bad (sarcastic) argument
Sure it is. It’s totally not a Schrödinger’s Asshole /s
Also, I asked OP a question, not you.
Although LLM-assisted projects are no bueno for me, I am upvoting for your transparency 👍 best of luck
If you’ve already got a connection in your garage for your garage door opener, why not simply setup an AP in there as well so as soon as you hit your driveway you connect to the wireless?
I get wanting off site access, but consistent local access would be my main concern.
Cool! I’ll try this. bout the garage door, I’d like to tell you how I do it: a car tracker (Teltonika FMB120 for about 45€), a small push button under the steering wheel, when I push it, it does a curl request to my Node Red instance that, based on the car location, opens the gate of my home, or office or parents. Bonus: the FMB120 can connect to the CAN bus and you can get some telemetry and you can also always locate your car (I use Traccar). It does need a data SIM card, but with 1NCE, you can get one that lasts 10 years and it only costs 10€ (not per month, not per year, for the whole 10 years.)







