2 pontos por GN⁺ 2023-11-14 | 1 comentários | Compartilhar no WhatsApp
  • Quando o contrato com a Bluefox, que fornecia dados de lotação do restaurante universitário, acabou, foi criado um dispositivo para medir diretamente a tendência de ocupação no campus contando os aparelhos visíveis em pacotes de anúncio BLE
  • Nos testes com notebook, em espaços pequenos, a quantidade de dispositivos BLE acompanhou rapidamente a lotação real, e em restaurantes maiores também correspondeu bem às mudanças de tendência nos horários de deslocamento antes e depois das aulas
  • O Raspberry Pi Zero W acabou se mostrando difícil de usar como dispositivo de implantação por causa de Bluetooth no Linux, DBus, compilação cruzada e configuração de Wi-Fi headless, então a direção mudou para um ESP32 mais simples
  • Placas ESP32-WROOM baratas ficaram instáveis por problemas de memória perto de 250 a 400 dispositivos, mas as Seeed Studio XIAO ESP32C3/S3 funcionaram de forma estável por longos períodos e aguentaram detectar até cerca de 1000 dispositivos
  • A configuração final faz o ESP32 escanear a quantidade de dispositivos BLE e enviar os dados para Cloudflare Functions e D1, com visualização e previsão em Grafana e NeuralProphet, embora ainda faltem calibração de precisão e validação de privacidade

Os dados de lotação do restaurante universitário que desapareceram

  • No primeiro ano da faculdade, a operadora do restaurante universitário era a Sodexo, que tinha contrato com a Bluefox e usava sensores de ocupação para mostrar quantas pessoas havia no restaurante
  • Segundo materiais obtidos por meio de um pedido via FOIA, os dispositivos da Bluefox funcionavam contando os endereços MAC de smartphones em pacotes de anúncio Bluetooth
  • Ao conectar as chamadas de API ao Grafana, era possível ver a lotação do restaurante em gráficos em tempo real e usar isso para evitar horários mais cheios
  • Depois, a operadora do restaurante mudou para a Aramark, e como a Aramark não tinha um contrato para contagem de ocupação como o da Bluefox, os dados existentes desapareceram

Usando beacons BLE como indicador substituto do número de pessoas

  • O ponto central do projeto era verificar quão bem a quantidade de beacons Bluetooth poderia servir como substituto do número real de pessoas e do tempo de permanência
    • Algumas pessoas carregam vários dispositivos, como fones de ouvido e smartwatches
    • Algumas pessoas não carregam dispositivos ou podem deixar o Bluetooth do celular desligado
  • Para estimar o tempo de permanência, uma variável era saber se dava para usar a rotatividade (churn) dos endereços MAC únicos e qual seria o impacto da aleatorização de endereços MAC por fabricantes como Android e Apple
  • Para enviar os dados a um servidor central, Wi-Fi era a escolha mais natural, mas nem todos os locais tinham um Wi-Fi fácil de usar
  • LoRa também poderia ser uma opção dependendo da distribuição dos beacons, mas o alcance real varia muito conforme o ganho da antena e o local de instalação
  • No armazenamento de dados, também entravam em consideração o uso ou não de um banco de dados de séries temporais e se, em previsões de tendência de longo prazo, seria possível excluir eventos especiais como fim de semana de homecoming ou semana de provas finais

Validação inicial com notebook

  • O primeiro experimento foi um código simples que escaneava com o adaptador Bluetooth do notebook por x segundos, repetia a cada y segundos e armazenava os dados em um banco SQLite
  • Foram coletados dados esperando com o notebook em vários lugares, como o restaurante universitário, Chick-Fil-A e Starbucks
  • No Starbucks, que era um espaço pequeno e único, a contagem de dispositivos foi bastante precisa e pelo menos refletia rapidamente a tendência de ocupação
    • Quando alguém entrava, o gráfico subia rapidamente
  • Em espaços grandes como o restaurante universitário, não era possível contar diretamente o total de pessoas e também não estava claro o alcance do adaptador Bluetooth, mas o aumento de pessoas indo comer após o fim das aulas bateu bem com o aumento de beacons detectados

