3.4 KiB
HA starten — Tailscale + Home Assistant launcher
Minimalistische Android app die in één tik Tailscale VPN aanzet en daarna de
Home Assistant app opent. Ideaal als je HA alleen bereikbaar is via de
Tailscale MagicDNS-naam (bijv. https://homeassistant.tail…ts.net): buiten je
thuisnetwerk moet eerst de tunnel omhoog, pas dan kan de HA-app verbinden.
Waarom
- HA-app staat louter op de tailnet-URL (geen LAN-IP), dus de tunnel moet actief zijn vóór HA een verbinding kan maken.
getLaunchIntentForPackage/broadcasts overnemen in Tasker was fragiel en verward (accessibility-service, package-visibility, exit-condities). Eén knop-app is simpeler en betrouwbaarder.
Werking
Op basis van de officiële Tailscale Android intents:
| Knop | BroadCast intent |
|---|---|
| VPN aan + HA openen | com.tailscale.ipn.CONNECT_VPN |
| VPN uit (sluit daarna de app) | com.tailscale.ipn.DISCONNECT_VPN |
Beide gericht op com.tailscale.ipn/.IPNReceiver (Broadcast Receiver). De app
wacht ~3 s na CONNECT (Tailscale-handshake) voordat hij de HA-app start.
Knoppen
- Verbind-knop bovenaan, uit-knop onderaan — ver uit elkaar om fouttappen te voorkomen.
Vereisten
- Android 8.0+ (minSdk 26, targetSdk 34)
- Tailscale app geïnstalleerd en ingelogd
- Home Assistant Companion app geïnstalleerd (
io.homeassistant.companion.android)
Batterijoptimalisatie uitzetten voor Tailscale werkt het betrouwbaarst; direct na een telefoon-reboot kan de broadcast-intent kort falen (startlag van Tailscale's
IPNReceiver).
Bouwen
De app is bewust Gradle-vrij — een handmatige aapt2/javac/d8-pipeline op een
machine met Android SDK build-tools + platform 34:
SDK=/opt/homebrew/share/android-commandlinetools
BT=$SDK/build-tools/34.0.0
AJ=$SDK/platforms/android-34/android.jar
mkdir -p classes dex out out/res
# 1. resources compilen + linken
aapt2 compile --dir res -o out/res/
aapt2 link -o out/app-unsigned.apk -I "$AJ" \
--manifest AndroidManifest.xml \
--min-sdk-version 26 --target-sdk-version 34 \
--version-code 1 --version-name 1.0 \
$(find out/res -name '*.flat')
# 2. Java -> dex (gebruik een recente d8; oudere build-tools-d8 faalt op inner classes)
javac --release 8 -classpath "$AJ" -d classes src/nl/eddy/tailscalehalauncher/MainActivity.java
d8 --release --lib "$AJ" --output dex classes/nl/eddy/tailscalehalauncher/*.class
# 3. dex in apk, align, sign
(cd out && zip -qj app-unsigned.apk ../dex/classes.dex)
zipalign -f 4 out/app-unsigned.apk out/app-aligned.apk
apksigner sign --ks debug.keystore --ks-pass pass:android \
--out out/app.apk out/app-aligned.apk
Resultaat: out/app.apk.
Installeren
adb install -r out/app.apk
of kopieer out/app.apk naar de telefoon en tik hem aan (sideload; "onbekende
bronnen" toestaan).
Projectstructuur
AndroidManifest.xml # manifest + <queries> voor HA-zichtbaarheid
src/nl/eddy/tailscalehalauncher/ # MainActivity (enige bron)
res/mipmap-{mdpi..xxxhdpi}/ic_launcher.png # launcher-icoon (HA-blauw + dikke L)
Aanpassen
- Wachttijd VPN → HA-start:
WAIT_FOR_VPN_MSinMainActivity.java. - Andere target-app:
HA_PKGinMainActivity.java. - Icoon regenereren: de
res/mipmap-*/ic_launcher.pngworden uit een 512px-PNG gemaakt (Image.LANCZOSdownscale); pas ze direct aan als je er een wilt wijzigen.