2 puan yazan GN⁺ 2025-02-04 | 2 yorum | WhatsApp'ta paylaş
  • GarminDB, Garmin Connect'in sağlık ve aktivite verilerini indirip SQLite veritabanına ayrıştıran ve bunların komut satırında ya da Jupyter Notebook içinde analiz edilip grafiğe dökülmesini sağlayan bir Python betikleri koleksiyonudur
  • Otomatik olarak alınabilen veriler günlük izleme dosyaları, uyku, kilo, dinlenik kalp atış hızı ve aktivite dosyalarıdır; bazı aktivite türlerinde tur ve kayıt girdileri de daha ayrıntılı biçimde saklanır
  • İndirilen JSON ve FIT dosyaları korunduğu için Garmin Connect'e yeniden bağlanmadan veya tekrar indirme yapmadan veritabanı yeniden oluşturulabilir
  • PyPI paketi olarak kurulabilir; GarminConnectConfig.json içinde Garmin Connect hesabı ve başlangıç tarihi ayarlandıktan sonra garmindb_cli.py --all --download --import --analyze ile tüm veri toplama ve analiz süreci başlatılır
  • Eklentiler aracılığıyla üçüncü taraf Connect IQ uygulamaları ve veri alanları için işleme kapsamı genişletilebilir; veritabanı şeması güncellendikten sonra mevcut indirme dosyalarıyla veritabanını yeniden oluşturmak gerekebilir

GarminDB ne yapar

  • GarminDB, sağlık verilerini SQLite veritabanına ayrıştırmak ve işlemek için hazırlanmış bir Python betik koleksiyonudur
  • SQLite, sunucu gerektirmeyen hafif bir veritabanı olarak kullanılır
  • Desteklenen özellikler:
    • Garmin Connect'in “Daily Summary” sayfasından günlük izleme dosyalarını otomatik olarak indirir ve içe aktarır
      • Gün boyu kalp atış hızı
      • Aktiviteler
      • Yükselme/alçalma
      • Stres
      • Yoğunluk süresi
    • Garmin Connect'ten uyku, kilo, dinlenik kalp atış hızı verilerini çekip JSON dosyaları olarak kaydeder ve veritabanına aktarır
    • Garmin Connect'ten aktivite dosyalarını indirir ve içe aktarır
      • Tüm aktiviteler için özet tablo oluşturur
      • Bazı aktivite türlerinde daha ayrıntılı veri saklar
      • Aktivite bazında tur ve kayıt girdilerini içerir
    • Verileri günlük, haftalık, aylık ve yıllık özet tablolar içeren bir veritabanında özetler
    • Verileri komut satırı veya Jupyter Notebook ile grafik olarak gösterir
    • İndirilen JSON ve FIT dosyalarını saklayarak Garmin Connect'e yeniden bağlanmadan veya tekrar indirme yapmadan veritabanını yeniden oluşturabilir
    • Aktiviteleri TCX dosyası olarak dışa aktarabilir

Veri keşfi ve analiz

  • Veriler veritabanına girdikten sonra sağlanan Jupyter Notebook'lar, üçüncü taraf Jupyter Notebook'lar veya SQLite tarayıcılarıyla veriler keşfedilip işlenebilir
  • Kullanılabilecek SQLite tarayıcı örnekleri:
  • Betikler, veri keşfini kolaylaştırmak için veritabanı içinde temel views oluşturur

Kurulum ve temel kullanım akışı

  • GarminDb sürümleri PyPI üzerinde yer alır ve Python 3.x gerektirir
  • En güncel sürümü kurmak için:
    • pip install garmindb
  • İlk kurulum:
    • GarminConnectConfig.json.example dosyasını ~/.GarminDb/GarminConnectConfig.json konumuna kopyalayın
    • Dosyayı düzenleyip Garmin Connect kullanıcı adı ve parolasını ekleyin
    • Başlangıç tarihini Garmin Connect'teki veri tarihine göre ayarlayın
  • İlk kez tüm verileri indirip veritabanını oluşturmak için komut:
    • garmindb_cli.py --all --download --import --analyze
  • Sonrasında yalnızca en güncel verileri indirip içe aktarmak için artımlı güncelleme komutu:
    • garmindb_cli.py --all --download --import --analyze --latest
  • Veritabanı yedeği ara sıra şu komutla alınır:
    • garmindb_cli.py --backup
  • En son sürüme güncellemek için:
    • pip install --upgrade garmindb

