NØDKALDS-APPEN DER RINGER IGENNEM LYDLØS
Et udviklerpitch
Family
Alert

Et privat nødkaldssystem, bygget til en familie.

EMERGENCY ALARM
SOS
Annullér ✕
FORBUNDET
Baha2,1 km · ca. 6 min
Jaffa4,8 km · ca. 11 min
Ahmad1,3 km · ca. 4 min
SOS
Forside. Sig kun navnet og en sætning, og gå direkte til krogen.
Krogen
Hvor mange af jer har telefonen på lydløs lige nu?
Det er problemet, jeg har bygget det her for.
Stil spørgsmålet og hold en pause. Så en sætning om motivationen: et sygt familiemedlem, fire telefoner der altid er på lydløs.
Agenda
Fire punkter, ti minutter
01Problemet og kraveneHvorfor færdige løsninger ikke passede, og hvad systemet skulle kunne.
02ProduktetTo knapper, et nødkald sekund for sekund, og eskaleringsstigen.
03TeknikkenGennem lydløs, native kald, lokation, sikkerhed og deployment.
04Næste skridtSmartwatch, omsorgsfunktioner og en demo.
Punkt tre er der, hvor vi bliver nørdede.
Problemet
Lydløs betyder utilgængelig

Et sygt familiemedlem skal kunne tilkalde hjælp. Men familien har telefonen på lydløs: i møder, om natten, på arbejde. Et almindeligt opkald når aldrig igennem, når det gælder.

Lydløs er standard

Opkald og beskeder respekterer lydløs og Forstyr ikke. Nødkald gør ikke, og det er hele pointen med appen.

Minutter betyder noget

Ved fx åndenød er forskellen på 2 og 20 minutter alt. Systemet skal måle svartid i sekunder, ikke i held.

Færdige løsninger passede ikke

Nødkaldstjenester koster abonnement, er lukkede og lægger helbreds- og lokationsdata hos tredjeparter.

Sæt scenen kort. Kravene kommer på næste slide.
Kravene
Fire krav, som forklarer alle valg
01Larm gennem lydløsIngen "høj prioritet"-notifikation. Rigtig alarm-lyd, der ignorerer lydløs og Forstyr ikke, hver gang.
02Simpelt når man er sygEn skærm, store knapper, kvitteringer tilbage. Designet til den dårligste dag, ikke den bedste.
03Ingen abonnementerIngen tredjeparter, ingen løbende omkostninger. Kører på en VPS familien allerede har.
04Familien ejer altData, server, certifikater og distribution. Ingen Play Store, ingen Google-push, ingen cloud-konti.
De fire krav forklarer alle tekniske valg senere: derfor egen server, derfor sideloading, derfor ingen Firebase.
Produktet
To knapper

Patientens skærm har tre navne og en rød knap. Resten af familien har ingen knapper: deres telefoner er modtagere, der vækkes når det gælder.

Tryk på et navn, lille alarm

Et enkelt bip gennem lydløs, en skærm popper op over låseskærmen med "jeg har set det" og "ring tilbage". Kvitteringen læses op hos patienten, og knapperne viser hvem der er tættest på i km og minutter.

Den røde knap, stor alarm

Fem sekunders fortryd med oplæsning, så: stigende sirene på alle telefoner, live lokation og tidspunkt på kort, video med auto-svar, og 112 og Lægevagten direkte på nødskærmen. Første svar stopper sirenen hos de andre.

Intet svar, auto-opkald

60 ubesvarede sekunder, og telefonen ringer selv op til det første nummer på listen. Et rigtigt opkald via SIM, der virker selv hvis mobildata eller serveren fejler.

En lille alarm, under et sekund fra tryk til bip
Tryk på navn
POST til relayet
Push over WebSocket
Bip + skærm over låsen
"Jeg har set det"
Kvittering oplæses
Demo-øjeblikket ligger her: en kollegas telefon på lydløs, tryk på navnet, ti sekunders larm. Det slår alle slides.
Produktet
Et nødkald, sekund for sekund
0 sek · Tryk på SOSFem sekunders synlig fortryds-nedtælling med tonebip og oplæsning.
5 sek · Alle alarmeresSirene gennem lydløs, skærmen tænder over låsen, GPS-position sendes med.
Svarer nogen inden 60 sekunder?Serveren kvitterer pr. person: leveret eller uopnåelig.
Ja, en svarer
"Jeg kommer"Live lokation hvert 7. sekund og beregnet ankomsttid hos patienten.
Andres sirener stopperSkærmen bliver stående, så flere kan komme.
Video åbnerFamilien ringer op, patientens telefon svarer selv.
Nej, ingen svar
60 sek · SIM-opkaldTelefonen ringer selv op til det første nummer på listen, uden om server og data.
EskaleringsstigenLægevagt og 112, næste slide.
Pointen: systemet antager at ingen svarer. Hvert trin har en fallback, og den sidste er et rigtigt SIM-opkald.
Eskaleringsstigen
Tre trin af svar

