Python - ruuvitag_sensor package

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

root@raspberrypi:/home/pi/ruuvitag# ./ruuvitag-logger.py
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/decoder.py”, line 72, in decode_data
decoded = bytearray(base64.b64decode(encoded, ‘-_’))
File “/usr/lib/python3.5/base64.py”, line 81, in b64decode
s = _bytes_from_decode_data(s)
File “/usr/lib/python3.5/base64.py”, line 46, in _bytes_from_decode_data
"string, not %r" % s.class.name) from None
TypeError: argument should be a bytes-like object or ASCII string, not 'tuple’
Data received: None
Traceback (most recent call last):
File “./ruuvitag-logger.py”, line 99, in
for sensor, value in data.items():
AttributeError: ‘NoneType’ object has no attribute ‘items’

Hi,

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:

2 Likes

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
PID TTY STAT TIME COMMAND
2188 ? S 0:00 hcitool lescan --duplicates
pi@raspberry:~ $ ps 2231
PID TTY STAT TIME COMMAND
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 ble_communication.py 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(data[mac])
else:
    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: https://github.com/ttu/ruuvitag-sensor/issues/33. 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)

Installation:

$ git clone https://github.com/ttu/ruuvitag-sensor.git
$ 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.
thanks

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?

Hello,

Hi,

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])
print(found_data[1])

RuuviTagSensor.get_datas(handle_data)

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
└─debian.conf
/etc/systemd/system/rc-local.service.d
└─ttyoutput.conf
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/ruuvit.py”, 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.

Hi! An update after a long time to this thread.

I added cross-platform support with Bleak and a few asynchronous methods for it, get_data_async and get_fist_raw_data_async. Support for Python < 3.7 was dropped in ruuvitag_sensor package version 2.0.0, which now allows using async methods.

As this is not yet thoroughly tested or documented, Bleak is not automatically installed with the package and must be manually installed. Installation instructions are in README.

Bleak adapter has been tested with Windows 11, but not with macOS. I would appreciate if someone would have time to try it.

If this works well, this could replace the current default adapter, which uses deprecated hciconfig , hcitool and hcidump tools.

Thank you very much, but I didn’t get to work with these or tons of other tips..
.

Please let us know details where you are stuck and we’ll look into this for you.
A screenshot or code snippet would be helpful :slight_smile: