Oma sääasema RuuviTagilla ja Grafanalla

RuuviTag on avoimen lähdekoodin sensorialusta, jolla on mahdollista tehdä hyvin monenlaisia projekteja. Tämä artikkeli keskittyy RuuviTagin käyttämiseen sääasemana.

Ensin esittelen laitteen ja täysin asennusvapaan tavan käyttää sitä sääasemana Android ja iPhone-laitteilla. Sen jälkeen kerron miten Raspberry Pi:hin voi asentaa datan kerääjän, tallentaa RuuviTagin tietoja InfluxDB tietokantaan ja visualisoida niitä Grafanalla.

Aloitetaan kuitenkin ihan alusta.

Mikä ihmeen RuuviTag?

RuuviTagi on kotelonsa kanssa kooltaan 5.2 cm valkoinen kiekko. Kokonsa ja vesitiiviin IP67-suojauksensa takia sen voi sijoittaa sisätilojen lisäksi ulos, saunaan, jääkaappiin, autoon, tietokonekoteloon, sikarihumidoriin… käytännössä ihan mihin tahansa paitsi vedellä täytettyyn akvaarioon, josta 2.4GHz radioaallot eivät liikoja liikahda.

RuuviTag koteloituna ja ilman — Kuvat https://tag.ruuvi.com/

RuuviTag toimii yhdellä paristolla (CR2477) ja on hyvin pihi virrankulutuksensa suhteen. Teoreettiseksi pariston kestoksi ilmoitetaan huimat kymmenen vuotta. Tagin voi siis huoletta sijoittaa hankalaankin paikkaan, sillä sitä ei tarvitse ihan heti kaivaa uudestaan esille.

Tageissa on kolmeakselinen kiihtyvyyssensori, sekä sensori lämpötilan, ilmankosteuden ja ilmanpaineen mittaukseen. Tagit lähettävät mittauksensa langattomasti vähävirtaista Bluetooth LE:tä käyttäen. RuuviTagit toimivat myös NFC-A tageina.

RuuviTagiin voi liittää ulkoisia sensoreita ja sen ohjelmiston voi päivittää vapaasti haluamakseen.

Sääasemalla liikkeelle

RuuviTagin käyttöönotto sääasemana on helppoa. Tageissa on valmiiksi asennettuna Weather Station laiteohjelmisto, joka mittaa ja näyttää kursailematta tämänhetkisen lämpötilan, suhteellisen ilmankosteuden ja ilmanpaineen.

Sinun tarvitsee vain laittaa tagiin paristo ja laite käynnistyy parissa sekunnissa automaattisesti sääasematilaan. Sen jälkeen katsot puhelimellasi tagin lähettämän mittausdatan.

Pakasta vedetyn RuuviTagin Weather Station.

Ei hankalaa Bluetooth-paritusta

Toisin kuin perinteisen Bluetooth-yhteyden kanssa, RuuviTagin kanssa ei tarvitse muodostaa pariliitosta puhelimen ja tagin välille. Tagiin ei myöskään oteta suoraan yhteyttä Bluetoothilla. Sen sijaan RuuviTag toimii ikään kuin majakkana (beacon) lähettäen jatkuvasti mittauksiaan. Puhelimesi poimii juuri kulloisella ajanhetkellä radioaalloilla kulkevan datan.

Mittausdata URLiin koodattuna

RuuviTagin Weather Station lähettää mittauksensa Eddystone-protokollaa käyttäen. Homman juju piilee Eddystonen URL-kentässä, jossa tagit lähettävät mittausdatansa koodattuna. Nämä URL-osoitteet ovat muotoa https://ruu.vi/#BEwUAMks-

Vierailemalla tässä URL-osoitteessa näet yhden RuuviTagini mittaustuloksen. Sivu ei kuitenkaan ole millään tavalla yhteydessä tagiini, eikä päivity ajan myötä. Se on vain yksittäinen staattinen hetki ajassa, yksi mittaustulos työhuoneestani joskus helmikuussa 2018.