Bygget kontra designet, sagt ærligt: trin et kører i dag, trin to og tre er næste version.

Lille alarm uden svar
5 små alarmeruden en eneste "set"-kvittering
Tolkes som mønsterder er brug for hjælp, familien er ude af rækkevidde
Auto-opkald til Lægevagten70 11 07 07 · næste version
Stor alarm uden svar
Familien alarmeressirener, lokation, video · i drift i dag
60 sek: SIM-opkaldtil første nummer på listen · i drift i dag
Stadig intet svar: 112 med stemmeserveren placerer et voice-opkald og oplæser position, situation og journal-resumé · næste version
Teknisk kan en telefon ikke selv tale ind i et mobilopkald, så trin tre placeres fra serveren via en VoIP-gateway med TTS. Regler for automatiserede 112-opkald skal afklares først, alternativt en godkendt alarmcentral som mellemled.
Teknikken
Fire telefoner og en VPS

En APK til alle fire: appen spørger "hvem er du?" og "kan du få et nødstilfælde?" ved første start. Kotlin uden AppCompat, kun tre dependencies: OkHttp, osmdroid og libwebrtc.

Klienter
PatientAlarm-udsendelse, status og kvitteringer, auto-svar på kald
Hjælper × 3Modtager: full-screen alarmer, jeg kommer, video
Foreground servicePersistent WebSocket, reconnect med backoff, boot receiver

WSS 8443
VPS · /opt/family-alert
Node.js relayExpress + ws, en socket pr. rolle, offline-kø, events.log, self-update-annoncering
coturnTURN/STUN til kald bag CGNAT, lt-cred-mech
Build-miljøJDK 17, Android SDK, Gradle: kompilerer og serverer APK'en
Eksternt, anonymt
OSRMKøretids-ETA, kun koordinater
OpenStreetMapKort-tiles
SIM-nettetSidste fallback: rigtige opkald uden data
Bevidst kedelig arkitektur. Spørgsmål der kommer: hvorfor ikke Firebase? Ingen Google-afhængighed, familien ejer infrastrukturen, og FCM kan ikke garantere alarm-adfærden.
Teknikken · 1 af 3
At larme gennem lydløs

Det svære ved Android er ikke UI. Det er at overleve batterioptimering og bryde igennem lydløs på en lovlig måde.

Alarm-streamen

Lyden afspilles med USAGE_ALARMSTREAM_ALARM, som ignorerer lydløs og vibrér og passerer standard Forstyr ikke. Sirenen fader ind over fem sekunder via MediaPlayer.setVolume.

Kanaler med bypass

setBypassDnd(true) på notification channels, plus ACCESS_NOTIFICATION_POLICY så appen kan få DND-adgang til total-lydløs-tilstanden.

Over låseskærmen

Full-screen intents med setShowWhenLocked og setTurnScreenOn. Alarmskærmen kan ikke lukkes, før man har svaret.

Overlever alt

Foreground service med persistent WebSocket, exponential backoff, NetworkCallback, boot receiver og undtagelse fra batterioptimering.

Fade-in-detaljen er god at nævne: venlig i møder, umulig at overhøre til sidst.
Teknikken · 2 af 3
Native kald, uden tredjepart

Video var først Jitsi i en browser. Det røg ud til fordel for ren libwebrtc direkte i appen: hurtigere, pænere og uden afhængigheder.

Offer, SDPcodecs og kryptografisk fingerprint
RelayPOST /rtc og WS-push, ca. 60 linjer
Answer, SDPauto-svar hvis nødkald er aktivt
ICE-kandidaterhost, srflx og relay udveksles
P2P eller TURNcoturn på VPS'en når CGNAT blokerer
DTLS-SRTPE2E-krypteret media, serveren kan ikke aflytte

Egen signaling

SDP offer/answer og ICE-kandidater sendes som JSON via POST /rtc og pushes over den eksisterende WebSocket.

coturn på samme VPS

TURN-relay når mobilnettets CGNAT blokerer P2P. Serveren, og TURN, ser kun krypterede pakker.

Auto-svar under nødkald

Aktiv stor alarm betyder at patientens telefon selv besvarer indgående kald med kamera og højttaler. Man kan se og høre hende, selv hvis hun ikke kan røre telefonen.

Auto-svar er systemets vigtigste feature. Sig den langsomt.
Teknikken · 3 af 3
Lokation med omtanke, ikke overvågning

Designprincip: del position i de øjeblikke det hjælper, og kun der. Aldrig kontinuerlig tracking.

Hvem er tættest?

Når patienten åbner appen, sendes et enkelt lokations-ping til de andre telefoner. Svaret beregnes til afstand og minutter, og den nærmeste markeres på knappen. Et ping pr. åbning, intet gemmes.

