Script written in TypeScript that uploads CGM readings from LibreLink Up to Nightscout. The upload should work with at least Freestyle Libre 2 (FGM) and Libre 3 CGM sensors.
The script takes the following environment variables
Variable | Description | Example | Required |
---|---|---|---|
LINK_UP_USERNAME | LibreLink Up Login Email | mail@example.com | X |
LINK_UP_PASSWORD | LibreLink Up Login Password | mypassword | X |
LINK_UP_CONNECTION | LibreLink Up Patient-ID. Can be received from the console output if multiple connections are available. | 123456abc-abcd-efgh-7891def | |
LINK_UP_TIME_INTERVAL | The time interval of requesting values from libre link up | 5 | |
LINK_UP_REGION | Your region. Used to determine the correct LibreLinkUp service (Possible values: AE, AP, AU, CA, DE, EU2, EU2, FR, JP, US, LA) | EU | |
NIGHTSCOUT_URL | Hostname of the Nightscout instance (without https://) | nightscout.yourdomain.com | X |
NIGHTSCOUT_API_TOKEN | SHA1 Hash of Nightscout access token | 162f14de46149447c3338a8286223de407e3b2fa | X |
NIGHTSCOUT_DISABLE_HTTPS | Disables the HTTPS requirement for Nightscout URLs | true | |
NIGHTSCOUT_DEVICE_NAME | Sets the device name used in Nightscout | nightscout-librelink-up | |
LOG_LEVEL | The setting of verbosity for logging, should be one of info or debug | info | |
SINGLE_SHOT | Disables the scheduler and runs the script just once | true | |
ALL_DATA | Upload all available data from LibreLink Up instead of just data newer than last upload. LibreLinkUp sometimes lags behind in reporting recent historical data, so it is advised to run the script with ALL_DATA set to true at least once a day. | true |
There are different options for using this script.
- Click on
- Login to Heroku if not already happened
- Provide proper values for the
environment variables
- Important: make sure that yor Nightscout API token is hashed with SHA1
- Click
Deploy
to deploy the app
The installation process can be started by running npm install
in the root directory.
To start the process simply create a bash script with the set environment variables (start.sh
):
#!/bin/bash
export LINK_UP_USERNAME="mail@example.com"
export LINK_UP_PASSWORD="mypassword"
export LINK_UP_TIME_INTERVAL="5"
export NIGHTSCOUT_URL="nightscout.yourdomain.com"
# use `shasum` instead of `sha1sum` on Mac
export NIGHTSCOUT_API_TOKEN=$(echo -n "librelinku-123456789abcde" | sha1sum | cut -d ' ' -f 1)
export LOG_LEVEL="info"
npm start
Execute the script and check the console output.
The easiest way to use this is to use the latest docker image:
docker run -e LINK_UP_USERNAME="mail@example.com" \
-e LINK_UP_PASSWORD="mypassword" \
-e LINK_UP_TIME_INTERVAL="5" \
-e LINK_UP_REGION="EU" \
-e NIGHTSCOUT_URL="nightscout.yourdomain.com" \
-e NIGHTSCOUT_API_TOKEN=$(echo -n "librelinku-123456789abcde" | sha1sum | cut -d ' ' -f 1) \
-e LOG_LEVEL="info" \
timoschlueter/nightscout-librelink-up
If you are already using a dockerized Nightscout instance, this image can be easily added to your existing docker-compose file. In this example, the region is set for germany ("DE"):
version: '3.7'
services:
nightscout-libre-link:
image: timoschlueter/nightscout-librelink-up
container_name: nightscout-libre-link
environment:
LINK_UP_USERNAME: "mail@example.com"
LINK_UP_PASSWORD: "mypassword"
LINK_UP_TIME_INTERVAL: "5"
LINK_UP_REGION: "DE"
NIGHTSCOUT_URL: "nightscout.yourdomain.com"
NIGHTSCOUT_API_TOKEN: "14c779d01a34ad1337ab59c2168e31b141eb2de6"
LOG_LEVEL: "info"
NIGHTSCOUT_API_TOKEN
must be a SHA1 hash of an Access Token from Nightscout (Add new subject first in Nightscout's Admin Tools if required), e.g. your Access Token for a subject named LibreLinkUp might be librelinku-123456789abcde
.
Obtain your hash with
echo -n "librelinku-123456789abcde" | sha1sum | cut -d ' ' -f 1
(use shasum
instead of sha1sum
on Mac)
which will print the hash (40 characters in length):
14c779d01a34ad1337ab59c2168e31b141eb2de6
You might also use an online tool to generate your hash, e.g. https://codebeautify.org/sha1-hash-generator
- Integration into Nightscout: I have not yet looked into the plugin architecture of Nightscout. Maybe this should be converted into a plugin.