Home Assistant Companion App, iOS and Android Setup Guide
This post may contain affiliate links. As an Amazon Associate we earn from qualifying purchases. Disclosure.
The Home Assistant Companion app turns your phone into both a control panel and a sensor hub for your smart home. It ships on iOS and Android, it's free, and here's everything in it that actually matters.
The Home Assistant Companion app is free on both the App Store and Google Play. It's also one of the most underused parts of Home Assistant, most people install it, point it at their server, and stop there. That's leaving a lot on the table.
Home Assistant setup basics
TL;DR: The HA Companion app handles remote access, push notifications, location-based automations, NFC tags, widgets, Siri Shortcuts, and watch apps on both platforms, all free. Remote access requires either Nabu Casa (6.50 EUR/month) or a self-hosted reverse proxy. App sensors like battery level and WiFi SSID can drive automations that your smart home reacts to automatically.
How Do You Set Up Remote Access?
Remote access is the first thing you need to configure, because without it, the app only works on your home Wi-Fi, so it pays to have a rock-solid WiFi setup on the host first. As of Home Assistant 2024.6, the two main paths are Nabu Casa and a self-hosted reverse proxy.
Nabu Casa costs 6.50 EUR/month (or 60 EUR/year). You get an automatically managed SSL certificate, a relay subdomain at https://YOUR-ID.ui.nabu.casa, and no port-forwarding required. Setup takes about three minutes: go to Settings > Home Assistant Cloud, sign in, done. The argument for paying is maintenance overhead, or rather the absence of it.
Self-hosted reverse proxy costs nothing beyond your existing hardware. NGINX Proxy Manager is the most popular option for beginners, it has a GUI and handles Let's Encrypt certificates automatically. You do need a domain name (roughly 10 to 15 EUR a year) and you'll need to open port 443 on your router. More work upfront, but no recurring fee.
Once remote access is working, open the companion app, enter your external URL, and the app handles local vs remote switching automatically. When you're home on Wi-Fi, it hits your local IP. Away from home, it routes through your cloud or proxy URL. If devices show up in the app but not in Home Assistant itself, our guide to Home Assistant not discovering devices walks through the usual culprits.
Architecture context
Push Notifications From Automations
This is where the app earns its keep. You can send rich push notifications from any Home Assistant automation using the notify.mobile_app_YOUR_PHONE service.
A basic notification looks like this in YAML:
action: notify.mobile_app_your_phone
data:
title: "Front door opened"
message: "Motion detected at 10:34 PM"
On iOS, you can attach a camera snapshot directly to the notification, it appears as an expandable thumbnail without unlocking your phone. Add data.image: /api/camera_proxy/camera.front_door to the service call. Android handles this slightly differently through data.image with a full URL.
Actionable notifications let the user tap a button that triggers another action. You define the action in your configuration.yaml under ios: > push: > categories: on iOS, or through data.actions on Android.
The event class I care most about here is water. There are Zigbee leak sensors sitting under the manifolds and the utility-room fittings in this house, and a leak is exactly the kind of alert where a button on the notification beats a notification that makes you open the app, find the entity, and think. A notification that carries its own buttons is a better interface at 3 AM than any dashboard. Contrast that with the garage door, which in this build runs on a Somfy Dexxo Smart io through a TaHoma Switch. Home Assistant has no idea what state that door is in, so it can't ask me about it, and no amount of clever YAML changes that. The bridge has to exist first.
Dashboard customization
Location Tracking and Presence Detection
The companion app reports your phone's location to Home Assistant, which creates a device_tracker entity. This powers presence-based automations, lights on when you arrive, heating up before you get home, alarm arm when everyone leaves.
Should you use it? Honestly, it depends on your household. Single person with a predictable schedule: yes, it's fantastic. Multiple people, shared devices, guests: the logic gets complicated fast.
I'd add a structural point that took me a while to accept. The phone is the outer layer of presence, not the whole of it. In this house the fine-grained work is done by ceiling-mounted mmWave sensors plus a 24 GHz presence sensor, both on Zigbee, and they answer a different question than the phone does. The phone knows you're in the neighbourhood. The mmWave sensor knows someone is sitting still in the room. Build the outer ring on the app, the inner ring on sensors in the ceiling, and don't ask either one to do the other's job. The fair caveat: the house is still being finished and nobody lives in it yet, so what I can tell you about that split is how it's wired and what each sensor class reports, not what a year of family traffic does to it.
Two accuracy modes exist:
- Significant Location Changes, uses cell tower data, lower battery cost, updates only when you travel 500+ meters
- High Accuracy, GPS-based, frequent updates, noticeably higher battery drain
For most arrival/departure automations, Significant Location Changes is accurate enough. The 500-meter radius doesn't matter when your home is a fixed point.
The app also supports zones, you define geographic areas (home, office, gym) and HA tracks which zone you're in. Your device_tracker state becomes home, office, or not_home.
NFC Tags, Widgets, and Shortcuts
NFC Tag Actions
The app can scan NFC tags and trigger any HA action. A 10-pack of NFC215 stickers runs about 8 EUR online. In the companion app, go to NFC Tags > Create Tag, assign any service call or script, write to the sticker. The standard example is a tag by the door that fires a "leaving home" script: heating to eco, alarm armed, everything off.
Two honest notes before you copy that. There's no smart lock in this build, so a tag here would never be the thing locking a door, and the alarm is a wired Satel panel that reaches Home Assistant through an Ethernet module and the satel_integra integration rather than through anything cloud-shaped. Arming a real alarm from a sticker you can buy for under a euro deserves more thought than most tutorials give it.
iOS Widgets and Android Shortcuts
On iOS 16+, the companion app ships with interactive widgets for the Lock Screen and Home Screen. You can show any sensor value (temperature, door state, last motion time) or add a button that triggers a script. The widget updates every 15 minutes or when the app runs in the background.
Android supports Quick Settings tiles, you can add HA toggle buttons directly to the notification shade pulldown. No need to unlock your phone to turn off a light.
Siri Shortcuts and Google Assistant
On iOS, Siri Shortcuts connect to HA actions through the companion app. You create a shortcut, add the "Call Service" or "Fire Event" action from the HA app, record a Siri phrase, and that's it. "Hey Siri, start movie mode" will trigger whatever scene you mapped.
Google Assistant integration on Android works through the Home Assistant Cloud (Nabu Casa) or a self-hosted Google Assistant integration. Without Nabu Casa, the Google route requires an Actions on Google project, considerably more setup.
Wearables and CarPlay
The companion app includes a watchOS app with complications (small data displays on your watch face) that show sensor values, and you can trigger scripts straight from the wrist.
My own watch is a Samsung Galaxy Watch8 44mm LTE, so what I get is the Wear OS side: tiles and a complication-equivalent rather than watchOS complications, and the LTE model matters more than it sounds. A watch with its own connection can still reach Home Assistant when the phone is on a charger two rooms away, which is the entire point of putting a control on your wrist. What goes on the tile should be a value you'd otherwise unlock a phone for. Outdoor temperature qualifies. A garage door does not, at least not here, because that door runs on a TaHoma Switch that Home Assistant cannot see.
CarPlay support landed in the companion app in late 2023. You get a simplified dashboard on your car's display, useful for triggering "I'm almost home" automations while driving.
App Sensors, The Hidden Superpower
Every phone running the companion app can publish its own sensor data back to Home Assistant. These show up as entities you can use in any automation.
Useful app sensors include:
- Battery level and charging state
- Screen on/off state
- Wi-Fi SSID (which network you're connected to)
- Volume level
- Current activity (walking, driving, stationary) on supported devices
The Wi-Fi SSID sensor is particularly useful. When your phone connects to your home network, the SSID sensor shows your router's network name. You can use this as a secondary presence trigger, faster and more reliable than GPS for "arrived home" detection, because it fires the moment your phone connects to Wi-Fi.
Smart home overview
An automation that combines SSID + device_tracker gives you a two-factor presence check: you're "home" only when both agree. This eliminates most false positives from GPS drift in built-up areas.
There's a wrinkle nobody warns you about, and it comes from doing the network properly. The gear here is Ubiquiti, a U6-LR access point and a USW-Flex-Mini switch downstairs, with the smart home devices sitting on their own VLAN. Their traffic out to the internet isn't restricted, but it is visible in the UniFi statistics, which is a different thing from a firewall and, for me, the more useful thing. The moment you segment like that, your phone and your sensors stop sharing a broadcast domain, and any tutorial that assumes flat-network auto-discovery starts lying to you. Multiple SSIDs also mean the SSID sensor can report a name you didn't put in your automation condition. Write the condition against every SSID your phone might legitimately join, or it will fail on the one evening you actually need it.
The other half of that setup is the backup link: a Cudy LT400 4G router as a second path to the internet. It's cheap insurance, and it's also a trap for presence automations. When the main line drops and the phone rides out through mobile data anyway, remote access keeps working while the SSID sensor tells a completely different story. That's a good reason to keep the two-factor check as "both agree" rather than "either one".
The companion app is one of the few pieces of the Home Assistant ecosystem that genuinely improves on every platform update. The iOS and Android teams ship new features consistently, and the sensor list keeps growing. Install it, configure remote access properly, and then spend fifteen minutes exploring the sensors section, you'll find at least two automations you didn't know you wanted.
Troubleshooting Common Problems
This guide wouldn't be complete without covering the issues people actually run into. Here are the ones I see come up repeatedly in the Home Assistant forums.
App can't connect remotely but works on local Wi-Fi. Nine times out of ten this is an SSL certificate problem. If you're self-hosting, your Let's Encrypt cert may have expired (they renew every 90 days and renewal jobs fail silently). Run certbot renew --dry-run to check. If you're on Nabu Casa, force a reconnect by signing out and back in from Settings > Home Assistant Cloud.
Notifications stopped arriving on iOS. Apple's push notification service occasionally drops devices after an iOS update. Go to Settings > Companion App > Notifications and tap "Reset Push ID." Home Assistant will register a new push token. If that doesn't fix it, check that the notify.mobile_app_ service name in your automation still matches your device name, because it changes if you rename your phone.
Location tracking not updating on Android. Samsung, Xiaomi, and Huawei devices all have aggressive battery optimization that kills background location. Go to Settings > Apps > Home Assistant > Battery > Allow Background Activity. On Samsung One UI specifically, also disable "Sleeping Apps" for the companion app. This is the single most common Android complaint and the fix is almost always the same.
App sensors showing "unavailable." This happens after reinstalling the app or restoring from backup. The device entity still exists in HA but the push token is stale. Delete the old device under Settings > Devices & Services > Mobile App, then re-open the app and it will re-register automatically.
And the backup question underneath all of it. Half the problems above end with "restore from backup", so it's worth saying how I keep mine. The Home Assistant configuration lives in a Git repository on GitHub, with the secrets deliberately outside it, and the data goes to Google Cloud. The reason isn't storage, it's git blame. When a notification stops arriving, the useful question is what changed and when, and a version-controlled config answers that in about ten seconds while a tarball answers nothing at all. Every automation I break, I break in a commit I can read later.
I'll be honest about the gap, though, because this is where most backup advice quietly stops. I have never actually restored from that backup. Not once. A backup you haven't tested is a hypothesis, not a safety net, and anyone telling you their strategy is sound without having rehearsed the restore is telling you about their intentions rather than their system. Mine is a hypothesis with good version history.
The official companion app documentation covers every sensor, notification parameter, and platform-specific quirk in detail. It's maintained by the same team that builds the app, so it stays current with each release.
One thing most people skip: enable the "App Loaded" and "App Background" sensors. These tell you exactly when someone picked up their phone and when the app moved to background. Combined with presence detection, you can build automations that respond to "person just woke up and opened their phone," which is a much better trigger for a morning routine than a fixed time alarm.
If you take one thing from this guide, make it the sensors. The Companion app's real value isn't remote control, it's the stream of presence, battery, and connectivity data your phone quietly feeds back to Home Assistant. Turn on the sensors you actually plan to use, skip the rest to save battery, and your automations gain a sense of where you are without a single extra device on the wall.
Frequently Asked Questions
Does the Home Assistant Companion app work without Nabu Casa?
Yes, but you need to configure your own remote access. The most common approaches are a reverse proxy using NGINX or Caddy, or a WireGuard VPN tunnel. Nabu Casa at 6.50 EUR/month handles the SSL certificate and relay infrastructure for you, without it, you're responsible for that setup. Local access inside your home network works out of the box without any subscription or extra configuration. The app auto-detects local vs remote and switches connections automatically once both are configured.
How much does location tracking drain the phone battery?
Less than people fear in the default "Significant Location Changes" mode, which leans on cell tower data rather than GPS. High-accuracy mode polls GPS far more often and costs noticeably more, so treat it as opt-in rather than a default. Android behavior varies by manufacturer, Samsung One UI aggressively kills background processes, so you may need to disable battery optimization for the companion app under Settings > Battery > Background Usage Limits. The tradeoff is real; only enable high accuracy if your presence automations truly need fast response.
Can I use Siri to control Home Assistant devices?
Yes. The companion app on iOS 16.4 and later lets you create Siri Shortcuts that trigger any Home Assistant action, scripts, scenes, input booleans, or full service calls. You record a voice phrase in the Shortcuts app and it maps to an HA action. This isn't the same as native HomeKit Siri control, but it works for any entity in HA regardless of whether the device supports HomeKit. For HomeKit-native Siri commands, you'd need the HomeKit Bridge integration running separately.