- วิศวกรที่ได้รับการวินิจฉัยว่าเป็น เบาหวานชนิดที่ 1 ในปี 2020 สร้างระบบมอนิเตอร์ส่วนตัวบน Go เพื่อจัดการระดับน้ำตาลในเลือดเหมือนการตอบสนองต่อเหตุขัดข้อง
- เนื่องจาก Libre ไม่มี API หรือ SDK อย่างเป็นทางการ จึงเชื่อมต่อโดยตรงได้ยาก แต่พบเส้นทางที่ส่งข้อมูลระดับน้ำตาลในเลือดไปยัง endpoint ภายนอกทุก 2 นาที ผ่าน Miao Miao และแอป Tomato
- ใช้ Go echo server และการดีพลอยด้วย Encore เพื่อตรวจสอบรูปแบบคำขอของ Tomato แล้วแปลงค่า SGV ไปแสดงเป็นเกจระดับน้ำตาลในเลือดแบบเรียลไทม์บนแดชบอร์ด Grafana
- บอต Telegram ใช้เพิ่ม หมายเหตุบริบท เช่น มื้ออาหาร การออกกำลังกาย และการฉีดอินซูลิน ส่วน cron ที่รันทุก 5 นาทีจะสร้าง incident ใน incident.io หากระดับน้ำตาลต่ำกว่าเกณฑ์
- เวิร์กโฟลว์ที่ผสานการแจ้งเตือน การ escalation และรายงานนี้ทำหน้าที่เป็นระบบ observability ด้านสุขภาพส่วนบุคคล ที่ช่วยไม่ให้ต้องรับมือกับน้ำตาลต่ำหรือช่วงขาดข้อมูลการวัดตามลำพัง
มองเบาหวานชนิดที่ 1 เป็นปัญหาการตอบสนองต่อเหตุขัดข้อง
- เบาหวานชนิดที่ 1 เป็นโรคภูมิคุ้มกันทำลายตนเองที่ทำให้ตับอ่อนผลิต อินซูลิน ซึ่งจำเป็นต่อการเปลี่ยนคาร์โบไฮเดรตเป็นพลังงาน ได้น้อยมากหรือไม่ได้เลย
- ต้องเสริมอินซูลินด้วยการฉีด และปริมาณที่ฉีดขึ้นอยู่กับอาหารที่กินและตัวแปรอื่น ๆ หลายอย่าง
- ชนิดที่ 1 ไม่ใช่โรคที่เกิดจากพฤติกรรมการใช้ชีวิต และปัจจุบันยังไม่มีวิธีรักษาให้หายขาด
- ต้องมอนิเตอร์ระดับน้ำตาลในเลือดอย่างต่อเนื่อง
- หากอยู่ในระดับสูงเกินไปเป็นเวลานาน อาจนำไปสู่ความเสียหายของอวัยวะและอายุขัยที่สั้นลง
- หากต่ำเกินไป แม้ในช่วงเวลาสั้น ๆ ก็อาจถึงแก่ชีวิตได้
- หากระดับน้ำตาลต่ำเกินไป อาจไม่สามารถกินหรือดื่มได้อย่างปลอดภัยและอาจต้องการความช่วยเหลือจากผู้อื่น
- ทุกครั้งที่เห็นอาหารหรือเครื่องดื่ม ต้องคำนวณปริมาณคาร์โบไฮเดรตและปริมาณอินซูลินที่ต้องใช้ แม้แต่การออกกำลังกายอย่างการเดินสั้น ๆ ก็ต้องคำนึงถึงปริมาณอินซูลินที่ยังออกฤทธิ์อยู่ในร่างกาย
- สถานการณ์ที่การมองเห็นระดับน้ำตาลในเลือดหายไป สามารถมองคล้ายกับภาวะที่ observability เป็นศูนย์ ในระบบงาน
- หากเป็นงาน คงประกาศ incident และไม่ปิดจนกว่าจะกู้คืนการมองเห็นได้
- ระดับน้ำตาลต่ำเป็นสัญญาณแรกว่ามีบางอย่างผิดปกติ และเป็นภาวะที่ต้องดำเนินการทันที
หาเส้นทางข้อมูลด้วย Libre, Miao Miao และ Tomato
- อุปกรณ์ Libre ที่ติดไว้บนแขนสามารถอ่านระดับน้ำตาลในเลือดได้เมื่อเอาโทรศัพท์เข้าไปใกล้
- ต้องเปลี่ยนอุปกรณ์ทุก 2 สัปดาห์
- หากระดับน้ำตาลในเลือดลดลงต่ำกว่าเส้นสีแดงที่กำหนด ต้องรับคาร์โบไฮเดรต
- หากออกนอกช่วงสีเขียว อาจต้องพิจารณาดำเนินการ เช่น ฉีดอินซูลิน
- การออกกำลังกาย น้ำหนักที่เพิ่มขึ้น และความเจ็บป่วยทำให้ความไวต่ออินซูลินเปลี่ยนไป การจัดการระดับน้ำตาลจึงเป็นเป้าหมายที่ขยับอยู่ตลอด
- หาก Libre แสดงข้อผิดพลาด จะอ่านระดับน้ำตาลจากอุปกรณ์ไม่ได้ และไม่ได้รับการแจ้งเตือนระดับอันตรายด้วย
- Libre เป็น อุปกรณ์ระบบปิด จึงดึงข้อมูลโดยตรงได้ยากหากไม่มี API หรือ SDK
- Miao Miao ติดตั้งไว้บน Libre เพื่อสแกนประมาณทุก 2 นาที และส่งผลลัพธ์ไปยังแอป Tomato
- แม้แอป Libre หลักจะแสดงข้อผิดพลาด เส้นทางผ่าน Miao Miao ก็ยังเผยแพร่ข้อมูลต่อไป
- ดูเหมือนว่าแอปหลักมองการเปลี่ยนแปลงระดับน้ำตาลอย่างรวดเร็วเป็นค่าผิดปกติและไม่ส่งข้อมูล แต่ผู้ใช้ต้องการตัดสินข้อมูลลักษณะนั้นด้วยตนเองด้วย
- แอป Tomato มีฟีเจอร์เผยแพร่ระดับน้ำตาลในเลือดเป็นอีเวนต์ Google Calendar ทุก 5 นาที ทำให้สามารถดูระดับน้ำตาลบน complication ของ Apple Watch ได้
ตรวจสอบคำขอของ Tomato ด้วย Go echo server
- ในการตั้งค่าแอป Tomato มีช่องใส่ URL สำหรับซิงก์ข้อมูลของ Nightscout
- เมื่อนำที่อยู่เว็บเซิร์ฟเวอร์ที่ดูแลเองไปใส่แทน URL ของ Nightscout เส้นทางต่อไปนี้ก็ปรากฏในล็อกของเกตเวย์
/id/e1d67817-4591-4e8e-9bca-58a07a1087d8/api/v1/devicestatus
- เพื่อดูเนื้อหาคำขอ จึงเขียน echo server ง่าย ๆ ด้วย Go
- ใช้ encore.dev สำหรับการดีพลอยและรันระบบ และสามารถให้ระบบมอนิเตอร์ทำงานได้ฟรี
// encore:api public raw method=POST path=/id/:id/api/v1/devicestatus
func Echo(w http.ResponseWriter, req *http.Request) {
w.Header().Set("Content-Type", req.Header.Get("Content-Type"))
if _, err := io.Copy(w, req.Body); err != nil {
http.Error(w, "Failed to echo request", http.StatusInternalServerError)
return
}
}
- echo server คือเซิร์ฟเวอร์ที่ส่งข้อมูลที่ไคลเอนต์ส่งมากลับไปตามเดิม มีประโยชน์สำหรับแก้ปัญหาเครือข่ายหรือทดสอบพฤติกรรมของแอปพลิเคชัน
- ตรวจสอบคำขออื่น ๆ ด้วยวิธีเดียวกัน จนได้ response ที่มีข้อมูลระดับน้ำตาลในเลือด
- date: 1696171541297
sgV: 73
delta: 0
sysTime: 1696171541381
dateString: "2023-10-01T14:45:41.297Z"
_id: "dOUXaI8HcaulCGrQfxe23UE0"
type: "sgv"
device: "Tomato"
direction: "Flat"
sgV คือค่าระดับน้ำตาลในเลือด และหารด้วย 18 เพื่อให้ตรงกับหน่วยที่ใช้ในสหราชอาณาจักร
- response ยังมีวันที่ เวลา และทิศทางแนวโน้มรวมอยู่ด้วย
- การเรียกนี้เกิดขึ้นทุก 2 นาที
แดชบอร์ด Grafana และเกจระดับน้ำตาลในเลือด
- ตั้งค่าระดับน้ำตาลในเลือดที่รับเข้ามาเป็น Gauge metric
- เกจเป็นเมตริกที่แสดงค่าตัวเลขเดี่ยวที่ขึ้นลงได้ ใช้สำหรับวัดค่าที่เปลี่ยนแปลง เช่น การใช้หน่วยความจำ จำนวนคำขอพร้อมกัน หรืออุณหภูมิ
- บันทึกค่าระดับน้ำตาลโดยแปลงด้วย
newValue / 18
var BloodSugar = metrics.NewGauge[float64]{
name: "blood_sugar",
metrics.GaugeConfig{},
}
BloodSugar.Set(float64(newValue) / 18)
if err := insertReading(ctx, newValue); err != nil {
rlog.Error(msg: "failed to insert blood sugar, proceeding", keysAndValues: "db_err", err)
}
- ข้อมูลระดับน้ำตาลในเลือดยังถูกเก็บลง Postgres แบบพยายามให้ดีที่สุดด้วย
- หากบันทึกลง DB ล้มเหลว จะเพียงบันทึกล็อกแล้วดำเนินการต่อ เพื่อไม่ให้ตรรกะส่วนที่เหลือล้มเหลวตาม
- แดชบอร์ด Grafana แสดงเกจระดับน้ำตาลในเลือดที่อัปเดตทุก 2 นาทีแบบเรียลไทม์
- ช่วงระดับน้ำตาลเป้าหมายโดยอุดมคติคือ ระหว่าง 4 ถึง 9
- หากแชร์แดชบอร์ดหรือวางมอนิเตอร์ไว้ที่บ้าน ก็สามารถดูสถานะระดับน้ำตาลได้ในพริบตา
เพิ่มบริบทของระดับน้ำตาลด้วยบอต Telegram
- ตัวเลขระดับน้ำตาลอย่างเดียวไม่เพียงพอ และ บริบท สำคัญเหมือนในการมอนิเตอร์ระบบซับซ้อน
- แม้ระดับน้ำตาลจะสูงขึ้นหลังอาหารทันที แต่หากฉีดอินซูลินไปแล้ว ก็อาจไม่ใช่สถานการณ์ที่ต้องกังวลในทันที
- Grafana รองรับ annotation แต่การต้องล็อกอินไปใส่ annotation ด้วยตนเองเป็นภาระมาก
- จึงสร้างบอต Telegram ให้เพิ่ม annotation ผ่าน webhook ทุกครั้งที่ได้รับข้อความ
// encore:api public raw method=POST path=/webhook
func Webhook(w http.ResponseWriter, req *http.Request) {
body, err := io.ReadAll(req.Body)
if err != nil {
http.Error(w, "could not read request body", http.StatusBadRequest)
return
}
defer req.Body.Close()
var update Update
err = json.Unmarshal(body, &update)
if err != nil {
http.Error(w, "could not unmarshal JSON", http.StatusBadRequest)
return
}
}
- webhook รับคำขอ ตรวจสอบข้อความ unmarshal JSON แล้วส่งผลการประมวลผลกลับไปยัง Telegram
- หลังตรวจสอบข้อความแล้ว จะ parse จำนวนเต็มและเรียกบริการ annotation
- บริการ annotation ใส่แท็กตามเนื้อหากิจกรรม
func getTags(ctx context.Context, activity string) []string {
a := strings.ToLower(activity)
switch a {
case "walk", "run", "ran", "gym":
return []string{"exercise"}
case "eat", "ate":
return []string{"food eaten"}
case "inject":
return []string{"inject"}
default:
return []string{"other"}
}
}
- ใน Grafana สามารถกำหนดสีตามแท็กและตั้งค่า query สำหรับ annotation ได้
- เมื่อบริบทอย่างมื้ออาหาร การออกกำลังกาย และการฉีดอินซูลินแสดงอยู่บนกราฟ ทั้งเจ้าตัวและคนที่ดูแดชบอร์ดจะตีความสถานการณ์ระดับน้ำตาลได้ง่ายขึ้น
เปลี่ยนระดับน้ำตาลต่ำให้เป็น incident
- แม้จะมองเห็นระดับน้ำตาลในเลือดแล้ว แต่หากไม่มีการแจ้งเตือนก็ยังตอบสนองแบบเรียลไทม์ได้ยาก
- ตามคำแนะนำที่ได้รับจากพยาบาล หากระดับน้ำตาลลดลง ต่ำกว่า 4 ต้องเริ่มดำเนินการแก้ไข
- เขียน cron ขนาดเล็กที่ตรวจสอบค่าที่วัดได้ทุก 5 นาที และหากต่ำกว่าขีดจำกัดล่างที่กำหนดไว้ล่วงหน้า ก็จะ trigger incident
var _ = cron.NewJob(
id: "monitor-blood",
cron.JobConfig{
Title: "monitor blood to check if there is reason to open an incident",
Every: 5 * cron.Minute,
Endpoint: BloodIncidentCron,
},
)
if r < BloodLowerLimit {
if err := triggerIncident(ctx); err != nil {
return fmt.Errorf("failed to trigger an incident: %w", err)
}
}
- เพิ่มโค้ดในบอต Telegram เพื่อเปิด incident ด้วยตนเองผ่านข้อความ
"i need help" ด้วย
- เมื่อ incident ถูก trigger ไมโครเซอร์วิสแยกต่างหากจะสร้าง incident ใน incident.io
- เหตุผลที่เลือก incident.io คือมันคล้ายกับเครื่องมือ incident ภายในของ Cloudflare มากที่สุด และเขียนด้วย Go ทั้งหมด
payload := Payload{
IdempotencyKey: idemKey.String(),
Mode: incidentModeStandard,
Name: fmt.Sprintf("Matt's blood sugar is currently #%s", blood),
SeverityID: incidentSeverityCritical,
Summary: "Matt's blood sugar is low!",
Visibility: "public",
}
- เมื่อใช้เครื่องมือ incident จริง สามารถตั้งค่านโยบาย escalation และดูรายงานอย่างเวลาที่ใช้ในสถานะ incident ได้
- เวิร์กโฟลว์ของ incident.io สามารถตั้งกฎคล้าย Zapier และส่งการแจ้งเตือนทาง SMS ไปยังผู้ติดตามได้
- ในเวิร์กโฟลว์ตัวอย่าง เมื่อเปิด incident จะส่ง SMS ถึงเจ้าตัว และหากยังไม่ปิดภายใน 20 นาที จะ escalation อัตโนมัติไปยังคู่ชีวิตหรือพี่น้อง
รายงานและการปรับปรุงในอนาคต
- เมื่อใช้เครื่องมือ incident จะดูเป็นรายงานได้ว่า incident ระดับน้ำตาลต่ำเกิดขึ้นมากน้อยเพียงใดตามเวลา
- กราฟตัวอย่างเป็นข้อมูลเดโมสำหรับบล็อก ส่วนข้อมูลจริงโชคดีที่น่าเบื่อกว่ามาก
- หากเหตุการณ์ระดับน้ำตาลต่ำมีแนวโน้มเพิ่มขึ้น อาจเป็นสัญญาณว่าวิธีรักษาปัจจุบันไม่เหมาะสม และเป็นหลักฐานสำหรับปรึกษาแพทย์
- รายการปรับปรุงที่มีอยู่ในปัจจุบันหรือกำลังวางแผนมีดังนี้
- ปิดอัตโนมัติ: ตอนนี้ยังปิด incident ด้วยตนเองเพื่อทบทวนข้อมูล แต่เคยปิดช้าไปหลายครั้งจนถูก escalation จึงอาจปิดอัตโนมัติได้หากระดับน้ำตาลคงที่ราว 15 นาที
- สนทนากับข้อมูล: มีการเก็บข้อมูลระดับน้ำตาลในเลือดหลายปี และต้องการฝึก LLM เพื่อถามคำถามอย่าง “ทำไมมักต่ำตอนบ่าย 3 โมง?” รวมถึงใช้ข้อมูลอื่น ๆ เช่น Google Calendar ร่วมด้วย
- ขยายกราฟ: กราฟปัจจุบันยังเรียบง่าย แต่สามารถเพิ่มตัวชี้วัดอย่าง hba1c ที่ใช้ตัดสินความสำเร็จของการจัดการเบาหวานได้
- เสริมการป้องกันความล้มเหลว: เพราะระบบนี้มีความสำคัญ ยิ่งป้องกันความล้มเหลวได้มากเท่าไรก็ยิ่งดี
ระบบปฏิบัติการสุขภาพส่วนบุคคลที่สร้างด้วยการเขียนโค้ด
- ช่วงแรกที่ได้รับการวินิจฉัยว่าเป็นชนิดที่ 1 เคยกลัวว่าโรคนี้จะทำให้ชีวิตยากขึ้น
- โปรเจกต์นี้ช่วยให้เข้าใจ จัดการ และมอนิเตอร์ภาวะชนิดที่ 1 ได้ดีขึ้น
- มองการจัดการระดับน้ำตาลในเลือดเหมือน distributed system และทำให้เป็นระบบปฏิบัติการส่วนบุคคลที่มี observability, การแจ้งเตือน, incident, escalation และรายงาน
- ความสามารถในการเขียนโค้ดทำให้สามารถทำให้การจัดการโรคที่ยังถือเป็นคำพิพากษาประหารชีวิตจนถึงทศวรรษ 1920 กลายเป็นอัตโนมัติได้ในระดับหนึ่ง
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
ใช้ชีวิตอยู่กับ เบาหวาน มา 16 ปีแล้ว และชอบน้ำเสียงของผู้เขียนมาก ทั้งยังน่านับถือด้วย เวลาที่รู้สึกเศร้าหรือโกรธเพราะโรคนี้ อยากให้กลับมาอ่านบทความนี้อีกครั้ง แล้วนึกถึงตอนนี้ที่เคยมั่นใจว่าตัวเองรับมือทุกอย่างได้
มันไม่ง่ายเลย ทั้งในแง่จิตใจและในทางปฏิบัติ สำหรับผม หลายปีที่ผ่านมาแทบจะเป็นสภาพ “หลุดการควบคุมอย่างสนุกสนาน”
แค่เมื่อวานนี้เอง เป็นครั้งแรกในชีวิตที่เป็นเบาหวาน ผมเห็นว่า คงอยู่ในช่วงเป้าหมายได้ 36 ชั่วโมง แล้วร้องไห้ออกมาจริง ๆ ตลอด 36 ชั่วโมงนั้นเป็นสีเขียว 100% บางทีตอนนี้ผมอาจจะเริ่มเข้าใจแล้วก็ได้
หลายปีต่อมา คุณภาพชีวิตที่กระโดดขึ้นมาถึงระดับราว 60% เป็นผลจากไมโครปั๊มที่เชื่อมกับ CGM, การแลกเปลี่ยนประสบการณ์กับผู้ป่วยเบาหวานคนอื่น ๆ, การติดตั้ง NightScout VM เพื่อให้ดูน้ำตาลในเลือดและแนวโน้มได้ทุกที่ ทั้งบนโทรศัพท์ นาฬิกา วิดเจ็ตเดสก์ท็อป นาฬิกาปลุก และตู้เย็น รวมถึงการนับคาร์โบไฮเดรตแบบแม่นยำสไตล์เยอรมัน และฉีด โบลัสก่อนอาหารตรงเป๊ะ 15 นาที ผมเกลียดการใช้ชีวิตแบบนี้จริง ๆ แต่มันได้ผล
อดทนไว้ อย่าเสียศูนย์
สไตล์การเขียนดีมากจริง ๆ และอ่านเพลินมาก บังเอิญว่าผมทำงานด้าน penetration testing และหนึ่งในเพื่อนร่วมงานก็เป็น เบาหวานชนิดที่ 1
พอเห็นภาพรวมในบทความนี้และความซับซ้อนที่ตามมา ก็ทำให้ผมเห็นใจเพื่อนร่วมงานคนนั้นมากขึ้น เขาต้องก้าวข้ามความยากลำบากแบบนั้นทุกวัน แต่ก็ยังเป็นหนึ่งในคนที่ใจดีที่สุดและเข้าหาง่ายที่สุดในทีม
แต่พออ่านบทความนี้แล้ว ก็รู้สึกได้จริง ๆ ว่าต้องใช้ วินัยในตัวเองระดับไหน ถึงจะใช้ชีวิตแบบนั้นได้
แน่นอนว่าอาจหมายถึงงานเจาะระบบแบบ penetration testing ก็ได้ เลยสงสัยว่าทำงานนั้นอยู่หรือเปล่า
เมื่อไม่นานมานี้ผมอ่านเจอกรณีของพนักงานคนหนึ่งที่ทุกคนคาดว่าจะได้เลื่อนตำแหน่ง แต่สุดท้ายไม่ได้เลื่อน ความผิดของเขามีแค่เคยพูดสั้น ๆ กับเพื่อนร่วมงานว่ารถเสียและเหนื่อยกับการต้องซ่อมบ่อย ๆ
ตำแหน่งที่เลื่อนขึ้นต้องมีการเดินทางไปทำงานในระดับหนึ่ง แล้วผู้จัดการก็บอกว่า “ตั้งใจจะเลื่อนตำแหน่งให้ แต่ได้ยินมาว่าสภาพรถไม่ค่อยดี”
หลังจาก Matt นำเสนอเรื่องนี้ที่ GopherConSG เราคุยกันถึงปัญหาที่เราไม่ได้เป็นเจ้าของข้อมูลของตัวเอง สิ่งที่น่าสนใจคือฝั่ง ผู้ให้บริการข้อมูล หรือก็คือบริษัทที่มอนิเตอร์ระดับน้ำตาลในเลือด มีความรับผิดทางกฎหมายที่ต้องแบกรับอยู่มาก ทำให้เรื่องนี้ค่อนข้างซับซ้อน และก็พอเข้าใจได้ว่าทำไมบริษัทใหญ่ ๆ ถึงลังเลที่จะเปิดข้อมูล
ในทางกลับกัน การที่ผู้ใช้เข้าถึงข้อมูลที่ควรเป็นของตัวเองโดยชอบธรรมและนำไปใช้ในการตัดสินใจจริงไม่ได้ ก็ดูไม่ยุติธรรมอยู่มาก
เมื่อวานผมทำของที่เกี่ยวข้องกันอย่างหนึ่ง เป็น ปลั๊กอิน tmux ที่แสดงข้อมูลน้ำตาลในเลือดเป็นไอคอนสถานะในเทอร์มินัล
ผมก็เป็นเบาหวานชนิดที่ 1 และใช้ Dexcom เป็น CGM ตอนนี้ทำให้มันทำงานกับสภาพแวดล้อมนั้นไว้ก่อน แต่ก็อยากรองรับอุปกรณ์อื่น ๆ และเพิ่มฟีเจอร์ให้มากขึ้น ถ้าสนใจดูได้ที่นี่
https://github.com/Cian911/tmux-xdrip
ไอเดีย Miao Miao น่าสนใจ ในฐานะผู้ป่วยเบาหวานชนิดที่ 1 Freestyle Libre เป็นอุปกรณ์ที่ยอดเยี่ยมและเปลี่ยนชีวิตได้จริง ๆ แต่ซอฟต์แวร์ค่อนข้างแย่
ผมรายงานบั๊กไปกว่าหนึ่งปีแล้ว แต่ Abbott ยังไม่ยอมรับว่าเป็นบั๊ก ทั้งที่มีรายงานแบบเดียวกันมากมายในออนไลน์และรีวิวแอปบน Google Play
เผื่อใครสนใจหรือช่วยกดดันให้ Abbott ยอมรับได้ บั๊กคือแม้จะใส่ LibreLink ไว้ในรายชื่อแอปยกเว้นโหมดห้ามรบกวนแล้วก็ยังไม่เกิดผล และทันทีที่เข้าโหมดห้ามรบกวน จะมีคำเตือนว่า “ไม่สามารถใช้การเตือนได้” โผล่ขึ้นมา ในสภาพแวดล้อมการทำงานที่ต้องเปิดโหมดห้ามรบกวน มันไม่สะดวกเพราะการเตือนน้ำตาลในเลือดก็ถูกปิดไปด้วย
เรื่องที่เกี่ยวข้องกันเล็กน้อยคือ เมื่อ 6 เดือนก่อนผมได้รับการวินิจฉัยว่าเป็น ภาวะหยุดหายใจขณะหลับจากการอุดกั้น และต้องใช้เครื่อง CPAP ที่เป่าลมด้วยแรงดันคงที่ตอนนอนเพื่อป้องกันการอุดกั้นของทางเดินหายใจ มันไม่ได้เป็นระดับภารกิจสำคัญต่อชีวิตเหมือนเบาหวานชนิดที่ 1 แต่เครื่องพวกนี้เก็บ log มากกว่าที่คิดไว้มาก
ตอนอ่านบทความนี้ ผมก็สงสัยว่าฝั่งภาวะหยุดหายใจขณะหลับมีการแฮ็กคล้าย ๆ กันเพื่อการมอนิเตอร์ หรือสำหรับกรณีที่หนักกว่านั้นบ้างไหม
ผมรู้จัก OSCAR อยู่แล้วและใช้อย่างขอบคุณมาก แต่ก็สงสัยว่านอกจากนั้นยังมีอะไรอีก
1: https://www.sleepfiles.com/OSCAR/
ในการตรวจการนอนหลับ ช่วงที่แย่ที่สุดมีเหตุการณ์หยุดหายใจราว 48 ครั้งต่อนาที ถ้าลิ้นม้วนเข้าไปในทางเดินหายใจ การหายใจก็ยากพอสมควร
น่าสนใจ แต่สงสัยว่ามีเหตุผลอะไรที่ไม่ได้ดู ซอฟต์แวร์โอเพนซอร์ส ในด้านนี้อย่าง Nightscout, xDrip ฯลฯ
นี่ไม่ใช่ปัญหาใหม่ และมีคนจำนวนมากแก้ไว้แล้วด้วยโซลูชันที่มีฟีเจอร์ครบกว่าและทำงานได้ดีมาก
Scott Hanselman เขียนบล็อกและทำ YouTube เกี่ยวกับ เบาหวานชนิดที่ 1 และการแฮ็กด้วยเทคโนโลยีต่าง ๆ มาหลายปีแล้ว เมื่อก่อนเขาเคยแฮ็กให้ระดับน้ำตาลในเลือดแสดงในพรอมป์ต์เทอร์มินัลด้วย: https://www.youtube.com/watch?v=_meKUIm9NwA
ข้อความว่า “ในช่วงเวลานี้ เครื่องจะไม่สามารถวัดระดับน้ำตาลในเลือดได้ และแม้ระดับน้ำตาลจะไปถึงระดับอันตรายก็จะไม่ได้รับการแจ้งเตือน ข้อผิดพลาดนี้มีนิสัยชอบเกิดขึ้นในช่วงเวลาที่เครียดที่สุด” และ “พอดูแล้ว แอปหลักดูเหมือนจะไม่ชอบส่งข้อมูลที่ระดับน้ำตาลในเลือดเปลี่ยนฉับพลันจนดูเหมือนเป็นค่าผิดปกติ” ฟังดูเหมือน บั๊กที่คุกคามชีวิต เลย
ถ้าพูดอย่างเคร่งครัด ไม่ควรตัดสินใจเรื่องการรักษาโดยอาศัยข้อมูล CGM เพียงอย่างเดียว
สำหรับเซ็นเซอร์ Dexcom แอปบางตัวสามารถดึงค่าดิบมาและเลี่ยงกระบวนการนี้ได้ ส่วน Libre อย่างน้อยก็ Libre 3 ผมเคยเห็นว่ามันเติมข้อมูลย้อนหลังในบางสถานการณ์ หากตัดสินว่านั่นไม่ใช่ค่าที่อ่านผิด แต่เป็นช่วงที่น้ำตาลในเลือดกำลังเปลี่ยนอย่างรวดเร็ว
แม้จะไม่ใช่เทคโนโลยีเป็นหลัก แต่ก็มี สุนัขแจ้งเตือนเบาหวาน ด้วย
ช่วงหลังผมได้เรียนรู้ว่าสุนัขที่ฝึกมาอย่างดีประสบความสำเร็จมากในการเสริมระบบมอนิเตอร์และแจ้งเตือนเชิงเทคโนโลยี เพื่อเตือนผู้ดูแล