Por que a abordagem com Raspberry Pi Zero W travou

  • O primeiro dispositivo pensado para implantação de longo prazo foi o Raspberry Pi Zero W, por ser pequeno, barato e ter Wi-Fi e Bluetooth
  • O código foi reescrito em Rust para tentar lidar com situações como reinicialização, ausência de rede e perda do adaptador
  • O processo de lidar com Bluetooth no Linux em um ambiente headless foi muito mais complexo do que o esperado
    • Os bindings de DBus exigiam configuração relacionada a compilação cruzada
    • Nem mesmo o Cross resolveu os problemas
    • Depois de várias flags de compilador, perda de trabalho em Makefile e configuração de bridge com QEMU, o binário finalmente rodou no Pi
  • Foram implementados conexão Wi-Fi, instalação das bibliotecas necessárias na inicialização, registro do executável como serviço e atualização automática, mas depois do boot real tudo ainda falhava
  • Essa abordagem acabava arrastando um kernel Linux inteiro e muitas partes móveis, mesmo precisando apenas de Wi-Fi e Bluetooth confiáveis

Mudança para o ESP32

  • No papel, o ESP32 reunia Wi-Fi, Bluetooth, baixo consumo de energia, baixo preço e tamanho pequeno
  • Foi comprada na Amazon uma ESP32-WROOM-32 aleatória com display OLED
    • A ideia era exibir dados em tempo real na tela
  • Como o ecossistema Rust para ESP32 ainda não parecia maduro o suficiente, o código de coleta de dados foi reescrito em C++
  • O OLED foi colocado para funcionar com a configuração SSD1306Wire display(0x3c, 5, 4);
  • Foi pedido ao TI do campus o whitelist do endereço MAC, e Cloudflare Functions com banco de dados D1 foram usados como backend de coleta de dados

O problema de memória revelado na primeira implantação

  • Um dispositivo de coleta foi instalado na biblioteca do campus, e foi confirmado pelo notebook que os dados estavam chegando
  • Depois apareceram resultados estranhos, como se todas as pessoas tivessem saído da biblioteca, e a causa era a baixa especificação da placa ESP32 comprada aleatoriamente
  • O dispositivo travava perto de 250 dispositivos
    • No começo, suspeitou-se que o resultado estivesse sendo armazenado em um número de 1 byte, travando perto de 255
    • Conferindo com Serial.print, ele travava aleatoriamente em faixas parecidas, como 249 e 265, então não era apenas overflow de inteiro
  • Durante o escaneamento, os resultados eram mantidos por inteiro em uma estrutura de dados, acumulando muita informação como intensidade de sinal, serviços anunciados e ID do fabricante, o que lotava a pequena RAM
  • Na prática, o único valor necessário era a quantidade de dispositivos únicos, então manter a estrutura completa dos resultados era excessivo

Hash set feito à mão e seus limites

  • Como solução, foi criada manualmente uma pequena estrutura de hash set em C++
  • Em cada callback, o endereço MAC era inserido no hash set e a estrutura de resultados interna era esvaziada para liberar memória
  • Isso teve a desvantagem de fazer a estrutura interna perder os dados usados para verificar duplicatas, o que fazia o callback disparar para cada pacote de anúncio BLE
    • A verificação de duplicata ainda era feita no addToSet
    • Mas callbacks duplicados aconteciam centenas de vezes, e a estrutura de resultados seguia sendo alocada e liberada, gerando churn no heap
  • Mesmo assim, pareceu melhor verificar com frequência um hashmap com no máximo menos de 1000 itens do que continuar limitado perto de 250 pessoas

Escolhendo uma placa ESP32 mais estável

  • Durante o recesso de outono, foi tentado um teste de longa duração de 5 dias, mas houve novo travamento perto de 400 dispositivos
  • O problema aparecia após cerca de 3 horas de uso, e mesmo com reinicializações periódicas o escaneamento passava a retornar imediatamente apenas 0 dispositivos
  • Várias placas foram testadas
    • Seeed Studio XIAO ESP32S3/C3
    • WaveShare ESP32S3 Zero
    • ESP32-WROOM sem marca com OLED
    • Orange Pi Zero W
    • Raspberry Pi Zero W
  • As únicas placas que funcionaram com estabilidade no longo prazo foram a XIAO ESP32C3/S3, e ambas tiveram desempenho aceitável
  • A escolha final foi a XIAO ESP32C3
    • A base em RISC-V agradou
    • Era mais barata
  • Ao trocar para uma placa de fabricante melhor, o SRAM aumentou, e foi possível voltar a usar a estrutura padrão de resultados em vez do hashmap feito à mão, reduzindo os travamentos
  • Até cerca de 1000 dispositivos detectados não surgiram sinais de lentidão, e talvez também tenha havido redução no churn de heap e callbacks

Padrões de deslocamento vistos da janela do dormitório

  • Depois de encontrar um dispositivo estável, ele foi levado para a janela do quarto no dormitório para facilitar repetições de implantação
  • Nos dados de um dia, apareciam picos nos horários de troca de aula
  • Mesmo estando no dormitório, o dispositivo não media principalmente apenas os moradores do dormitório
    • Se medisse só os moradores, o esperado seria um pico máximo no início da manhã e depois queda ao longo do dia
    • Por estar apontado para fora da janela, ele detectava principalmente estudantes se deslocando para dois prédios acadêmicos próximos
  • O pico por volta de 7:50 coincidia com o período imediatamente anterior às aulas das 8h em Ewell Hall e Washington Hall
  • Os picos de 8:50, 9:50 e 10:50 correspondiam, respectivamente, aos deslocamentos para as aulas das 9h, 10h e 11h
  • O dispositivo pareceu adequado para acompanhar tendências de deslocamento de estudantes ao redor, e o alcance da antena pareceu chegar a cerca de 160 ft até Washington Hall e cerca de 100 ft até Ewell
  • A altitude do 3º andar também parece ter ajudado no alcance de detecção

Previsão e tarefas de validação que ainda faltam

  • Os dados coletados tinham muitas tendências horárias, diárias e semanais, então combinavam bem com previsão de séries temporais usando algo como o NeuralProphet
  • Depois de adicionar a função de previsão, os resultados já previam bem as tendências diárias
  • A expectativa era que tendências de longo prazo em escala semanal, mensal e sazonal convergissem quando houvesse dados suficientes
  • Ainda restam muitas perguntas sem resposta
    • Quão bem a quantidade de beacons BLE representa a população real
    • Se seria possível criar um fator de correção, como x beacons equivalendo a aproximadamente 0.7x pessoas, por causa de quem carrega vários dispositivos
    • Se, em um prédio de ciência da computação, o número de dispositivos seria alto em relação ao número de pessoas, ou baixo porque muita gente deixa o Bluetooth desligado
    • Se prédios de funcionários teriam uma proporção menor por as pessoas carregarem menos dispositivos do que estudantes
    • Se restaurantes teriam uma proporção menor do que salas de aula, por haver menos uso simultâneo de notebook, iPad e outros aparelhos
  • Também restam formas de melhorar a precisão
    • Definir um RSSI mínimo para excluir sinais fracos
    • Filtrar para contar apenas IDs de fabricante da Apple e de fabricantes Android comuns
    • O fato de Apple Watch, AirPods e MacBook ainda entrarem na contagem
    • Se o método atual, que rastreia apenas a contagem bruta de beacons e não os endereços MAC reais, precisa de ruído adicional
    • Se identificar um único usuário apenas pelo número de dispositivos é algo realisticamente possível
    • A escolha da duração do escaneamento, já que se for curta demais pode não encontrar centenas de dispositivos, e se for longa demais pode contar dispositivos que já foram embora
    • Um tempo de escaneamento dinâmico que termine quando não houver mudanças por certo período