Kaynaktan çalıştırma

  • Kaynak ağacındaki betikler Make ile otomatikleştirilmiştir
  • Kaynak tabanlı kullanım süreci:
    • GarminDB deposunu SSH ile klonlayın
    • Alt modüller nedeniyle HTTPS yerine SSH kullanılmalıdır
    • Klonlanan ağaçta make setup çalıştırarak betikleri veri işlemeye hazır hale getirin
    • GarminConnectConfig.json.example dosyasını ~/.GarminDb/GarminConnectConfig.json konumuna kopyalayın ve hesap ile başlangıç tarihini ayarlayın
    • İlk veri alma ve işleme için make create_dbs komutunu bir kez çalıştırın
    • Sonrasında yerel verileri güncel tutmak için düzenli olarak yalnızca make çalıştırın
  • Ek kullanım bilgileri wiki'deki kullanım belgelerinde yer alır

Jupyter Notebook ve eklentiler

  • Veritabanındaki verileri analiz etmek için Jupyter Notebook dosyaları kaynak ağacındaki Jupyter dizininde bulunur
  • Kullanıcıların gönderdiği Notebook bağlantıları wiki'deki ilgili projeler sayfasında yer alır
  • Eklentiler, işlenen ve veritabanında saklanan veri türlerini genişletebilir
  • GarminDb içinde, üçüncü taraf Connect IQ uygulamaları ve veri alanları verilerini işlemek için halihazırda birden fazla eklenti bulunur
  • Eklentilerle ilgili ayrıntılar GarminDbPlugins sayfasında yer alır

Operasyon sırasında dikkat edilmesi gerekenler

  • Kod güncellemesinden sonra veritabanı sürümü istisnası oluşabilir
    • Bu, veritabanı şemasının güncellendiği anlamına gelir
    • Veritabanı garmindb_cli.py --rebuild_db ile yeniden oluşturulmalıdır
    • Veritabanı, daha önce indirilen veri dosyalarından yeniden üretilir; tüm veriler Garmin'den yeniden indirilmez
  • Betikler MacOS üzerinde geliştirilmiştir; diğer platformlara dair kullanım bilgileri ve yamalar kabul edilir
  • Veritabanı güncellemesi tamamlandığında veritabanı veri özeti stats.txt içine kaydedilir
    • İndirilen günlük izleme dosyaları ve aktivitelerin tarih aralığı yer alır
    • Günlük izleme, aktivite, uyku, dinlenik kalp atış hızı, kilo gibi kayıtların sayısı yer alır
    • Tüm verilerin Garmin Connect'ten indirilip indirilmediğini doğrulamak için kullanılabilir
    • Eksik varsa GarminConnectConfig.json içindeki tarihi ayarlayıp indirmeyi yeniden çalıştırın
  • GarminConnectConfig.json içindeki course_views bölümünün steps öğesi, kurs bazlı veritabanı görünümleri oluşturulacak kurs kimliklerinin listesidir
    • Bu veritabanı görünümleriyle aynı kurstaki tüm aktiviteler karşılaştırılabilir

Hata raporları ve katkı

  • Sorun yaşanırsa projenin Issues sekmesinde hata kaydı açın
  • make bugreport veya garmindb_bug_report.py çalıştırın ve oluşan bugreport.txt dosyasını hata raporuna ekleyin
  • Ekranda görünen hatalara ek olarak ilave bilgi kontrol edilecek ilk yerlerden biri log dosyası garmindb.log olacaktır
  • Belirli bir veri dosyasında sorun çıkıyorsa hata ayıklama ve destek eklenebilmesi için ilgili dosyayı paylaşmayı değerlendirin
  • Katkılar için Pull Request'ler develop dalını hedeflemelidir
  • Göndermeden önce üst dizinde make flake8 çalıştırılmalı ve tüm hatalar düzeltilmelidir

