Skip to content
Eelke Jager edited this page Apr 26, 2019 · 53 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 writing device drivers for use with OpenAPS or AndroidAPS in combination with an Omnipod!

We have a test branch publicly available to use the Omnipod with Loop using a Rileylink!

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:

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


  • 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:


We are still focussing on failures with the Pod. So if you can help record these types that would be great!


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 for further refinement
Clone this wiki locally
You can’t perform that action at this time.