RuuviTag
- July 26, 2019
- 0
De RuuviTag is een Bluetooth-sensor die temperatuur, luchtvochtigheid, luchtdruk en beweging kan doorsturen. Het hardware ontwerp is volledig open en ook de firmware is open source. Daar moesten we dus wel een kijkje naar nemen!
Ruuvi (https://ruuvi.com/) is een Finse startup met een passie voor open source elektronica. Hun eerste product, de RuuviTag, had een succesvolle Kickstartercampagne in 2016. De specificaties (https://ruuvi.com/ruuvitag-specs/) van deze Bluetooth-sensor zijn indrukwekkend (zie kader “Specificaties”). Bovendien is niet alleen de firmware open source, maar ook het hele hardware ontwerp.
Nordic Semiconductor nRF52832 systeemchip met ARM Cortex-M4F cpu, 512 kbyte flashgeheugen, 64 kbyte RAM en Bluetooth Low Energy;
STMicroelectronics LIS2DH12 accelerometer;
Bosch BME280-sensor voor temperatuur, luchtvochtigheid en luchtdruk;
NFC-A tag antenne;
Vervangbare 1000mAh CR2477 batterij, voldoende voor meerdere jaren levensduur;
2 knoppen;
2 leds;
52 mm diameter;
25 g gewicht;
Long-range RF-antenne;
Werkt bij temperaturen van -20 tot +65 °C (of -40 tot +85 °C met een batterij met uitgebreid temperatuurbereik);
Waterdichte behuizing.
Out-of-the box
Ruuvi verkoopt een pakket met drie RuuviTags (https://shop.ruuvi.com/product/ruuvitag/) voor € 69,- ex. btw, wat op € 85,- uitkomt inclusief btw. Het bedrijf verzendt gratis wereldwijd vanuit Finland. Out-of-the box (nadat je het plastic lipje uit de batterijhouder hebt gehaald) werkt de RuuviTag al als Eddystone/iBeacon Bluetooth-beacon. Zo kun je de RuuviTag als Bluetooth-beacon gebruiken, bijvoorbeeld in combinatie met een mobiele app op je telefoon die de afstand tot het beacon uit de signaalsterkte afleidt.
Sensorgegevens uitlezen
Maar er is meer: de RuuviTag stuurt zijn sensorgegevens via Bluetooth Low Energy door. Die kun je onder andere in de Android-app Ruuvi Station (https://play.google.com/store/apps/details?id=com.ruuvi.station) uitlezen (de broncode vind je overigens op https://github.com/ruuvi/com.ruuvi.station) of in de iOS-app Core Beacons (https://itunes.apple.com/us/app/core-beacons/id1350862272). Ook de opensource Android-app Beacon Scanner (https://play.google.com/store/apps/details?id=com.bridou_n.beaconscanner) ondersteunt de RuuviTag, maar niet met hoge resolutie van de sensordata. Je plaatst dan je RuuviTags op verschillende plaatsen binnen en buiten, zoals in je koelkast, in je slaapkamer, in je wijnkelder of in je tuin. Open de app en voeg één voor één je tags toe. Je kunt ze een naam geven, bijvoorbeeld de plaats waarin ze zich bevinden.
In het hoofdscherm van de app zie je nu de temperatuur, luchtvochtigheid, luchtdruk en signaalsterkte (RSSI). Door naar links en rechts te vegen, krijg je de gegevens van de andere tags te zien. Druk je bovenaan rechts op de drie bolletjes en dan op Graphs, dan krijg je een grafiek te zien van de sensorgegevens van de laatste tijd. Uiteraard in de veronderstelling dat je telefoon de hele tijd de BLE-pakketjes van je RuuviTag heeft ontvangen. Zo ontvang ik pakketjes van een RuuviTag in mijn tuinhuis van 20 meter verderop slechts sporadisch. Veel hangt ook af van hoe goed je huis geïsoleerd is. Bij mij is dat iets té goed voor veel sensoren.
Helemaal onderaan de instellingen van een RuuviTag kun je ook een Gateway URL invullen. Als je hier een URL invult, dan stuurt de app sensordata van deze tag door naar die server met een HTTP POST-aanvraag. Achter die URL kun je dan een server laten luisteren die met die data iets doet, zoals het opslaan in een database of het tonen in grafiekjes. Een eenvoudig Python-script daarvoor is ruuvi-gateway (https://gitlab.com/tctovsli/ruuvi-gateway).KADER
RAW- of URL-modus
Sinds juli 2018 komen alle RuuviTags die je koopt standaard in de RAW-modus: de officiële firmware stuurt dan gegevens over de temperatuur, luchtvochtigheid, luchtdruk, acceleratie en batterijspanning in hoge resolutie door via Bluetooth Low Energy. Maar er is ook een tweede modus, de URL-modus. Die codeert de gegevens van de temperatuur, luchtvochtigheid en luchtdruk in de vorm van een URL die ze doorstuurt naar alle BLE-apparaten in de buurt. Met het B-knopje kun je overschakelen tussen deze twee modi. In deze workshop maken we gebruik van de RAW-modus, omdat de URL-modus de temperatuur maar tot op 1 graad nauwkeurig toont.
Notificaties
De app ondersteunt ook notificaties als de sensorgegevens onder of boven specifieke waardes komen. Druk bij een tag bovenaan rechts op de drie bolletjes en kies dan Tag Settings. Vink daar bij Alerts een vinkje aan bij Temperature, Humidity, Air Pressure of RSSI. Stel dan in de schuifregelaar de onder- en bovengrens in van de sensorwaarde. Wanneer die grens nu wordt bereikt, krijg je een notificatie op je scherm. Dat werkt niet alleen om je te waarschuwen als de temperatuur in je koelkast te hoog oploopt (ben je de deur vergeten te sluiten?), maar ook om je te waarschuwen wanneer je kat, je kind of je bagage buiten je bereik is. Dan vink je bij de Alerts de RSSI aan. Ga eerst eens op een afstand van de tag staan waarboven je een waarschuwing wil horen. Kijk dan wat de RSSI op die afstand is: die waarde wordt uitgedrukt in een negatief getal met als eenheid dBm en wordt onderaan het dashboard van de tag in Ruuvi Station getoond. Dit getal vul je dan in de ondergrens van RSSI in: hoe negatiever de RSSI, hoe hoger de afstand.
Ook interessant zijn de notificaties voor Movement. Je krijgt dan een notificatie op je gsm wanneer de RuuviTag beweegt. Daarmee kun je bijvoorbeeld diefstal van een object detecteren. Of je plakt de RuuviTag aan een deur en detecteert daarmee wanneer de deur wordt opengedaan. Overigens kan het wel enkele seconden na de beweging duren voordat je een notificatie in Ruuvi Station krijgt.
Ruuviberry
De app is leuk om eens wat sensordata te bekijken, maar voor serieuzer werk is het beter een eigen gateway te draaien die niet van je smartphone afhangt en die rechtstreeks de sensordata van de RuuviTags inleest. Dat kan bijvoorbeeld op een Raspberry Pi Zero W of Pi 3B(+), die Bluetooth Low Energy ingebouwd hebben. Op (https://blog.ruuvi.com/rpi-gateway-6e4a5b676510) legt Otso Jousimaa, CIO van Ruuvi, uit hoe je van je Raspberry Pi een Ruuvi Gateway maakt.
Ruuvi biedt ook een image aan op (http://storage.ruuvi.com/ruuviberry_latest.zip) waarmee je alles in één keer installeert. Het image is gebaseerd op Raspbian, maakt een wifi-hotspot zodat je er gemakkelijk mee kunt verbinden, verzamelt sensordata van RuuviTags in de buurt met het Java-programma RuuviCollector, slaat de data op in de database InfluxDB en biedt met Grafana een dashboard aan om alle data te tonen.
Download daarvoor het image en schrijf het met Etcher (https://etcher.io) naar een microSD-kaart. Start je Pi van het image op. De Pi zet een wifi-hotspot RuuviGW met wachtwoord ruuvi-gateway in, zodat je gemakkelijk draadloos het netwerk kunt instellen, maar je kunt ook gewoon je Pi via ethernet op je lokaal netwerk aansluiten. Verander overigens zeker het standaardwachtwoord raspberry voor de gebruiker pi, want ssh is ook ingeschakeld.
Log dan op http://raspberrypi.local:3000/login in met gebruikersnaam admin en wachtwoord admin (verander het wachtwoord daarna). Alles is in het image al vooraf geconfigureerd, dus je hoeft alleen maar het juiste dashboard te openen: klik bovenaan links op Home en dan op Ruuvi Measurements. De installatie pikt de signalen van de verschillende Ruuvi-tags in de buurt op en toont hun meetresultaten in de grafieken. Vlak na de installatie zie je natuurlijk nog niet veel, maar als je de Pi een dag of zo laat draaien, krijg je mooie grafiekjes van de temperatuur, luchtvochtigheid, luchtdruk enzovoort te zien. Het dashboard toont zelfs de batterijspanning van de Ruuvi-tags, zodat je op tijd ziet wanneer een batterij aan vervanging toe is.
Zelf Ruuvi-tags inlezen
Je kunt ook eenvoudig in je eigen code de sensorgegevens van Ruuvi-tags inlezen met de Python-bibliotheek ruuvitag_sensor (https://github.com/ttu/ruuvitag-sensor). Merk wel op dat de machine waarop je de code draait Bluetooth Low Energy moet ondersteunen. Zoals gezegd, is dat het geval bij de Raspberry Pi Zero W en Pi 3B(+), maar misschien ondersteunt je laptop ook wel BLE. Weet je het niet zeker, controleer dit dan met de volgende opdracht:
sudo hcitool lescan
Je moet nu de MAC-adressen van je Ruuvi-tags in de uitvoer zien. Installeer daarna enkele benodigde pakketten:
sudo apt-get install python3-dev python3-psutil bluez bluez-hcidump
En installeer dan de Python-bibliotheek:
pip3 install ruuvitag_sensor
Daarna kun je de sensorgegevens van Ruuvi-tags in de buurt uitlezen met de volgende Python-code:
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)
Voer dit als root uit:
sudo python3 ruuvitag_data.py
De GitHub-pagina van de bibliotheek bevat nog heel wat meer codevoorbeelden. Zo kun je ook specifieke Ruuvi-tags op basis van hun MAC-adres uitlezen en een specifiek BLE-apparaat instellen om je tags te scannen als je bijvoorbeeld een extra BLE-dongel met long-range antenne hebt aangesloten. Bekijk ook zeker de directory examples.
Andere firmware
De standaard firmware waarmee de Ruuvi-tags komen, heet Ruuvi Firmware (vroeger heette deze Weather Station firmware). Maar je kunt die eenvoudig vervangen. Op (https://github.com/ruuvi/ruuvitag_fw) vind je alle benodigde informatie over het ontwikkelen van je eigen firmware voor de RuuviTag.
Op (https://lab.ruuvi.com/dfu/) vind je drie standaard firmware-images. De Ruuvi Firmware, firmware die van de RuuviTag een Eddystone proximity beacon maakt en firmware met een Espruino JavaScript-interpreter. Je kunt je RuuviTag met nieuwe firmware flashen met behulp van de Android-app nRF Connect of de iOS-apps nRF Connect of nRF Toolbox.
Als je je niet onmiddellijk comfortabel voelt met firmware in C, dan is de Espruino-firmware interessant: die laat je toe om de RuuviTag in JavaScript te programmeren met behulp van de Espruino-ontwikkelomgeving (https://www.espruino.com/Ruuvitag). De RuuviTag heeft zelfs onderaan het printplaatje gpio-pinnen vrij, waarop je nog extra knoppen, leds, sensoren, enz. kunt solderen waartoe je dan in je Espruino-code toegang hebt. Op (https://lab.ruuvi.com/pinout/) vind je de pin-out.
En verder
Op (https://lab.ruuvi.com/) vind je nog meer ideeën van wat je allemaal met de RuuviTags kunt doen. Bekijk zeker ook het forum op (https://f.ruuvi.com/) en de blog op (https://blog.ruuvi.com/) voor meer informatie.