Skip to content
Eelke Jager edited this page Sep 18, 2018 · 59 revisions

Openomni Wiki

Welcome to the openomni wiki! Here we describe how the Omnipod and PDM communicate with each other.

Because of the pod's safety mechanism of erring out when it gets direction from two devices, we have to completely replicate the PDM. Sending a single basal will not be enough. It's the initialization, setting the programs, etc. And we have to have the ability to set up at least some of the basic profiles in whatever application we choose to program the pod so that it can have the normal basals in addition to all the temporary changes. Read further if you want to help decode the messages to be able to write device drivers for use with OpenAPS, LoopKit or AndroidAPS in combination with an Omnipod!

How to read PDM/POD messages

We first started decoding with this Python openomni RFcat reader, but when we needed extra data from the sub messages which were being send, we switched to a more detailed C program running on Linux to sniff RF packets using a much cheaper RTLSDR dongle.

Run Linux or create a Virtual Machine with Linux using Virtualbox or Parallels and go to this repo to install the software: https://github.com/ps2/rtlmm

For the previously used openomni setup you can follow the readme guide on OSX computers on the main page. or for a windows machine this install guide: Alternate installation instructions for using RFcat

Communications

  • The protocol is described top-to-bottom at Protocol.
  • Communications between PDM and pod are sent over radio frequencies.
  • The lowest level of information exchange is packet exchange.
  • Packets are assembled into a specific message structure.
  • We've managed to get the CRC and Nonce decoded to establish a proper communication between the PDM and POD.
  • We are currently working on understanding the different Message Types.

How to help

Please add pages using this convention containing packet captures, along with what you were doing to cause the packet exchange. For example, if it's a temp basal command, describe the % change and duration you selected in the UI, and then add your capture here:

Packet-Captures

We currently focus on the first Basal schedule which is set immediately after pairing a first Pod. So if you can help record this first, that would be great! We need the times and all the time slots/Units to see what's happening.

Roadmap

We also need help in development of 3 types of device drivers to integrate in the 3 main solutions currently available:

  1. OpenAPS GoLang device driver
  2. RileyLink for AndroidAPS Android device driver
  3. Rileylink for Loop Swift device driver for use with LoopKit
Clone this wiki locally