Ruu.vi:ssä oleva sivu saa datansa URL-osoitteessa hash-bangin perässä olevasta tekstistä BEwUAMks-. Tämä on RuuviTagin mittausdata koodatussa muodossa.

Tässä on toinen, lähes samalta näyttävä, mutta eri lukemia antava mittausdata toiselta RuuviTagiltani: BFiCAMks-. Voit kokeilla millaisia tuloksia se näyttää ruu.vi-sivulla.

https://ruu.vi/#BEwUAMks- Chromen Developer Toolseilla kurkistellen.

Jokainen RuuviTag lähettää siis jatkuvasti päivittyvää URL-osoitetta. Puhelimesi nappaa tämän osoitteen, avaan ruu.vi:ssä olevan www-sivun, joka purkaa osoitteessa olevan koodatun mittausdatan ja näyttää sen ymmärrettävässä muodossa. Sama ruu.vi-sivu osaa näyttää siis maailman jokaisen RuuviTagin Weather Stationin tiedot, vain koodattu data muuttuu.

Koska Ruuvi on avoimen lähdekoodin projekti, pääset tutkimaan ruu.vi-sivun lähdekoodia GitHubista. Lähdekoodista selviää mm. miten URL-osoitteessa oleva datan koodaus puretaan.

Säätiedot puhelimen näytölle

Android

Android-käyttäjänä RuuviTagin säätietojen katseluun riittää, että napsautat puhelimestasi Bluetoothin päälle ja kurkkaat Nearby-sovellukseen. RuuviTag näkyy sovelluksessa ja klikatessasi sitä saat tuoreimmat mittaustulokset esille. Jos annat Nearby-sovellukselle luvan lähettää ilmoituksia, näet jatkossa tagisi suoraan puhelimesi ilmoituskeskuksesta.

Androidissa RuuviTag näkyy heti, kun laitat Bluetoothin päälle.

iPhone

iPhone-käyttäjä on hieman huonommassa asemassa, sillä iOS ei tue suoraan Weather Stationiin käyttämää Eddystone-protokollaa. Sen sijaan Applen laitteet käyttävät kilpailevaa iBeacon-protokollaa viestintäänsä. RuuviTag itsessään tukee iBeaconia, mutta Weather Station laiteohjelmistosta tuki puuttuu.

Aiemmin ongelmaa pystyi kiertämään asentamalla Google Chrome-selaimen. Siinä oli tuki Physical Webille ja Eddystonelle, mutta Google poisti tuen lokakuussa 2017 Chromen versiosta 62 lähtien.

Eddystone-beaconeja voi kuitenkin iOSillakin tarkastella esimerkiksi nRF Connect-sovelluksella. Tällä sovelluksella tagien lähettämää URL-osoitetta ei kuitenkaan voi klikata, eikä osoitteen kirjoittaminen selaimeen ole mielekäs vaihtoehto, joten käyttäjäystävällisyys karisee.

Onneksi Physical Web-sovellus toimii helpommin. Se listaa löytyneet beaconit samaan tapaan kuin Androidin Nearby-sovellus ja tulokset aukeavat helposti klikkaamalla ruudulle.

RuuviTag näkyy iOS:n nRF Connect ja Physical Web -sovelluksilla.

Virallinen sovellus on tulossa… piakkoin?

Tällä hetkellä kehitteillä on virallinen RuuviTag-sovellus, jonka pitäisi tulla ulos molemmille alustoille lähitulevaisuudessa. Sovelluksen on tarkoitus helpottaa käyttöä varsinkin silloin, kun tageja on enemmän kuin yksi. Sovellus myös näyttäisi tukevan hälytysrajojen asetuksia ja muutenkin näyttää visuaalisesti upealta. Toivottavasti se saadaan molemmille alustoille ulos pian!

Android testiversion voit jo ladata .APK-pakettina halutessasi.

@ruuvicom twiittasi RuuviTag mobiilisovelluksesta lokakuussa 2017.

Tarkemmat tiedot talteen ja läppärin näytölle

Niin mukavaa kuin säätietojen katselu puhelimen ruudulta onkin, on yksinkertaisimmassa mallissa myös rajoituksensa.

Ensinnäkin– RuuviTagin langaton Bluetooth LE kantama on vakuuttava, mutta autokatoksessani oleva tagi ei kuulu joka paikkaan taloni sisälle. En välittäisi seistä eteisen ikkunan edessä katselemassa säätietoja, vaan haluan ne sohvalleni.

Toiseksi– RuuviTag ei kerää historiatietoa eikä nykyisellään tue hälytyksiä. Myös tietojen yhdistäminen muihin mittaustietoihin on tällaisenaan hankalaa.

Raakadataa! Enemmän, paremmin, nopeammin!

RuuviTagin Weather Stationissa on perustilan lisäksi raakadataa lähettävä tila, johon pääsee painamalla tagissa olevaa pientä B-nappia. Takaisin perustilaan pääsee neppaamalla samaa nappia uudelleen.

B-nappia painamalla RuuviTagin Weather Stationin saa raakadatatilaan.

B-nappia painaessa laite siis siirtyy raakadatatilaan (RAW). Tässä tilassa dataa lähetetään paremmalla tarkkuudella kuin perustilassa. RAW-tila myös lähettää kaiken saatavilla olevan datan, mukaan lukien kiihtyvyysanturin ja pariston varaustilan tiedot.

Huomioitavaa on, että RAW-tila soveltuu hyvin datan keräystä varten, mutta samalla menetetään helppokäyttöinen puhelimella käytettävä ruu.vi-sivuston näkymä.

Datan kerääminen talteen

RuuviTagin lähettämän tarkemman datan keräämiseen tarvitset Bluetooth LE:ä tukevan laitteen. Itse olen käyttänyt onnistuneesti Raspberry Pi 3:a ja sen pikkuveljeä Raspberry Pi Zero W:tä.

Tarvitset myös tietokannan ja visualisointityökalun. Tätä aihetta käsiteltiin aiemmassa artikkelissani Tee se itse: Omakotitalon lämmityksen mittaaminen ja visualisointi, jossa Raspberry Pi:hin asennettiin InfluxDB tietokannaksi ja Grafana visualisointi- ja hälytystyökaluksi. Käy kurkkailemassa vinkit artikkelista, tai asentele ne niin kuin parhaaksi katsot.

RuuviCollector

Lisäksi tarvitset sovelluksen, joka osaa kerätä RuuviTagien dataa. Tähän tarkoitukseen soveltuu mainiosti RuuviCollector.

RuuviCollectorin asentaminen

Lataa RuuviCollector projektin GitHub-sivun Releases-välilehdeltä: ruuvi-collector-0.2.jar. Lisäksi tarvitset kopion asetustiedostosta ruuvi-collector.properties.example, joka löytyy projektin repositoryn juuresta. Poista asetustiedoston nimestä .example tallentaessasi sitä itsellesi.

RuuviCollector on Java-sovellus, joten asenna Java 8:

$ sudo apt-get update
$ sudo apt-get install oracle-java8-jdk

Muokkaa ruuvi-collector.properties asetustiedostoon InfluxDB:n osoite- ja tunnustiedot. Tarkista myös muut asetukset läpi.

# InfluxDB connection
influxUrl=http://localhost:8086
influxDatabase=ruuvi
influxMeasurement=ruuvi_measurements
influxUser=admin
influxPassword=password

Jotta sovellusta ei tarvitsisi ajaa pääkäyttäjän tunnuksella, aja seuraavat komennot. Komennot lisäävät Pi-käyttäjäsi tarvitsemat kyvykkyydet hcitool ja hcidump-työkaluihin, joita RuuviCollector käyttää datan keräämiseen.

$ sudo setcap 'cap_net_raw,cap_net_admin+eip' `which hcitool`
$ sudo setcap 'cap_net_raw,cap_net_admin+eip' `which hcidump`

Yksi, kaksi, aja!