Live først ved "jeg kommer"

Hjælperen deler position cirka hvert 7. sekund via en foreground service med location-type. Stopper automatisk ved afslutning eller efter to timer.

Ankomsttid

Serveren beregner køretid via OSRM med haversine som fallback og 15 sekunders cache. Kortet er osmdroid med OpenStreetMap-tiles, ingen Google Maps-nøgle.

Privatliv som designvalg, ikke som efterrationalisering. Det plejer at give point hos udviklere.
Sikkerhed og privatliv
Låst ned, ærligt

Selvsigneret certifikat uden domæne eller CA: appen stoler på præcis et certifikat, sammenlignet byte for byte i en custom TrustManager. Stærkere end CA-validering, ingen fornyelser.

Trusselsmodellen er dimensioneret til internet-støj, ikke målrettede angreb, og at indrømme det er det, der gør resten troværdigt.

0

tredjeparter med helbreds- eller lokationsdata. Alt ligger på familiens egen VPS.

1

indbygget familie-hemmelighed på 192 bits, krævet af alle kald og sockets, sammenlignet timing-safe.

E2E

krypterede kald med DTLS-SRTP, som serveren kun relayer i krypteret form.

35

automatiske flow-tests af serveren: alarmer, kvitteringer, køer, signaling og self-update.

For udviklere: exact pinning betyder at appen accepterer et certifikat i hele verden. MITM er ikke muligt, heller ikke på fjendtligt wifi.
Deployment
VPS'en er sit eget CI

Byggemiljøet havde hverken SSH-adgang eller adgang til Googles SDK-servere. Løsningen blev et mønster, der kan genbruges til ethvert privat app-projekt:

Ét script køres på VPS'enhele kodebasen ligger som base64-tarball i bunden af filen
Pakker sig selv udawk finder markøren, tail | base64 -d | tar xz udpakker
Henter værktøjskædenJDK 17, Android SDK og Gradle, kun første gang
Bygger og signerer APK'enidempotent: secrets, certifikat og keystore genbruges ved re-runs
Serverer og annoncererAPK på tokeniseret URL, versionCode pushes over WebSocket
Telefonerne opdaterer sig selvnotifikation, download over pinned TLS, PackageInstaller, et tryk
Den nørdede historie: VPS'en kompilerer APK'en og pusher opdateringer til telefonerne bagefter.
Hands-free
"Hey Google,
åbn Family Emergency"

Falder man og ikke kan nå telefonen, udløser stemmen alarmen. App Actions kræver Play Store, men launcher-aliases fungerer som stemmemål: activity-alias med sigende navne, tændt kun på patientens telefon via setComponentEnabledSetting. En Assistant Routine gør frasen så kort som "hjælp mig", og nedtællingen læses op, så hele nødflowet er hands-free.

Lille hack med stort udbytte. Assistant kan åbne alt, der ligner en app.
Projektet i tal
Lille kodebase, stort ansvar

Bevidst få bevægelige dele: jo mindre der kan fejle klokken tre om natten, jo bedre. En persistent WebSocket med ping hvert 25. sekund koster i praksis ingenting på batteriet.

5.301

linjer kode i alt: Kotlin-app, Node.js-relay og installer-scripts.

3

dependencies i appen: OkHttp, osmdroid og libwebrtc. Ingen AppCompat, ingen Firebase.

1

APK til alle roller, signeret på VPS'en, opdaterer sig selv over den pinnede forbindelse.

0 kr.

i drift pr. måned. Serveren deler VPS med andre projekter i sin egen mappe, bruger og port.

Tal-slide til at lande teknikdelen.
Næste skridt
Billigt at bygge videre

Relayet, rollerne, eskaleringsstigen og alarm-pipelinen findes allerede. Alt her er inkrementelt.

Smartwatch

Nødknappen på håndleddet, altid på, også i badet hvor telefonen ikke er med. Wear OS-companion der genbruger relayet og hemmeligheden, pulsdata som ekstra signal, og falddetektion via urets accelerometer der udløser stor alarm automatisk.

Omsorgsfunktioner

Medicin-påmindelser med kvittering til familien, dagligt "jeg er okay"-check-in der stille spørger familien hvis det udebliver, falddetektion med telefonens sensorer, og en ugentlig tryghedsrapport med alarmer, svartider og batteristatus.

En sætning pr. spor er nok. Detaljerne kan komme i spørgsmålene.
Tak
Tryghed man selv ejer

Spørgsmål? Eller skal vi prøve at trykke på knappen?

1 sek.

fra tryk til alarm på alle telefoner.

5 sek.

fortryds-vindue før den store alarm fyrer.

60 sek.

uden svar før telefonen selv ringer op.

4

telefoner beskytter et menneske.

Slut med tallene, og inviter til demoen. En telefon på lydløs, der pludselig larmer, er det folk husker.
1 / 18piletaster · N noter · F fuld skærm