← Tüm Yazılar

iPhone'dan Xiaomi Smart Band 10'a Özel Kadran Yükledim: Android Olmadan

Bir Xiaomi Smart Band 10'um var. Ekranı güzel ama hazır kadranların hiçbiri bana göre değildi.

Aklımda bir tasarım vardı. Terminal havasında, yeşil rakamlı, sade bir ekran.

Bileğimde terminal temalı özel Xiaomi Smart Band 10 kadranı

Bu ekranı tasarlamak işin kolay kısmıydı. Asıl soru şuydu: Android telefonum yokken bu kadranı banda nasıl yükleyecektim?

Kısaca: Kadranları Windows'ta hazırlayıp .face dosyasına paketledim. Sonra iPhone için küçük bir uygulama geliştirdim. Uygulama, Mi Fitness'ın telefonda sakladığı eşleştirme anahtarını okuyor ve kadranı Bluetooth üzerinden banda gönderiyor. Bandı sıfırlamadım, yeniden eşleştirmedim.

Mi Fitness neden yetmedi?

Mi Fitness'ta iki seçenek var. Ya mağazadaki hazır kadranlardan birini seçiyorsun ya da hazır bir şablonun arka planına fotoğraf koyuyorsun.

Rakamları, yerleşimi veya AOD ekranını değiştiremiyorsun. Kendi dosyanı yükleme seçeneği de yok.

Android çözümleri iPhone'da neden işe yaramıyor?

Aradığımda bulduğum her çözüm Android içindi. Notify for Mi Band, Gadgetbridge ve özel kadran yükleyen diğer uygulamaların hepsi Android'de çalışıyor.

Benim elimde bir iPhone ve Windows bir bilgisayar vardı.

Önce Android emülatörünü denemeyi düşündüm. İşe yaramıyor, çünkü emülatör gerçek Bluetooth'a bağlanamıyor.

Geriye tek yol kaldı: kendi iPhone uygulamamı geliştirmek.

Kadran aslında tek bir resim değil

Band 10'un ekranı 212×520 piksel. Her şey bu ölçüye göre hazırlanıyor.

Kadranda saat, dakika, tarih, adım, nabız ve pil ayrı parçalar. Band bu parçaları canlı veriyle birleştirip ekrana çiziyor.

Tasarımları yapay zekâya görsel olarak ürettirdim. Sonra her birini Windows'ta parçalarına ayırdım:

  • Arka plan: Üretilen görsellerde "01:27" ya da "8,412" adım gibi örnek veriler çizili geliyor. Bunlar silinmezse ekranda hep aynı değer kalıyor. Düz zeminde bu alanları zemin rengiyle boyadım. Işıltılı zeminlerde yazıyı maskeleyip çevresinden doldurdum.
  • Rakamlar: 0'dan 9'a her rakamı ayrı bir dosyaya kestim. Hepsinin aynı boyutta olması gerekiyor. Bir kere en-boy oranını bozdum ve rakamlar dikine uzamış göründü. O yüzden ölçeği iki eksende eşit tutuyorum.
  • Küçük yazılar: Gün ve ay adları, %, ° gibi işaretler genelde sette olmuyor. Bunları bir fonttan ürettim.
  • Yerleşim: Koordinatları referans görselden ölçüp ekran pikseline çevirdim.

Paketleme için açık kaynak band10-toolkit aracını kullandım. Canlı önizleme veriyor, hataları yakalıyor ve bandın beklediği .face dosyasını üretiyor.

Aynı yöntemle birkaç kadran daha yaptım:

Yeşil HUD temalı Xiaomi Smart Band 10 kadranı

Mavi çerçeveli, sistem ekranı temalı Xiaomi Smart Band 10 kadranı

Beyaz saat ve turuncu dakika rakamlı Xiaomi Smart Band 10 kadranı

AOD ekranını ayrıca tasarlamak gerekiyor

AOD, ekran kapalıyken görünen saat. Normal kadrandan ayrı tasarlanıyor.

Birkaç denemeden sonra şu kurallarda karar kıldım:

  • Saat, normal moddaki yerinde ve aynı boyutta duruyor. Geçişte kayma olmuyor.
  • Ekranda sadece saat kalıyor, gerekirse tarih.
  • Renkler soluk, zemin simsiyah.

Okunabilirlik konusunda da bir şey öğrendim. Bilgisayarda iyi görünen 9-10 piksellik yazılar bilekte okunmuyor. Küçük yazıları en az 12 piksel, değerleri 20 piksel ve üstü yaptım.

Mi Fitness bağlıyken ikinci bir uygulama bandı görebilir mi?

Uygulamayı geliştirmeden önce bunu bilmem gerekiyordu.

Küçük bir test uygulaması geliştirdim. Tek işi bandı bulmak ve sunduğu servisleri listelemekti.

Cevap evet çıktı. Band, Mi Fitness bağlıyken de ikinci bir uygulamaya kendi veri kanalını açıyor. Pil seviyesini bile okuyabildim. Projenin mümkün olduğunu o an anladım.

Asıl uygulamayı React Native (Expo) ile geliştirdim. Bluetooth tarafını da aynı uygulamanın içinde kurdum.

Bu süreçte Claude ve Codex'i aktif olarak kullandım. Açık kaynak projeleri incelerken, Bluetooth kodunu geliştirirken ve hata ayıklarken işimi hızlandırdılar. Her değişikliği gerçek band üzerinde test ettim. Son kontrol her zaman bendeydi.

Anahtar olmadan band konuşmuyor

Band her uygulamayla konuşmuyor. Eşleştirme sırasında Mi Fitness ile band arasında bir anahtar oluşuyor. Bu anahtar olmadan kadran gönderemiyorsun.

Anahtar, Mi Fitness'ın telefondaki kendi verisinde duruyor. iPhone'da Dosyalar uygulamasında "iPhone'umda › Mi Fitness" klasörü görünüyor. Anahtar da bu klasördeki bir veritabanı dosyasının içinde.

Uygulamama bu dosyayı okuyan bir bölüm ekledim. Mi Fitness klasörünü bir kere seçiyorum. Uygulama anahtarı buluyor ve telefonun güvenli deposunda (Keychain) saklıyor.

Burada bir sürprizle karşılaştım. İnternetteki örnek kodlar anahtarı registerList_de adlı kayıtta arıyordu. Benimki registerList_sg çıktı. Sondaki ek, hesabın bağlı olduğu Xiaomi sunucusunun bölgesi. Kodu bütün bölgelere bakacak şekilde düzelttim.

Anahtarın yeri kullandığın hesaba göre değişebilir. Örnek kod çalışmıyorsa ilk bakılacak yer burası.

Kadranı banda göndermek

Bandın protokolünü sıfırdan çözmedim. Açık kaynak projeler bu işi yıllardır yapıyor, en büyüğü Gadgetbridge. Bu projeleri inceledim ve öğrendiklerimi kendi uygulamama uyarladım. Kodlarını kopyalamadım.

Akış kabaca şöyle:

  1. Bandı bul ve bağlan.
  2. Anahtarla kimliğini doğrula.
  3. Kadran dosyasını küçük parçalar halinde gönder.
  4. Band her parçayı onaylasın.
  5. Son olarak kadranı etkinleştir.

iPhone uygulamasında cihaz, anahtar ve kadran seçimi; yükleme sürüyor

"Banda yükle"ye bastım. İlerleme çubuğu doldu ve tasarımım bileğimde belirdi.

Android'e hiç dokunmadan, iPhone'dan.

Bu projede öğrendiklerim

  • Yükleme yavaş. 1 MB'lık bir kadran birkaç dakika sürüyor, çünkü her parçanın onayını beklemek gerekiyor. Parçaları onay beklemeden art arda göndermeyi denedim. Band beşinci parçadan sonra cevap vermeyi bıraktı. Yavaş ama güvenilir yönteme geri döndüm.
  • Dosya boyutu önemli. 1 MB üstündeki kadranlarda sorun çıkma ihtimali daha yüksek. Büyük arka plan görsellerinden kaçınmak gerekiyor.
  • Bazı öğeler sadece süs. Band 10'da pusula yok. Halka ve bar dolulukları veriye bağlanabiliyor ama bu kısım hâlâ deneysel.
  • Font lisansına dikkat. Kadranı paylaşacaksan açık lisanslı (OFL) fontlar kullanmalısın. Windows fontlarını görsele çevirip dağıtmak lisansa aykırı.
  • Sade tasarım daha kullanışlı. Bilekte bir bakışta okunmayan her şey fazlalık.

Süs amaçlı pusulası olan kırmızı HUD temalı kadran

Bu kadrandaki pusula tamamen süs. Günlük kullanımda en sade olana döndüm:

Sade, beyaz ve turuncu rakamlı Xiaomi Smart Band 10 kadranı

Kaynaklar

Bu işi mümkün kılan açık kaynak projeler:

  • band10-toolkit: Band 10 için kadran tasarlama ve paketleme aracı.
  • Gadgetbridge: Xiaomi cihazlarla konuşmak için açık kaynak referans.
  • xiaomi-band-ios-export: Anahtarın Mi Fitness'ın iOS verisinde nerede durduğunu gösteren proje.
  • my-band: Band 10'a iPhone'dan Bluetooth ile bağlanan, açık kaynak bir Swift uygulaması.

Bu konuda Türkçe kaynak neredeyse hiç yok. Aynı şeyi deneyen birinin işine yararsa ne mutlu.