Formas possíveis de implantação

  • Há planos para validar os dados em locais onde a população real pode ser obtida com facilidade
    • Academia com registro de entrada
    • Restaurante universitário ou lugares como Starbucks com entradas limitadas
  • Há discussões com professores sobre usos em comitês universitários ou possibilidades de pesquisa acadêmica
  • Também está sendo considerada a venda para lojas físicas que queiram medir tendências de ocupação
  • A configuração de uma unidade de implantação é relativamente bem empacotada
    • Configurar o Wi-Fi nas definições
    • Se houver portal, a rede faz whitelist do endereço MAC
    • Em redes abertas ou com senha, a conexão é feita na inicialização
    • Alterar machine ID e site ID nas definições
    • Ligar o dispositivo em uma tomada central ou conveniente
    • Configurar no backend um dashboard do Grafana para leitura de cada dispositivo
    • Configurar um dashboard do Grafana separado para leitura das tendências previstas

1 comentários

 
GN⁺ 2023-11-14
Comentários do Hacker News
  • Transformei essa técnica em um negócio de verdade (occuspace.io) e já tentei responder à maior parte das perguntas levantadas
    A quantidade de beacons BLE tem correlação muito alta com o número de pessoas presentes, mas como o coeficiente de correlação varia bastante entre restaurante, sala de aula e cada andar de biblioteca, é melhor usar também características mais complexas
    Não considero preciso estimar o tempo de permanência pelo tempo em que um beacon BLE fica visível, porque o MAC Bluetooth é randomizado a cada 8 a 20 minutos dependendo do fabricante
    Excluir RSSI fraco e contar apenas dispositivos próximos é uma boa ideia, mas o limiar muda conforme o tipo de espaço e a posição de instalação do sensor

    • Fico curioso sobre com que frequência um número exato é realmente necessário
      Se o requisito original era “evitar lotação no restaurante”, talvez já baste saber aproximadamente se está mais vazio ou mais cheio
      No negócio, fico curioso se os clientes realmente esperam alta precisão, se todos esperam isso ou só uma parte deles
      Mesmo com a randomização dos endereços MAC, talvez não dê para identificar o tipo de dispositivo e contar só celulares, excluindo fones de ouvido e afins?
    • Fico curioso se esse rastreamento de presença funciona com precisão também em áreas externas
      Parece que seria mais difícil porque o sinal se espalha mais longe, e estou tocando uma startup que precisa rastrear ocupação de quadras de tênis
      Talvez dê para instalar dispositivos Bluetooth nos cantos do espaço externo e usar a intensidade do sinal deles como limiar
    • A Meraki também fornece esse tipo de informação como parte dos recursos de gerenciamento de rede em nuvem
      Talvez dê para fazer mais coisas rastreando e conectando Wi‑Fi, MACs de Wi‑Fi e informações de vídeo
      Vale a pena conhecê-la como um dos concorrentes em potencial
    • O fato de o coeficiente de correlação variar de um espaço para outro parece uma parte difícil de transformar em produto
      Em um prédio universitário de STEM, pode haver mais de 3 dispositivos Bluetooth por pessoa, enquanto em outros lugares pode haver menos de 1
    • Será que também daria para fazer detecção de quedas para idosos?
  • Excelente texto
    Depois de testar Seeed Studio XIAO ESP32S3/C3, WaveShare ESP32S3 Zero, um ESP32-WROOM sem marca com OLED, Orange Pi Zero W e Raspberry Pi Zero W, foi dito que os únicos que funcionaram de forma estável no longo prazo, atualmente por cerca de um mês, foram os XIAO ESP32C3/S3, mas suspeito que possa ser problema de alimentação
    A linha ESP32 pode ser sensível a variações de tensão durante transmissão, então recomendo fortemente adicionar um capacitor grande no trilho de alimentação
    Tanto RPi quanto ESP podem ser chatos dependendo da fonte, do cabo e do comprimento do cabo, e o cartão SD do RPi é propenso a falhar com cortes repentinos de energia
    Ainda assim, todos deveriam aguentar mais de um mês, e meus Pi e ESP já ficaram funcionando por vários meses
    Tenho curiosidade sobre o resultado de colocar capacitores maiores nos outros ESP32 ou Pi

    • É bem provável que não tenha sido um problema de estabilidade da plataforma ESP32 em si, e sim da forma como eu a usei
      O ESP32 é usado de forma muito ampla, então o fato de o primeiro ESP32 de fabricante desconhecido que comprei não ter durado muito provavelmente foi a causa
      Quando troquei por um produto de fabricante decente, o problema se resolveu e o ESP32 passou a funcionar bem
      O Raspberry Pi na prática quase não funcionou, porque eu estava tornando complicada demais uma tarefa que só precisava fazer varredura Bluetooth e chamadas HTTP, e tentando administrar coisas demais
      Como eu forneci 5V 1A direto da tomada para USB-C, não acho que tenha sido problema de alimentação, mas o Xiao ESP32-S3 também teve problemas intermitentes e, se bem me lembro, o núcleo Xtensa consome mais energia que o ESP32-C3 baseado em RISC-V, então vale verificar
    • Na automação residencial, vários ESP32 fazem parte da infraestrutura principal e estão rodando sem problemas há cerca de 1 ano
      De vez em quando eu atualizo com ESPHome, mas não houve nada de especial
      Alguns fazem várias tarefas ao mesmo tempo; por exemplo, um deles é o proxy Bluetooth do home office e também controla uma fita de LEDs instalada ao longo do painel de parede Skadis
      Uso produtos de marca aleatória comprados da empresa “AZDelivery” na Amazon, sem nenhum tratamento especial
      Coloco em caixas impressas em 3D e normalmente deixo conectados a adaptadores de pelo menos 5V/1A com cabos curtos, em geral com menos de 30 cm
    • No RPi, gosto muito de usar Alpine para reduzir gravações no cartão SD
      Só salva no disco quando você executa lbu commit -d, e por padrão inicializa em algo parecido com um tempfs
  • Como é um projeto de um universitário dentro da universidade e envolve algum nível de rastreamento de pessoas, é uma boa oportunidade para perguntar ao professor quais procedimentos de pesquisa com seres humanos seriam necessários caso isso seja pesquisa
    Pode ser mais fácil perguntar ao professor do que ao IRB da universidade
    O IRB pode se recusar a conversar alegando falta de jurisdição, ou pode reagir mal por você não ter falado antes
    As políticas de privacidade e segurança da TI do campus também podem se aplicar
    Sites, apps e dispositivos IoT comuns invadem muito mais a vida das pessoas, mas universidades às vezes têm o objetivo de tentar ser melhores do que o mundo lá fora

    • É justamente esse ponto que estou discutindo com o professor
      Não coloquei isso no texto porque talvez não dê certo
    • Fico curioso sobre quais regras se aplicam a coisas como beacons de rastreamento
      Os beacons estão sendo transmitidos, e provavelmente estão sendo coletados sem consentimento em quase todos os lugares a que vamos
      Minha casa fica em um cruzamento, então muitos dispositivos Bluetooth se acumulam por perto com frequência, e por pura diversão já pensei em instalar um rastreador BLE para ver o que eu conseguiria coletar e o que daria para descobrir a partir dos dados
      Por exemplo, tenho certeza de que existe correlação entre a piora da qualidade do ar dentro de casa e a chegada de dispositivos Bluetooth na região
    • Infelizmente, as pessoas mentem para o IRB com frequência
  • A frase “nesses nerd snipes, não perder o embalo é fatalmente importante” foi engraçada
    Meu cérebro nerd também já me convenceu várias vezes a gastar dinheiro com exatamente essa lógica

    • É engraçado, mas também é verdade
      Com certeza existem períodos em que sinto mais vontade de tocar projetos e, especialmente no inverno, também faço mais projetos de eletrônica e jogo mais
      Minha “temporada” de jogos também recomeçou na semana passada
      A grande mudança de “o que eu quero fazer hoje?” para “o que eu estou no clima para fazer nesta temporada e tenho tempo para fazer?” tem muito a ver com envelhecer e ter filhos, mas os intervalos entre ter vontade e tempo para fazer esse tipo de projeto são tão grandes que, se eu perder o embalo, posso só voltar um ano depois ou nunca mais voltar
      Tenho um projeto de eletrônica que comecei há pelo menos 10 anos, gastei um bom dinheiro nele e até hoje insisto que um dia vou terminar, então ele virou um projeto infame na família
  • Meu despertador é composto por um ESP32, uma matriz de LEDs bem grande, um buzzer e um sensor PIR
    Ele não mostra as horas; avisa com o buzzer e piscando, clareia o quarto lentamente ou, à noite, depois de um certo tempo com todas as luzes apagadas, escurece devagar
    Uma vantagem extra que descobri depois é que, mesmo sem o AP estar entre mim e o ESP, eu reflito RF o suficiente para que, só com os logs de RSSI, dê para saber não só quanto tempo fiquei na cama, mas até quando mudei de posição durante a noite
    https://imgur.com/a/VixOlu5
    Ao contrário do aviso, não há conteúdo sugestivo
    O verde no meio é o RSSI, o amarelo embaixo é o sensor PIR, e a parte de cima mistura dados da Mi Band 3 com anotações do tempo em que eu estava na cama
    Também é verdade que eu fiquei lendo notícias por muito tempo antes de dormir e antes de levantar

    • Fiquei curioso sobre como era a stack de coleta e visualização de dados
    • Também queria ver uma foto da configuração desse despertador mencionada antes
  • Fiquei curioso sobre como as pessoas organizam um projeto com ESP32 como se fosse um produto
    Não estou falando de produção em massa, mas de querer transformá-lo em um dispositivo independente em vez de uma placa com um monte de fios saindo
    Muitas páginas mostram só a placa nua, mas, na vida real, você precisa colocar isso em alguma embalagem
    Para alguém de software como eu, é bem provável que seja preferível pagar um pouco mais por algo limpo e bem acabado em vez de ficar mexendo nisso tudo na mão

    • Se você manda bem em marcenaria, use madeira
      Se tiver uma impressora 3D, faça uma impressão 3D
      Se trabalha com acrílico, um cortador a laser corta o formato e alguns furos viram uma caixa
      Se não tiver nada disso e só quiser uma caixa mínima, pode usar uma Altoids Tin que custa uns 25 dólares por 12 unidades; ela vem com balas de menta inúteis, então é só jogar fora e colocar o projeto dentro
      Se quiser algo um pouco melhor que uma lata de Altoids, compre um Hammond Enclosure
      (https://www.hammfg.com/electronics/small-case)
      No meu caso, talvez eu enrolasse tudo com fita isolante e depois com algo como silver tape, e então pintasse com marcador permanente
    • Há muitas empresas que fazem enclosures para eletrônicos, inclusive alguns à prova d’água
      Normalmente eles vêm com algumas abas pré-perfuradas para parafusar a placa, e os furos externos para entrada e saída você faz conforme precisar
      Alguns fabricantes estão abaixo, e, se você já estiver comprando placas de desenvolvimento ou outras peças, geralmente também dá para encontrar isso na adafruit ou na digikey e economizar no frete
      https://www.hammfg.com/
      https://www.budind.com/
      http://takachi-enclosure.com/
      https://www.adafruit.com/product/903
    • Há muitas opções
      A maioria dos projetos que você vê não vira produto
      São projetos pontuais de hackers; se outras pessoas acharem útil, ótimo, mas esse não é o objetivo, então não há necessidade de embalagem, e às vezes simplesmente enfiam tudo numa caixa
      Se quiser algo com aparência melhor, vai precisar pedir para alguém projetar um case
      Esse alguém pode ser você mesmo
      O ESP32 foi projetado para ser fácil de colocar em produtos próprios, então o fluxo acaba sendo desenhar a placa e o case para combinarem entre si, comprar o chip ESP32 em quantidade e montá-lo na placa
      As placas que você compra para prototipagem são oficialmente apenas placas de referência; não se espera que sejam o produto final para envio, mas na prática também é comum enviar a própria placa
      Porque ela é pequena, barata, e alguém já fez por você o difícil trabalho de projetar a placa
    • Basta pedir para um “designer de produto” projetar o case
      Se o produto for suficientemente padronizado, talvez você possa pular essa etapa
      Depois disso, entre em contato com fabricantes locais e com fabricantes de mercados maiores, peça amostras e verifique se tudo funciona direito
      Se gostar, faça um pedido pequeno primeiro
      Vale a pena projetar um processo de garantia de qualidade ou encontrar alguém que ajude nisso, para que o fabricante não envie 20% de produtos defeituosos
      Coloque em lojas físicas ou crie um site e venda em portais como a Amazon
      Converse com os clientes, ouça o feedback e vá melhorando um pouco cada etapa
      Parece intimidador, mas, trabalhando em uma pequena startup de casa inteligente, aprendi que em Shenzhen existe toda uma indústria pronta para ajudar fundadores a transformar o produto dos sonhos em realidade, e você pode contratar pessoas para ajudar em cada etapa
      Pela nossa experiência, os serviços na China foram muito melhores, mais baratos e mais rápidos do que as propostas europeias
    • Eu prendo a placa na tampa de um recipiente de comida para viagem com espaçadores de nylon
      O restante do recipiente vira o enclosure
      Faço furos no recipiente para os cabos entrarem e saírem
      Quando quero deixar um pouco mais bonito, uso um recipiente Tupperware
  • Não acompanhei completamente a questão de manter os dados na memória, e parece que isso já foi resolvido, mas para estimar o número de IDs únicos de beacons, parece que usar um algoritmo de estimativa de cardinalidade permitiria fazer isso com espaço constante
    https://en.wikipedia.org/wiki/Count-distinct_problem

    • Boa observação
      Eu estava pensando em levar isso para um jogo de futebol em breve e fazer um teste de estresse com a maior multidão de acesso rápido que eu conseguir
      Se ele conseguir escanear milhares sem problemas, vou considerar isso bem robusto
      Ainda assim, pesquisar uma estrutura de dados de estimativa de tamanho fixo parece realmente muito divertido, e com certeza vou olhar isso
      Uma das coisas de que mais gosto neste projeto é poder explorar conceitos mais profundos e interessantes de ciência da computação sem a pressão de ter que fazer a solução mais fácil
      Não estou desenvolvendo uma solução para entregar o quanto antes; estou apenas resolvendo uma necessidade minha
  • A parte de que “lidar com Bluetooth no Linux de forma headless é extremamente doloroso. As bindings de DBus exigiam magia de cross-compilation, e nem o Cross conseguiu resolver” foi exatamente a minha experiência também
    Como eu estava trabalhando em outra coisa, acabei decidindo colocar os dois dispositivos na mesma rede Wi‑Fi e detectar por varredura de pi.local
    Mas eu gostaria de entender como outras crates funcionam quando, sem a biblioteca, elas não falham no build e só crasham em tempo de execução

  • Eles deveriam ter deixado claro que isso é para BLE
    No começo, achei que fosse baseado em frequência cardíaca, calor, entrada/saída, ou alguma outra coisa mais física
    Além disso, a sensibilidade de recepção do ESP32 é de cerca de -94 dBm, o que é bem ruim; a maioria dos dispositivos vai a -100, -102, ou até -104 dBm
    Essa diferença é bem significativa

  • ESPresence é um projeto interessante e também funciona no ESP32-C3
    Ele parece ter sido projetado mais para descobrir em qual cômodo algo está

    1. https://espresense.com/