مقدمة
يرتدي الأشخاص أساور اللياقة البدنية لأسباب مختلفة ، يمكنني تحمل بعضها:
- من أجل الحفاظ على لياقتهم وتحقيق أهداف النشاط ؛
- لأنه شيء صغير عصري ؛
- لتجربة نفسك أو لمعرفة نفسك بشكل أفضل.
أرتدي سوار اللياقة البدنية لسبب رقم 3. في هذه المقالة ، أود التحدث عن كيفية استخراج البيانات من سوار ومحاولة الحصول على بعض التبعيات.
تعمل طرق استخراج هذه البيانات في Mi Band 1 و 1S وربما 2 (يبدو أن التطبيق لـ 2 هو نفسه).
استخراج البيانات
لاستخراج البيانات من السوار ، بادئ ذي بدء ، تحتاج إلى الحصول على قاعدة البيانات من هاتف SQLite التي يتم تخزين المقاييس التي تم جمعها. في حالة Android ، يتم ذلك ببساطة شديدة ، راجع الموضوع في منتدى مطوري xda ، البرامج النصية لقاعدة البيانات الحالية :
- نقوم بتوصيل هاتف Android مع تمكين تصحيح أخطاء USB بجهاز كمبيوتر ؛
- نقوم بعمل نسخة احتياطية من التطبيق:
adb backup -f mi.ab -noapk -noshared com.xiaomi.hm.health
؛ - قم
dd if=mi.ab bs=1 skip=24 | python -c "import zlib,sys;sys.stdout.write(zlib.decompress(sys.stdin.read()))" > mi.tar
dd if=mi.ab bs=1 skip=24 | python -c "import zlib,sys;sys.stdout.write(zlib.decompress(sys.stdin.read()))" > mi.tar
؛ - قم بفك
tar xvf mi.tar apps/com.xiaomi.hm.health/db/ 2>&1 | tee -a log
الأرشيف من قاعدة البيانات: tar xvf mi.tar apps/com.xiaomi.hm.health/db/ 2>&1 | tee -a log
tar xvf mi.tar apps/com.xiaomi.hm.health/db/ 2>&1 | tee -a log
- انسخ قاعدة البيانات:
cp -f apps/com.xiaomi.hm.health/db/origin_db* ./db/
.
نتيجة لذلك ، نحصل على قاعدة بيانات SQLite باسم الملف db/origin_db_[0-9]+$
، الذي يخزن قياسات Mi Band.
تحميل البيانات وتحليلها
لدراسة البيانات ، في رأيي ، من المريح استخدام دفتر IPython : Xiaomi_Mifit_miband_data.ipynb
يتم تخزين المقاييس في جدول DATE_DATA:
df = pd.read_sql_query("SELECT * from DATE_DATA", con)
الأعمدة في الجدول التي تهم:
البيانات المجمعة اليومية
يتم تخزين البيانات المجمعة كـ JSON:
{"slp":{"usrEd":-1440,"lt":457,"st":1464376080,"wk":15,"dp":30,"usrSt":-1440,"ed":1464406200},"v":5,"goal":8000,"stp":{"rn":2,"cal":257,"runDist":256,"wk":69,"ttl":5244,"runCal":13,"dis":3817}}
يتم تقسيم البيانات إلى قسمين: النوم ( slp ) والنشاط ( stp ). بالنسبة للنوم ، يتم تخزين وقت البدء والنهاية - st ، ed ، وكذلك وقت النوم العميق والخفيف في دقائق - لتر ، dp . يتم أيضًا تخزين وقت الاستيقاظ بين بداية ونهاية النوم - أسبوع . بالنسبة للنشاط ، يتم تخزين إجمالي عدد "الخطوات" ttl - مجموع قراءات المستشعرات الأولية لليوم والكميات المشتقة الأخرى func(ttl, , )
.
النشاط الخام وبيانات معدل ضربات القلب
يتم تخزين بيانات النشاط الخام كل دقيقة (يوميًا 1440) ، وتمثل 3 قيم في الدقيقة. القيمة الأولى هي حلم وقيمة من 0 إلى 127 (ولكن في حالتي بحد أقصى 126) ، فإن القيمة الثانية والثالثة هي نشاط بقيمة 0 إلى 255 (لدي نشاط بحد أقصى 2 - 189 ، نشاط 3 - 240).
يتم تخزين النبض كل دقيقة وتتراوح من 0 إلى 255.
كيف تصبح البيانات الخام مجمعة يوميًا
أبسط تجميع هو عدد الخطوات في اليوم - مجموع قيم النشاط 3 في اليوم. من الصعب النوم: لم أتعلم أبدًا كيفية تحويل بيانات النوم الخام إلى بيانات مجمعة. في المنتديات ، تم التعبير عن فكرة أن قيمة النشاط 1 == 4 هي النوم العميق ، و 5 خفيفة ، لكنها بسيطة مثل الخطوات لإقامة علاقة بين البيانات المجمعة والبيانات الخام.
تحليل البيانات
أولاً ، كم كنت أنام خلال العام. تحولت هذه القيمة إلى ~ (7 + - 1) ساعات. يبدو أن كل شيء على ما يرام مع ذلك.

شيء آخر واضح - أحصل على قسط كاف من النوم في عطلات نهاية الأسبوع:

إذا قمت بالاتصال بنوم النوم العميق بجودة الضوء ، فقد تبين أن أفضل نوعية للنوم يوم الخميس ، وفي نفس الوقت ، فإن النوم العميق هو 23٪ من إجمالي وقت النوم. وفي يوم الجمعة - أسوأ نوعية للنوم ، أخشى حتى أن أخمن السبب.

الحد الأقصى لعدد "الخطوات" التي أجريها يومي الجمعة والسبت:

في نفس الوقت ، بيئتي هي اليوم الذي أنام فيه قليلاً وأمشي قليلاً ، لا توجد أي تفسيرات واضحة من فئة "أعمل من المنزل" ، لذلك هذا شيء جديد بالنسبة لي.
آمل أن يرغب شخص من مالكي الأساور الشهيرة في Mi في دراسة أنفسهم والتحدث عن ميزاتهم.