RuuviCollectorin pitäisi nyt olla valmiina palvelukseen. Kokeile käynnistää se komennolla:

$ java -jar ruuvi-collector-0.2.jar

Jotta palvelu pysyisi ajossa ilman jatkuvaa terminaaliyhteyttä, voit ajaa sitä screen tai tmux-sessiossa.

Voit myös tehdä RuuviCollectorille Systemd .service-tiedoston, jolla palvelu käynnistyy automaattisesti ja on ajossa aina kun Pi:si on päällä.

Tämä tapahtuu luomalla tiedosto/etc/systemd/system/ruuvi-collector.service ja lisäämällä siihen oheiset tiedot. Muokkaa polut sinulle sopiviksi.

[Unit]
Description=Ruuvi Collector service
[Service]
User=pi
WorkingDirectory=/home/pi/ruuvi/
ExecStart=/usr/bin/java -jar ruuvi-collector-0.2.jar
SuccessExitStatus=143
TimeoutStopSec=10
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target

Kun tiedosto on tehty ja tallennettu, käynnistä palvelu:

$ sudo systemctl start ruuvi-collector.service

Aseta palvelu käynnistymään jatkossa automaattisesti:

$ sudo systemctl enable ruuvi-collector.service

Näytä sitä käppyrää, Grafana!

Viimeinkin kaiken pitäisi olla valmista datan kurkisteluun.

Lisää juuri luotu Ruuvin Influx-tietokanta Grafanaan. Valitse Admin ja Data Sources. Lisää uusi data source.

Lisää data sourceksi InfluxDB tarvittavilla ruuvitiedoilla.

Tee uusi Dashboard ja sille uusi Graph. Muokkaa graafia ja valitse datalähteeksi juuri lisäämäsi data source. Valitse measurementiksi ruuvi_measurements ja lisää hakuehto where mac = ruuvitagisi mac-osoite. Saatavilla olevat mac-osoitteet löytyvät suoraan Grafanan alasvetovalikosta, kun editoit graafia.

Valitse fieldiksi temperature. Jos kaikki meni oikein, näyttää Grafana kutakuinkin seuraavalta:

Kun saat homman pelittämään oikein, voitkin alkaa lisäämään muita datapisteitä ja kenties muita RuuviTagejasi näkyviin.

Havaintoja

On ollut mielenkiintoista seurata pienten asioiden vaikutuksia mittauksiin.

Esimerkiksi ilmankosteuden 4% nousu ja yönaikainen tasoittuminen, kun on nostanut pyykit narulle kuivumaan kahdeksalta illalla. Tai vaikkapa lauantaisen saunomisen vaikutukset sisäilman lämpötilaan ja kosteuteen.

On myös mielenkiintoista, miten eri sensorit raportoivat hieman erilaisia tuloksia. Saan ulkolämpötiladataa useammalta sensorilta ja esimerkiksi Ouman ja RuuviTag raportoivat jatkuvasti noin kahden asteen eroja. Ouman myös kulkee kulmikkaammin, raportoiden datansa epätarkemmin:

Eri sensoreiden mittailujen yhdistäminen on myös jännää. Oheisessa kuvassa Ouman mittaa kaukolämpö-vesikiertoisen lattialämmityksemme lämpötiloja sekä ulkolämpötilan. Ruuvi mittaa samaan graafiin talon huonelämpötilan.

On myös mahdollista virittää usean RuuviTagin dashboard ja visualisoida kaikki mahdollinen, kuten Henrik Heikkilä on tehnyt omassa projektissaan:

https://graphs.2kgwf.fi/dashboard/db/ruuvi?refresh=1m&orgId=1

Mitä seuraavaksi?

  • Viritä pikavilkaisuystävällinen dashboard tuoreimmille säätiedoille
  • Laita järjestelmäsi hälyttämään, kun saunan lämpötila nousee yli 65°C
  • Kokeile muita RuuviTagin projekteja ja firmwareja

Saman sarjan juttuja:

Aiheesta lisää muualla: