2 puntos por GN⁺ 2023-11-14 | 1 comentarios | Compartir por WhatsApp
  • Cuando desapareció el contrato de Bluefox que proporcionaba datos de afluencia en los comedores, se creó un dispositivo para medir directamente las tendencias de ocupación del campus contando la cantidad de dispositivos visibles en los paquetes de publicidad BLE
  • En pruebas con una laptop, la cantidad de dispositivos BLE se movía rápidamente junto con la afluencia real en espacios pequeños, y en comedores grandes también coincidía bien con los cambios de tendencia durante los horarios de traslado antes y después de clases
  • Raspberry Pi Zero W resultó difícil de usar como dispositivo de despliegue por Linux Bluetooth, DBus, compilación cruzada y configuración de Wi-Fi headless, así que se cambió el rumbo hacia un ESP32 más simple
  • Las placas ESP32-WROOM económicas eran inestables por problemas de memoria cerca de los 250–400 dispositivos, pero Seeed Studio XIAO ESP32C3/S3 funcionó de forma estable durante largos periodos y soportó detectar hasta alrededor de 1000 dispositivos
  • La configuración final consiste en que el ESP32 escanea la cantidad de dispositivos BLE y la envía a Cloudflare Functions y D1, para visualizar y predecir con Grafana y NeuralProphet; aún quedan pendientes la calibración de precisión y la verificación de privacidad

Los datos desaparecidos de afluencia en comedores

  • En el primer año de universidad, el operador de comedores era Sodexo, y Sodexo tenía un contrato con Bluefox para usar sensores de ocupación que mostraban cuántas personas había dentro de los comedores
  • Según materiales obtenidos mediante una solicitud FOIA, los dispositivos de Bluefox funcionaban contando direcciones MAC de smartphones en paquetes de publicidad Bluetooth
  • Al conectar las llamadas de la API a Grafana, se podía ver la afluencia de los comedores en un gráfico en tiempo real, lo que servía para evitar las horas pico
  • Más tarde, el operador de comedores cambió a Aramark, y como Aramark no contrató un servicio de conteo de ocupación como Bluefox, los datos existentes desaparecieron

Usar beacons BLE como indicador indirecto de cantidad de personas

  • El punto central del proyecto era comprobar qué tan bien la cantidad de beacons Bluetooth podía sustituir a la cantidad real de personas y al tiempo de permanencia
    • Algunas personas llevan varios dispositivos, como audífonos o smartwatches
    • Algunas personas pueden no llevar dispositivos o pueden tener apagado el Bluetooth del teléfono
  • Para estimar el tiempo de permanencia, una variable era si podía usarse la rotación (churn) de direcciones MAC únicas y qué efecto tendría la aleatorización de direcciones MAC de varios fabricantes, como Android y Apple
  • Para enviar los datos a un servidor central, Wi-Fi era la opción más natural, pero no en todas las ubicaciones había Wi-Fi fácil de usar
  • LoRa también podía ser candidato según la distribución de los beacons, aunque el alcance real depende mucho de la ganancia de la antena y de la ubicación de instalación
  • Para el almacenamiento de datos, también se consideró si usar una base de datos de series de tiempo y, para predecir tendencias de largo plazo, si sería posible excluir eventos especiales como el fin de semana de homecoming o la semana de exámenes finales

Validación inicial con una laptop

  • El primer experimento fue un código simple que escaneaba durante x segundos con el adaptador Bluetooth de una laptop, repetía cada y segundos y guardaba los datos en una base de datos SQLite
  • Se recopilaron datos esperando con la laptop en varios lugares, como comedores, Chick-Fil-A y Starbucks
  • En Starbucks, que era un espacio pequeño y único, la cantidad de dispositivos era bastante precisa y, como mínimo, reflejaba rápidamente la tendencia de ocupación
    • Cuando entraba gente, el gráfico subía rápidamente
  • En espacios grandes como comedores no era posible contar directamente a todas las personas, y el alcance del adaptador Bluetooth tampoco era seguro, pero el aumento en el horario en que los estudiantes se movían a comer después de clases coincidía bien con el aumento de beacons detectados