2 yorum

 
GN⁺ 2025-02-04
Hacker News yorumları
  • Bunu kullanmak isteyenlerin, kimlik doğrulama için Garth(https://github.com/matin/garth) kullandığını bilmesinde fayda var.
    Android uygulaması gibi davranıp, üstelik tek bir örnekmiş gibi taklit ederek web formu girişini atlatan epey hacky bir kimlik doğrulama yapıyor.
    Garmin entegrasyon yapması gerçekten eziyetli bir şirket ve neden bu kadar sıkı kilitlediklerini bilmiyorum. Resmî API veya SDK erişimi alsanız bile kalitesi genelde berbat.

    • Garmin donanımı çok güvenilir olduğu için kullanıyorum, ama piyasada açık kaynak bir alternatife acilen ihtiyaç var.
      Garmin 2020’de bir fidye yazılımı saldırısına uğradı; hizmetleri günlerce çöktükten sonra 10 milyon dolar ödedi, ama bu sorunu doğru düzgün ele almadı.
    • Garmin, Strava ile karşılaştırıldığında hiçbir şey sayılır. Strava ile entegre olduysanız ve kullanıcı bağlantıyı keserse, Strava’dan gelen tüm verileri silmeniz gerekir; aksi halde API erişiminizi kaybedebilirsiniz.
      Şirketlerin verileri kilitlemesinin nedeni hep benzer. Ürün kullanıcıdır; onu bağlı tutup verisini beslemeye devam etmek isterler.
      Rakibin daha iyi bir cihazı çıktığında kullanıcının verisini alıp gitmemesi gerekir; çünkü öyle olursa daha sıkı rekabet etmeleri gerekir.
      Garmin’in, biri gerçekten rekabet edene kadar çok tembel davranma gibi bir geçmişi var. Akıllı saat pazarı kızışınca özellikler ve daha iyi modeller birdenbire yağmaya başladı; bisiklet bilgisayarları da Wahoo, Bryton, Coros ve Hammerhead kapıyı çalana kadar yıllarca güncellenmeden kaldı.
      Strava da benzer. Eskiden veri içe/dışa aktarma oldukça serbestti, ama sonra kilitlediler ve veri dışa aktarmayı neredeyse imkânsız hale getirdiler.
    • Garmin entegrasyonu hâlâ o kadar kötü mü? Birkaç yıl önce rota GPS verileriyle poster yapan bir entegrasyon geliştirdiğimde Strava veya RunKeeper ile neredeyse aynıydı; sonra kullanım koşulları değişti ve bağlantı ücreti olarak yaklaşık 10 bin dolar istediler.
      Şimdi ücretsiz görünüyor ama hâlâ onay gerekiyor.
      https://developer.garmin.com/gc-developer-program/overview/
      Verileri kişisel amaçla kullanmak veya bir hizmetten diğerine göndermek için tapiriik iyiydi. Birkaç yıldır kullanmadığım için hâlâ öyle mi bilmiyorum.
      https://tapiriik.com/
    • Benim deneyimim bunun tamamen tersi. Birkaç yıldır InReach API kullanıyorum; fiyatı makul, InReach abonelik ücreti dışında ek maliyet yoktu ve erişim de kolaydı: e-posta gönderdikten sonra bir ila üç gün içinde API belgelerini ve erişimi aldım.
      Tasarımı ve kararlılığı da çok iyiydi. Geri çağrı tabanlı event/point raporlama sistemi sağlamdı; benim kodum bozulsa veya kararsız olsa bile Garmin tarafı yeniden deniyordu ve webhook başarısız olduğunda ne olduğunu görebileceğiniz hata ayıklama arayüzü de harikaydı. Destek de hızlı olmasa bile üst düzeydi.
      Uygulamanın ilk aşamalarında webhook’ta garip bir hata vardı: tüm olaylar iki kez geliyordu ve bunlardan birinde olay zaman damgası saniye cinsinden tam sayıya kırpılmıştı. User agent’a bakınca kırpılan tarafın birkaç sürüm eski bir yazılım olduğu da görülüyordu.
      Bu analizi e-postayla gönderdim; yaklaşık 12 saat sonra düzeltildi ve yine yaklaşık 12 saat sonra gerçek bir mühendis yanıt yazıp açıklama için teşekkür etti, sorunun neden ve nasıl oluştuğunu ve neyi düzelttiklerini anlattı.
      InReach, özellikle InReach Professional API, saf tüketici ürününden çok profesyonel ürüne yakın; ama Garmin bu tür işleri yapmayı bilen bir şirket.
    • Garmin’in tüketici/perakende tarafının berbat olduğunu düşünüyorum. Yakın zamanda Garmin web sitesinden bir HRM sipariş ettim; sipariş durumu bir haftadan fazla “ordered” olarak kaldı, sonunda iptal edip Amazon’dan aldım.
  • Bir arkadaşım Garmin/Strava verileriyle uğraşmak için Intervals(https://intervals.icu)’i önerdi; oldukça memnun kullanıyorum.
    Kürek çeken biri olarak, yalnızca yaygın bisiklet/koşu metrikleri değil kürekle ilgili metrikler içeren raporlar oluşturabilmek hoşuma gitti.

    • Güzel bir uygulama; bilmediğim bir servisti. Bisiklet için oldukça gelişmiş görünüyor.
      Ancak yakın zamanda Hyrox antrenmanını takip etmeye çalışırken başka bir sorun yaşadım. epix gen 2(800 avro) olmasına rağmen düzgün takip etmek zordu; antrenman tanımlanabiliyor ama çok zahmetli ve iyi de çalışmıyordu.
      Sonunda kendi uygulamamı yaptım. Tüm Garmin saatlerde çalışıyor; sabit antrenmanlar tanımlayıp her egzersiz için performansı analiz edebiliyorsunuz.
      https://multisports.creatness.studio - hâlâ Garmin’in uygulama mağazası gönderim onayını bekliyor, ama şimdiden indirip Garmin saatinize sideload edebilirsiniz; ben de birkaç haftadır bizzat kullanıyorum.
    • Birkaç yıl önce denemiştim; koşu interval formatını isteme biçimi yüzünden sinir olduğumu hatırlıyorum.
      Interval aktivitesi kaydederken aradaki dinlenme bölümlerinin birlikte kaydedilmediği bir format istiyor gibiydi, bu yüzden rahatsız ediciydi.
      Düzenleme: Yanlış hatırlamışım. Bu Intervals.icu değil, runalyze ile karıştırmışım.
    • Intervals.icu harika ve ücret ödeyerek desteklemeye kesinlikle değer. Zaman içinde ilerleme değişimini görmek keyifli; grafiklerin özelleştirilebilmesi de güzel.
    • “Size bültenler, pazarlama veya tanıtım materyalleri ve ilginizi çekebilecek diğer bilgileri göndermek için kişisel verileri kullanabiliriz” ifadesini görünce hemen çıktım.
  • Garmin Connect’ten tüm ham verileri FIT dosyası olarak çıkarmak için veri dışa aktarmayı (https://support.garmin.com/en-US/?faq=W1TvTPW8JZ6LfJSfK512Q8) kullanmak yeterli
    Bu tür dosyaları okuyup yorumlayan iyi açık kaynak kütüphaneler de var. Örneğin Python için https://github.com/polyvertex/fitdecode, Go için https://github.com/tormoder/fit var
    Güncel verileri almak istiyorsanız cihazı (saat, bisiklet bilgisayarı vb.) bilgisayara bağlayıp dosya sistemi olarak mount ettikten sonra mevcut .FIT dosyasını alabilirsiniz
    Eskiden tam olarak bunu yapan bir yan proje başlatmıştım ama yarıda bıraktım
    https://github.com/jo-m/garmin-disconnect

    • Garmin’den tüm ham verileri hiç dışa aktardınız mı? 15 yıllık kayıt verim var; o dökümde tek bir fit/gpx/tcx dosyası bile yoktu
      196 adet json dosyası vardı, toplam 228 MB’tı ve hepsi yalnızca üst düzey özetlerden ibaretti
      Ancak hacky üçüncü taraf dışa aktarma kütüphanelerinden birini kullanınca gerçek fit dosyalarını alabildim; 5708 dosya, 373 MB. Onda bile eksik dosyalar, boş dosyalar ve yinelenen dosyalar vardı; çok can sıkıcıydı
      Çevrim içi bir hizmetin dışa aktarımının eksiksiz olacağına ya da beklediğiniz biçimde geleceğine güvenmemek gerektiği dersini aldım. Bağımlı olduğunuz bir hizmetse, gerçekten dışa aktarıp istediğiniz verinin içinde olup olmadığını kontrol etmenizi şiddetle öneririm
  • Garmin’in bu akımı gerçekten benimsemesi gerekiyor. Alternatif akıllı telefon uygulamalarına bağımlı olmaksa, uzun vadede Garmin geri düşer
    Garmin bisiklet bilgisayarı gibi özel donanım satın almanın büyük avantajı, veriler üzerinde daha fazla kontrole sahip olmaktır

    • Keşke Garmin SDK’sını ve dokümantasyonunu iyileştirse. Kişisel kullanım için basit bir uygulama yaptım ve Garmin saat uygulaması yapan insanlara çok daha fazla saygı duymaya başladım
      Dokümantasyon inanılmaz derecede kötü; yarısını deneme yanılmayla çözmek zorunda kaldım ve yine de elimdeki saat dışındaki saatlerde nasıl build edip test edeceğimi bilmiyorum
      Uygulamayı memnuniyetle toparlayıp mağazaya koymak isterdim ve bazı insanlara faydalı olacağını düşünüyorum, ama gereken emek sağlayacağı değerden çok daha büyük görünüyor
    • İki Garmin cihazım var. Biri saat, biri bisiklet bilgisayarı; ikisi de aynı uygulamaya bağlı ve verileri tek bir Garmin Connect hesabında topluyor
      Bir miktar sinerji bekliyordum ama hiçbir şey yoktu. Aynı aktiviteyi iki cihazla aynı anda kaydederseniz sadece kopya oluşuyor. Örneğin iki cihazın ölçtüğü mesafelerin toplamı kaydediliyor
      Hatta farklı markalardan iki cihaz kullanmaktan bile daha kötü
    • WorkOutDoors uygulaması ve Strava, ikisi de gpx verilerine tam erişim sağlıyor
    • Web sitesinde hepsini görebilir ve indirebilirsiniz
  • Kullanıcının kendi verilerine erişmesini engellemeyen benzer cihazlar var mı?

    • Apple her şeyi kilitlediğinde Apple pazarlaması ya da o pazarlamaya kanan insanlar “güvenli olduğu için iyi” tepkisini veriyor; Garmin/Google/diğer şirketler aynısını yaptığında ise “aptalca, kendi eşyamı kullanabilmeliyim” deniyor
  • Garmin’in eski SDK’sının içinde ne kadar çok verinin kilitli olduğuna her zaman şaşırıyorum
    Örneğin tüm bisiklet bilgisayarlarında antrenman programı yazmak için kullanılan FIT dosya biçimi yalnızca bir iki uygulama tarafından destekleniyor
    Sonuçta bu bizim hatamız da olabilir; belki de SDK’nın üzerine doğrudan bizim inşa etmemiz gerekiyordur

    • Garmin Connect web sitesi yapılandırılmış antrenmanlar oluşturmak için iyi çalışıyor gibi. TrainingPeaks ile senkronizasyon da mümkün. Bunun dışında daha neye ihtiyaç var?
      Antrenman planlaması dışındaki amaçlar için FIT dosyası okuyan ya da yazan uygulama sayısı ikiden çok daha fazla. Ben de bunlardan birini yaptım
  • Sorun yalnızca API erişiminin zor olması değil; Garmin topluluğun sesini dinlemiyor
    Örneğin ekipmansız antrenmanlara göre filtreleme yapılamıyor. Bazen bisiklet ya da ayakkabı eklemeyi unuttuğum için böyle bir filtre yardımcı olurdu
    Uygulamaya ya da Connect web sitesine bu filtreyi eklemek çok kolay olurdu, ama bir topluluk yöneticisi olmadığı için katılım mümkün değil
    Açık bir takip sistemi koyup insanların özellik talep etmesine izin verseydi, Garmin bunları inceleyip daha iyi bir ürün yapabilir ve daha fazla para kazanabilirdi

  • Bu hafta yeni bir Garmin Vivoactive5 aldım. Eski Vivoactive3’üm bozulduğu için
    Şu an oldukça memnunum ama Garmin’in API’sinin ve sunduğu olanakların hiç de optimum olmadığını bilerek aldım
    Apple Watch Series 10’u da düşündüm ama sonunda vazgeçtim. Pili 1,5 günden fazla gitmiyor; sağlık özellikleri dışında mesajlaşma ya da akıllı uygulamaları pek kullanacak değilim ve Vivoactive’in iki katı fiyattaydı
    Hacklenebilir, iyi bir API’si olan, panoyu kendi sunucumda barındırabileceğim ve uygulamaları da fena olmayan açık bir saat olsa güzel olurdu. Benim gibi insanlar için bir pazar olduğunu düşünüyorum. Pebble’ın yeniden doğuşu bu boşluğu doldurabilir belki

  • Verileri doğrudan cihazdan alıp izleyen bir yöntem olmasını ummuştum; ama bakınca Connect API ile iletişim kuran bir yöntemmiş, yani hâlâ resmi uygulamaya bağlı

    • Aktivite verileri USB üzerinden erişilebilen FIT dosyalarından ibaret
    • Ben o yöntemden vazgeçtim; şu anda http://www.rungap.com/ kullanarak Garmin verilerini API’den çekip iCloud depolamasına koyuyorum
      Dosya biçimi olarak da gpx, fit, tcx arasından seçim yapılabiliyor
  • Bunu birkaç ay önce kurdum. Verileri yerel bir sqlite veritabanında saklıyor ve günde bir kez yeni verileri alan bir betik çalıştırıyorum
    Beklediğimden epey uzun sürüyor. Saatin aynı verileri telefonla senkronize etmesi yaklaşık 1 saniye sürdüğüne göre içeride ciddi bir verimsizlik var gibi. Henüz içini ayrıntılı inceleme fırsatım olmadı

 
qor0923 2 일 전

Teşekkürler. Sayenizde sorunsuzca uyguladım.