Fjernkontroll for Roku, LG webOS, Samsung (Tizen) og Android TV / Google TV (for eksempel Telia-boksen) som kjører på din egen Android-telefon. Appen er en installerbar PWA, og en liten lokal bro i Node sender kommandoene til TV-en over Wi‑Fi. Ingen konto, sky eller npm-pakker.
Android-appen har broen innebygd, så du trenger verken Termux eller Node.
Fjern-<versjon>.apk til telefonen. Nyeste bygg ligger under Actions → CI → siste kjøring → Artifacts på GitHub.Krever Android 8.0 eller nyere. Nye versjoner installeres over den gamle, og lagrede TV-er og paringer beholdes.
Kjør, én linje om gangen:
pkg update
pkg install nodejs git
git clone https://github.com/kkas18/Fjernkontroll.git ~/fjern
cd ~/fjern
npm start
Er repoet privat, kan du i stedet laste ned ZIP fra GitHub (Code → Download ZIP) og pakke den ut med unzip -o ~/storage/downloads/Fjernkontroll-main.zip -d ~ etter termux-setup-storage.
http://localhost:8765, trykk ⋮ → Installer app.Neste gang: åpne Termux, kjør cd ~/fjern && npm start, og start Fjern fra hjemskjermen. Tillat Termux å kjøre i bakgrunnen i Androids batteriinnstillinger, ellers kan broen bli stoppet.
Oppdater med cd ~/fjern && git pull.
PowerOn. LG slås på med Wake-on-LAN når TV-en har vært tilkoblet én gang og Slå på via Wi‑Fi er aktivert på TV-en (ofte under Mobil TV på; plasseringen varierer per modell).| Node | 20 eller nyere |
| Roku | Settings → System → Advanced system settings → Control by mobile apps må være på |
| LG webOS | Godkjenn paringen på TV-en første gang. Strøm på via nettverket støttes ikke |
| Android TV / Google TV | For eksempel Telia-boksen. Første gang viser TV-en en sekstegnskode som du skriver inn i appen. Etter det kobler appen til uten kode |
| Samsung | Tizen, modeller fra 2016 og nyere. Trykk Tillat når TV-en spør første gang. Har du trykket Avvis: Innstillinger → Generelt → Ekstern enhetsbehandling → Enhetstilkoblingsbehandling. «Slå på» krever Slå på med mobil (Innstillinger → Generelt → Nettverk → Ekspertinnstillinger) |
Eldre Samsung-modeller (før 2016), Apple TV og rene IR-TV-er støttes ikke. Sony og Philips med Android TV / Google TV styres som Android TV.
På Samsung finnes ikke appikoner over nettet, så appene vises med merkefarge og kortnavn. Innganger er kildemenyen og HDMI 1–4.
På Android TV har protokollen ingen appliste. Appen viser snarveier til vanlige strømmetjenester med egne ikoner: Telia Play, NRK TV, TV 2 Play, Netflix, YouTube, Disney+, HBO Max, Prime Video, Viaplay, Spotify og Apple TV. Protokollen (den samme som Google TV-appen bruker) har ingen «start app»-kommando, bare lenker. Hver app har derfor flere lenker, som prøves i denne rekkefølgen:
nrktv:// eller nettadressenmarket://launch?id=<pakke>Lenker:
data/androidtv-apps.json, eller i appens private lagring på Android). Neste gang åpnes appen med en gang.Automatisk læring: Åpner du en app på TV-en med boksens egen fjernkontroll, og boksen melder det, legges appen til i «Alle apper». Slik lærer Fjern hvilke apper som er installert på boksen. Startskjerm, innstillinger og andre systemapper tas ikke med. «Skriv på TV» virker når skjermtastaturet er åpent på boksen, og «Slå på» bare mens appen er koblet til (boksen i hvilemodus).
En nettleser kan ikke sende SSDP-søk (UDP) eller åpne ukrypterte forbindelser til TV-er på lokalnettet fra en HTTPS-side. Broen gjør det for appen, og appen lastes fra localhost, som nettleseren regner som en sikker opprinnelse.
Grensesnittet bruker Manrope, som ligger lokalt i public/fonts/ (SIL Open Font License 1.1, se public/fonts/OFL.txt). Appen henter ingenting fra nettet.
127.0.0.1 og godtar bare forespørsler med egen Host og Origin. Det stopper DNS-rebinding og forespørsler fra andre nettsider.Content-Security-Policy og andre sikkerhetshoder på alle svar.data/lg-keys.json med tilgang bare for eieren (0600). Mappen er utelatt fra git.data/androidtv-client.json (0600) eller i appens private lagring på Android. Boksen husker sertifikatet etter paring med kode. Boksens eget sertifikat låses ved første tilkobling på samme måte som for LG og Samsung.wss:// på port 3001 med et selvsignert sertifikat. Sertifikatets avtrykk låses ved første paring (trust on first use). Endres det senere, stopper broen tilkoblingen og ber deg pare på nytt, og en låst TV nedgraderes aldri til ukryptert ws://. Eldre modeller uten wss:// bruker ws:// på port 3000.wss:// på port 8002 med token og låst sertifikat for TV-er som krever token (de fleste fra 2018), ellers ws:// på port 8001. Tokenet sendes aldri over ukryptert forbindelse.127.0.0.1:8765. Det kan ikke løses uten innlogging, og er en akseptert risiko for en app som bare styrer TV-en.npm start # start broen på http://localhost:8765
npm test # tester med node:test
npm run verify # syntakssjekk + tester (kjøres også i CI)
| Mappe | Innhold |
|---|---|
server.mjs |
HTTP-broen: statiske filer, API og sikkerhetshoder |
lib/ |
Roku (ECP), LG (SSAP), Samsung (Tizen-fjernkontroll), Android TV (Remote v2 med protobuf og eget sertifikat), SSDP- og mDNS-søk, WebSocket-klient, validering og feilmeldinger |
public/ |
Grensesnittet: HTML, CSS, JS, service worker, manifest og ikoner. Brukes av både PWA og APK |
android/ |
Android-appen: WebView med grensesnittet og broen skrevet i Kotlin (app/src/main/java/no/fjern/app/) |
tests/ |
Enhets- og integrasjonstester |
docs/revisjon/ |
Tidligere revisjon og skjermbilder fra hver runde |
Bygg APK lokalt (krever JDK 17 og Android SDK):
cd android
./gradlew testDebugUnitTest assembleRelease # APK: app/build/outputs/apk/release/app-release.apk
APK-en signeres med debug-nøkkelen i android/app/debug.keystore. Den er offentlig etter Android-konvensjon, og gjør at alle bygg kan installeres over hverandre. For distribusjon utenfor egen telefon: legg en egen nøkkel i repo-hemmelighetene FJERN_KEYSTORE_BASE64, FJERN_KEYSTORE_PASSWORD, FJERN_KEY_ALIAS og FJERN_KEY_PASSWORD, så bruker CI den. Byttes nøkkelen, må appen avinstalleres én gang.
API-et (/api/status, /api/scan, /api/connect, /api/command, /api/text) er bare ment for appen selv.
Endrer du filer i public/, øk version i package.json og CACHE i public/sw.js til samme verdi. En test feiler hvis de ikke stemmer overens.
Oppgradering fra 2.0: LG-TV-er kan be om godkjenning én gang til, fordi appen nå ber om tilgang til applisten og nettverksinformasjon (for «Slå på»).