Por qué quedó bloqueado el enfoque con Raspberry Pi Zero W

  • Lo primero que se pensó como dispositivo para despliegue a largo plazo fue una Raspberry Pi Zero W, pequeña, barata y con Wi-Fi y Bluetooth
  • Se intentó reescribir el código en Rust para manejar situaciones como reinicios, ausencia de red o pérdida del adaptador
  • Manejar Linux Bluetooth en un entorno headless resultó mucho más complejo de lo esperado
    • Los bindings de DBus requerían configuración relacionada con compilación cruzada
    • Ni siquiera Cross resolvió el problema
    • Después de varios flags de compilador, pérdida de trabajo en Makefile y configuración de un puente con QEMU, el binario se ejecutó en la Pi
  • Se implementó la conexión Wi-Fi, la instalación de librerías necesarias al inicio, el registro del ejecutable como servicio y la aplicación automática de actualizaciones, pero después del arranque real no funcionaba correctamente
  • Este enfoque implicaba cargar con todo el kernel de Linux y muchas piezas móviles, aunque las funciones necesarias eran solo Wi-Fi y Bluetooth confiables

Cambio a ESP32

  • Sobre el papel, ESP32 era un dispositivo con Wi-Fi, Bluetooth, bajo consumo, bajo precio y tamaño reducido
  • Se compró en Amazon una ESP32-WROOM-32 cualquiera con pantalla OLED
    • La intención era mostrar datos en tiempo real en la pantalla
  • Al considerar que el ecosistema de Rust para ESP32 todavía no era suficiente, el código de recolección de datos se reescribió en C++
  • La OLED se hizo funcionar con la configuración SSD1306Wire display(0x3c, 5, 4);
  • Se solicitó al equipo de TI del campus incluir la dirección MAC en la whitelist, y se escribió el backend de recolección de datos con Cloudflare Functions y la base de datos D1

Problemas de memoria revelados en el primer despliegue

  • Se instaló el dispositivo de recolección de datos en la biblioteca del campus y se confirmó desde la laptop que entraban datos
  • Luego apareció un resultado extraño que hacía parecer que todos se habían ido de la biblioteca, y la causa eran las bajas especificaciones de la placa ESP32 comprada al azar
  • El dispositivo crasheaba cerca de los 250 dispositivos
    • Al principio se sospechó que la cantidad de resultados se guardaba en un número de 1 byte y se bloqueaba cerca de 255
    • Al revisar con Serial.print, crasheaba aleatoriamente en rangos similares, como 249 o 265, así que no era un simple overflow de enteros
  • Durante el escaneo, al guardar todos los resultados hasta el final en una estructura de datos, se acumulaban muchos datos como intensidad de señal, servicios anunciados e ID de fabricante, y la pequeña RAM se llenaba
  • En realidad, lo único necesario era la cantidad de dispositivos únicos, así que la estructura que conservaba todos los resultados del escaneo era excesiva

Hash set propio y sus límites

  • Como solución, se escribió directamente una estructura de datos en C++ para crear un hash set pequeño
  • En cada callback se insertaba la dirección MAC en el hash set y luego se vaciaba la estructura de resultados integrada para liberar memoria
  • Este método tenía la desventaja de que la estructura de resultados integrada perdía los datos para comprobar duplicados, de modo que se disparaba un callback por cada paquete de publicidad BLE
    • En addToSet sí se hacía la comprobación de duplicados del hash set
    • Pero ocurrían cientos de callbacks duplicados, y asignar y liberar continuamente la estructura de resultados generaba churn en el heap
  • Aun así, se consideró mejor revisar con frecuencia un hashmap de hasta 1000 elementos o menos que quedar limitado a una capacidad de 250 personas

