- Eczanede Microlife WatchBP O3 tansiyon ölçerini taktıktan sonra verileri doğrudan görmek isterken cihazın micro-USB portunu fark etti
- Linux ortamında WatchBP Analyzer yazılımını çalıştırdı ancak cihazı algılayamadı; ardından Windows sanal makinesi üzerinden verileri indirmeyi başardı
- Wireshark ve usbmon kullanarak USB iletişimini yakaladı ve veri paketlerinde sistolik·diyastolik tansiyon ile nabız içeren bayt yapısını doğruladı
- Ek olarak OPP (osilometrik tepe basıncı) ve zaman damgasını izledi ancak zaman verisinin yapısını net biçimde çözemedi
- Tersine mühendislik denemesi süre sınırı nedeniyle durdu, ancak süreç veri yapısı analizi deneyimi ve “beyaz önlük hipertansiyonu” kavramını öğrenmesini sağladı
Tansiyon ölçer ve ilk denemeler
- Eczanede grip aşısı olduktan sonra tansiyon sonucu yüksek çıkınca 24 saatlik tansiyon ölçüm cihazını taktı
- Cihaz gündüz 30 dakikada, gece 60 dakikada bir otomatik ölçüm yapıyordu
- Cihazın yan tarafındaki micro-USB portunu fark edip verilere erişmeyi denedi
- Cihaz modeli Microlife WatchBP O3 idi; ilgili Windows için WatchBP Analyzer yazılımını indirdi
- Linux ortamında Bottles ile çalıştırdı ancak cihazı algılayamadı
- Cihazın
hidraw olarak göründüğünü ve USB HID arayüzü kullandığını doğruladı
- Daha sonra Windows sanal makinesi (Gnome Boxes) kurup USB cihazını bağlayınca veri indirme başarılı oldu
- WatchBP Analyzer içinde ilk üç ölçüm değerini gördü
USB trafiği analizi
- Sanal makine ortamını kullanarak Wireshark ile USB iletişimini yakaladı
usbmon3 arayüzü üzerinden cihaz ile ana makine arasındaki veri akışını kaydetti
- Yakalanan paketlerde tansiyon değerlerini içerdiği düşünülen bayt dizilerini buldu
- Örnek:
05 0a 89 71 43 9b
-
- baytın sistolik tansiyon (SYS), 4. baytın diyastolik tansiyon (DIA), 5. baytın ise nabız (HR) olduğunu tahmin etti
- Birden fazla ölçümü karşılaştırarak veri desenlerini düzenledi
- Örn:
137/113/67, 132/86/68, 126/84/82 vb.
- Her paket 32 baytlık birimlerden oluşuyordu; ilk bayt geçerli veri uzunluğunu (SIGNIFICANT BITS) gösteriyordu
Ek veri yapısı araştırması
- OPP (osilometrik tepe basıncı) ve zaman damgası içeren ek baytları analiz etti
- OPP verisi her ölçümden sonraki pakette bulunuyordu ancak konumu sabit değildi
- SYS, DIA ve HR'den sonraki 4 baytı 32 bit zaman damgası olarak varsaydı, ancak bu değerler gerçek ölçüm zamanlarıyla eşleşmedi
-
- sütundaki değerin sabah/öğleden sonra geçişinde
82'den 83'e döndüğünü ve 7. sütunun sıfırlandığını gözlemledi
- Bazı değerler ölçüm saatinin dakika kısmına benziyor gibi görünse de net bir kural doğrulanamadı
Yapay zeka ve kod denemeleri
- Kagi platformu üzerinden birden fazla yapay zeka modeline verileri vererek analiz etmeye çalıştı
- Bazıları geçersiz sonuçlar üretti, ancak endianness gibi kavramlarla analiz yönünü belirlemede yardımcı oldu
- Python ile cihazın ilk handshake sürecini ve veri indirmesini taklit etmeye çalıştı, ancak yapay zekanın sunduğu kodların çoğu hatalıydı
- Bu süreçte pyhidapi kütüphanesini de öğrenmiş oldu
Sonuç ve çıkarımlar
- Cihazı iade etmesi gerektiği için tersine mühendislik çalışması yarıda kaldı
- Buna rağmen süreçten USB veri yapısı analizi ve tersine mühendislik pratiği kazanımı elde etti
- Yeni öğrendiği terimler arasında ‘Normotension’ (normal tansiyon) ve ‘White Coat Hypertension’ (beyaz önlük hipertansiyonu) vardı
- Aşıdan hemen sonra yapılan tansiyon ölçümünde değerler geçici olarak yüksek çıkabiliyor
- Sonuç olarak, aşıdan hemen sonra tansiyon ölçümü önerilmiyor
1 yorum
Hacker News görüşleri
Yüksek tansiyon sorunum olduğu için Hilo cihazını satın aldım
Kolda manşet takarak kalibrasyon yaptıktan sonra bileğe küçük bir cihaz takılıyor ve hareketsizken gece gündüz otomatik olarak tansiyonu ölçüyor
Veriler akıllı telefon uygulamasıyla senkronize edilip saklanıyor; her seferinde manşet takma zahmetinden ve beyaz önlük hipertansiyonu (white coat hypertension) durumundan kaçınılabiliyor
Ancak yaklaşık ayda bir kez manşetle yeniden kalibrasyon yapmak gerekiyor ve uygulamanın kamerayla parmağı ölçen özelliği tutarsız sonuçlar veriyor
Yapay zeka ile ilgili bir yazıda “stupid in ways that made me think” ifadesi vardı; bunun, yapay zekanın rubber duck debugging için neden faydalı olduğunu çok iyi özetleyen bir cümle olduğunu düşünüyorum
Bir iş arkadaşıyla konuşmaktan daha derin düşünmeye zorluyor
Kalp atış hızı monitörü takıp verileri analiz edince, nabzımın keskin biçimde yükseldiği sadece iki durum olduğunu gördüm — araba kullanırken ve eşimle konuşurken
Bir yüzücü hiçbir cihaz kullanmadığını, sadece kendi kalp atışını dinlediğini söylüyor
Beyaz önlük hipertansiyonu illa iğne yapılması ya da hastane ortamı yüzünden olmak zorunda değil; sadece ölçüm anındaki gerginlikten de kaynaklanabilir
Sonunda ilaç reçete edilmiş
O zamandan beri eşim tansiyonunu her ölçtürdüğünde ben de geriliyorum
Bu yüzden yalnızca ortalamayı dikkate alıyorum. Evdeki A&D UA-611 Plus da, hastanedeki cihazlar da benzer oynaklık gösteriyor
Veri formatını analiz ederken yıl, ay, gün, saat ve dakikayı bit düzeyinde tahmin ettim ama neden bit tersleme (reverse) gerektiğini ya da boş alanların ne anlama geldiğini hâlâ bilmiyorum
“Bunu tersine mühendislik ile çözersem tansiyonum düzelecek gibi geliyor” şakası o kadar yerindeydi ki, okuyunca gerçekten daha sağlıklı hissettim
Günde iki kez portakal suyu ve muz tüketince tansiyonum 142/90 → 125/80 seviyesine düştü
Günde yaklaşık 2000 mg potasyum almış oluyorum
“stupid in ways that made me think” cümlesi, yapay zekanın hem güçlü yanlarını hem de sınırlarını aynı anda çok iyi özetliyor gibi geliyor
Ben de benzer şekilde sağlık verilerimi doğrudan kendim yönetmeye başladım
Yaşlanan geliştiricilerin vücutlarındaki anormallikleri fark edip kendi kendini yöneten sağlık takibi yapma eğiliminin artacağını düşünüyorum
İlgili belgeleri mikado-aktiia.readthedocs.io adresinde derledim
Ben BPExtract ile PDF'leri okuyup tüm ölçümleri otomatik olarak Apple Health'e aktarıyorum; manuel işleme kıyasla otomasyonun çok daha iyi olduğunu düşünüyorum
Pratisyen hekimler (GP) sonuçta sadece uzmana giden yolda bir sinyal görevi görüyor ve bekleme süreleri aşırı uzun
Yine de kendi yargının yanlış olabileceği varsayımını her zaman korumak gerekiyor
Trafik dökümüne bakınca protokolü çevrimdışı analiz etmeyi denemek istiyorum
Yakın zamanda da Windows sanal yazıcı sürücüsünü tersine mühendislik (reverse engineering) ile çözmeye çalışırken yarım gün harcadım ve devam etmek istememe rağmen kendimi zorla durdurdum