GitPedia

Omblepy

Cli tool to read records from omron blood-pressure bluetooth-low-energy measurement instruments

From userx14·Updated June 15, 2026·View on GitHub·

Cli tool to read records from Omron Bluetooth-LE measurement instruments The project is written primarily in Python, first published in 2022. Key topics include: blood-pressure, bluetooth-low-energy, cli, omron.

Omblepy

Cli tool to read records from Omron Bluetooth-LE measurement instruments

OS support

operating system / hardwaresupportedinstall instruction / comment
win10/11install <a href="https://www.python.org/downloads/">python</a>, enable installer checkbox add to path <br> in cmd pip install terminaltables bleak
nixos25.10in configuration.nix, set hardware.bluetooth.enable = true;. For temporary python shell:<br> nix-shell -p python3.13 python313Packages.bleak python313Packages.terminaltables
debian13Install python and packages with apt install python3.13 pip3 install bleak terminaltables
raspberry pi os <br>+ PI 4B / 5see debian 13 for install instructions
debian11/12❓/❌unreliable, depends on bt-hardware / bluez-version if pairing will work. <br>Install python and packages with apt install python3.12 pip3 install bleak terminaltables
macInstead of bluetooth mac address, specify UUID. Thanks to deviantintegral for adding support.
all os <br>+ esp32bluetooth communication handled by esp32, bride via usb serial, see semi finished esp32 bridge version.

Usage

For the first time pairing process you need to use the -p flag and enable pairing mode by holding the bluetooth button until you see the blinking -P- in the display:

python ./omblepy.py -p -d HEM-7322T

Linux might start python2.X, use the correct command to launch a python3.X interpreter on your machine e.g. python3.
After the first connection the -p flag can be omitted, even when executing omblepy on a different device:

python ./omblepy.py -d HEM-7322T

Pairing for Universal Blood Pressure Manager (UBPM)

If you preform this pairing for <a href="https://codeberg.org/LazyT/ubpm/">Universal Blood Pressure Manager (UBPM)</a>, just use one of the supported devices (e.g. -d HEM-7322T), even if your device model is different. As far as I know the pairing process is similar for all omron devices. If you use an unsupported device it is expected that the pairing will work and that the -P- on the display of the omron device will change to a small square. But the tool will crash further in the readout, because the data format / readout commands for the stored records are different. Nevertheless your omron device is now bound to the mac address of your pc and UBPM should work without mac address spoofing. <br>
If you see the message "Could not enter key programming mode." or "Failure to program new key." the pairing procedure did NOT work. Please see the troubleshooting section and if the problem persists please open an issue. <br>
Success is indicated by the message "Paired device successfully with new key".

Flags table

flagalternative long flagalways requiredrequired on first connectionpotentially dangerous eeprom writedescriptionusage example
-h--help---display help for all possible flags, similar to this tablepython3 ./omblepy.py -h
-d--device✔️✔️-select which device library will be loaded from herepython3 ./omblepy.py -d HEM-7322T
-p--pair✔️-use to write pairing key on first connection with this pcpython3 ./omblepy.py -d HEM-7322T -p
-m--mac-select omron devices mac and skip bluetooth scan and device selection dialogpython3 ./omblepy.py -d HEM-7322T -m 11:22:33:44:55:66
-n--newRecOnlyinstead of downloading all records, check and update the "new records couter" and only transfer new recordspython3 ./omblepy.py -d HEM-7322T -n
-t--timeSyncsynchronize omron internal clock with system timepython3 ./omblepy.py -d HEM-7322T -t
--loggerDebug-displays every ingoing and outgoing data for debugging purposespython3 ./omblepy.py -d HEM-7322T --loggerDebug

Potentially dangerous, refers to the possibility to mess up the calibration data for the pressure sensor, which is likely stored in the eeprom in the settings region.<br>
This is most important when you are trying to add support for a new device.

Omron device support matrix

