npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

diasend-nightscout-bridge

v2.0.6

Published

Synchronizes continuuous glucose values (CGV) from diasend to nightscout

Downloads

51

Readme

Diasend -> Nightscout Bridge #WeAreNotWaiting

Synchronizes treatments (insulin boli, temp basal changes) as well as continuous glucose values (CGV) from diasend to nightscout. This can e.g. help CamAPS FX users to view their treatments and glucose values via nightscout.

While diasend will eventually be replaced by glooko which will (presumably) provide a more open API to access the data and forward it to nightscout, this project can help in the meantime. #WeAreNotWaiting

Supported Features / Data

✅ Glucose Values (CGM) ✅ Correction and Meal Boli ✅ Carb Corrections ✅ Basal rates (Pre-programmed) ✅ Basal rates (temporary, as applied by the CamAPS FX hybrid closed loop) ✅ Pump settings (see issue)

A word of advice

Depending on your use case and requirements, you may not need a synchronization solution from diasend to nightscout as provided by this project.

If all you need is to monitor the glucose values remotely via nightscout and don't want to use diasend for it, or the delay of uploading to diasend and synchronizing to nightscout (5+ minutes) is unbearable, I recommend taking a look at running xDrip in Companion mode which will provide glucose values faster to nightscout than this project can.

However, if you need to see more data than the pure continuous glucose values (CGV) within nightscout, e.g. insulin boli, carb corrections, basal rates or temporary adjustments of basal rates, the diasend-nightscout-bridge has got you covered.

And finally - you don't have to pick: You can run both the xDrip Companion and the diasend-nightscout-bridge to get the best out of both worlds: Near-Realtime blood glucose monitoring and trends as well as proper import of all treatments issued via CamAPS FX / stored on diasend. For more details, see here

Configuration

The following environment variables are required, also see env.example:

  • DIASEND_USERNAME: the username / email address of your disasend account
  • DIASEND_PASSWORD: the password of your disasend account
  • NIGHTSCOUT_URL: the url of your nightscout instance
  • NIGHTSCOUT_API_SECRET: the api secret to communicate with your nightscout instance
  • TZ: the timezone from which the glucose values have been sent to diasend. If your run the bridge on a machine other than your local pc (e.g. a dedicated server), it must be configured to avoid an offset in the data due to timezone issues. Usually the timezone in which your device exporting data to diasend is. This little utility can help you find the correct value for the TZ variable.

Optionally, you can also provide the following values:

  • NIGHTSCOUT_PROFILE_NAME: The name of the profile in nightscout to which to synchronize the diasend pump settings. Defaults to undefined which means the pump settings will not be synchronized. When set, the specified profile will be overwritten with the settings from diasend so be careful.
  • DIASEND_CLIENT_ID: client id for authorization against diasend. Defaults to a486o3nvdu88cg0sos4cw8cccc0o0cg.api.diasend.com
  • DIASEND_CLIENT_SECRET: client secret for authorization against diasend. Defaults to 8imoieg4pyos04s44okoooowkogsco4

Running

There are two different ways to use this project in order to synchronize data from diasend to nightscout. You can either run this bridge standalone in which case it will pull the data via the diasend API and forward it to nightscout via nightscout's REST API. The downside here is that you need to run it on an additional server or PC which is why the more intuitive way is running the bridge as a plugin directly as part of nightscout. This way, the data will still be pulled from diasend via its HTTP API but the data will directly be imported into nightscout without going through its REST API, which should likely be more reliable and remove the need to run the bridge separately.

Nightscout Plugin

To run this bridge as a plugin directly in nightscout, you can simply install the bridge as an npm package within your nightscout installation and implement a handler to import the data directly into nightscout. A sample implementation can be found here: https://github.com/nightscout/cgm-remote-monitor/compare/master...burnedikt:cgm-remote-monitor:master?expand=1.

Once installed, the plugin needs to be enabled via nightscout's ENABLE="... diasend ..." environment variable and the following two environment variables need to be defined: DIASEND_USERNAME and DIASEND_PASSWORD so that nightscout will automatically pull data in from diasend.

