Python - ruuvitag_sensor package


I think the module is called decoder and not url_decoder, i.e.:
from ruuvitag_sensor.decoder import UrlDecoder


thanks. looks working but facing another error when running the script

root@raspberrypi:/home/pi/ruuvitag# ./
2017-10-14 00:18:41

Looking for 3: Downstairs (EF:7E:86:D7:3C:6E)
Encoded value: (2, ‘BIQdAMZwS’) not valid
Traceback (most recent call last):
File “/home/pi/ruuvitag-sensor/ruuvitag_sensor/”, line 72, in decode_data
decoded = bytearray(base64.b64decode(encoded, ‘-_’))
File “/usr/lib/python3.5/”, line 81, in b64decode
s = _bytes_from_decode_data(s)
File “/usr/lib/python3.5/”, line 46, in _bytes_from_decode_data
"string, not %r" % from None
TypeError: argument should be a bytes-like object or ASCII string, not 'tuple’
Data received: None
Traceback (most recent call last):
File “./”, line 99, in
for sensor, value in data.items():
AttributeError: ‘NoneType’ object has no attribute ‘items’



I think this might be the problem. convert_data function returns a tuple, which has data format type and data

Pass only data value from the tuple to decode function.

If there is still some problem, can you paste the failed part from your source code so it is easier to see where the problem might be. Although usually error message is already enough :slight_smile:


thanks alot. yes. it is working now as per your suggestion.


Hi! I’ve noticed that when my Python code is executed from rc.local (i.e. at startup) the RuuviTagSensor.get_data_for_sensors() is fireing off new processes that are not terminated. I.e. each time RuuviTagSensor.get_data_for_sensors() is called hcitool lescan and hcidump are executed again. This memory leak fills up the RAM… From top I identified the processes and the looked up the pid:s.

pi@raspberry:~ $ ps 2188
2188 ? S 0:00 hcitool lescan --duplicates
pi@raspberry:~ $ ps 2231
2231 ? S 0:00 sudo -n hcidump --raw

Note: This does not happen when I execute my Python code on the command line using nohup, doesn’t matter if the user is pi or root. Does anyone have any idea why, or has been able to reproduce it? I guess the error lies in:
def stop(hcitool, hcidump):
in but I have not looked further for now.


Problem solved. Error on my part (having added operand “&” at end of line in rc.local)


… just received my first three brand new RuuviTags!
Great library (!) - everything’s working fine so far except that I am wondering how to check if a certain RuuviTag is present. I tried something like this:

from ruuvitag_sensor.ruuvitag import RuuviTag
sensor = RuuviTag('F3:61:D0:6E:2B:9C')
state = sensor.update()

if not state is None:
	print('Temp = {0:0.1f}*C'.format(state["temperature"]))

If the RuuviTag is up and running everything is fine but if the device is switched off (or out of reach) the script does not terminate (seems that there is no timeout).
Sorry for this simple questions - I am pretty sure I have overseen something. I am using Python 3.6.0 on a Raspberry Pi Zero W.

Greetings from Aachen, Germany


Sorry for delay in approving the message, it got held in moderation queue for some reason. Please ping us at Slack if the automoderation gives you any further issues


… meanwhile found a possible solution:

from ruuvitag_sensor.ruuvi import RuuviTagSensor
mac = "F3:61:D0:6E:2B:9C"
data = RuuviTagSensor.get_data_for_sensors(mac, 5)

if mac in data:
    print("no data found")

Are there any other approaches?


Sorry for the late reply and thanks for bringing this up. Sometimes it is easy to forget to add some basic functionality when you don’t need those on your own applications :slight_smile:

Unfortunately the package doesn’t provide any simple way to check if Tag is present and both checks that you have implemented are valid.

Maybe we could add these kind of helper functions to the package, so there is no need for everyone to figure these things out on their own. I created a new issue to GitHub: You can comment there or to this thread if you have some suggestions for other features.


Package has now an experimental cross-platfom implementation. It uses Bleson BLE module, which is still at alpha stage.

Implementation with Bleson is in branch: bleson-ble-communication

ruuvitag-sensor package must use the development version of Bleson, so module needs to be installed from Bleson’s GitHub repostitory (therefore process-dependency-links is required)


$ git clone
$ cd ruuvitag-sensor
$ git checkout bleson-ble-communication
$ pip install -e . --process-dependency-links

More info on GitHub issues #31 and #18


Recently, I have get pi3 B+ model. Configured everything working fine. When I put my ruuvitag inside my freezer, sometime i can detect but most the time I can’t get it. Apparently, I have another pi zero w, configure same thing, but without any issue. I can get sensor data all the time. Anyone experience this?
I have 2 ruuvitag

**I believed it could be the RPi3 B+ antenna limitation. I took the sd card move to pi zero w it work perfectly.