Créer un capteur d’occupation avec un ESP32 à 5 dollars et une base de données serverless
(matthew.science)- Après la disparition du contrat avec Bluefox, qui fournissait des données d’affluence pour la cafétéria, un appareil a été conçu pour mesurer directement les tendances d’occupation du campus à partir du nombre d’appareils visibles dans les paquets de publicité BLE
- Lors des tests sur ordinateur portable, le nombre d’appareils BLE suivait rapidement l’affluence réelle dans de petits espaces, et dans une grande cafétéria il correspondait aussi bien aux variations de tendance pendant les flux de déplacement avant et après les cours
- Le Raspberry Pi Zero W s’est révélé difficile à utiliser comme appareil de déploiement à cause du Bluetooth sous Linux, de DBus, de la cross-compilation et de la configuration Wi‑Fi sans écran, ce qui a conduit à un changement de cap vers un ESP32 plus simple
- Les cartes ESP32-WROOM bon marché devenaient instables à cause de problèmes de mémoire autour de 250 à 400 appareils, mais les Seeed Studio XIAO ESP32C3/S3 ont fonctionné de façon stable sur la durée et ont tenu jusqu’à environ 1000 appareils détectés
- La configuration finale consiste à faire scanner les appareils BLE par un ESP32, à envoyer les comptages vers Cloudflare Functions et D1, puis à visualiser et prévoir avec Grafana et NeuralProphet, même si l’étalonnage de la précision et la validation de la confidentialité restent à faire
La disparition des données d’affluence de la cafétéria
- En première année d’université, l’exploitant de la cafétéria était Sodexo, qui avait un contrat avec Bluefox pour utiliser des capteurs d’occupation affichant le nombre de personnes à l’intérieur
- D’après les documents obtenus via une demande FOIA, les appareils Bluefox fonctionnaient en comptant les adresses MAC de smartphones présentes dans les paquets de publicité Bluetooth
- En reliant les appels API à Grafana, il était possible d’obtenir un graphique en temps réel de l’affluence de la cafétéria, utile pour éviter les heures de pointe
- Plus tard, l’exploitant est passé à Aramark, qui n’a pas reconduit un contrat de comptage d’occupation comme celui de Bluefox, et les données existantes ont disparu
Utiliser les balises BLE comme indicateur de substitution du nombre de personnes
- Le cœur du projet consistait à vérifier dans quelle mesure le nombre de balises Bluetooth pouvait servir de proxy pour le nombre réel de personnes et leur temps de présence
- Certaines personnes portent plusieurs appareils, comme des écouteurs ou une montre connectée
- D’autres n’ont pas d’appareil sur elles ou peuvent avoir désactivé le Bluetooth de leur téléphone
- Pour estimer le temps de présence, il fallait déterminer si le churn des adresses MAC uniques pouvait être exploité, et quel effet aurait la randomisation des adresses MAC chez différents fabricants comme Android et Apple
- Pour envoyer les données vers un serveur central, le Wi‑Fi était le choix le plus naturel, mais il n’y avait pas toujours un réseau facilement exploitable à tous les emplacements
- LoRa pouvait aussi être envisagé selon la distribution des balises, mais la portée réelle dépend fortement du gain de l’antenne et de son emplacement d’installation
- Pour le stockage, il fallait aussi réfléchir à l’usage ou non d’une base de données de séries temporelles, et à la possibilité d’exclure des événements particuliers comme le week-end du homecoming ou la semaine des examens finaux dans les prévisions de tendance à long terme
Validation initiale sur ordinateur portable
- La première expérience reposait sur un code simple qui scannait avec l’adaptateur Bluetooth d’un ordinateur portable pendant
xsecondes, répétait l’opération toutes lesysecondes, puis enregistrait le tout dans une base SQLite - Des données ont été collectées en patientant avec l’ordinateur portable dans différents lieux, comme la cafétéria, Chick-Fil-A et Starbucks
- Dans le Starbucks, qui était un petit espace unique, le nombre d’appareils était assez précis et reflétait rapidement au moins la tendance d’occupation
- Quand des gens entraient, le graphique montait rapidement
- Dans un grand espace comme la cafétéria, il était impossible de compter directement toutes les personnes et la portée de l’adaptateur Bluetooth n’était pas certaine, mais la hausse des balises détectées correspondait bien aux flux de personnes allant manger après la fin des cours
Pourquoi l’approche Raspberry Pi Zero W a échoué
- Le premier appareil envisagé pour un déploiement de longue durée était le Raspberry Pi Zero W, car il était petit, peu coûteux et disposait du Wi‑Fi et du Bluetooth
- Le code a été réécrit en Rust pour gérer des situations comme les redémarrages, l’absence de réseau ou la perte de l’adaptateur
- La gestion du Bluetooth Linux dans un environnement sans écran s’est révélée bien plus complexe que prévu
- Les bindings DBus nécessitaient une configuration liée à la cross-compilation
- Même Cross n’a pas suffi à résoudre le problème
- Après divers flags de compilation, la perte de travail sur un Makefile et la configuration d’un bridge QEMU, le binaire a fini par s’exécuter sur le Pi
- La connexion Wi‑Fi, l’installation des bibliothèques nécessaires au démarrage, l’enregistrement de l’exécutable comme service et le déploiement automatique des mises à jour ont été mis en place, mais en pratique, après le boot, rien ne fonctionnait correctement
- Cette approche revenait à embarquer tout un noyau Linux et de nombreux composants mobiles alors que les seuls besoins étaient un Wi‑Fi et un Bluetooth fiables
Passage à l’ESP32
- Sur le papier, l’ESP32 cochait toutes les cases : Wi‑Fi, Bluetooth, faible consommation, prix bas et format compact
- Une ESP32-WROOM-32 quelconque avec écran OLED a été achetée sur Amazon
- L’idée était d’afficher les données en temps réel à l’écran
- L’écosystème Rust pour ESP32 ayant été jugé encore insuffisant, le code de collecte de données a été réécrit en C++
- L’OLED a été piloté avec la configuration
SSD1306Wire display(0x3c, 5, 4); - Une demande de liste blanche d’adresses MAC a été faite à l’équipe IT du campus, et Cloudflare Functions avec la base D1 ont été utilisés comme backend de collecte
Les problèmes de mémoire révélés par le premier déploiement
- Un appareil de collecte a été installé dans la bibliothèque du campus, et l’arrivée des données a été confirmée depuis l’ordinateur portable
- Ensuite, des résultats étranges ont donné l’impression que tout le monde avait quitté la bibliothèque, et la cause s’est révélée être les faibles spécifications de la carte ESP32 achetée au hasard
- L’appareil plantait autour de 250 appareils
- Au départ, l’hypothèse était que le résultat était stocké sur 1 octet, ce qui bloquait vers 255
- Mais la vérification avec
Serial.printa montré des plantages aléatoires vers 249, 265 et d’autres valeurs proches, ce qui excluait un simple overflow entier
- Pendant le scan, les résultats complets étaient conservés dans une structure de données jusqu’à la fin, avec l’intensité du signal, les services annoncés, les identifiants constructeur et d’autres informations, ce qui saturait la petite RAM
- Or la seule valeur réellement nécessaire était le nombre d’appareils uniques : conserver l’ensemble des résultats de scan était excessif
Un hash set maison et ses limites
- Comme solution, une petite structure de type hash set a été écrite directement en C++
- À chaque callback, l’adresse MAC était insérée dans ce hash set, puis la structure de résultats intégrée était vidée pour libérer de la mémoire
- Cette méthode avait l’inconvénient de priver la structure interne des données de déduplication, si bien qu’un callback était déclenché pour chaque paquet de publicité BLE
addToSeteffectuait bien une vérification de doublon dans le hash set- Mais les callbacks en double se produisaient des centaines de fois, et l’allocation/libération répétée de la structure de résultats créait du churn sur le heap
- Malgré tout, cela a été jugé préférable à une limite bloquante autour de 250 personnes : vérifier fréquemment une hash map contenant moins de 1000 éléments restait acceptable
Choisir une carte ESP32 plus stable
- Pendant les vacances d’automne, un test longue durée de 5 jours a été tenté, mais un nouveau plantage est survenu autour de 400 appareils
- Le problème apparaissait après environ 3 heures d’utilisation, et même des redémarrages périodiques entraînaient ensuite un comportement où chaque scan renvoyait immédiatement 0 appareil
- Plusieurs cartes ont été testées
- Seeed Studio XIAO ESP32S3/C3
- WaveShare ESP32S3 Zero
- ESP32-WROOM sans marque avec OLED
- Orange Pi Zero W
- Raspberry Pi Zero W
- Les seules cartes restées stables sur la durée étaient les XIAO ESP32C3/S3, toutes deux à un niveau jugé satisfaisant
- Le choix final s’est porté sur le XIAO ESP32C3
- Son architecture RISC-V a été appréciée
- Il était moins cher
- En passant à une carte mieux fabriquée, la quantité de SRAM a augmenté, et même en conservant la structure de résultats par défaut au lieu de la hash map maison, les plantages ont diminué
- Jusqu’à environ 1000 appareils détectés, aucun signe de ralentissement n’a été observé, et le churn du heap et des callbacks a peut-être aussi diminué
Les schémas de déplacement observés depuis la fenêtre du dortoir
- Une fois un appareil stable trouvé, il a été déplacé sur le rebord de la fenêtre de la chambre du dortoir afin de faciliter les itérations de déploiement
- Sur une journée de données, des pics apparaissaient aux heures de changement de cours
- Même si l’appareil se trouvait dans le dortoir, il ne mesurait pas principalement les seuls résidents
- Si c’était le cas, on s’attendrait à un maximum tôt le matin, puis à une baisse au fil de la journée
- En étant orienté vers l’extérieur, il détectait surtout les étudiants se déplaçant vers deux bâtiments universitaires proches
- Le pic vers 7h50 coïncidait avec l’approche du début des cours de 8h à Ewell Hall et Washington Hall
- Les pics de 8h50, 9h50 et 10h50 correspondaient respectivement aux déplacements vers les cours de 9h, 10h et 11h
- L’appareil semblait bien adapté au suivi de tendance des déplacements étudiants, avec une portée d’antenne semblant aller jusqu’à Washington Hall, à environ 160 ft, et jusqu’à Ewell, à environ 100 ft
- Le fait d’être situé au 3e étage semble aussi avoir aidé la portée de détection
Prévision et questions de validation encore ouvertes
- Les données collectées présentaient de nombreuses tendances horaires, quotidiennes et hebdomadaires, ce qui les rendait bien adaptées à la prévision de séries temporelles avec des outils comme NeuralProphet
- Après ajout de la fonctionnalité de prévision, les tendances journalières étaient désormais bien prédites
- Les tendances de long terme à l’échelle de la semaine, du mois ou de la saison devraient converger une fois suffisamment de données accumulées
- De nombreuses questions restent toutefois ouvertes
- Dans quelle mesure le nombre de balises BLE représente-t-il réellement la population présente
- Est-il possible de définir un coefficient de correction, par exemple
xbalises pour environ0.7xpersonne, afin de tenir compte des gens portant plusieurs appareils - Dans le bâtiment d’informatique, le ratio balises/personnes sera-t-il plus élevé à cause du grand nombre d’appareils, ou plus faible parce que beaucoup désactivent le Bluetooth
- Le ratio sera-t-il plus faible dans les bâtiments du personnel, où les gens portent peut-être moins d’appareils que les étudiants
- Dans une cafétéria, ce ratio sera-t-il plus faible que dans une salle de cours, car on y utilise moins souvent simultanément un ordinateur portable, un iPad, etc.
- Des pistes d’amélioration de la précision restent aussi à explorer
- Définir une valeur RSSI minimale pour exclure les signaux faibles
- Filtrer pour ne compter que les identifiants constructeur Apple et Android les plus courants
- Le fait que les Apple Watch, AirPods et MacBook continuent malgré tout d’augmenter le comptage
- La nécessité éventuelle d’ajouter du bruit dans la méthode actuelle, qui suit uniquement le nombre brut de balises sans suivre les adresses MAC réelles
- Le caractère réaliste ou non d’identifier un utilisateur unique à partir du seul nombre d’appareils
- Le choix de la durée de scan : trop courte, elle risque de manquer des centaines d’appareils ; trop longue, elle risque de compter des appareils déjà partis
- Une durée de scan dynamique qui s’arrête lorsqu’aucun changement n’est observé pendant un certain temps
Formes possibles de déploiement
- Il est prévu de valider les données dans des lieux où la population réelle peut être obtenue facilement
- Une salle de sport avec journal d’accès
- Une cafétéria ou un Starbucks avec un nombre limité d’entrées
- Des discussions sont en cours avec des professeurs à propos de cas d’usage pour des comités universitaires ou de possibles recherches académiques
- Une commercialisation auprès de magasins physiques pour mesurer les tendances d’occupation est aussi envisagée
- La configuration d’une unité de déploiement est relativement bien packagée
- Configuration du Wi‑Fi dans les paramètres
- En présence d’un portail, mise en liste blanche de l’adresse MAC par le réseau
- Connexion au démarrage pour les réseaux Wi‑Fi ouverts ou protégés par mot de passe
- Modification du machine ID et du site ID dans les paramètres
- Branchement de l’appareil sur une prise située au centre ou à un endroit pratique
- Configuration d’un tableau de bord Grafana dans le backend pour lire chaque appareil
- Configuration d’un tableau de bord Grafana séparé pour lire les tendances prédites
1 commentaires
Avis de Hacker News
J’ai créé une véritable entreprise avec cette technologie (occuspace.io) et j’ai traité la plupart des questions soulevées
Le nombre de balises BLE est très fortement corrélé au nombre de personnes présentes, mais comme le coefficient de corrélation varie beaucoup selon qu’il s’agit d’un restaurant, d’une salle de cours ou d’un étage de bibliothèque, il vaut mieux utiliser aussi des caractéristiques plus complexes
Estimer la durée de présence à partir du temps pendant lequel une balise BLE est visible ne me semble pas précis, car selon les fabricants, les MAC Bluetooth sont randomisées toutes les 8 à 20 minutes
Exclure les RSSI faibles pour ne compter que les appareils proches est une bonne idée, mais le seuil varie selon le type d’espace et l’emplacement d’installation du capteur
Si le besoin initial était « éviter l’affluence au restaurant », connaître approximativement si c’est plutôt bas ou élevé peut suffire
Dans le cadre d’une entreprise, je me demande aussi si les clients attendent une grande précision, et si c’est le cas pour tous ou seulement pour certains
Même si les adresses MAC sont randomisées, il doit peut-être y avoir un moyen d’identifier le type d’appareil pour ne compter que les téléphones et exclure les écouteurs, etc.
J’imagine que c’est plus difficile parce que le signal se propage plus loin, et je travaille sur une startup qui a besoin de suivre l’occupation de courts de tennis
On pourrait peut-être installer des appareils Bluetooth aux coins de l’espace extérieur et utiliser la puissance de leur signal comme seuil
En suivant le Wi‑Fi, les MAC Wi‑Fi et les informations vidéo, puis en les reliant entre eux, on pourrait peut-être faire davantage de choses
Ça peut être utile de les garder en tête comme concurrent potentiel
Dans un bâtiment universitaire STEM, il peut y avoir plus de 3 appareils Bluetooth par personne, alors qu’ailleurs il peut y en avoir moins d’un
Excellent article
Après avoir testé Seeed Studio XIAO ESP32S3/C3, WaveShare ESP32S3 Zero, Unbranded ESP32-WROOM with OLED, Orange Pi Zero W et Raspberry Pi Zero W, il disait que seuls les XIAO ESP32C3/S3 avaient fonctionné de manière stable sur la durée, actuellement environ un mois ; je soupçonne un problème d’alimentation
La famille ESP32 peut être sensible aux variations de tension lors de l’émission, donc je recommande vivement d’ajouter un gros condensateur sur le rail d’alimentation
Les RPi comme les ESP peuvent être capricieux selon l’adaptateur secteur, le câble et la longueur du câble, et les cartes SD des RPi sont susceptibles de tomber en panne en cas de coupure brutale de l’alimentation
Malgré tout, ils devraient tous tenir plus d’un mois, et mes Pi et ESP ont fonctionné pendant des mois
Je serais curieux de voir les résultats avec un condensateur plus gros ajouté aux autres ESP32 ou Pi
Les ESP32 sont très largement utilisés, donc la cause était sans doute le fait que le premier ESP32 d’un fabricant inconnu que j’avais acheté n’ait pas tenu longtemps
Quand je suis passé à un produit d’un vrai fabricant, le problème a été résolu et l’ESP32 fonctionne bien
Le Raspberry Pi, lui, n’a quasiment jamais bien fonctionné, parce que je rendais trop complexe une tâche qui consistait simplement à faire du scan Bluetooth et des appels HTTP, et que j’essayais de gérer beaucoup trop de choses
Comme je l’alimentais directement en 5 V 1 A depuis la prise via USB‑C, je ne pense pas que ce soit un problème d’alimentation, mais le Xiao ESP32-S3 avait aussi des soucis intermittents et, de mémoire, le cœur XTensa consomme plus que l’ESP32-C3 basé sur RISC‑V, donc ça vaut la peine de vérifier
Je les mets parfois à jour avec ESPHome, sans souci particulier
Certains font plusieurs tâches à la fois ; par exemple, l’un est le proxy Bluetooth de mon bureau à domicile tout en pilotant aussi un ruban LED installé le long d’un panneau mural Skadis
J’utilise des produits de marques quelconques achetés sur Amazon auprès d’une société appelée « AZDelivery », sans traitement particulier
Ils sont dans des boîtiers imprimés en 3D et généralement branchés à des adaptateurs d’au moins 5 V/1 A avec des câbles courts, souvent de moins de 30 cm
Ça n’enregistre sur le disque que quand on exécute
lbu commit -d, et par défaut ça démarre sur une sorte de tempfsComme c’est un projet mené par un étudiant à l’université et qu’il implique dans une certaine mesure le suivi de personnes, c’est une bonne occasion de demander à un professeur quelles procédures de recherche impliquant des êtres humains seraient nécessaires si c’est de la recherche
Il peut être plus simple de demander à un professeur qu’à l’IRB de l’université
L’IRB pourrait refuser la discussion en disant que ce n’est pas de son ressort, ou se montrer méfiant parce qu’on ne lui en a pas parlé plus tôt
Les politiques de confidentialité et de sécurité de l’IT du campus peuvent aussi s’appliquer
Les sites web, applications et objets IoT ordinaires portent certes bien plus atteinte aux gens, mais les universités ont parfois pour objectif de faire mieux que le monde extérieur
Je ne l’ai pas mis dans le texte parce que ça pourrait ne pas aboutir
Les balises diffusent, et il est très probable qu’elles soient collectées sans consentement dans presque tous les endroits où nous allons
Comme ma maison est à une intersection, beaucoup d’appareils Bluetooth passent souvent à proximité, et j’ai déjà envisagé d’installer un traceur BLE juste pour le plaisir, afin de voir ce que je pouvais collecter et ce que les données permettraient d’apprendre
Par exemple, je suis convaincu qu’il existe une corrélation entre la dégradation de la qualité de l’air dans ma maison et l’arrivée d’appareils Bluetooth dans le quartier
La phrase « dans ce genre de nerd snipe, il est crucialement important de ne pas perdre l’élan » m’a fait rire
Mon cerveau de nerd m’a lui aussi convaincu plusieurs fois de dépenser de l’argent avec exactement cette logique
Il y a clairement des périodes où j’ai davantage envie de travailler sur des projets, et en particulier en hiver je fais plus de projets électroniques et je joue aussi davantage
Ma « saison » de jeu a d’ailleurs repris la semaine dernière
Le fait de passer radicalement de « qu’est-ce que j’ai envie de faire aujourd’hui ? » à « qu’est-ce que j’ai envie de faire cette saison, et pour quoi ai-je du temps ? » tient beaucoup à l’âge et au fait d’avoir des enfants, mais les intervalles où j’ai à la fois l’envie et le temps de faire ce genre de projet sont tellement espacés que si je perds l’élan, je risque de n’y revenir qu’un an plus tard, voire jamais
J’ai un projet électronique commencé il y a au moins 10 ans, dans lequel j’ai dépensé pas mal d’argent, et comme je m’obstine encore à dire que je le terminerai un jour, il est devenu tristement célèbre dans ma famille
Mon réveil est composé d’un ESP32, d’une assez grande matrice de LED, d’un buzzer et d’un capteur PIR
Il n’affiche pas l’heure : il prévient avec le buzzer et des clignotements, éclaire progressivement la pièce, ou, la nuit, baisse lentement l’intensité après un certain délai une fois toutes les lumières éteintes
Un avantage supplémentaire que j’ai découvert plus tard, c’est que même lorsque le point d’accès n’est pas entre moi et l’ESP, je réfléchis suffisamment les ondes RF pour que, rien qu’avec les logs RSSI, on puisse savoir non seulement combien de temps je passe au lit, mais aussi à quels moments je change de position pendant la nuit
https://imgur.com/a/VixOlu5
Contrairement à l’avertissement, il n’y a rien de suggestif
Le vert au milieu correspond au RSSI, le jaune en bas au capteur PIR, et la partie du haut mélange les données du Mi Band 3 avec des annotations sur les périodes passées au lit
C’est aussi vrai que j’ai longtemps lu les infos avant de m’endormir et avant de me lever
Je me demande comment on met au propre comme un produit un projet ESP32
Je ne parle pas de production de masse, mais du fait de vouloir en faire un appareil autonome plutôt qu’une carte avec plein de fils qui dépassent
Beaucoup de pages ne montrent que des cartes nues, mais dans la vraie vie il faut les conditionner dans un boîtier
Pour quelqu’un comme moi, plutôt côté logiciel, il est probable que je préfère payer un peu plus pour une forme propre et bien finie plutôt que de bricoler moi-même toutes sortes de choses
Si tu as une imprimante 3D, tu peux faire une impression 3D
Si tu travailles plutôt l’acrylique, tu découpes la forme au laser et tu perces quelques trous pour en faire une boîte
Si tu n’as rien et que tu veux juste une boîte minimale, tu peux utiliser des boîtes Altoids Tin, environ 25 dollars les 12 ; elles contiennent des bonbons à la menthe inutiles, tu les jettes et tu mets ton projet dedans
Si tu veux quelque chose d’un peu mieux qu’une boîte Altoids, achète un Hammond Enclosure
(https://www.hammfg.com/electronics/small-case)
Moi, je l’enroulerais peut-être dans du ruban isolant, puis dans une sorte de ruban adhésif toilé, avant de le colorier au marqueur permanent
En général, il y a quelques brides prépercées pour pouvoir visser la carte, et tu perces toi-même les ouvertures externes pour les entrées/sorties selon tes besoins
Voici quelques fabricants ; si tu achètes déjà une carte de développement ou d’autres composants, tu peux aussi souvent en trouver chez Adafruit ou DigiKey pour économiser les frais de port
https://www.hammfg.com/
https://www.budind.com/
http://takachi-enclosure.com/
https://www.adafruit.com/product/903
La plupart des projets que tu vois ne sont pas industrialisés
Ce sont des projets ponctuels de hackers ; c’est bien si d’autres les trouvent utiles, mais ce n’est pas le but, donc ils n’ont pas besoin de packaging, et parfois ils sont simplement fourrés dans une boîte
Si tu veux quelque chose de plus présentable, il faut confier la conception du boîtier à quelqu’un
Ce quelqu’un peut être toi-même
L’ESP32 est conçu pour être facilement intégré dans tes propres produits ; le flux devient donc : concevoir le circuit imprimé et le boîtier pour qu’ils s’adaptent l’un à l’autre, acheter des puces ESP32 en volume et les assembler sur la carte
Les cartes qu’on achète pour le prototypage ne sont officiellement que des cartes de référence, et ne sont pas censées être utilisées pour l’expédition finale, même s’il est courant en pratique d’expédier la carte telle quelle
Parce qu’elle est petite, bon marché, et que quelqu’un a déjà fait le difficile travail de conception de la carte
Si le produit est suffisamment standard, on peut même sauter cette étape
Ensuite, on contacte des fabricants locaux et des fabricants sur des marchés plus grands, on reçoit des échantillons et on vérifie qu’ils fonctionnent correctement
Si ça convient, on commande de petits volumes pour commencer
Il vaut mieux concevoir une procédure d’assurance qualité, ou trouver un spécialiste pour aider, afin d’éviter que le fabricant n’envoie 20 % de produits défectueux
On le met en magasin physique, ou on crée un site web et on le vend sur des portails comme Amazon
On parle aux clients, on écoute les retours, puis on améliore chaque étape petit à petit
Ça peut sembler écrasant, mais en travaillant dans une petite startup de smart home, j’ai appris qu’à Shenzhen il existe tout un secteur prêt à aider les fondateurs à concrétiser le produit de leurs rêves, et qu’on peut engager des personnes pour aider à chaque étape
D’après notre expérience, les services côté chinois étaient bien meilleurs, moins chers et plus rapides que les propositions européennes
Le reste du récipient à emporter sert de boîtier
Je perce des trous dans le récipient pour faire entrer et sortir les fils
Quand je veux faire un peu plus chic, j’utilise un récipient Tupperware
Je n’ai pas entièrement suivi le problème consistant à garder les données en mémoire, et il semble maintenant résolu, mais pour estimer le nombre d’identifiants de balises uniques, un algorithme d’estimation de cardinalité devrait permettre de le faire en espace constant
https://en.wikipedia.org/wiki/Count-distinct_problem
J’avais prévu de l’emporter récemment à un match de foot pour faire un test de charge avec la plus grande foule facilement accessible
Si ça peut scanner quelques milliers d’éléments sans problème, je considérerai que c’est assez robuste
Cela dit, ce serait vraiment intéressant d’étudier les structures de données d’estimation à taille fixe, et je vais clairement regarder ça
L’un des aspects que je préfère dans ce projet, c’est qu’il permet d’explorer des concepts d’informatique plus profonds et intéressants sans la pression de devoir choisir la solution la plus simple
Je ne développe pas une solution à livrer ASAP, je gratte juste là où ça me démange
Le passage disant que « gérer le Bluetooth Linux en mode headless est extrêmement pénible. Les bindings DBus nécessitaient de la magie de cross-compilation, et Cross n’a pas pu régler ça » correspondait aussi à mon expérience
Comme je travaillais sur autre chose, j’ai finalement décidé de mettre les deux appareils sur le même réseau Wi‑Fi et de scanner pi.local
Cela dit, j’aimerais savoir comment fonctionnent les autres crates qui, lorsqu’une bibliothèque manque, ne refusent pas le build mais plantent à l’exécution
L’auteur semble avoir galéré parce qu’en voulant faire ça en embarqué, il a dû manipuler des interfaces de bien plus bas niveau
Dans les langages de haut niveau, c’est un problème résolu depuis longtemps
Si le tracker a finalement été placé près de la porte à côté de l’ordinateur, utiliser tel quel un RPi exécutant Python aurait largement suffi
https://github.com/home-assistant/core/blob/dev/homeassistan...
https://www.home-assistant.io/integrations/bluetooth_tracker...
Il aurait fallu préciser clairement que c’était pour le BLE
Au début, je pensais que c’était basé sur le rythme cardiaque, la chaleur, les entrées/sorties, ou quelque chose de plus physique
De plus, la sensibilité de réception de l’ESP32 est d’environ -94 dBm, ce qui est assez mauvais ; la plupart des appareils vont jusqu’à -100, -102, voire -104 dBm
Cette différence est assez importante
ESPresence est un projet intéressant et fonctionne aussi sur ESP32-C3
Il est davantage conçu pour déterminer dans quelle pièce on se trouve