$5 वाले ESP32 और serverless DB से occupancy sensor बनाना
(matthew.science)- रेस्टोरेंट की भीड़-भाड़ का डेटा देने वाला Bluefox कॉन्ट्रैक्ट खत्म होने पर, BLE advertising packets में दिखने वाले devices की संख्या से कैंपस के occupancy trends को खुद मापने वाला device बनाया गया
- लैपटॉप प्रयोगों में छोटे space की वास्तविक भीड़ और BLE devices की संख्या तेजी से साथ-साथ बदलती दिखी, और बड़े dining hall में भी classes के पहले/बाद movement के समयों पर trend changes से अच्छी तरह मेल खाई
- Raspberry Pi Zero W को Linux Bluetooth, DBus, cross-compilation, और headless Wi-Fi setup की वजह से deployment device के रूप में इस्तेमाल करना मुश्किल हो गया, इसलिए दिशा बदलकर सरल ESP32 चुना गया
- कम कीमत वाले ESP32-WROOM boards लगभग 250~400 devices के आसपास memory issues के कारण unstable थे, लेकिन Seeed Studio XIAO ESP32C3/S3 लंबे समय तक stable चले और लगभग 1000 devices तक detect करने में टिके रहे
- अंतिम setup में ESP32 BLE devices की संख्या scan करके Cloudflare Functions और D1 को भेजता है, और Grafana·NeuralProphet से visualization·prediction होती है; accuracy calibration और privacy verification अभी बाकी हैं
गायब हो गया dining hall congestion data
- यूनिवर्सिटी के पहले साल में dining operator Sodexo था, और Sodexo ने Bluefox के साथ contract करके dining hall के अंदर लोगों की संख्या दिखाने वाले occupancy sensors इस्तेमाल किए थे
- FOIA request से मिली सामग्री के अनुसार Bluefox device Bluetooth advertising packets में smartphone MAC addresses गिनने के तरीके से काम करता था
- API calls को Grafana से जोड़ने पर dining hall की भीड़-भाड़ real-time chart में दिख सकती थी, जिससे busy times से बचने में मदद मिलती थी
- बाद में dining operator Aramark में बदल गया, और Aramark ने Bluefox जैसे occupancy count aggregation contract नहीं किए, इसलिए पुराना data गायब हो गया
BLE beacons को लोगों की संख्या के proxy indicator के रूप में इस्तेमाल करना
- Project का core यह जांचना था कि Bluetooth beacons की संख्या वास्तविक लोगों की संख्या और dwell time को कितनी अच्छी तरह replace कर सकती है
- कुछ लोग headphones·smartwatch जैसे कई devices साथ रखते हैं
- कुछ लोग devices साथ नहीं रखते या phone Bluetooth बंद रख सकते हैं
- dwell time estimate में unique MAC addresses का churn इस्तेमाल किया जा सकता है या नहीं, और Android व Apple जैसे अलग-अलग manufacturers की MAC address randomization का क्या असर होगा, ये variables थे
- central server पर data भेजने के लिए Wi-Fi सबसे natural choice था, लेकिन हर location पर आसानी से इस्तेमाल होने वाला Wi-Fi उपलब्ध नहीं था
- beacon distribution के आधार पर LoRa भी candidate हो सकता था, लेकिन actual range antenna gain और installation location पर बहुत निर्भर करती है
- data storage में time-series database इस्तेमाल करना है या नहीं, और long-term trend prediction में homecoming weekend·finals week जैसे special events को exclude किया जा सकता है या नहीं, ये भी विचार के विषय थे
laptop से शुरुआती validation
- पहला experiment laptop Bluetooth adapter से
xseconds तक scan करने और हरyseconds में repeat करने के बाद SQLite database में save करने वाला simple code था - dining hall, Chick-Fil-A, Starbucks आदि कई जगहों पर laptop लेकर इंतजार करते हुए data collect किया गया
- छोटे single space Starbucks में device count काफी accurate था, और कम-से-कम occupancy trend को तेजी से reflect करता था
- लोग अंदर आते तो chart तेजी से ऊपर जाता
- dining hall जैसे बड़े space में कुल लोगों की संख्या सीधे count नहीं की जा सकती थी और Bluetooth adapter range भी निश्चित नहीं थी, लेकिन class खत्म होने के बाद खाने के लिए जाने वाले time slots में बढ़ोतरी और detected beacons की बढ़ोतरी अच्छी तरह मेल खाई
Raspberry Pi Zero W approach क्यों अटक गया
- long-term deployment device के रूप में सबसे पहले छोटा, सस्ता, और Wi-Fi व Bluetooth वाला Raspberry Pi Zero W ध्यान में आया था
- Rust में code फिर से लिखकर reboot, no network, adapter loss जैसी स्थितियों को handle करने की कोशिश की गई
- headless environment में Linux Bluetooth संभालना उम्मीद से कहीं ज्यादा complex निकला
- DBus bindings के लिए cross-compilation से जुड़ी settings चाहिए थीं
- Cross से भी problem solve नहीं हुई
- कई compiler flags, Makefile work loss, QEMU bridge setup के बाद Pi पर binary run हुई
- Wi-Fi connection, startup पर जरूरी libraries install करना, executable को service के रूप में register करना, और updates auto-apply करना तक implement किया गया, लेकिन actual boot के बाद यह ठीक से काम नहीं करता था
- इस approach में जबकि जरूरत सिर्फ reliable Wi-Fi और Bluetooth की थी, फिर भी पूरे Linux kernel और बहुत सारे moving parts को साथ लेकर चलना पड़ रहा था
ESP32 पर switch
- ESP32 documentation के हिसाब से Wi-Fi, Bluetooth, low power usage, low price, और small size सब देने वाला device था
- Amazon से OLED display वाला random ESP32-WROOM-32 खरीदा गया
- मकसद real-time data को screen पर दिखाना था
- ESP32 के लिए Rust ecosystem अभी पर्याप्त नहीं लगा, इसलिए data collection code C++ में फिर से लिखा गया
- OLED को
SSD1306Wire display(0x3c, 5, 4);setting से चलाया गया - campus IT से MAC address whitelist करने का request किया गया, और data collection backend के रूप में Cloudflare Functions और D1 database लिखा गया
पहली deployment में सामने आई memory problem
- campus library में data collection device लगाया गया, और laptop पर data आते हुए verify किया गया
- बाद में library से सभी लोग जैसे चले गए हों, ऐसा अजीब result दिखा, और कारण random खरीदे गए ESP32 board के low specs निकले
- device लगभग 250 devices के आसपास crash कर रहा था
- पहले शक था कि result count 1-byte number में store हो रहा है और लगभग 255 पर रुक जाता है
Serial.printसे verify करने पर 249, 265 जैसे आसपास के ranges में randomly crash हुआ, इसलिए simple integer overflow नहीं था
- scan के दौरान results को आखिर तक data structure में store करने से signal strength, advertising services, manufacturer ID आदि बहुत data जमा हो गया और छोटी RAM भर गई
- असल में जरूरी value सिर्फ unique device count थी, इसलिए पूरे scan result को preserve करने वाली structure जरूरत से ज्यादा भारी थी
खुद बनाया hashset और उसकी limits
- solution के रूप में C++ data structure खुद लिखकर छोटा hashset बनाया गया
- हर callback में MAC address को hashset में डालने के बाद built-in result structure खाली कर memory free की गई
- इस तरीके की कमी यह थी कि built-in result structure duplicate checking के लिए data खो देता था, इसलिए हर BLE advertising packet पर callback trigger होता था
addToSetमें hashset duplicate check किया जाता था- लेकिन duplicate callbacks सैकड़ों बार होते, और result structure लगातार allocate·free होने से heap churn पैदा होता
- फिर भी अधिकतम 250 लोगों के आसपास capacity hit होने की तुलना में, 1000 से कम items वाले hashmap को बार-बार check करना बेहतर माना गया
ज्यादा stable ESP32 board चुनना
- fall break के दौरान 5-day long test की कोशिश की गई, लेकिन लगभग 400 devices के आसपास फिर crash हुआ
- करीब 3 घंटे इस्तेमाल के बाद problem दिखी, और periodic reboot डालने पर भी हर scan में तुरंत 0 devices ही return होने लगे
- कई boards test किए गए
- Seeed Studio XIAO ESP32S3/C3
- WaveShare ESP32S3 Zero
- no-brand ESP32-WROOM with OLED
- Orange Pi Zero W
- Raspberry Pi Zero W
- लंबे समय तक stable चलने वाला इकलौता board XIAO ESP32C3/S3 था, और दोनों acceptable level पर काम कर रहे थे
- final choice XIAO ESP32C3 था
- RISC-V based होना पसंद आया
- यह ज्यादा सस्ता था
- बेहतर manufacturer board पर switch करने से SRAM बढ़ गया, और खुद बनाए hashmap के बजाय default result data structure रखने पर भी crashes कम हो गए
- लगभग 1000 devices तक detect करने में slowdown के संकेत नहीं दिखे, और heap व callback churn भी कम हुआ होगा
dorm window से दिखे movement patterns
- stable device मिलने के बाद deployment iterations आसान करने के लिए device को dorm room की window पर shift किया गया
- एक दिन के data में class change times पर peaks दिखे
- device dorm में होने के बावजूद मुख्य रूप से सिर्फ dorm residents को measure नहीं कर रहा था
- अगर केवल dorm residents को measure करता, तो early morning में maximum और दिन बढ़ने पर decrease expected था
- window के बाहर की ओर positioning के कारण nearby दो academic buildings की ओर जाने वाले students मुख्य रूप से detect हुए
- सुबह 7:50 के आसपास peak Ewell Hall और Washington Hall की 8 बजे की classes से ठीक पहले के समय से मेल खाई
- 8:50, 9:50, 10:50 peaks क्रमशः 9 बजे, 10 बजे, 11 बजे की classes की ओर movement times से मेल खाईं
- device आसपास student movement trend tracking के लिए suitable लगा, और antenna range Washington Hall तक लगभग 160ft, Ewell तक लगभग 100ft पहुंचती दिखी
- तीसरी मंजिल की ऊंचाई ने भी detection range में मदद की होगी
prediction और बाकी validation tasks
- collected data में hourly, daily, weekly trends बहुत थे, इसलिए NeuralProphet जैसी time-series prediction के लिए काफी suitable था
- prediction feature जोड़ने के बाद अभी daily trends अच्छी तरह predict हुए
- week·month·season level long-term trends पर्याप्त data जमा होने पर converge होंगे ऐसा लगा
- अभी कई सवाल अनसुलझे हैं
- BLE beacons की संख्या वास्तविक population count को कितनी अच्छी तरह proxy करती है
- कई devices लेकर चलने वाले लोगों की वजह से क्या
xbeacons लगभग0.7xpeople जैसा correction factor बनाया जा सकता है - computer science building में device count ज्यादा होने से people count की तुलना में beacon ratio ज्यादा होगा या Bluetooth बंद रखने वाले ज्यादा होने से कम होगा
- staff buildings में students की तुलना में लोग कई devices कम रखते होंगे, इसलिए ratio कम होगा या नहीं
- dining hall में classrooms की तरह laptop·iPad आदि साथ इस्तेमाल करने के मामले कम होते हैं, इसलिए ratio कम होगा या नहीं
- accuracy improvement के तरीके भी बाकी हैं
- weak signals exclude करने के लिए RSSI minimum value setting
- सिर्फ Apple और general Android manufacturer IDs count करने वाली filtering
- Apple Watch, AirPods, MacBook आदि के अब भी count में जुड़ जाने की problem
- अभी सिर्फ pure beacon count track करने और actual MAC addresses track न करने वाले approach में extra noise चाहिए या नहीं
- सिर्फ device count से single user identify करना realistic है या नहीं
- scan duration का selection: बहुत छोटा हो तो सैकड़ों devices नहीं मिलते, बहुत लंबा हो तो पहले ही जा चुके devices count हो जाते हैं
- कुछ समय तक change न हो तो scan खत्म करने वाली dynamic scan length
संभावित deployment formats
- ऐसी जगहों पर data validate करने की योजना है जहां actual population count आसानी से मिल सके
- entry records वाला gym
- limited entrances वाले dining hall या Starbucks जैसे places
- university committee use cases या academic research possibilities को लेकर professors से discussion चल रहा है
- offline stores को occupancy trends measure करने के use case के लिए बेचने का तरीका भी consider किया जा रहा है
- एक deployment unit का setup अपेक्षाकृत packaged है
- settings में Wi-Fi configuration
- portal हो तो network MAC address को whitelist करे
- open या password Wi-Fi boot पर connect हो
- settings में machine ID और site ID बदलना
- central या convenient location के power outlet में device connect करना
- backend में हर device को read करने वाला Grafana dashboard configure करना
- predicted trends को अलग chart के रूप में read करने वाला Grafana dashboard configure करना
1 टिप्पणियां
Hacker News की राय
इसी तकनीक से एक असली बिज़नेस (occuspace.io) बनाया है, और उठाए गए ज़्यादातर सवालों से निपटा है
BLE beacon की संख्या का कमरे/स्पेस में मौजूद लोगों की संख्या से बहुत मजबूत correlation होता है, लेकिन restaurant, classroom और library की अलग-अलग मंज़िलों में correlation coefficient काफी बदलता है, इसलिए ज़्यादा जटिल features भी साथ में इस्तेमाल करना बेहतर होता है
BLE beacon कितनी देर दिखता है, उससे dwell time का अनुमान लगाना मुझे सटीक नहीं लगता, क्योंकि निर्माता के हिसाब से Bluetooth MAC हर 8–20 मिनट में randomize हो जाता है
कमजोर RSSI को हटाकर सिर्फ़ पास की devices गिनने का तरीका अच्छा idea है, लेकिन space type और sensor की installation location के हिसाब से threshold बदलता है
अगर मूल requirement “restaurant की भीड़ से बचना” थी, तो शायद सिर्फ़ high/low का मोटा अंदाज़ा काफी हो
बिज़नेस में यह भी जानना चाहूंगा कि customers high accuracy की उम्मीद करते हैं या नहीं, और क्या सभी करते हैं या सिर्फ़ कुछ
MAC address randomize हो तब भी क्या device type पता करके सिर्फ़ phones गिनने और headphones वगैरह को exclude करने का कोई तरीका हो सकता है
signal ज़्यादा दूर तक फैलता होगा, इसलिए मुश्किल लगता है, और मैं एक startup पर काम कर रहा हूं जिसे tennis court occupancy tracking चाहिए
outdoor space के corners पर Bluetooth devices लगाकर उनके signal strength को threshold के तौर पर इस्तेमाल किया जा सकता है
Wi-Fi, Wi-Fi MAC और video information को track करके आपस में connect किया जाए तो शायद और ज़्यादा किया जा सके
संभावित competitors में से एक के रूप में जानना अच्छा रहेगा
STEM university building में प्रति व्यक्ति 3 से ज़्यादा Bluetooth devices हो सकते हैं, जबकि दूसरी जगहों पर 1 से कम भी हो सकते हैं
शानदार लेख है
कहा गया कि Seeed Studio XIAO ESP32S3/C3, WaveShare ESP32S3 Zero, Unbranded ESP32-WROOM with OLED, Orange Pi Zero W, Raspberry Pi Zero W सब test करने के बाद, long-term में, अभी लगभग एक महीने तक stable चलने वाला सिर्फ़ XIAO ESP32C3/S3 ही था; मुझे शक है कि यह power issue हो सकता है
ESP32 family transmit करते समय voltage fluctuations के प्रति sensitive हो सकती है, इसलिए power rail पर बड़ा capacitor जोड़ने की जोरदार सलाह दूंगा
RPi और ESP दोनों power adapter, cable और cable length के हिसाब से नखरीले हो सकते हैं, और RPi का SD card अचानक power cut से आसानी से खराब हो सकता है
फिर भी सभी को कम से कम एक महीने से ज़्यादा टिकना चाहिए, और मेरे Pi और ESP कई-कई महीनों तक चलते रहे हैं
दूसरे ESP32 या Pi में बड़ा capacitor लगाने पर क्या results मिलेंगे, यह जानने की उत्सुकता है
ESP32 बहुत व्यापक रूप से इस्तेमाल होता है, इसलिए शायद कारण यह रहा होगा कि मैंने शुरुआत में जो बिना नाम वाले manufacturer का ESP32 खरीदा था वह लंबे समय तक नहीं टिक पाया
जैसे ही ठीक manufacturer के product पर बदला, समस्या हल हो गई और ESP32 अच्छा चल रहा है
Raspberry Pi सच में लगभग चला ही नहीं, क्योंकि सिर्फ़ Bluetooth scan और HTTP call करने वाले काम को इसने बहुत जटिल बना दिया और बहुत सारी चीज़ें manage करने की कोशिश की
wall socket से USB-C के जरिए सीधे 5V 1A supply किया था, इसलिए power issue नहीं लगता, लेकिन Xiao ESP32-S3 में भी intermittent issues थे और मेरी याद में XTensa core, RISC-V based ESP32-C3 से ज़्यादा power खाता है, इसलिए इसे check करने की ज़रूरत है
कभी-कभी ESPHome से update करता हूं, लेकिन कोई खास problem नहीं हुई
कुछ कई tasks साथ में करते हैं; उदाहरण के लिए एक home office का Bluetooth proxy भी है और Skadis wall plate के साथ लगाई गई light strip को भी control करता है
Amazon की “AZDelivery” नाम की company से खरीदे गए arbitrary brand products इस्तेमाल कर रहा हूं, और कोई खास treatment नहीं किया
इन्हें 3D printed case में रखा है, और आम तौर पर 30cm से कम की छोटी cable से कम-से-कम 5V/1A adapter से connect किया है
lbu commit -dचलाने पर ही disk में save करता है, और default रूप से एक तरह के tempfs से boot करता हैयह एक university student का university में किया गया project है और इसमें कुछ हद तक people tracking शामिल है, इसलिए अगर यह research है तो professor से पूछने का अच्छा मौका है कि किस तरह की human-subject research procedures की ज़रूरत होगी
university IRB से पूछने की बजाय professor से पूछना आसान हो सकता है
IRB यह कहकर बात करने से मना कर सकता है कि यह उसके jurisdiction में नहीं है, या यह सोचकर cautious हो सकता है कि पहले बात क्यों नहीं की गई
campus IT की privacy और security policies भी लागू हो सकती हैं
सामान्य websites, apps और IoT devices लोगों की privacy का कहीं ज़्यादा उल्लंघन करते हैं, लेकिन universities कभी-कभी बाहरी दुनिया से बेहतर बनने का लक्ष्य भी रखती हैं
यह शायद ठीक से न भी हो पाए, इसलिए इसे main text में नहीं डाला
beacons broadcast हो रहे हैं, और संभव है कि हम लगभग जहां भी जाते हैं, वहां इन्हें बिना consent collect किया जा रहा हो
मेरा घर एक intersection पर है, इसलिए आसपास बहुत से Bluetooth devices अक्सर इकट्ठा हो जाते हैं; मैंने सिर्फ़ मज़े के लिए BLE tracker लगाकर देखना चाहा था कि क्या collect किया जा सकता है और data से क्या जाना जा सकता है
उदाहरण के लिए, मुझे भरोसा है कि घर के अंदर air quality खराब होने और उस area में Bluetooth devices के पहुंचने के बीच correlation है
“इस तरह के nerd snipe में momentum न खोना बेहद महत्वपूर्ण है” यह वाक्य मज़ेदार लगा
मेरे nerd brain ने भी इसी logic से मुझे कई बार पैसे खर्च करने के लिए मना लिया है
project करने का मन ज़्यादा होने के कुछ दौर साफ़ तौर पर होते हैं, खासकर सर्दियों में मैं electronics projects ज़्यादा करता हूं और games भी ज़्यादा खेलता हूं
मेरा gaming “season” भी पिछले हफ्ते फिर शुरू हुआ
“आज क्या करना चाहता हूं?” से “इस season में क्या करने का mood और time है?” तक का dramatic shift उम्र बढ़ने और बच्चा होने का बड़ा असर है, लेकिन ऐसे projects करने की इच्छा और time मिलने के बीच gaps इतने बड़े होते हैं कि अगर momentum खो गया तो शायद 1 साल बाद ही वापस आऊं, या कभी वापस न आ पाऊं
एक electronics project है जिसे कम-से-कम 10 साल पहले शुरू किया था; उस पर काफ़ी पैसे खर्च किए, और अब भी कभी न कभी खत्म करने की ज़िद है, इसलिए परिवार में वह बदनाम project बन गया है
मेरी अलार्म घड़ी ESP32, काफ़ी बड़े LED array, buzzer और PIR sensor से बनी है
यह समय नहीं दिखाती, बल्कि buzzer और blink करके alert करती है, कमरे को धीरे-धीरे रोशन करती है, या रात में सारी lights बंद होने के कुछ समय बाद धीरे-धीरे dim कर देती है
बाद में मिली एक अतिरिक्त खूबी यह थी कि AP मेरे और ESP के बीच न होने पर भी मैं RF को पर्याप्त reflect कर देता हूँ, इसलिए सिर्फ़ RSSI logs से न केवल बिस्तर पर बिताया समय, बल्कि रात में करवट बदलने के समय तक पता चल जाते हैं
https://imgur.com/a/VixOlu5
चेतावनी के उलट, इसमें कोई आपत्तिजनक सामग्री नहीं है
बीच में हरा रंग RSSI है, नीचे पीला PIR sensor है, और ऊपर Mi Band 3 data तथा बिस्तर पर रहने के समय की annotations का मिश्रण है
यह भी सही है कि सोने से पहले और उठने से पहले मैंने काफ़ी देर तक news पढ़ी
जानना चाहूँगा कि ESP32 projects को product जैसा व्यवस्थित कैसे किया जाता है
मेरा मतलब mass production से नहीं है, बल्कि wires से भरे board की जगह एक standalone device बनाना है
कई pages सिर्फ़ bare board दिखाते हैं, लेकिन असल दुनिया में उसे package करना पड़ता है
मेरे जैसे software background वाले व्यक्ति के लिए ख़ुद इधर-उधर tinkering करने के बजाय थोड़ा ज़्यादा पैसा देकर साफ़-सुथरे रूप में कुछ लेना ज़्यादा पसंदीदा हो सकता है
3D printer है तो 3D print बना लें
अगर acrylic का काम है तो laser cutter से shape काटें और कुछ holes drill करें, box बन जाएगा
अगर कुछ भी नहीं है और बस न्यूनतम box चाहिए, तो लगभग 25 डॉलर में 12 Altoids Tin मिल जाते हैं; उनमें बेकार mints होते हैं, उन्हें फेंक दें और project अंदर रख दें
Altoids tin से थोड़ा बेहतर चाहिए तो Hammond Enclosure खरीद लें
(https://www.hammfg.com/electronics/small-case)
मैं होता तो electric tape से लपेटता, उसके ऊपर duct tape जैसी किसी चीज़ से लपेटता, फिर permanent marker से रंग देता
आम तौर पर board को screws से fix करने के लिए पहले से drilled flanges होते हैं, और input/output के लिए बाहरी holes ज़रूरत के हिसाब से ख़ुद drill करने होते हैं
कुछ manufacturers नीचे दिए गए हैं, और अगर आप development board या दूसरे parts पहले से खरीद रहे हैं तो shipping बचाने के लिए adafruit या digikey पर भी आम तौर पर मिल जाते हैं
https://www.hammfg.com/
https://www.budind.com/
http://takachi-enclosure.com/
https://www.adafruit.com/product/903
जो ज़्यादातर projects दिखते हैं, वे productized नहीं होते
वे किसी hacker के one-off projects होते हैं; दूसरों के लिए उपयोगी हो जाएँ तो अच्छा, लेकिन वह लक्ष्य नहीं होता, इसलिए packaging की ज़रूरत नहीं होती, और कभी-कभी उन्हें बस किसी box में ठूंस दिया जाता है
अगर कुछ ज़्यादा अच्छा दिखने वाला चाहिए तो किसी से case design करवाना होगा
वह कोई आप ख़ुद भी हो सकते हैं
ESP32 को अपने product में डालना आसान हो, इसी तरह design किया गया है; flow यह होता है कि circuit board और case को एक-दूसरे के अनुरूप design किया जाए, ESP32 chips bulk में खरीदे जाएँ और उन्हें board पर assemble किया जाए
prototyping के लिए खरीदा गया board आधिकारिक तौर पर सिर्फ़ reference board होता है, final shipping के लिए expected नहीं होता, हालांकि व्यवहार में लोग अक्सर board को वैसे ही ship भी कर देते हैं
क्योंकि छोटा, सस्ता और कठिन board design किसी ने पहले ही कर दिया होता है
अगर product पर्याप्त standard है तो यह step skip भी किया जा सकता है
फिर local manufacturers और बड़े market के manufacturers से संपर्क करें, samples लें और जाँचें कि वे ठीक से काम करते हैं या नहीं
पसंद आए तो छोटे batch से order शुरू करें
बेहतर होगा कि कोई expert मिले जो quality assurance procedure design करे या उसमें मदद करे, ताकि manufacturer 20% defective products न भेज दे
उसे offline stores में रखें या website बनाकर Amazon जैसे portals पर बेचें
customers से बात करें, feedback सुनें, और हर step को थोड़ा-थोड़ा improve करते जाएँ
यह भारी लग सकता है, लेकिन एक छोटे smarthome startup में काम करते हुए मैंने सीखा कि Shenzhen में founders के सपने वाले products को reality बनाने में मदद करने के लिए पूरी industry तैयार है, और हर step पर मदद के लिए लोगों को contract किया जा सकता है
हमारे अनुभव में China वाली services Europe के proposals से कहीं बेहतर, सस्ती और तेज़ थीं
बाकी takeaway container enclosure बन जाता है
wires के अंदर-बाहर जाने के holes container में drill करें
थोड़ा stylish बनाना हो तो Tupperware container इस्तेमाल करें
data को memory में बनाए रखने वाली समस्या को मैं पूरी तरह follow नहीं कर पाया, और लगता है अब हल हो गई है, लेकिन unique beacon IDs की संख्या estimate करने के लिए cardinality estimation algorithm इस्तेमाल करने पर शायद constant space में काम हो सकता है
https://en.wikipedia.org/wiki/Count-distinct_problem
हाल ही में इसे एक football match में ले जाकर सबसे बड़ी आसानी से उपलब्ध crowd के साथ stress test करने की कोशिश की थी
अगर यह हज़ारों को बिना दिक्कत scan कर सके तो मैं इसे काफ़ी robust मानूँगा
फिर भी fixed-size estimation data structures पर research करना वाकई दिलचस्प होगा, और मैं ज़रूर देखूँगा
इस project की मेरी पसंदीदा बातों में से एक यह है कि सबसे आसान solution करने का दबाव नहीं है, इसलिए अधिक गहरे और दिलचस्प computer science concepts में उतर सकता हूँ
मैं ASAP deliver करने के लिए solution develop नहीं कर रहा, बस अपनी खुजली मिटा रहा हूँ
“Linux Bluetooth को headless तरीके से हैंडल करना बेहद दर्दनाक है। DBus bindings के लिए cross-compile वाला जादू चाहिए था, और Cross भी इसे हल नहीं कर पाया” वाला हिस्सा मेरे अनुभव जैसा ही था
मैं कुछ और काम कर रहा था, इसलिए आखिरकार मैंने दोनों devices को उसी Wi-Fi network पर रखकर pi.local scan करने का तरीका चुना
हालांकि मैं जानना चाहूंगा कि वे दूसरे crates कैसे काम करते हैं, जो library न होने पर build में reject नहीं करते बल्कि runtime पर crash हो जाते हैं
लगता है लेखक ने इसे embedded तरीके से करने की कोशिश की और इसलिए कहीं ज़्यादा low-level interfaces से जूझना पड़ा
high-level languages में यह समस्या बहुत पहले हल हो चुकी है
अगर tracker आखिरकार computer के बगल वाले दरवाज़े पर ही रखा गया था, तो Python चलाने वाला RPi वैसे ही पर्याप्त होता
https://github.com/home-assistant/core/blob/dev/homeassistan...
https://www.home-assistant.io/integrations/bluetooth_tracker...
यह साफ़ बताना चाहिए था कि यह BLE के लिए है
शुरुआत में मुझे लगा था कि यह heart rate, heat, entry/exit, या किसी और ज़्यादा physical चीज़ पर आधारित होगा
साथ ही ESP32 की receive sensitivity करीब -94 dBm है, जो काफी खराब मानी जाएगी, और ज़्यादातर devices -100, -102, यहां तक कि -104 dBm तक जाते हैं
यह अंतर काफी बड़ा है
ESPresence एक दिलचस्प project है और ESP32-C3 पर भी चलता है
इसे इस बात का पता लगाने पर ज़्यादा focus करके design किया गया है कि आप किस room में हैं