- หลังจากสวม เครื่องวัดความดันโลหิต Microlife WatchBP O3 ที่ร้านขายยาและพยายามดูข้อมูลด้วยตนเอง ก็พบ พอร์ต micro-USB ของอุปกรณ์
- รัน ซอฟต์แวร์ WatchBP Analyzer ในสภาพแวดล้อม Linux แต่ไม่สามารถตรวจพบอุปกรณ์ได้ จากนั้นจึงดาวน์โหลดข้อมูลสำเร็จผ่าน Windows virtual machine
- ใช้ Wireshark และ usbmon จับการสื่อสารผ่าน USB และยืนยันโครงสร้างไบต์ในแพ็กเก็ตข้อมูลที่มีค่า ความดันตัวบน·ความดันตัวล่าง และอัตราการเต้นหัวใจ
- ติดตาม OPP (Oscillatory Peak Pressure) และ timestamp เพิ่มเติม แต่ยังตีความโครงสร้างของข้อมูลเวลาไม่ได้อย่างชัดเจน
- แม้ความพยายามทำวิศวกรรมย้อนกลับจะต้องหยุดลงเพราะหมดเวลา แต่ก็เป็นกรณีตัวอย่างที่ได้เรียนรู้ทั้ง ประสบการณ์การวิเคราะห์โครงสร้างข้อมูล และแนวคิดเรื่อง ‘white coat hypertension’
เครื่องวัดความดันโลหิตและความพยายามช่วงแรก
- หลังไปรับวัคซีนไข้หวัดใหญ่ที่ร้านขายยา ผลการวัดความดันออกมาสูง จึงต้องสวม อุปกรณ์วัดความดันตลอด 24 ชั่วโมง
- อุปกรณ์จะวัดอัตโนมัติทุก 30 นาที (กลางวัน) และ 60 นาที (กลางคืน)
- เมื่อพบ พอร์ต micro-USB ที่ด้านข้างอุปกรณ์ จึงลองเข้าถึงข้อมูล
- รุ่นของอุปกรณ์คือ Microlife WatchBP O3 และได้ดาวน์โหลด ซอฟต์แวร์ WatchBP Analyzer สำหรับ Windows ที่เกี่ยวข้อง
- ลองรันด้วย Bottles บนสภาพแวดล้อม Linux แต่ไม่สามารถตรวจพบอุปกรณ์ได้
- อุปกรณ์แสดงเป็น
hidraw และยืนยันได้ว่าใช้อินเทอร์เฟซ USB HID
- หลังจากนั้นติดตั้ง Windows virtual machine (Gnome Boxes) และเชื่อมต่ออุปกรณ์ USB จึงดาวน์โหลดข้อมูลได้สำเร็จ
- ใน WatchBP Analyzer สามารถดูค่าการวัด 3 ครั้งแรกได้
การวิเคราะห์ทราฟฟิก USB
- ใช้สภาพแวดล้อม virtual machine เพื่อจับการสื่อสาร USB ด้วย Wireshark
- บันทึกการไหลของข้อมูลระหว่างอุปกรณ์กับโฮสต์ผ่านอินเทอร์เฟซ
usbmon3
- พบลำดับไบต์ในแพ็กเก็ตที่ดูเหมือนจะมีค่าความดันโลหิตรวมอยู่
- ตัวอย่าง:
05 0a 89 71 43 9b
- คาดว่าไบต์ตัวที่ 3 คือ ความดันตัวบน (SYS), ตัวที่ 4 คือ ความดันตัวล่าง (DIA) และตัวที่ 5 คือ อัตราการเต้นหัวใจ (HR)
- เปรียบเทียบค่าการวัดหลายชุดเพื่อสรุป แพตเทิร์นของข้อมูล
- เช่น
137/113/67, 132/86/68, 126/84/82 เป็นต้น
- แต่ละแพ็กเก็ตประกอบด้วยหน่วยขนาด 32 ไบต์ โดยไบต์แรกใช้แสดงความยาวของข้อมูลที่มีนัยสำคัญ (SIGNIFICANT BITS)
การสำรวจโครงสร้างข้อมูลเพิ่มเติม
- วิเคราะห์ไบต์เพิ่มเติมที่มี OPP (Oscillatory Peak Pressure) และ timestamp
- ข้อมูล OPP อยู่ในแพ็กเก็ตหลังการวัดแต่ละครั้ง แต่ตำแหน่งไม่คงที่
- แม้จะตั้งสมมติฐานว่า 4 ไบต์ถัดจาก SYS, DIA, HR เป็น timestamp 32 บิต แต่กลับไม่ตรงกับเวลาวัดจริง
- สังเกตว่า ค่า ในคอลัมน์ที่ 6 เปลี่ยนจาก
82 เป็น 83 ตอนสลับช่วงเช้า-บ่าย และคอลัมน์ที่ 7 จะถูกรีเซ็ต
- ค่าบางส่วนมีแนวโน้มคล้ายจำนวนนาทีของเวลาที่วัด แต่ยังไม่พบกฎที่ชัดเจน
การทดลองกับ AI และโค้ด
- ป้อนข้อมูลให้โมเดล AI หลายตัวผ่านแพลตฟอร์ม Kagi เพื่อช่วยวิเคราะห์
- บางตัวให้ผลลัพธ์ที่ใช้ไม่ได้ แต่ก็ช่วยชี้แนวทาง เช่น แนวคิดเรื่อง endianness
- พยายามใช้ Python เลียนแบบ initial handshake และการดาวน์โหลดข้อมูลของอุปกรณ์ แต่โค้ดที่ AI ให้มาส่วนใหญ่ไม่ถูกต้อง
- ในกระบวนการนี้ได้รู้จักไลบรารี pyhidapi เพิ่มเติม
สรุปและบทเรียน
- งานทำวิศวกรรมย้อนกลับต้องหยุดลงเพราะถึงกำหนดคืนอุปกรณ์
- แต่ในกระบวนการก็ได้รับ ประสบการณ์ปฏิบัติในการวิเคราะห์โครงสร้างข้อมูล USB และการทำวิศวกรรมย้อนกลับ
- กล่าวถึงคำศัพท์ใหม่ที่ได้เรียนรู้คือ ‘Normotension’ (ความดันโลหิตปกติ) และ ‘White Coat Hypertension’ (ความดันสูงเมื่อพบแพทย์)
- การวัดความดันทันทีหลังฉีดยาอาจทำให้ค่าที่ได้สูงขึ้นชั่วคราว
- สรุปคือ ไม่แนะนำให้วัดความดันทันทีหลังรับวัคซีน
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
มีปัญหาความดันโลหิตสูงเลยซื้ออุปกรณ์ Hilo มาใช้
หลังจากใส่ผ้าพันแขนเพื่อปรับเทียบ (calibration) แล้ว ก็สวมอุปกรณ์ชิ้นเล็กที่ข้อมือ จากนั้นมันจะวัดความดันโลหิตให้อัตโนมัติทั้งกลางวันและกลางคืนเวลาที่ไม่ได้เคลื่อนไหว
ข้อมูลจะซิงก์และเก็บไว้ในแอปสมาร์ตโฟน จึงเลี่ยงทั้งความยุ่งยากจากการต้องใส่ผ้าพันแขนทุกครั้ง และภาวะความดันสูงเวลาเจอหมอ (white coat hypertension) ได้
แต่ก็ยังต้องปรับเทียบใหม่ด้วยผ้าพันแขนประมาณเดือนละครั้ง และฟีเจอร์ที่ใช้กล้องของแอปวัดนิ้วก็ให้ผลไม่นิ่ง
ในบทความเกี่ยวกับ AI มีวลีว่า “stupid in ways that made me think” ซึ่งรู้สึกว่านี่สรุปได้ดีมากว่าทำไม AI ถึงมีประโยชน์กับการทำ rubber duck debugging
มันทำให้คิดลึกกว่าเวลาคุยกับเพื่อนร่วมงานเสียอีก
พอใส่อุปกรณ์ติดตามอัตราการเต้นหัวใจแล้ววิเคราะห์ข้อมูล ก็พบว่ามีแค่สองกรณีเท่านั้นที่หัวใจเต้นพุ่งขึ้น — ตอนขับรถกับตอนคุยกับภรรยา
นักว่ายน้ำคนหนึ่งบอกว่าไม่ใช้อุปกรณ์อะไรเลย แค่ฟังเสียงหัวใจตัวเอง
ภาวะความดันสูงเวลาเจอหมอไม่ได้เกิดจากการฉีดยาหรือบรรยากาศโรงพยาบาลเท่านั้น แต่อาจมาจากความกดดันของสถานการณ์ตอนวัดล้วน ๆ ก็ได้
สุดท้ายเลยได้ยามากิน
หลังจากนั้นทุกครั้งที่ภรรยาวัดความดัน คนเล่าก็พลอยเครียดไปด้วย
เลยดูแค่ค่าเฉลี่ย โดยทั้ง A&D UA-611 Plus ที่บ้านและเครื่องที่โรงพยาบาลก็แกว่งคล้ายกัน
ลองวิเคราะห์ฟอร์แมตข้อมูลและเดาว่าปี เดือน วัน ชั่วโมง นาที ถูกเก็บในระดับบิตอย่างไรแล้ว แต่ก็ยังไม่เข้าใจว่าทำไมถึงต้องมีการกลับบิต (reverse) หรือช่วงว่างในข้อมูลหมายถึงอะไร
มุกที่ว่า “ถ้า reverse engineer สิ่งนี้ได้ ความดันคงดีขึ้น” โดนใจมาก จนอ่านจบแล้วรู้สึกเหมือนสุขภาพดีขึ้นจริง ๆ
พอกินน้ำส้มกับกล้วยวันละสองรอบ ความดันก็ลดจาก 142/90 → 125/80
เท่ากับได้รับโพแทสเซียมวันละราว 2000mg
ประโยค “stupid in ways that made me think” ดูเหมือนจะสรุปทั้งข้อดีและข้อจำกัดของ AI ได้ดี
ตัวเองก็เริ่มจัดการข้อมูลสุขภาพด้วยตัวเองเหมือนกัน
คิดว่าแนวโน้มที่นักพัฒนาอายุมากขึ้นแล้วเริ่มรู้สึกถึงความผิดปกติของร่างกาย จนหันมาทำ การดูแลสุขภาพเชิงรุกด้วยตัวเอง จะมีมากขึ้นเรื่อย ๆ
เอกสารที่เกี่ยวข้องถูกรวบรวมไว้ที่ mikado-aktiia.readthedocs.io
ส่วนตัวใช้ BPExtract อ่าน PDF แล้วส่งค่าการวัดทั้งหมดเข้า Apple Health แบบอัตโนมัติ และรู้สึกว่าการทำอัตโนมัติดีกว่าทำเองมาก
เพราะ GP ทั่วไปมักทำหน้าที่แค่ส่งต่อไปหาผู้เชี่ยวชาญ และเวลารอก็นานเกินไป
แต่ก็ต้องตั้งต้นไว้เสมอว่าการวินิจฉัยของตัวเองอาจผิดได้
พอเห็น traffic dump ก็ชวนให้อยากลองวิเคราะห์โปรโตคอลแบบออฟไลน์ดู
ไม่นานมานี้ก็เพิ่งเสียเวลาไปครึ่งวันกับการทำวิศวกรรมย้อนกลับ (reverse engineering) ไดรเวอร์เครื่องพิมพ์เสมือนบน Windows และต้องฝืนตัวเองให้หยุดทั้งที่ยังอยากทำต่อ