A future goal is to either merge the example implementation above upstream or publish the bridge as a nightscout plugin directly to npm so that the integration with nightscout becomes easier.

Standalone / Sidecar

To run the bridge, ensure that all required environment variables are set. You can set environment variables manually or create a file called .env and fill it with values similar to env.example. All variables defined within the .env file will be loaded automatically thanks to dotenv.

Next, run yarn install to install all dependencies.

Finally run the following command to synchronize CGV from diasend to nightscout every 5 minutes:

yarn start

Docker

You can also run the bridge as a docker container either side-by-side with nightscout (if it is running containerized using docker or docker-compose). To do so, you can use the Dockerfile within this repository to build the bridge into a docker container image:

docker build -t diasend2nightscout .

You can use the resulting container image (in this case named diasend2nightscout) to run the bridge as a container using docker-compose like:

# nightscout services

services:
  diasend-bridge:
    build:
      context: .
    environment:
      DIASEND_USERNAME: <diasend-username>
      DIASEND_PASSWORD: <diasend-password>
      NIGHTSCOUT_URL: <url-of-nightscout-instance>
      NIGHTSCOUT_API_SECRET: <retracted>
      # ... other environment variables for configuration, see readme

... or directly using docker à la docker run -e DIASEND_USERNAME=... -e DIASEND_PASSWORD=...diasend2nightscout. See here for more details.

Notes & Known Issues

  • Up to 10 minutes delay of data: Depending on how often data is exported to diasend, the data (e.g. glucose values) can arrive with a delay in nightscout. E.g. CamAPS FX only exports data to diasend every 5 minutes and this project then needs to retrieve the data from diasend so it can take up to 10 minutes until it will appear in nightscout. This delay can be partially reduced by altering the polling interval (currently only controllable via source code).
  • Due to the nature of the data provided by diasend and the polling loop, we need to delay processing of some events into the next loop running x minutes later as e.g. meal boli are split on the diasend side into separate events at different times so sometimes not all events belonging together are in the same batch of events to be processed, thereby forcing us to check them again in the next loop before deciding what type of treatment should be sent to diasend. See this issue for more details.
  • Timezone issues: Due to diasend not providing any timezone information on dates, the timezone of the machine / server running this project needs to match the timezone in which the values were sent to diasend, i.e. the timezone of the device generating the data for diasend, see also the configuration section above

Debugging / Logging

This project uses the loglevel library to control the verbosity / level of logging. You can turn on more verbose and detailed logging by setting the environment variable NODE_ENV to development. This will output detailed information about what kind of data has been fetched from diasend and how it will be sent to nightscout.

Further information

This project works by connecting to diasend's internal (!) API, which may change at any time without warning, so use with caution, and pulling the latest number of so-called patient data, converts it to CGV values compatible with nightscout and then uses the nightscout API to push those values.

More information and sample calls on the diasend-api can be found in diasend-api.http which can be used with VSCode's REST Client plugin to quickly try out the API calls.

This project is written in Typescript.

Related Projects

  • Share2NightScout Bridge: Similarly to us pulling data from diasend and sending it to nightscout, this projects pulls the data from dexcom web service and pushes it to nightscout. Initially created by Scott Hanselmann
  • minimed-connect-to-nightscout: Scrapes the Minimed website instead of using an API but the bottom line is the same: Pulls data from minimed and pushes it to nightscout
  • diasend2nightscout-bridge: Has the same goal of this project but up to now did not provide an end-to-end solution for synchronizing the data between diasend and nightscout as far as I can tell

Contributing

File an issue if you'd like to give feedback, request an enhancement, or report a bug.

Pull requests are welcome.

Disclaimer

This project is intended for educational and informational purposes only. It relies on a series of fragile components and assumptions, any of which may break at any time. It is not FDA approved and should not be used to make medical decisions. It is neither affiliated with nor endorsed by diasend / glooko, and may violate their Terms of Service.