Slide 1

Slide 1 text

Windows10+Python3で Glucometer Utilities を使ってみる 大野 哲生(@g_plains) On 2019/11/30

Slide 2

Slide 2 text

アジェンダ?  自己紹介  とあるI型糖尿病患者の生活  とある血糖測定器の仕様  Glucometer Utilitiesの紹介  Glucometer Utilitiesを実際に使ってみる  おわりに

Slide 3

Slide 3 text

自己紹介  ハンドル : こてつ(@g_plains)  出身 : 愛知で銀杏のおいしいところ  おしごと :仮想化基盤(VMware)の維持管理  推しごと :DDTプロレスさん

Slide 4

Slide 4 text

とあるI型糖尿病患者の生活  三食の前に血糖値を測ります  測定値と食事から投与量を決めて  お注射して、\いただきます/  寝る前にも測定します  診察日が近づいてきたら、レポートの作成 血糖測定器からのデータ転記、すごく大変 (1計測毎にページめくり、30日分で120クリック)

Slide 5

Slide 5 text

で、血糖測定器ナニ使ってる?  自分は Abbott プレシジョンネオを使っています  この子、USBのクチがあるんですよ  PCに接続すると、HIDで認識する(3850)んですよ

Slide 6

Slide 6 text

血糖測定器をPCに接続したら  実際のところ、レポートがいけてなかった A4用紙1枚に、2-3日分しか印字されない仕様 (たのむ、そこはCSVでくれ)  測定器具ってもガジェットとして面白そう (借り物です)  あくまで病院からお借りしてるものなので、「倫理的な所」 よりも病院との「貸借契約」のほうが重かった  …そうだね、買おう (ということで同型機を●天市場経由で取り寄せました)

Slide 7

Slide 7 text

Glucometer Utilities  複数の血糖測定器に対応したライブラリ LifeScan、Abbott、Roche…  作者はDiego Elio Pettenòさん(2型患者) https://github.com/Flameeyes/glucometerutils  Python3ベース POSIXでの動作確認をしている模様

Slide 8

Slide 8 text

Glucometer Utilities  解析(reversing)した結果は有志で集めてる https://protocols.glucometers.tech/

Slide 9

Slide 9 text

とりあえず使ってみた  Windows10なので、ストアアプリから Python3 を取ってきます  作者のリポジトリからZIPでダウンロード https://github.com/Flameeyes/glucometerutils  Setup.pyを”--user”をつけて実行 python setup.py install –user ※pip installするときは、 attrs construct hidapi 必須 あと pip uninstall hid (hidapiとhidは共存できない?)

Slide 10

Slide 10 text

はまり1:早速低血糖  意気揚々とコマンド実行 > python3 glucometer.py --driver fsprecisionneo dump  早速dump失敗! …ある日の記録値がLO(30以下)だった!  プレシジョンネオの説明書より > 血糖値が500を越えたら HI を出力します > 血糖値が30を下回ったらLOを出力します 数値のところにローマ字が入る仕様…Σ(‘A’;) →コードを書き換えなきゃ

Slide 11

Slide 11 text

はまり1:早速低血糖  “HI”と”LO”に説明書通りの値を書いてみる  今度こそ、コマンド実行 > python3 glucometer.py --driver fsprecisionneo dump  血糖値の一覧が取得できた! values = [] for value in record: if value == "HI": value = 500 if value == "LO": value = 30 values.append(int(value)) raw_reading = _NeoReading._make(values[:len(_NeoReading._fields)])

Slide 12

Slide 12 text

はまり2:インスリン投入記録  せっかくなのでインスリン投入記録もほしい  血糖値とインスリン単位数は、区分コードの違い 血糖値=5、ケトン=7、投入単位=10  新規にメソッドを書いて(fsprecisionneo.py) 基底のデータクラス書いて(common.py) さて変数はどこで定義…あれ。 →ラムダ式で実装されていました。  はじめてのpython修正だと思ったら まさかのはじめてのラムダ式だったよ

Slide 13

Slide 13 text

そんなこんなで出力結果  ひとまず血糖値も投入単位も出力できました  わたしの夕食前血糖値、高すぎ… う、運動がんばりましょう!

Slide 14

Slide 14 text

最後に  Python3のスクリプトがWindows10でも動くと ちょっと嬉しい  もう少しコードがうまく整形できたら、作者さん にリクエスト投げてみようと思います(まだPoC) 取り急ぎforkしようかな…  医療機関からお借りしてる機材は大事にしようね (自腹で買うと結構高いぞ!)