Elegir una placa ESP32 más estable

  • Durante las vacaciones de otoño se intentó una prueba larga de 5 días, pero volvió a crashear cerca de los 400 dispositivos
  • El problema aparecía después de unas 3 horas de uso, y aun agregando reinicios periódicos surgió un fenómeno en el que cada escaneo devolvía de inmediato solo 0 dispositivos
  • Se probaron varias placas
    • Seeed Studio XIAO ESP32S3/C3
    • WaveShare ESP32S3 Zero
    • ESP32-WROOM sin marca con OLED
    • Orange Pi Zero W
    • Raspberry Pi Zero W
  • La única placa que funcionó de forma estable durante largos periodos fue XIAO ESP32C3/S3, y ambas funcionaron a un nivel aceptable
  • La elección final fue XIAO ESP32C3
    • Gustó que estuviera basada en RISC-V
    • Era más barata
  • Al cambiar a una placa de mejor fabricante, aumentó la SRAM, y los crashes se redujeron incluso manteniendo la estructura de resultados predeterminada en lugar del hashmap propio
  • No se observaron señales de lentitud hasta detectar alrededor de 1000 dispositivos, y probablemente también se redujo el churn del heap y de callbacks

Patrones de movimiento vistos desde la ventana del dormitorio

  • Después de encontrar un dispositivo estable, se trasladó a la ventana de la habitación del dormitorio para facilitar las iteraciones de despliegue
  • Al observar los datos de un día, aparecían picos en los horarios de cambio de clases
  • Aunque el dispositivo estaba en el dormitorio, no medía principalmente solo a residentes del dormitorio
    • Si midiera solo a residentes, se esperaría un máximo muy temprano por la mañana y una disminución durante el día
    • Por su ubicación apuntando hacia afuera de la ventana, detectaba principalmente a estudiantes que se movían hacia dos edificios académicos cercanos
  • El pico cerca de las 7:50 a. m. coincidía con el momento justo antes de las clases de las 8 en Ewell Hall y Washington Hall
  • Los picos de 8:50, 9:50 y 10:50 coincidían respectivamente con los horarios de traslado hacia las clases de las 9, 10 y 11
  • El dispositivo parecía adecuado para el seguimiento de tendencias de movimiento de estudiantes alrededor, y el alcance de la antena parecía llegar hasta Washington Hall, a unos 160 ft, y Ewell, a unos 100 ft
  • La altura del tercer piso también parecía ayudar al alcance de detección

Predicción y tareas pendientes de validación

  • Los datos recolectados tenían muchas tendencias por hora, día y semana, por lo que encajaban bien como objetivo de predicción de series de tiempo con herramientas como NeuralProphet
  • Después de agregar la función de predicción, actualmente predice bien las tendencias diarias
  • Se consideró que las tendencias de largo plazo por semana, mes y temporada convergerán cuando se acumulen suficientes datos
  • Todavía quedan muchas preguntas sin resolver
    • Qué tan bien la cantidad de beacons BLE sustituye a la población real
    • Si puede crearse un coeficiente de corrección en el que x beacons equivalgan aproximadamente a 0.7x personas, por la gente que lleva varios dispositivos
    • Si en los edificios de informática el número de dispositivos será alto y la proporción de beacons frente a personas será mayor, o si será menor porque mucha gente apaga Bluetooth
    • Si los edificios de personal tendrán una proporción menor porque el personal lleva menos dispositivos que los estudiantes
    • Si los comedores tendrán una proporción menor porque hay menos casos de uso conjunto de laptops, iPad, etc., que en las aulas
  • También quedan métodos para mejorar la precisión
    • Configurar un mínimo de RSSI que excluya señales débiles
    • Filtrar para contar solo ID de fabricante de Apple y fabricantes comunes de Android
    • El problema de que Apple Watch, AirPods, MacBook, etc., sigan sumándose al conteo
    • Si hace falta agregar ruido adicional en el enfoque actual, que solo rastrea la cantidad de beacons y no las direcciones MAC reales
    • Si es realista identificar a un solo usuario únicamente por la cantidad de dispositivos
    • Elegir la duración del escaneo: si es demasiado corta no se encuentran cientos de dispositivos, y si es demasiado larga se cuentan dispositivos que ya se fueron
    • Una duración de escaneo dinámica que termine el escaneo si no hay cambios durante cierto tiempo

