Lubeca Tech · WorkDone+Smiley · Dev Deck 2026
Location,
Integrity &
Presence
Cómo convertir la tablet Smiley en un endpoint que sabe dónde está, detecta si la movieron y observa su entorno radio. Con Kotlin de ejemplo.
Kotlin · Android 15
Galaxy Tab A11 LTE
Privacy by design
01 · Concepto
No hace falta saber dónde está. Hace falta saber si sigue donde lo instalaron.
El Smiley es un equipo fijo, instalado por un técnico en un lugar conocido. Eso cambia indoor positioning por detección de cambio contra un baseline propio.
AEP / T-A / Arribos / Cinta 4 — confidence 94%
01 · Concepto
Tres ejes, un solo endpoint
01 · POSITION
¿Sigo donde debo?
Zona probable por sensor fusion, comparada contra el baseline de instalación.
GNSS
Wi-Fi BSSID / RSSI
BLE RSSI
Cell
02 · INTEGRITY
¿Me movieron o me golpearon?
Manipulación, golpe, inclinación, corte de energía y silencio.
Movement / Impact
Tilt
Power
Heartbeat
03 · PRESENCE
¿Hay alguien cerca?
Cliente cercano por BLE, sin identificar a nadie. Y el Smiley anunciándose.
Cliente cercano por RSSI
Contexto del voto
Advertising opt-in
Regla base: MOVIMIENTO ≠ REUBICACIÓN. Limpiar, inclinar o tocar el equipo no dispara una alarma de traslado.
02 · Plataforma
Qué trae la Galaxy Tab A11 LTE
Ubicación
GNSS
GPS, GLONASS, BeiDou, Galileo y QZSS. Sólo en el modelo LTE.
Radio local
Wi-Fi 5
a/b/g/n/ac en 2.4 y 5 GHz. Ve los APs sin conectarse.
Radio local
Bluetooth 5.3
LE scan disponible. El advertiser se verifica en runtime.
Uplink
LTE
Siempre conectada: la inferencia puede vivir en el backend.
Sensor
Acelerómetro
Movimiento, golpe y vector de gravedad para tilt.
Sensor
Brújula
Orientación completa y firma magnética del soporte.
No está
Sin giroscopio
No hace falta: el equipo está fijo y alcanza con gravedad.
No está
Sin NFC
La tablet no lee tags. El NFC queda del lado del operario.
Helio G99 · Android 15 con hasta 7 upgrades mayores · 5100 mAh. A confirmar con el probe: sensor de luz, BLE advertiser, scan y advertise a la vez.
02 · Plataforma
Tecnologías de ubicación: qué sirve para un Smiley
| Tecnología | Indoor | Infra nueva | Fit | Comentario |
|---|---|---|---|---|
| Wi-Fi fingerprint | Alto, por zona | No | 5 / 5 | BSSID + RSSI, sin conectarse a la red |
| BLE beacons propios | Alto, por zona | Ligera | 5 / 5 | Sólo donde la radio ambiental sea ambigua |
| BLE ambiental | Medio a alto | No | 4 / 5 | Complementa Wi-Fi; emisores persistentes |
| GNSS | Bajo a medio | No | 3 / 5 | Muy bueno outdoor; indoor puede no haber fix |
| Cell fingerprint | Bajo | No | 3 / 5 | Sanity check de macro-zona |
| Wi-Fi RTT | 1 a 2 m | AP 802.11mc | 3 / 5 | Sólo si tablet y AP lo soportan; a verificar |
| UWB | Centimétrico | Anclas + HW | 2 / 5 | No es la vía natural para la Tab A11 |
| RFID / NFC | Puntual | Lectores | 1 / 5 | Checkpoint; la A11 no trae NFC |
Las dos primeras filas son el camino recomendado: fingerprint ambiental primero, beacons propios sólo si una zona no se distingue.
02 · Plataforma
La posición es una inferencia con confidence
GNSS
lat/lon · accuracy · age
Wi-Fi
top BSSID · RSSI
BLE
emisores fijos · RSSI
Cell
serving · vecinas
BACKEND
Location engine
normalización
match contra baseline
freshness
estabilidad
confidence
Cinta 4
94%
Cinta 5
18%
Partidas
6%
Periodic
Fingerprint y fix cada hora como baseline.
Triggered
El movimiento dispara un burst de GNSS, Wi-Fi y BLE.
Event-driven
Alerta sólo si cambia la evidencia. El heartbeat va aparte.
02 · Plataforma
La tablet detecta, el backend concluye
TABLET · FOREGROUND SERVICE
SensorManager
acelerómetro · brújula
FusedLocation
fix · accuracy · age
WifiManager
BSSID · RSSI
BluetoothLe
scanner · advertiser
Telephony
CellInfo
Local event engine
debounce
clasifica impact, movement y tilt
dispara el burst
Room queue
offline
seq IDs
retry
4G
BACKEND
Fusion
Location Profiles
similarity y confidence
secuencias
alertas
dead-man's switch
Crudo al backend. Thresholds y algoritmos cambian sin tocar el APK.
Todo con seq. Los huecos y duplicados se ven del otro lado.
Offline primero. Nada se pierde si se cae el 4G.
03 · Código en la tablet
Primero, el capability probe
Nada se asume
Giroscopio, RTT y advertiser se le preguntan al hardware real.
Viaja al backend
El resultado sale con el primer heartbeat y queda como ficha del equipo.
Primera entrega
Una pantalla de diagnóstico, antes que cualquier lógica de inferencia.
03 · Código en la tablet
Enrollment: el baseline de cada equipo
Estadísticos, no una lectura
Mediana de RSSI y frecuencia de aparición por BSSID.
El throttle manda
Android permite 4 scans cada 2 minutos. Ocho muestras llevan 4 minutos.
Gravedad incluida
El vector del equipo ya amurado es la referencia para tilt.
03 · Código en la tablet
Wi-Fi fingerprint sin conectarse a la red
Sin asociarse
El scan devuelve BSSID y RSSI de todo lo visible, aunque la tablet use 4G.
4 scans cada 2 min
En foreground alcanza para el baseline horario y el burst por movimiento.
Location encendida
Sin el permiso de ubicación y el servicio activo, la lista viene vacía.
03 · Código en la tablet
¿Sigo donde me instalaron?
Mismo lugar
0.92
Cayó un AP
0.58
Otro lugar
0.12
Valores de ejemplo. El umbral real sale de dejar una tablet quieta 72 horas y ver cuánto varía sola.
Sólo APs estables
Los que aparecen en menos del 80% de las muestras no cuentan.
03 · Código en la tablet
Movimiento, golpe y tilt con un acelerómetro
Gravedad por low-pass
Al restarla queda la aceleración lineal. No hace falta giroscopio.
Tilt contra el enrollment
Equipo amurado, vector constante. Un desvío sostenido es la mejor señal de retiro.
Thresholds remotos
No existe "2 g = golpe". Se calibran sobre el gabinete real y llegan del backend.
03 · Código en la tablet
Golpes a la pantalla: lo que el acelerómetro no ve
01
Detecta, no mide
Un golpe en vidrio dura milisegundos. Con 200 Hz de muestreo y un rango de pocos g, el pico llega recortado. Se sabe que hubo golpe, no cuánto.
02
Votar también es golpear
Un dedo apurado en la carita roja mueve el acelerómetro. Sin cruzarlo con el touch, cada voto enojado es un falso golpe.
03
El touch dice con qué pegaron
Área de contacto grande: palma o puño. Impacto frontal sin touch: objeto duro. Impacto lateral: fue al gabinete.
04
El daño se ve después
Toques fantasma, una zona que deja de recibir votos, o gente cerca por BLE y cero votos. Así avisa una pantalla rota.
Al probe: sensor.maximumRange, sensor.minDelay y si touchMajor da valores útiles en la A11.
03 · Código en la tablet
Cruzar el acelerómetro con el touch
Un solo reloj
El touch trae uptimeMillis. El impacto se sella con el mismo reloj al recibirlo.
Eje Z = frontal
Si pegan en el vidrio, domina el impulso perpendicular a la pantalla.
Votos bajo sospecha
Tras PALM o FRONT_OBJECT, los votos de los segundos siguientes van marcados.
03 · Código en la tablet
Del evento al sensor burst
Una secuencia de retiro
14:31:02
IMPACT pico corto
14:31:05
MOVEMENT sostenido
14:31:06
BURST GNSS, Wi-Fi, BLE
14:31:18
similarity 0.21 sale del baseline
14:31:44
GNSS fix mejora la accuracy
14:32:10
REMOVAL lo concluye el backend
03 · Código en la tablet
Todo evento sobrevive offline
seq monotónico
El backend detecta huecos y descarta duplicados.
ack por rango
El POST devuelve el último seq persistido y la tablet marca hasta ahí.
Crudo primero
Mientras se calibra, el payload lleva las muestras crudas. El volumen es chico.
04 · Presencia BLE
Saber si hay un cliente cerca
Tasa de respuesta
Votos sobre presencias cercanas. Pasa de contar votos a saber qué proporción de la gente vota.
Attract mode
La pantalla se despierta o cambia el mensaje cuando alguien se acerca.
Contexto del voto
Cuántos emisores había y qué tan cerca, en la ventana de cada voto.
Salud del equipo
Gente cerca y cero votos durante horas: pantalla rota, apagada o tapada.
Es una muestra, no un censo
No todos los teléfonos anuncian por BLE. Sirve la tendencia, no el número exacto.
El RSSI es aproximado
Bolsillo, cuerpo y mano lo mueven varios dB. "Cerca" se calibra contra conteo manual.
La dirección rota
Alcanza para ventanas de segundos. No sirve para reconocer a alguien mañana, y está bien.
04 · Presencia BLE
Monitor de proximidad
-55 dBm para empezar
Ronda el metro. Se ajusta por gabinete y viaja como config remota.
Pantalla prendida
Android pausa los scans sin filtro con la pantalla apagada. En kiosco no pasa.
Reiniciar el scan
Uno muy largo se degrada a oportunista. Reiniciarlo cada 20 minutos y validarlo en el probe.
04 · Presencia BLE
Cliente cercano y contexto del voto
Sale sólo el agregado
seen, near y strongest. Ni direcciones ni un hash por voto.
Tasa de respuesta
Cada minuto sale un PRESENCE con el pico de near. El backend divide votos por presencias.
Votos repetidos
Se compara en RAM contra el voto anterior y sale un booleano. La dirección no se guarda.
04 · Presencia BLE · Experimental
El Smiley como beacon silencioso
ID rotativo
HMAC de la clave del equipo y la ventana de 15 minutos, truncado a 6 bytes.
Uso más cercano
La app WorkDone lo escucha y prueba que el operario estuvo ahí, junto al NFC.
Apagable por sitio
Es config remota. Nunca intenta provocar pop-ups en teléfonos ajenos.
05 · Backend
El silencio también es un evento
Corte de energía
La señal de retiro más barata. Sale al instante, sin esperar el batch.
Dead-man's switch
Quien se lleva el equipo lo apaga. Un equipo apagado no avisa nada.
Heartbeat cada 5 min
Tres perdidos seguidos y el backend levanta DEVICE_SILENT.
05 · Backend
Un evento compacto, trazable y explicable
Los manda la tablet
POSITION
MOVEMENT
IMPACT
TILT
POWER
PRESENCE
VOTE
HEARTBEAT
Los concluye el backend
RELOCATION
REMOVAL
DEVICE_SILENT
SCREEN_SUSPECT
Los sensores reportan hechos. Las conclusiones no viajan desde la tablet.
05 · Backend
Ningún sensor decide solo
impacto solo
IMPACT
movimiento, misma radio
MANIPULATED
movimiento + cambio de radio
RELOCATION
lo anterior + GNSS outdoor
REMOVAL
sin heartbeat
DEVICE_SILENT
0.35 y 15 minutos son ejemplos. Salen de los experimentos.
06 · Plan
Permisos y límites de Android
| Permiso | Para qué |
|---|---|
| ACCESS_FINE_LOCATION | GNSS, resultados del Wi-Fi scan, CellInfo |
| CHANGE_WIFI_STATE | Pedir un scan con startScan() |
| BLUETOOTH_SCAN | Cliente cercano y fingerprint BLE |
| BLUETOOTH_ADVERTISE | El Smiley como beacon |
| FOREGROUND_SERVICE_LOCATION | Servicio permanente en Android 14+ |
| RECEIVE_BOOT_COMPLETED | Arrancar solo después de un reinicio |
4 scans cada 2 min
Throttle de Wi-Fi en foreground. En background es 1 cada 30 minutos entre todas las apps.
Kiosco = foreground
Pantalla prendida y alimentación fija esquivan casi todas las restricciones de background.
Device Owner
Lock task y permisos por policy. Ubicación tiene reglas propias desde Android 12: validarlo en el probe.
06 · Plan · Privacy by design
WorkDone observa el ambiente y la integridad del punto de feedback. No identifica ni sigue personas.
Sí
Conteos agregados, proximidad aproximada, IDs rotativos con TTL corto, comparaciones en RAM.
No
MAC como identidad, historial entre sitios, direcciones en disco o en el backend, pop-ups de proximidad.
06 · Plan
Cuatro experimentos antes de fijar thresholds
00 · 72 horas
Estabilidad
Una A11 quieta. ¿Cuánto varía sola la similarity entre día y noche, con hotspots y APs que rotan?
Define el umbral de similarity.
01 · 6 a 10 zonas
Separabilidad
Mover una A11 por zonas reales con Wi-Fi, BLE, GNSS y CellInfo. ¿Se distinguen de forma repetible?
Dice si hacen falta beacons.
02 · Gabinete real
Impacto
Limpieza, voto fuerte, palma, objeto duro, levantamiento, traslado. Probar un imán en el soporte.
Calibra golpe, tilt y touch.
03 · BLE
Presencia
Conteo manual contra near. Después: advertiser, scan y advertise a la vez, consumo.
Calibra "cerca" en dBm.
Regla: ningún threshold queda fijo sin 10 a 20 minutos de telemetría cruda por caso.
06 · Plan
Roadmap: valor antes que complejidad
V1
Baseline
Probe y diagnóstico
Enrollment
Position, movement, impact, tilt
Power y heartbeat
V1.1
BLE pasivo
Cliente cercano
Tasa de respuesta
Contexto del voto
Fingerprint ambiental
V1.2
Secuencias
Relocation
Removal
Golpe cruzado con touch
Pantalla sospechosa
V2
Radio map
Crowd learning
Zona de destino
Beacons propios donde haga falta
EXP
Beacon
BLE advertising
ID rotativo
Presencia del operario
Cambios respecto del doc original: enrollment y tilt pasan a V1, se suman power, heartbeat y el cruce con touch, y el contexto del voto queda en agregados sin hash.
06 · Plan
Primera entrega: sprint 0
Módulos
SmileyCapabilities
SmileyDiagnostics
SensorTelemetry
WifiFingerprint
BleFingerprint
LocationSnapshot
MovementEvent
ImpactEvent
Orden
1
Probe y pantalla de diagnóstico en la A11 real.
2
Telemetría cruda subiendo por 4G con cola offline.
3
Experimento de estabilidad corriendo 72 horas.
4
Recién ahí, thresholds e inferencia.
Sensor fusion + confidence + event semantics + privacy boundaries.
Referencias
Fuentes
GNSS, Wi-Fi, Bluetooth 5.3 y sensores.
Chipset, upgrades de Android, sin NFC.
Permisos, restricciones y throttling.
Android · Bluetooth permissions
BLUETOOTH_SCAN y BLUETOOTH_ADVERTISE.
Android · BluetoothLeAdvertiser
API de advertising y soporte por plataforma.
Google · FusedLocationProviderClient
Ubicación actual, accuracy y freshness.
Ranging de 1 a 2 m con infraestructura compatible.
Direcciones privadas y resolvibles.
Basado en el documento "WorkDone+Smiley — SOTA Location, Integrity & Presence Intelligence". Los samples de código son puntos de partida sin probar en hardware.