2 पॉइंट द्वारा GN⁺ 2025-02-04 | 2 टिप्पणियां | WhatsApp पर शेयर करें
  • 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 करना

डेटा एक्सप्लोरेशन और 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 के Jupyter directory में उपलब्ध हैं
  • 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 का steps element, 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 के लिए develop branch को target करके Pull Request submit करें
  • submit करने से पहले top-level directory में make flake8 चलाएँ और सभी errors ठीक करें

2 टिप्पणियां

 
GN⁺ 2025-02-04
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 hardware बहुत भरोसेमंद है, इसलिए मैं इस्तेमाल करता हूं, लेकिन market में open-source alternative की सख्त जरूरत है
      Garmin पर 2020 में ransomware attack हुआ था और कई दिनों तक service ठप रहने के बाद उन्होंने 10 million dollars चुकाए, लेकिन उन्होंने उस मुद्दे को ठीक से address भी नहीं किया
    • Garmin भी Strava के मुकाबले कुछ नहीं है। अगर आपने Strava के साथ integration किया और user connection disconnect कर देता है, तो Strava से आया सारा data delete करना पड़ता है, वरना API access खो सकते हैं
      कंपनियों के 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 लगभग असंभव हो गया
    • क्या Garmin integration अब भी इतना खराब है? कुछ साल पहले जब मैंने route GPS data से posters बनाने वाला integration बनाया था, तब यह Strava या RunKeeper जैसा ही था, लेकिन बाद में terms of use बदल गए और connection fee के तौर पर करीब 10,000 dollars मांगने लगे
      अब यह free दिखता है, लेकिन approval अब भी चाहिए
      https://developer.garmin.com/gc-developer-program/overview/
      personal use के लिए data इस्तेमाल करना हो या एक service से दूसरी service में भेजना हो, तो tapiriik अच्छा था। कई सालों से इस्तेमाल नहीं किया, इसलिए नहीं पता अब भी वैसा है या नहीं
      https://tapiriik.com/
    • मेरा अनुभव बिल्कुल उल्टा है। मैं कई सालों से InReach API इस्तेमाल कर रहा हूं; pricing भी reasonable है, InReach subscription fee के अलावा कोई extra cost नहीं थी, और access भी आसान था—email भेजने के एक से तीन दिन के भीतर API docs और access मिल गए
      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 का consumer/retail side मुझे बिखरा हुआ लगता है। हाल ही में Garmin website से HRM order किया था, order status एक हफ्ते से ज्यादा “ordered” पर अटका रहा, आखिर में cancel करके Amazon से खरीद लिया
  • एक दोस्त ने Garmin/Strava से जुड़े data nerding के लिए Intervals(https://intervals.icu) बताया था और मैं इसे काफी संतोषजनक तरीके से इस्तेमाल कर रहा हूं
    rowing करने वाले के तौर पर यह अच्छा लगा कि आम cycling/running metrics ही नहीं, बल्कि rowing से जुड़े metrics वाली reports भी बना सकता हूं

    • अच्छा app है, इस service के बारे में पता नहीं था। cycling के लिए काफी sophisticated लगती है
      हालांकि हाल में 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 कर सकते हैं, और मैं खुद कई हफ्तों से इस्तेमाल कर रहा हूं
    • कुछ साल पहले इस्तेमाल किया था, और running interval format मांगने के तरीके से झुंझलाहट हुई थी, ऐसा याद है
      लगता है वे interval activity record करते समय बीच के rest segments को साथ में record न करने वाला format चाहते थे, इसलिए असुविधा हुई
      edit: मेरी गलती थी। यह Intervals.icu नहीं, बल्कि runalyze से confused हो गया था
    • Intervals.icu शानदार है, और पैसे देकर support करने लायक है। समय के साथ progress changes देखना मजेदार है, और charts customize कर पाना भी अच्छा है
    • “हम newsletters, marketing या promotional materials और अन्य जानकारी जो आपकी रुचि की हो सकती है भेजने के लिए personal data का इस्तेमाल कर सकते हैं” यह wording देखकर मैं तुरंत बाहर निकल गया
  • 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

    • क्या आपने कभी Garmin से सारा raw data export करके देखा है? मेरे पास 15 साल का recorded data है, लेकिन उस dump में एक भी fit/gpx/tcx file नहीं थी
      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 ज्यादा होता है

    • काश Garmin अपना SDK और documentation बेहतर करे। मैंने personal use के लिए एक simple app बनाया था, और उसके बाद Garmin watch apps बनाने वालों के लिए मेरा respect बहुत बढ़ गया
      documentation अविश्वसनीय रूप से खराब है, आधी चीजें trial-and-error से पता करनी पड़ीं, और फिर भी मुझे नहीं पता कि अपनी watch के अलावा दूसरी watches पर build और test कैसे करूं
      मैं app को polish करके store पर डालने को तैयार था और लगता है यह कुछ लोगों के काम आ सकता था, लेकिन जितनी मेहनत चाहिए, वह value से कहीं ज्यादा लगती है
    • मेरे पास दो Garmin devices हैं। एक watch और एक bicycle computer, दोनों एक ही app से जुड़े हैं और एक Garmin Connect account में data collect करते हैं
      मैंने कुछ हद तक synergy की उम्मीद की थी, लेकिन कुछ भी नहीं मिला। अगर उसी activity को दोनों devices से simultaneously record करें, तो सिर्फ duplicate बनते हैं। उदाहरण के लिए, दोनों devices द्वारा मापी गई distance का sum दिखता है
      यह तो अलग-अलग brands के दो devices इस्तेमाल करने से भी बदतर है
    • WorkOutDoors app और Strava दोनों gpx data का full access देते हैं
    • website पर सब देखा और download किया जा सकता है
  • क्या ऐसे similar devices हैं जो users को अपने data तक access करने से नहीं रोकते?

    • जब Apple सब कुछ lock कर देता है, तो Apple marketing या उस marketing में आ गए लोगों की प्रतिक्रिया होती है, “safe है इसलिए अच्छा है”; और Garmin/Google/बाकी कंपनियां ऐसा करें तो कहा जाता है, “बेवकूफी है, मेरी चीज मैं इस्तेमाल कर सकूं”
  • Garmin के पुराने SDK के अंदर कितना data lock है, यह देखकर हमेशा हैरानी होती है
    उदाहरण के लिए, सभी bicycle computers में workout programs बनाने के लिए इस्तेमाल होने वाला FIT file format सिर्फ एक-दो apps में ही supported है
    आखिर में गलती शायद हमारी भी हो सकती है, और शायद हमें SDK के ऊपर खुद build करना पड़े

    • Garmin Connect website structured workouts बनाने के लिए अच्छी तरह काम करती लगती है। TrainingPeaks के साथ sync भी हो सकता है। इसके अलावा और क्या चाहिए?
      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 से बंधा हुआ है

    • activity data तो बस FIT files हैं जिन्हें USB से access किया जा सकता है
    • मैंने वह तरीका छोड़ दिया, और अब http://www.rungap.com/ इस्तेमाल करके Garmin data को API से निकालकर iCloud storage में डाल रहा हूं
      file format भी gpx, fit, tcx में से चुन सकते हैं
  • कुछ महीने पहले मैंने इसे set up किया था। data को local sqlite database में store करता हूं, और दिन में एक बार नया data लाने वाली script चलाता हूं
    उम्मीद से काफी ज्यादा समय लगता है। watch को वही data phone से sync करने में सिर्फ करीब 1 second लगता है, इसलिए अंदर कोई गंभीर inefficiency लगती है। अभी internals को विस्तार से देखने का मौका नहीं मिला

 
qor0923 3 일 전

धन्यवाद। आपकी वजह से इसे ठीक से लागू कर पाया।