Posibles formas de despliegue

  • Hay planes de validar los datos en lugares donde sea fácil obtener la población real
    • Un gimnasio con registros de entrada
    • Un comedor o un lugar como Starbucks con accesos limitados
  • Se están discutiendo con profesores posibles usos en comités universitarios o investigaciones académicas
  • También se considera venderlo a tiendas físicas para medir tendencias de ocupación
  • La configuración de una unidad de despliegue está relativamente empaquetada
    • Configurar Wi-Fi en la configuración
    • Si hay portal, la red incluye la dirección MAC en la whitelist
    • Para Wi-Fi abierto o con contraseña, se conecta al arrancar
    • Cambiar machine ID y site ID en la configuración
    • Conectar el dispositivo a un tomacorriente en una ubicación central o conveniente
    • Configurar en el backend un dashboard de Grafana que lea cada dispositivo
    • Configurar un dashboard de Grafana que lea la tendencia prevista como un gráfico separado

1 comentarios

 
GN⁺ 2023-11-14
Comentarios de Hacker News
  • Con esta tecnología creé un negocio real (occuspace.io) y ya abordé la mayoría de las preguntas planteadas.
    La cantidad de beacons BLE tiene una correlación muy alta con la cantidad de personas presentes, pero el coeficiente de correlación varía mucho entre comedores, aulas y pisos de bibliotecas, así que conviene usar también características más complejas.
    Estimar el tiempo de permanencia a partir del tiempo durante el cual se ve un beacon BLE me parece impreciso, porque según el fabricante la MAC de Bluetooth se aleatoriza cada 8 a 20 minutos.
    La idea de contar solo dispositivos cercanos excluyendo RSSI débiles es buena, pero el umbral cambia según el tipo de espacio y la ubicación de instalación del sensor.

    • Me da curiosidad saber con qué frecuencia se necesita realmente un conteo exacto.
      Si el requisito original era “evitar la congestión del comedor”, quizá baste con saber a grandes rasgos si está alto o bajo.
      En un negocio, me pregunto si los clientes esperan alta precisión, y si eso aplica a todos o solo a algunos.
      Aunque las direcciones MAC se aleatoricen, quizá haya alguna forma de identificar el tipo de dispositivo para contar solo teléfonos y excluir audífonos, etc.
    • Me pregunto si este tipo de seguimiento de ocupación funciona con precisión también al aire libre.
      Parece que sería difícil porque la señal se propaga más lejos, y estoy trabajando en una startup que necesita rastrear la ocupación de canchas de tenis.
      Tal vez se podrían instalar dispositivos Bluetooth en las esquinas de un espacio exterior y usar la intensidad de esa señal como umbral.
    • Meraki también ofrece este tipo de información como parte de sus funciones de administración de red en la nube.
      Si se rastrean Wi‑Fi, MAC de Wi‑Fi e información de video y se conectan entre sí, quizá se podrían hacer más cosas.
      Conviene tenerlo presente como uno de los posibles competidores.
    • Que el coeficiente de correlación varíe según el espacio parece una parte difícil de convertir en producto.
      En un edificio universitario de STEM podría haber más de 3 dispositivos Bluetooth por persona, mientras que en otros lugares podría haber menos de 1.
    • ¿También sería posible la detección de caídas para personas mayores?
  • Excelente artículo.
    Dijo que, después de probar Seeed Studio XIAO ESP32S3/C3, WaveShare ESP32S3 Zero, Unbranded ESP32-WROOM with OLED, Orange Pi Zero W y Raspberry Pi Zero W, los únicos que funcionaron de forma estable a largo plazo, ahora alrededor de un mes, fueron los XIAO ESP32C3/S3; sospecho que podría ser un problema de alimentación.
    La familia ESP32 puede ser sensible a las variaciones de voltaje al transmitir, así que recomiendo enfáticamente agregar un capacitor grande al riel de alimentación.
    Tanto RPi como ESP pueden ser quisquillosos según el adaptador de corriente, el cable y la longitud del cable, y las tarjetas SD de la RPi tienden a dañarse con cortes de energía repentinos.
    Aun así, todos deberían poder aguantar más de un mes, y mis Pi y ESP han funcionado durante meses.
    Me da curiosidad ver qué pasaría si se les pusiera un capacitor más grande a otros ESP32 o Pi.

    • No creo que sea un problema de estabilidad de la plataforma ESP32 en sí, sino más probablemente de mi forma de usarla.
      Como el ESP32 se usa muchísimo, probablemente la causa fue que el ESP32 de fabricante desconocido que compré al principio no aguantaba mucho.
      Al cambiar a un producto de un fabricante decente, el problema se resolvió y el ESP32 funciona bien.
      La Raspberry Pi en realidad casi no funcionó, porque para algo que solo requería escaneo Bluetooth y llamadas HTTP terminé haciéndolo demasiado complejo e intentando administrar demasiadas cosas.
      Como le suministré directamente 5V 1A desde el enchufe por USB-C, no creo que haya sido un problema de alimentación, pero el Xiao ESP32-S3 también tuvo problemas intermitentes y, si no recuerdo mal, el núcleo XTensa consume más energía que el ESP32-C3 basado en RISC-V, así que vale la pena revisarlo.
    • En Home Automation, varios ESP32 se encargan de tareas de infraestructura clave y llevan alrededor de un año funcionando sin problemas.
      A veces los actualizo con ESPHome, pero no he tenido inconvenientes importantes.
      Algunos hacen varias tareas a la vez; por ejemplo, uno es un proxy Bluetooth en mi oficina en casa y también controla una tira de luces instalada a lo largo del panel de pared Skadis.
      Uso productos de marca aleatoria comprados en Amazon a una empresa llamada “AZDelivery”, y no les hice nada especial.
      Los pongo en carcasas impresas en 3D y normalmente los conecto a adaptadores de al menos 5V/1A con cables cortos, de menos de 30 cm.
    • En RPi, me gusta mucho usar Alpine para reducir las escrituras en la tarjeta SD.
      Solo guarda en disco cuando ejecuto lbu commit -d; por defecto arranca en una especie de tempfs.
  • Como es un proyecto hecho por un estudiante universitario dentro de la universidad e incluye cierto nivel de seguimiento de personas, si se trata de investigación es una buena oportunidad para preguntarle a un profesor qué procedimientos de investigación con seres humanos serían necesarios.
    Puede ser más fácil preguntarle a un profesor que al IRB de la universidad.
    El IRB podría negarse a conversar diciendo que no está bajo su jurisdicción, o ponerse a la defensiva porque no se les habló antes.
    También podrían aplicar las políticas de privacidad y seguridad de TI del campus.
    Sitios web comunes, apps y dispositivos IoT invaden mucho más a las personas, pero a veces las universidades tienen como objetivo ser mejores que el mundo exterior.

    • Justamente estoy hablando de eso con un profesor.
      No lo puse en el texto porque quizá no salga bien.
    • Me pregunto qué reglas aplican a cosas como los beacons de rastreo.
      Los beacons se transmiten públicamente, y es muy probable que se estén recolectando sin consentimiento en casi todos los lugares a los que vamos.
      Como mi casa está en una intersección y a menudo se juntan muchos dispositivos Bluetooth alrededor, alguna vez quise instalar un rastreador BLE solo por diversión para ver qué podía recolectar y qué podía inferir de los datos.
      Por ejemplo, estoy convencido de que hay una correlación entre el empeoramiento de la calidad del aire dentro de mi casa y la llegada de dispositivos Bluetooth a la zona.
    • Por desgracia, la gente le miente con frecuencia al IRB.
  • Me dio risa la frase “en un nerd snipe así, es críticamente importante no perder impulso”.
    Mi cerebro nerd también me ha convencido varias veces de gastar dinero con exactamente esa lógica.

    • Es gracioso, pero también es cierto.
      Definitivamente hay épocas en las que tengo más ganas de trabajar en proyectos; en especial durante el invierno hago más proyectos de electrónica y también juego más.
      Mi “temporada” de juegos también volvió a empezar la semana pasada.
      Pasar drásticamente de “¿qué quiero hacer hoy?” a “¿qué tengo ganas y tiempo de hacer esta temporada?” se debe en gran parte a hacerme mayor y tener hijos, pero los intervalos en los que tengo voluntad y tiempo para este tipo de proyectos son tan largos que, si pierdo el impulso, quizá vuelva un año después o quizá nunca vuelva.
      Tengo un proyecto de electrónica que empecé hace por lo menos 10 años; gasté bastante dinero en él y sigo insistiendo en que algún día lo terminaré, así que ya se volvió infame en mi familia.
  • Mi despertador está compuesto por un ESP32, una matriz de LED bastante grande, un buzzer y un sensor PIR.
    No muestra la hora; avisa con el buzzer y parpadeos, ilumina la habitación lentamente o, por la noche, después de que se apagan todas las luces y pasa cierto tiempo, la oscurece poco a poco.
    Una ventaja adicional que descubrí después es que, aunque el AP no esté entre mi ESP y yo, reflejo suficiente RF como para que, solo con los logs de RSSI, pueda saber no solo cuánto tiempo estuve en la cama, sino incluso cuándo cambié de postura durante la noche.
    https://imgur.com/a/VixOlu5
    A pesar de la advertencia, no hay contenido explícito.
    El verde del centro es RSSI, el amarillo de abajo es el sensor PIR, y la parte superior mezcla datos de la Mi Band 3 con anotaciones del tiempo que estuve en la cama.
    También es cierto que leí noticias durante bastante tiempo antes de dormirme y antes de levantarme.

    • Me da curiosidad cómo era el stack de recolección de datos y visualización.
    • También me gustaría ver fotos de la configuración del despertador que mencionaste.
  • Me da curiosidad cómo convierten un proyecto con ESP32 en algo ordenado como producto.
    No hablo de producción en masa, sino de querer convertirlo en un dispositivo independiente en vez de una placa con un montón de cables saliendo.
    Muchas páginas solo muestran la placa desnuda, pero en la vida real hay que empaquetarla.
    Para alguien de software como yo, probablemente preferiría pagar un poco más por algo presentado de forma prolija antes que andar manoseando todo por mi cuenta.

    • Si eres bueno con la carpintería, puedes usar madera.
      Si tienes una impresora 3D, puedes hacer una impresión 3D.
      Si vas por acrílico, con un cortador láser recortas la forma y haces unos cuantos agujeros, y ya tienes una caja.
      Si no tienes nada y solo quieres una caja mínima, puedes usar latas de Altoids, que cuestan unos 25 dólares por 12; vienen con mentas inútiles, así que las tiras y metes el proyecto.
      Si quieres algo un poco mejor que una lata de Altoids, puedes comprar un Hammond Enclosure.
      (https://www.hammfg.com/electronics/small-case)
      Yo probablemente lo envolvería con cinta aislante y luego con algo como cinta duct tape, y después lo pintaría con marcador permanente.
    • Hay muchas empresas que fabrican gabinetes para electrónica, incluso algunos impermeables.
      Normalmente tienen algunas bridas preperforadas donde puedes fijar la placa con tornillos, y los agujeros externos para entradas y salidas los haces tú según lo necesites.
      Algunos fabricantes son los siguientes, y si ya vas a comprar una placa de desarrollo u otros componentes, normalmente también puedes encontrarlos en Adafruit o DigiKey para ahorrar en envío.
      https://www.hammfg.com/
      https://www.budind.com/
      http://takachi-enclosure.com/
      https://www.adafruit.com/product/903
    • Hay muchas opciones.
      La mayoría de los proyectos que ves no se convierten en productos.
      Son proyectos únicos de hackers, y aunque sería bueno que a otros les resulten útiles, ese no es el objetivo, así que no necesitan empaquetado y a veces simplemente los meten en una caja.
      Si quieres algo que se vea mejor, necesitas encargarle el diseño de la carcasa a alguien.
      Ese alguien puedes ser tú mismo.
      El ESP32 está diseñado para ser fácil de integrar en productos propios, así que el flujo sería diseñar la placa de circuito y la carcasa para que encajen entre sí, comprar chips ESP32 en volumen y montarlos en la placa.
      Las placas que compras para prototipos oficialmente son solo placas de referencia, y no se espera que sean el producto final que se despacha, aunque en la práctica es común enviar la placa tal cual.
      Es porque son pequeñas y baratas, y alguien ya hizo el diseño difícil de la placa.
    • Haz que un “diseñador de producto” diseñe la carcasa.
      Si el producto es lo bastante estándar, quizá puedas saltarte este paso.
      Después contactas a fabricantes locales y a fabricantes de mercados más grandes para recibir muestras y comprobar que funcionen bien.
      Si te gustan, haces un pedido de un lote pequeño.
      Conviene diseñar un proceso de aseguramiento de calidad o buscar a un experto que te ayude a hacerlo para que el fabricante no te mande 20% de productos defectuosos.
      Lo pones en tiendas físicas o haces un sitio web y lo vendes en portales como Amazon.
      Hablas con los clientes, escuchas el feedback y vas mejorando un poco cada etapa.
      Suena abrumador, pero trabajando en una pequeña startup de smart home aprendí que en Shenzhen hay toda una industria lista para ayudar a los fundadores a hacer realidad el producto que imaginan, y que puedes contratar gente que te ayude en cada etapa.
      En nuestra experiencia, los servicios de China fueron mucho mejores, más baratos y más rápidos que las propuestas europeas.
    • Fijo la placa a la tapa de un contenedor de comida para llevar con separadores de nylon.
      El resto del contenedor de comida para llevar se convierte en el gabinete.
      Hago agujeros en el contenedor para que entren y salgan los cables.
      Cuando quiero que se vea un poco más elegante, uso un contenedor Tupperware.
  • No terminé de seguir del todo el problema de mantener los datos en memoria, y parece que ahora ya está resuelto, pero para estimar la cantidad de IDs únicos de beacons, probablemente se podría usar un algoritmo de estimación de cardinalidad y hacerlo con espacio constante.
    https://en.wikipedia.org/wiki/Count-distinct_problem

    • Buen punto.
      Hace poco intenté llevarlo a un partido de fútbol para hacer una prueba de estrés con la mayor multitud a la que podía acceder rápidamente.
      Si puede escanear miles sin problema, pensaría que es bastante robusto.
      Aun así, investigar estructuras de datos de estimación de tamaño fijo suena realmente interesante, y definitivamente voy a mirarlo.
      Una de las partes que más me gustan de este proyecto es que puedo profundizar en conceptos de ciencias de la computación más interesantes sin la presión de tener que usar la solución más fácil.
      No estoy desarrollando una solución para entregar ASAP; estoy rascándome una comezón.
  • La parte que decía “manejar Bluetooth en Linux de forma headless es extremadamente doloroso. Los bindings de DBus requerían magia de cross-compilation y ni Cross pudo resolverlo” coincidió con mi experiencia.
    Como yo estaba haciendo otra cosa, al final decidí poner los dos dispositivos en la misma red Wi-Fi y escanear pi.local.
    Eso sí, me gustaría saber cómo se comportan otros crates que, si falta una librería, no rechazan el build sino que crashean en tiempo de ejecución.

  • Deberían haber dejado claro que esto es para BLE.
    Al principio pensé que estaba basado en ritmo cardiaco, calor, acceso o algo más físico.
    Además, la sensibilidad de recepción del ESP32 es bastante mala, alrededor de -94 dBm, y la mayoría de los dispositivos llegan a -100, -102 e incluso -104 dBm.
    Esa diferencia es bastante grande.

  • ESPresence es un proyecto interesante y también funciona en ESP32-C3.
    Está diseñado más bien para determinar en qué habitación estás.

    1. https://espresense.com/