Fjernkontroll

Fjern

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.

Installer på Android (APK, anbefalt)

Android-appen har broen innebygd, så du trenger verken Termux eller Node.

  1. Last ned Fjern-<versjon>.apk til telefonen. Nyeste bygg ligger under Actions → CI → siste kjøring → Artifacts på GitHub.
  2. Åpne filen. Android spør første gang om du vil tillate installasjon fra denne kilden (for eksempel Chrome eller Filer). Tillat, og trykk Installer.
  3. Åpne Fjern. Telefon og TV må være på samme Wi‑Fi. Trykk Søk etter TV, eller legg til TV-en med IP-adresse.

Krever Android 8.0 eller nyere. Nye versjoner installeres over den gamle, og lagrede TV-er og paringer beholdes.

Installer som PWA (med Termux)

  1. Installer Termux fra F-Droid og åpne den.
  2. 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.

  3. Åpne Chrome på http://localhost:8765, trykk ⋮ → Installer app.
  4. Telefon og TV må være på samme Wi‑Fi. Trykk Søk etter TV, eller legg til TV-en med IP-adresse.

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.

Funksjoner

Krav

   
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:

  1. appens egen lenke, for eksempel nrktv:// eller nettadressen
  2. en intent-lenke som starter TV-appen ut fra pakkenavnet
  3. market://launch?id=<pakke>

Lenker:

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).

Hvorfor en lokal bro?

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.

Skrift

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.

Sikkerhet

Utvikling

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å»).