device modelsold under namepairingbasic data readoutnew record countertime synccontributors / testers / help by
HEM-7150TBP7250✔️✔️Toei79, userx14
HEM-7155TM400 / M4 / X4 smart✔️✔️✔️✔️dromie, RobertWojtowicz, Nwanko
HEM-7322TM700 Intelli IT✔️✔️✔️✔️userx14
HEM-7342TBP7450✔️✔️Toei79, userx14
HEM-7361TM500 Intelli IT / M7 Intelli IT✔️✔️✔️✔️LazyT, userx14, zivanfi, RobertWojtowicz
HEM-7380T1X7 Smart AFib / M7 Intelli IT AFib / EOSL / EBKn/a✔️thiagoko
HEM-7377T1BP5360n/a✔️✔️ojermo
HEM-7530TOmron Complete✔️✔️ (no EKG)Toei79, userx14
HEM-7600TOmron Evolv✔️✔️✔️✔️vulcainman
HEM-6232TRS7 Intelli IT✔️✔️invertedburger
HEM-7196TM4/X4 Connect AFib❌ (encrypted traffic)❌ (encrypted, see issues)

✔️=tested working, ❓=not tested , ❌=not supported yet <br>

Please open an issue if you can test a feature or an currently unsupported device. <br>
It is potentially dangerous to write to the eeprom on devices where the eeprom layout is unknown (see Flags table), <br>
since the calibration data for the pressure sensor is likeley also stored there.

Troubleshooting

  • Remove the pairing with the omron device using your os bluetooth dialog.
  • Use a bluetooth chipset/dongle which supports at least bluetooth 4.2, better 5.0
  • On the devices I had available for testing, win10 did always work, while ubuntu didn't work on some versions.
  • If the pairing works and there is an error in the readout use the --loggerDebug flag and please open an issue.
  • Windows specific
    • Do not use the CSR harmony stack (CSR 8510 based usb dongles), it is incompatible.
  • Linux specific
    • Preferably test on a device with only one bluetooth adapter connected.
    • on non gui systems open bluetoothctl in a second multiplexed terminal for the bluetooth pairing to work,
      for an automated solution see this issue
    • Restart the bluetooth stack sudo systemctl restart bluetooth.
    • Delete the bluetooth adapter cache with sudo rm -r /var/lib/bluetooth/$yourBtCardMacAddress.
    • If you have two bluetooth adapters in your system, open a second terminal alongside omblepy and use bluetoothctl to confirm pairing dialogs by typing yes when promped, some graphical interfaces will not show the pairing dialog for the second adapter.
    • When you are on ubuntu, install blueman, since it seems to be designed with multiple adapters in mind.
    • Try other versions of bluez, for me versions around bluez 5.55 worked best.

Documentation

The general communication is handled in the first 250 lines of omblepy.py.

command types (bytes 1-3 of header):

PC -> omron device

command type bytesfunctionpacket size
0000start of transmission / read device id from eeprom0x08 bytes with checksum
0100read data from eeprom0x08 bytes with checksum
01c0write data to eeprom0x08 bytes + sizeof(data to write)
0f00end of transmission0x08 bytes

omron device -> PC

response type bytesfunctionpacket size
8000response start transmission0x18 bytes with checksum
8100response read data0x08 bytes + sizeof(attached data read from eeprom)
81c0response write datasame size as corresponding write command
8f00response end transmission0x08 bytes

Packet header for reads:

Example message sent to request a read of 0x26 bytes starting from address 0x0260:

messagelengthcommand typestart addressreadsizepaddingcrc, such that all bytes xored = 0
0x080x01000x02600x260x000x4d

A huge thank you goes to LazyT and his <a href=https://codeberg.org/LazyT/ubpm>UBPM project</a>
which provided extremely usefull insight how the reception with multiple bluetooth channels works.

The <a href=https://github.com/RobertWojtowicz/export2garmin>export2garmin</a> project
can be used to import the data from the omron device into Garmin Connect.

The USB communication of selected omron medical equipment is implemented by <a href=https://github.com/openyou/libomron>libomron</a>
and shares some similarities with the bluetooth communication.

Contributors

Showing top 8 contributors by commit count.

View all contributors on GitHub →

This article is auto-generated from userx14/omblepy via the GitHub API.Last fetched: 6/28/2026