MicroPython RuuviTag BLE Sensor Beacon scanner
Clone or download
rroemhild Add identifier from Data Format 4. Fixes #5
Bump version: v0.5.1 -> v0.5.2
Latest commit f7311b9 May 29, 2018
Type Name Latest commit message Commit time
Failed to load latest commit information.
ruuvitag Add identifier from Data Format 4. Fixes #5 May 29, 2018
.gitignore first commit Jan 11, 2018
LICENSE Add license Jan 11, 2018
README.rst Disable bluetooth before unpacking data Mar 18, 2018
sdist_upip.py first commit Jan 11, 2018
setup.py Add identifier from Data Format 4. Fixes #5 May 29, 2018


MicroPython RuuviTag Scanner

PyPi Status

Harvest data from RuuviTag BLE Sensor Beacon with MicroPython Bluetooth enabled micro controller like the pycom devices.

micropython-ruuvitag supports Data Format 2, 3, 4 and 5.

This package comes with a scanner and a tracker. The scanner scans for RuuviTags in a pre defined time and return the result. The tracker continuously scans for RuuviTags and call a callback for each tag found.


The easiest way to install the package is via upip:

>>> import upip
>>> upip.install('micropython-ruuvitag')

For manual installation copy the ruuvitag directory with all files to your device lib directory.


RuuviTagScanner scans for RuuviTags and decode the data format. The result is a list with named tuples.

Scan 10 seconds for RuuviTag sensors and print the result:

from ruuvitag.scanner import RuuviTagScanner

rts = RuuviTagScanner()

for ruuvitag in rts.find_ruuvitags(timeout=10):


RuuviTagTracker scans for RuuviTags, decode the data format and call a callback with a named tuple if recieved data from tag.

from ruuvitag.tracker import RuuviTagTracker

def cb(ruuvitag):

rtt = RuuviTagTracker()

Whitelist devices

You can collect data from only the devices you want by define a whitelist with mac addresses. Other Devices then will be ignored. Whitelists can be used with RuuviTagScanner and RuuviTagTracker.

whitelist = (b'aa:bb:cc:dd:ee:21', b'aa:bb:cc:dd:ee:42',)
rts = RuuviTagScanner(whitelist)

Blacklist persistence

If the data from a Bluetooth device can not be decoded, the device get on a blacklist as long the MicroPython device is not resetted. For a persistent device blacklist the list should be saved and reloaded.

>>> from ruuvitag import RuuviTagScanner
>>> rts = RuuviTagScanner()
>>> # add back blacklisted devices
>>> rts.blacklist = [b'aa:bb:cc:dd:ee:21', b'aa:bb:cc:dd:ee:42']
>>> # run a new scan
>>> rts.find_ruuvitags(timeout=10)
>>> # get blacklisted devices
>>> rts.blacklist

Named tuple formats

Format 2 and 4 (Eddystone-URL)

RuuviTagURL = namedtuple('RuuviTagURL', (

Format 3 and 5 (RAW)

RuuviTagRAW = namedtuple('RuuviTagRAW', (