Python - ruuvitag_sensor package

I’ve tried this solution before but then I must have screwed up the code (popping the dictionary) making the save-to-db-handle run more or less continuously. Now, with more proper code it works, thanks!
I have the DB on the same machine so for now it seems like writing speed is sufficient. Although I guess I need something to aggregate older data in the DB over time to keep the size down.


anyone can advise what i should do to fix this error ?

pi@raspberrypi:~/ruuvitag $ sudo ./
Traceback (most recent call last):
File “./”, line 6, in
from ruuvitag_sensor.url_decoder import UrlDecoder
ImportError: No module named ‘ruuvitag_sensor.url_decoder’


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

1 Like

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.

Bonjour les données récupérées de ruuviTag comment peut-on les stocker en csv sur raspberry

please forgive the naive question, but it would be an immense help if someone would advise whether or not it is possible to install this on a Pi that does not have internet access.
Could I point it at, or get the files off of another Pi in my environment that does have the package installed?
any ideas or help with direction at all would be greatly appreciated.

It would be easiest to setup a SD card with internet-connected Pi and leave the InfluxDB on the Pi. You can then use the created image offline

Is it possible to install this package to hass .io running on RPi?



I may have simple issue but I didn’t find solution to fix it.

If for example use this get sensor datas with callback as example:

from ruuvitag_sensor.ruuvi import RuuviTagSensor

def handle_data(found_data):
print('MAC ’ + found_data[0])


I can run it with Raspberry Pi Zero’s crontab but I cannot start it with rc.local together with boot. I will get error with rc.local that ruuvitag_sensor not found.

How to fix this to have possibility to start these in boot?

Here is the status from rc.local after boot:

pi@raspberrypi:~ $ sudo systemctl status rc-local.service
Warning: The unit file, source configuration file or drop-ins of rc-local.service changed on disk. Run ‘systemctl daemon-reload’ to reload units.
● rc-local.service - /etc/rc.local Compatibility
Loaded: loaded (/lib/systemd/system/rc-local.service; enabled-runtime; vendor preset: enabled)
Drop-In: /lib/systemd/system/rc-local.service.d
Active: failed (Result: exit-code) since Fri 2020-09-11 05:59:38 BST; 54s ago
Docs: man:systemd-rc-local-generator(8)
Process: 474 ExecStart=/etc/rc.local start (code=exited, status=1/FAILURE)

Sep 11 05:59:38 raspberrypi systemd[1]: Starting /etc/rc.local Compatibility…
Sep 11 05:59:38 raspberrypi rc.local[474]: Traceback (most recent call last):
Sep 11 05:59:38 raspberrypi rc.local[474]: File “/home/pi/”, line 1, in
Sep 11 05:59:38 raspberrypi rc.local[474]: from ruuvitag_sensor.ruuvi import RuuviTagSensor
Sep 11 05:59:38 raspberrypi rc.local[474]: ModuleNotFoundError: No module named ‘ruuvitag_sensor’
Sep 11 05:59:38 raspberrypi systemd[1]: rc-local.service: Control process exited, code=exited, status=1/FAILURE
Sep 11 05:59:38 raspberrypi systemd[1]: rc-local.service: Failed with result ‘exit-code’.
Sep 11 05:59:38 raspberrypi systemd[1]: Failed to start /etc/rc.local Compatibility.