GarminDB - Garmin Connect/वॉच से डेटा लाकर पार्स करने वाला DB
(github.com/tcgoetz)- GarminDB, Garmin Connect के health और activity data को डाउनलोड करके SQLite database में पार्स करने वाला Python scripts का संग्रह है, जिससे command line या Jupyter Notebook में analysis और graphing की जा सकती है
- अपने-आप लाए जा सकने वाले data में daily monitoring files, sleep, weight, resting heart rate, और activity files शामिल हैं, और कुछ activity types के लिए lap और record entries तक अधिक विस्तार से सहेजे जाते हैं
- डाउनलोड की गई JSON और FIT files को संरक्षित रखा जाता है, इसलिए Garmin Connect में दोबारा लॉग इन किए बिना या फिर से डाउनलोड किए बिना DB को दोबारा बनाया जा सकता है
- इसे PyPI package के रूप में install किया जा सकता है, और
GarminConnectConfig.jsonमें Garmin Connect account तथा start date सेट करने के बादgarmindb_cli.py --all --download --import --analyzeसे पूरा data collection और analysis शुरू किया जाता है - plugins के जरिए third-party Connect IQ apps और data fields की processing coverage बढ़ाई जा सकती है, और DB schema update के बाद पहले से डाउनलोड की गई files से DB को rebuild करना पड़ सकता है
GarminDB क्या करता है
- GarminDB, health data को SQLite database में पार्स और manipulate करने के लिए Python scripts का संग्रह है
- SQLite को server की आवश्यकता न होने वाले lightweight database के रूप में उपयोग किया जाता है
- समर्थित सुविधाएँ:
- Garmin Connect के “Daily Summary” page से daily monitoring files को अपने-आप डाउनलोड और import करना
- पूरे दिन की heart rate
- activity
- ascent/descent
- stress
- intensity minutes
- Garmin Connect से sleep, weight, resting heart rate data निकालकर JSON files में सहेजना और DB में import करना
- Garmin Connect से activity files डाउनलोड और import करना
- सभी activities की summary tables बनाना
- कुछ activity types के लिए अधिक detailed data सहेजना
- activity के अनुसार lap और record entries शामिल करना
- data को daily, weekly, monthly, yearly summary tables वाले DB में summarize करना
- command line या Jupyter Notebook से data को graph के रूप में दिखाना
- डाउनलोड की गई JSON और FIT files को सुरक्षित रखकर Garmin Connect में दोबारा लॉग इन किए बिना या फिर से डाउनलोड किए बिना DB को दोबारा बनाना
- activities को TCX files के रूप में export करना
- Garmin Connect के “Daily Summary” page से daily monitoring files को अपने-आप डाउनलोड और import करना
डेटा एक्सप्लोरेशन और analysis
- DB में data आने के बाद, दिए गए Jupyter Notebook, third-party Jupyter Notebook, या SQLite browser का उपयोग करके data को explore और process किया जा सकता है
- उपयोग किए जा सकने वाले SQLite browsers के उदाहरण:
- scripts, DB के भीतर बुनियादी views बनाती हैं, जिससे data exploration आसान हो जाता है
installation और basic usage flow
- GarminDb release PyPI पर उपलब्ध है, और Python 3.x आवश्यक है
- नवीनतम release install करना:
pip install garmindb
- शुरुआती setup:
GarminConnectConfig.json.exampleको~/.GarminDb/GarminConnectConfig.jsonमें copy करें- file को edit करके Garmin Connect username और password जोड़ें
- Garmin Connect में मौजूद data की तारीखों के अनुसार start date समायोजित करें
- पहली बार शुरू करते समय पूरा data डाउनलोड करके DB बनाने का command:
garmindb_cli.py --all --download --import --analyze
- इसके बाद केवल नवीनतम data डाउनलोड और import करने के लिए incremental update command:
garmindb_cli.py --all --download --import --analyze --latest
- DB backup समय-समय पर इस command से चलाएँ
garmindb_cli.py --backup
- नवीनतम release में update करना:
pip install --upgrade garmindb
source से चलाना
- source tree की scripts को Make के जरिए automate किया गया है
- source-based usage process:
- SSH clone method से GarminDB repository clone करें
- submodule होने की वजह से HTTPS नहीं, SSH का उपयोग करना होगा
- clone की गई tree में
make setupचलाकर scripts को data process करने के लिए तैयार करें GarminConnectConfig.json.exampleको~/.GarminDb/GarminConnectConfig.jsonमें copy करके account और start date सेट करें- पहली बार data import और processing के लिए
make create_dbsएक बार चलाएँ - उसके बाद local data को up to date रखने के लिए समय-समय पर सिर्फ
makeचलाएँ
- अतिरिक्त usage के लिए wiki के usage documentation देखें
Jupyter Notebook और plugins
- database के data का analysis करने के लिए Jupyter Notebook, source tree के
Jupyterdirectory में उपलब्ध हैं - users द्वारा submit किए गए Notebook links, wiki के related projects page पर हैं
- plugins, process करके DB में store किए जाने वाले data types का विस्तार करने देते हैं
- GarminDb में third-party Connect IQ apps और data fields के data को process करने के लिए पहले से कई plugins मौजूद हैं
- plugins के बारे में अधिक जानकारी GarminDbPlugins में है
संचालन के समय ध्यान देने योग्य बातें
- code update के बाद DB version exception हो सकती है
- इसका मतलब है कि DB schema update हुआ है
garmindb_cli.py --rebuild_dbसे DB को rebuild करना होगा- DB, पहले डाउनलोड की गई data files से दोबारा बनाई जाती है; Garmin से सारा data फिर से डाउनलोड नहीं किया जाता
- scripts को MacOS पर विकसित किया गया है, और अन्य platforms के उपयोग संबंधी जानकारी या patches स्वीकार किए जाते हैं
- database update पूरा होने पर DB data summary
stats.txtमें सहेजी जाती है- इसमें डाउनलोड की गई daily monitoring files और activities की date range शामिल होती है
- इसमें daily monitoring, activities, sleep, resting heart rate, weight आदि के record counts शामिल होते हैं
- इससे यह जाँचा जा सकता है कि Garmin Connect से सारा data डाउनलोड हुआ या नहीं
- कुछ छूटा हो तो
GarminConnectConfig.jsonकी तारीख समायोजित करके download फिर से चलाएँ
GarminConnectConfig.jsonमेंcourse_viewsकाstepselement, course-wise DB views बनाने के लिए course ID की सूची है- इन DB views से एक ही course की सभी activities की तुलना की जा सकती है
bug reports और contribution
- कोई समस्या हो तो project के Issues tab में bug दर्ज करें
make bugreportयाgarmindb_bug_report.pyचलाएँ, और बने हुएbugreport.txtको bug report में शामिल करें- screen पर दिखने वाली errors के अलावा, अतिरिक्त जानकारी देखने की पहली जगहों में से एक log file
garmindb.logहै - अगर किसी specific data file में समस्या आती है, तो debugging और support जोड़ने के लिए उस file को share करने पर विचार करें
- contribution के लिए
developbranch को target करके Pull Request submit करें - submit करने से पहले top-level directory में
make flake8चलाएँ और सभी errors ठीक करें
2 टिप्पणियां
Hacker News की राय
जो लोग इसे इस्तेमाल करना चाहते हैं, उन्हें पता होना चाहिए कि authentication के लिए Garth(https://github.com/matin/garth) इस्तेमाल होता है
यह Android ऐप होने का नाटक करता है, और वह भी एक single instance जैसा दिखाकर web form login को bypass करता है—काफी hacky authentication है
Garmin के साथ integration करना सच में बहुत तकलीफदेह है, और समझ नहीं आता कि वे इसे इतना ज़्यादा lock down क्यों रखते हैं। official API या SDK access मिल भी जाए, तो quality अक्सर बहुत खराब होती है
Garmin पर 2020 में ransomware attack हुआ था और कई दिनों तक service ठप रहने के बाद उन्होंने 10 million dollars चुकाए, लेकिन उन्होंने उस मुद्दे को ठीक से address भी नहीं किया
कंपनियों के data lock करने की वजहें लगभग एक जैसी होती हैं। user ही product है, और वे उसे बांधे रखकर data feed कराते रहना चाहते हैं
जब किसी competitor का बेहतर device आए, तो user अपना data लेकर चला न जाए; क्योंकि ऐसा हुआ तो उन्हें और मेहनत से compete करना पड़ेगा
Garmin का इतिहास काफी आलसी रहने का रहा है, जब तक कोई सच में competition न दे। smartwatch market गरमाते ही अचानक features और बेहतर models की बाढ़ आ गई, और cycling computers में भी Wahoo, Bryton, Coros, Hammerhead के दरवाजा खटखटाने तक कई-कई साल updates नहीं आए
Strava भी ऐसा ही है। पहले data import/export काफी खुला था, लेकिन बाद में उन्होंने lock कर दिया, जिससे data export लगभग असंभव हो गया
अब यह free दिखता है, लेकिन approval अब भी चाहिए
https://developer.garmin.com/gc-developer-program/overview/
personal use के लिए data इस्तेमाल करना हो या एक service से दूसरी service में भेजना हो, तो tapiriik अच्छा था। कई सालों से इस्तेमाल नहीं किया, इसलिए नहीं पता अब भी वैसा है या नहीं
https://tapiriik.com/
design और reliability भी बहुत अच्छी थी। callback-based event/point reporting system मजबूत था, मेरा code टूटे या unstable हो, तो Garmin की तरफ से retry होता था, और webhook fail होने पर क्या हुआ यह देखने के लिए debug interface भी शानदार था। support तेज नहीं था, लेकिन top-notch था
शुरुआती implementation के दौरान webhook में एक अजीब bug था: हर event दो बार आ रहा था, और उनमें से एक में event timestamp seconds वाले integer तक truncate हो रहा था। user agent से यह भी दिख रहा था कि truncated वाला कुछ versions पुराना software था
यह analysis email से भेजा, तो लगभग 12 घंटे बाद fix हो गया, और फिर करीब 12 घंटे बाद एक real engineer ने reply करके explanation के लिए धन्यवाद दिया और बताया कि यह क्यों और कैसे हुआ और क्या fix किया गया
InReach, खासकर InReach Professional API, pure consumer product से ज्यादा professional product के करीब है, लेकिन Garmin ऐसी चीजें करना जानती है
एक दोस्त ने Garmin/Strava से जुड़े data nerding के लिए Intervals(https://intervals.icu) बताया था और मैं इसे काफी संतोषजनक तरीके से इस्तेमाल कर रहा हूं
rowing करने वाले के तौर पर यह अच्छा लगा कि आम cycling/running metrics ही नहीं, बल्कि rowing से जुड़े metrics वाली reports भी बना सकता हूं
हालांकि हाल में Hyrox workout track करने की कोशिश में अलग समस्या आई। epix gen 2(800 euro) होने के बावजूद इसे ठीक से track करना मुश्किल था, और workout define तो कर सकते हैं, लेकिन बहुत cumbersome है और ठीक से काम भी नहीं करता
आखिरकार मैंने खुद app बना लिया। यह सभी Garmin watches पर चलता है, fixed workouts define करके हर workout की performance analyze कर सकते हैं
https://multisports.creatness.studio - अभी Garmin के app store submission approval का इंतजार है, लेकिन आप इसे अभी download करके Garmin watch पर sideload कर सकते हैं, और मैं खुद कई हफ्तों से इस्तेमाल कर रहा हूं
लगता है वे interval activity record करते समय बीच के rest segments को साथ में record न करने वाला format चाहते थे, इसलिए असुविधा हुई
edit: मेरी गलती थी। यह Intervals.icu नहीं, बल्कि runalyze से confused हो गया था
Garmin Connect से सभी raw data को FIT files के रूप में निकालना हो तो data export (https://support.garmin.com/en-US/?faq=W1TvTPW8JZ6LfJSfK512Q8) इस्तेमाल कर सकते हैं
ऐसी files पढ़ने और parse करने के लिए अच्छी open source libraries भी हैं। जैसे Python के लिए https://github.com/polyvertex/fitdecode, Go के लिए https://github.com/tormoder/fit
अगर current data चाहिए, तो device (watch, bicycle computer आदि) को computer से connect करके filesystem के रूप में mount करें और current .FIT file ले सकते हैं
पहले मैंने ठीक यही करने वाला एक side project शुरू किया था, लेकिन बीच में छोड़ दिया
https://github.com/jo-m/garmin-disconnect
196 json files थीं, कुल 228MB, और सब सिर्फ high-level summaries थीं
असली fit files पाने के लिए मुझे hacky third-party export libraries में से एक का इस्तेमाल करना पड़ा; तब 5708 files मिलीं, 373MB की। उसमें भी missing files, empty files और duplicate files थीं, इसलिए काफी frustrating था
इससे सबक मिला कि online services का export complete होगा या expected format में होगा, इस पर भरोसा नहीं करना चाहिए। जिस service पर आप निर्भर हैं, उसका export सच में करके देखें और पक्का करें कि उसमें आपका desired data मौजूद है
Garmin को इस trend को सच में अपनाना चाहिए। अगर alternative smartphone apps पर निर्भर होना है, तो long term में Garmin पीछे रह जाएगा
Garmin bicycle computer जैसे dedicated hardware खरीदने का बड़ा फायदा यह है कि data पर आपका control ज्यादा होता है
documentation अविश्वसनीय रूप से खराब है, आधी चीजें trial-and-error से पता करनी पड़ीं, और फिर भी मुझे नहीं पता कि अपनी watch के अलावा दूसरी watches पर build और test कैसे करूं
मैं app को polish करके store पर डालने को तैयार था और लगता है यह कुछ लोगों के काम आ सकता था, लेकिन जितनी मेहनत चाहिए, वह value से कहीं ज्यादा लगती है
मैंने कुछ हद तक synergy की उम्मीद की थी, लेकिन कुछ भी नहीं मिला। अगर उसी activity को दोनों devices से simultaneously record करें, तो सिर्फ duplicate बनते हैं। उदाहरण के लिए, दोनों devices द्वारा मापी गई distance का sum दिखता है
यह तो अलग-अलग brands के दो devices इस्तेमाल करने से भी बदतर है
क्या ऐसे similar devices हैं जो users को अपने data तक access करने से नहीं रोकते?
Garmin के पुराने SDK के अंदर कितना data lock है, यह देखकर हमेशा हैरानी होती है
उदाहरण के लिए, सभी bicycle computers में workout programs बनाने के लिए इस्तेमाल होने वाला FIT file format सिर्फ एक-दो apps में ही supported है
आखिर में गलती शायद हमारी भी हो सकती है, और शायद हमें SDK के ऊपर खुद build करना पड़े
workout plans से अलग use cases के लिए FIT files पढ़ने या लिखने वाली apps दो से कहीं ज्यादा हैं। मैंने भी उनमें से एक बनाई है
सिर्फ API access मुश्किल होना ही मुद्दा नहीं है, Garmin community की आवाज भी नहीं सुनता
उदाहरण के लिए, बिना equipment वाली workouts से filter नहीं कर सकते। कभी-कभी मैं bicycle या shoes add करना भूल जाता हूं, इसलिए ऐसा filter मददगार होगा
app या Connect website में वह filter जोड़ना बहुत आसान होगा, लेकिन community manager नहीं है, इसलिए engagement नामुमकिन है
अगर public tracker होता और लोग features request कर पाते, तो Garmin उन्हें review करके बेहतर product बना सकता था और ज्यादा पैसा भी कमा सकता था
इस हफ्ते नया Garmin Vivoactive5 खरीदा, क्योंकि पुराना Vivoactive3 खराब हो गया था
अभी मैं काफी satisfied हूं, लेकिन यह जानते हुए खरीदा कि Garmin की API और possibilities बिल्कुल optimal नहीं हैं
Apple Watch Series 10 पर भी विचार किया, लेकिन अंत में छोड़ दिया। battery 1.5 दिन से ज्यादा नहीं चलती, health features के अलावा messaging या smart apps का खास use नहीं था, और price Vivoactive से double था
काश कोई open watch हो जो hackable हो, अच्छी API हो, dashboard self-host किया जा सके, और apps भी ठीक हों। मुझे लगता है मेरे जैसे लोगों के लिए market है। शायद Pebble का revival इस gap को भर सके
उम्मीद थी कि यह device से सीधे data लेकर track करने का तरीका होगा, लेकिन देखने पर पता चला कि यह Connect API से communicate करता है, इसलिए अभी भी official app से बंधा हुआ है
file format भी gpx, fit, tcx में से चुन सकते हैं
कुछ महीने पहले मैंने इसे set up किया था। data को local sqlite database में store करता हूं, और दिन में एक बार नया data लाने वाली script चलाता हूं
उम्मीद से काफी ज्यादा समय लगता है। watch को वही data phone से sync करने में सिर्फ करीब 1 second लगता है, इसलिए अंदर कोई गंभीर inefficiency लगती है। अभी internals को विस्तार से देखने का मौका नहीं मिला
धन्यवाद। आपकी वजह से इसे ठीक से लागू कर पाया।