Skip to main content

MeasureMe (Core Library)

GitHub license PyPI - Python Version semver GitHub tag (latest SemVer) Code style: autopep8

The MeasureMe project is an open source Python library for storing health data in a vendor agnostic way. It utilizes SQLAlchemy to provide a privacy-first, local database (SQLite/MariaDB) to store your metrics safely without requiring cloud servers.

Integrations are required to fetch data from proprietary sources and write them to the database.

Installation

Requires Python 3.9+.

Use pip to install:

pip install measureme

For local development, clone the repository and install the development requirements:

pip install -r requirements-dev.txt

Example

How to use MeasureMe:

FitBit Ingestion

An example script has been provided that ingests FitBit data, exported using Google Takeout.

The script relies on FitOut, which is installed via pypi:

pip install fitout

Export FitBit Data using Google TakeOut

Export your FitBit data, using Google Takeout.

Once the export is complete, download the zip file. I use C:/Dev/Fitbit/Google/. This directory is the takeout_dir.

Ingest the Data

The ingest_fitout is available as a callable script, and can be used directly:

ingest_fitout "C:/Dev/Fitbit/Google/takeout-20260320T162823Z-3-001.zip" --start 2024-01-01 --end 2026-03-20

By default, this will create and populate a local SQLite database named measureme_dev.db in the current directory. Once the data has been ingested, it can be queried using the MeasureMe library.

See the tool README for full details.

Trivial Example

For the full, runnable script, see examples/basic_query.py.

from measureme.database import get_engine, get_session_maker
from measureme.models import HealthMetric, HealthSession

engine = get_engine("sqlite:///measureme_dev.db")
Session = get_session_maker(engine)

with Session() as session:
    # Query the 5 most recent sleep sessions
    recent_sleep = session.query(HealthSession)\
        .filter(HealthSession.session_type == 'sleep')\
        .order_by(HealthSession.start_time.desc())\
        .limit(5).all()
        
    for sleep in recent_sleep:
        duration_hrs = sleep.duration_seconds / 3600.0 if sleep.duration_seconds else 0
        print(f"Date: {sleep.start_time.date()}, Duration: {duration_hrs:.2f} hours")

Plotting Example with Numpy and Matplotlib

Note: To run this example, you will need to install the dependencies:

pip install matplotlib numpy PyQt6

For the full, runnable script, see examples/plot_calmness.py.

import numpy as np
import fitout as fo
from measureme.database import get_engine, get_session_maker
from measureme.models import HealthMetric

# 1. Fetch raw data from MeasureMe
# ... (Querying logic omitted for brevity) ...

# 2. Extract database rows into lists aligned to continuous dates
breathing_raw = extract_aligned_data(metrics, dates, 'breathing_rate')
hrv_raw = extract_aligned_data(metrics, dates, 'hrv_rmssd')
rhr_raw = extract_aligned_data(metrics, dates, 'resting_heart_rate')

# 3. Apply cleaning algorithms (Clean-On-Read feature via FitOut helpers)
breathing_data = fo.fill_missing_with_neighbours(breathing_raw)
hrv_data = fo.fill_missing_with_neighbours(hrv_raw)

breathing_data = fo.fix_invalid_data_points(breathing_data, 10, 20)
hrv_data = fo.fix_invalid_data_points(hrv_data, 20, 50)

# 4. Create the Derived Calmness Metric and plot!
breathing_arr = np.array(breathing_data).astype(float)
hrv_arr = np.array(hrv_data).astype(float)
rhr_arr = np.array(rhr_data).astype(float)

# Equation: 100 - (RHR/2 + breathing rate*2 - HRV)
calmness_index = 100 - (rhr_arr / 2. + breathing_arr * 2. - hrv_arr)

More Examples

For more examples, see the examples directory.

Contributing

If you'd like to contribute to MeasureMe, follow the guidelines outlined in the Contributing Guide.

License

See LICENSE.txt for more information.

Contact

For inquiries and discussion, use MeasureMe Discussions.

Issues

For issues related to this Python implementation, visit the Issues page.

Metadata

Release files for measureme 1.2.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for measureme 1.2.1
File Size Uploaded
measureme-1.2.1.tar.gz 22.1 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for measureme 1.2.1
File Interpreter ABI Platform
measureme-1.2.1-py3-none-any.whl Python 3 none any Details

Total release size: 40.9 kB

Release files / measureme-1.2.1.tar.gz

Download URL measureme-1.2.1.tar.gz
Size 22.1 kB
Tags Source
SHA-256 checksum
How to use checksums
0699eb1af9ebd80daf9e625eaff13c8786726fffa6f1e05b123d608a102e7e98
BLAKE2b-256 checksum
How to use checksums
289a6c4326de3d233bfd45191e8e9585dd51526140fcc90980ca9370363e4249
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Mar 31, 2026.

Transparency log

Release files / measureme-1.2.1-py3-none-any.whl

Download URL measureme-1.2.1-py3-none-any.whl
Size 18.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
cdff5d8c982cbc4bf115e4e16431f3cc1e52a12a4807efb065b2d25f06a4e44a
BLAKE2b-256 checksum
How to use checksums
c37e1aade77ad265cbcefcf607f280b0df76348756e089937285fce802091c76
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Mar 31, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

1.2.1 This release

2 release files

1.1.0

2 release files

1.0.0

2 release files

0.4.0

2 release files

0.3.0

2 release files

0.2.0

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page