Ruuvi Collector Raspberry Pi:lle ultrakevyellä gokrazyllä

alatalo
5 min readJan 12, 2024

Jos olet kaipaillut Ruuvin mobiilisovelluksen tarjoaman datan lisäksi pidemmän ajanjakson historiatietoja, etäkäyttömahdollisuuksia, integraatioita muihin järjestelmiin tai vaikkapa hälytyksiä pikaviestimiin, niin tämä on sinulle.

Mikäli aiemman Raspberry Pi -pohjaisen Ruuvi Collectorisi muistikortti hajosi jo kymmenennen kerran, niin olet oikeassa paikassa.

Rakennamme Ruuvi Collectorin, jossa yhden tai useamman RuuviTagin dataa luetaan keskitetysti Raspberry Pi -laitteella. Data tarjoillaan Prometheuksen tallennettavaksi ja esitetään Grafanalla.

Aiemmasta viisastuneena pyrimme tekemään RasPi-vehkeen, joka ei hajoita itseään ensimmäisen kuuden kuukauden aikana.

Tämä on osa artikkelisarjaa:

Osa 1 - Ruuvi Collector Raspberry Pi:lle
Osa 2 - Prometheus ja Grafana pilveen (tulossa)
Osa 3 - Etäyhteys ja muuta tarpeellista (tulossa)

Ruuvi Collector dataa keräämään

Käytämme ultrakevyttä gokrazy sovelluskerrosta ja ruuvi-prometheus exporter sovellusta.

Gokrazy pidentää Raspberry Pi:n käyttämän muistikortin elinaikaa merkittävästi, sillä se lataa käynnistyessään kaiken muistiinsa, eikä siten käytä muistikorttia jatkuvasti ajon aikana. Ensimmäisen asennuksen jälkeen se on myös todella helppo päivittää verkon yli ja on tarvittaessa uudelleen asennettavissa ja kopioitavissa minuuteissa.

Raspberry Pi:n tulee olla versio 3 tai uudempi, koska gokrazy vaatii 64-bittisen arkkitehtuurin toimiakseen. Itse käytän Raspberry Pi 3b:tä. Ensimmäisen generaation 32-bittinen Raspberry Pi Zero W ei toimi, mutta Zero 2 W toimii moitteetta ja onkin suositeltava alusta vähäisen virrankulutuksensa vuoksi.

Lisäksi tarvitset yhteensopivan 2GB+ muistikortin ja muistikortinlukijan.

Alla oleva on kirjoitettu Macille ja Homebrew pakettimanagerille. Sovella tarpeen mukaan.

Asenna Go

$ brew install go

Muokkaa tiedostoa ~/.zshrc ja lisää shellipathiisi Go:n bin hakemisto:

# ~/.zshrc

#...
export PATH=$PATH:$(go env GOPATH)/bin
#...

Avaa terminaali uudelleen tai aja $ source ~/.zshrc, jotta PATH-muutokset tulevat voimaan.

Asenna gokrazy

$ go install github.com/gokrazy/tools/cmd/gok@main

Gokrazy poikkeaa Linux-distroista (Rasbpian, Alpine jne) muun muassa siten, että sitä ei ole tarkoitus tai tarve säätää ssh:n yli lainkaan. Katsotaanpa tarkemmin:

Luo uusi gokrazy instanssi

Luo uusi gokrazy instanssi ruuvi-collector käyttäen gokrazyn gok CLI-sovellusta:

$ gok new -i ruuvi-collector

Tämä tekee instanssin konfiguraatiot polkuun ~/gokrazy/ruuvi-collector/.

Lisää tarvitsemamme paketit:

$ gok add -i ruuvi-collector github.com/gokrazy/wifi
$ gok add -i ruuvi-collector github.com/gokrazy/bluetooth
$ gok add -i ruuvi-collector github.com/joneskoo/ruuvi-prometheus
$ gok add -i ruuvi-collector github.com/prometheus/node_exporter

Luo uusi tiedosto ~/gokrazy/ruuvi-collector/wifi.json ja lisää langattoman verkkosi SSID ja salasana:

{
"ssid": "Your IoT wifi name",
"psk": "this is a bad password"
}

Muokkaa ~/gokrazy/ruuvi-collector/config.json tiedostoa ja lisää viittaus wifi.json tiedostoon PackageConfig:n alle. Configin pitäisi näyttää nyt tältä:

{
"Hostname": "ruuvi-collector",
"Update": {
"HTTPPassword": "secret"
},
"Packages": [
"github.com/gokrazy/wifi",
"github.com/gokrazy/bluetooth",
"github.com/joneskoo/ruuvi-prometheus",
"github.com/prometheus/node_exporter"
],
"PackageConfig": {
"github.com/gokrazy/wifi": {
"ExtraFilePaths": {
"/etc/wifi.json": "wifi.json"
}
}
},
"SerialConsole": "disabled"
}

Tämän myötä konfiguraatiomme on valmis ja voimme kirjoittaa kaiken muistikortille.

Kirjoita gokrazy muistikortille

Yhdistä kortinlukija ja muistikortti Macciin, tarkista mistä ne löytyvät:

$ diskutil list

#...
/dev/disk4 (external, physical):
#: TYPE NAME SIZE IDENTIFIER
0: FDisk_partition_scheme *15.9 GB disk4
1: DOS_FAT_32 UNTITLED 15.9 GB disk4s1
#...

Varoitus: nyt tarkkana! Jos valitset väärän laitteen, niin saatat ylikirjoittaa tietokoneesi järjestelmälevyn tai jotain muuta mitä et tarkoittanut.

Kirjoita tekemämme gokrazy instanssi muistikortille. Korvaa /dev/diskFIXME oikealla laiteella:

$ diskutil unmountDisk /dev/diskFIXME
$ gok -i ruuvi-collector overwrite --full /dev/diskFIXME
$ diskutil unmountDisk /dev/diskFIXME

Muistikortti unmountataan ennen ja jälkeen kirjoittamisen, koska muuten saatat saada virheilmoituksia käytössä olevasta levystä.

Raspberry Pi käyntiin

Käynnistä Raspberry Pi juuri kirjoitetulla muistikortilla. Laitteen pitäisi nousta verkkoon ja käynnistää palvelunsa automaattisesti muutamassa kymmenessä sekunnissa.

Mikäli kaikki meni kuin elokuvissa, niin käytettävissäsi on nyt gokrazyn www-käyttöliittymä osoitteessa http://ruuvi-collector/.

Mikäli ei, niin tökkää Raspi kiinni näyttöön ja tutki mikä meni vihkoon.

Pääset webbikäyttöliittymään käsiksi tunnuksella:
— käyttäjä: gokrazy
— salasana: katso ~/gokrazy/ruuvi-collector/config.json -> HTTPPassword

Kliksuttele käyttöliittymästä services -> /user/ruuvi-prometheus ym. palvelut läpi ja totea, että homma käy ja kukkuu.

gokrazyn www-käyttöliittymä

Tarkista, että palvelut toimivat

Ruuvi Prometheus Exporter vastaa portissa 9521:

$ curl ruuvi-collector:9521/metrics

# ...
# HELP ruuvi_temperature_celsius Ruuvi tag sensor temperature
# TYPE ruuvi_temperature_celsius gauge
ruuvi_temperature_celsius{device="xx:xx:xx:xx:xx:xx"} 21.979999542236328
ruuvi_temperature_celsius{device="yy:yy:yy:yy:yy:yy"} 20.514999389648438
# ...

Prometheus Node Exporter vastaa portissa 9100:

$ curl ruuvi-collector:9100/metrics

# ...
# HELP node_load1 1m load average.
# TYPE node_load1 gauge
node_load1 0.3
# ...

Päivitykset verkon yli

Kun jatkossa teet muutoksia tai päivität gokrazyn konfiguraatiota tai versioita, niin voit tehdä kaiken verkon yli. Muistikorttia ei siis tarvitse enää irroittaa Raspberry Pi:stä ja kytkeä tietokoneeseen.

Päivitys käy komennolla:

$ gok update -i ruuvi-collector

Lisää TLS salaus

Voit lisätä TLS salauksen, mikäli Ruuvi Collectorisi on ajossa esim. epäluotettavassa tai salaamattomassa verkossa.

Lisää seuraava UseTLS -rivi ~/gokrazy/ruuvi-collector/config.json tiedostoon kohdanUpdate alle:

{
// ...
"Update": {
"HTTPPassword": "secret",
"UseTLS": "self-signed"
},
// ...
}

Tee ensimmäinen päivitys --insecure parametriä käyttäen — tämä luo itse allekirjoitetun suojausvarmenteen (self-signed certificate) ja päivittää gokrazyn:

$ gok update -i ruuvi-collector --insecure

Jatkossa päivitykset toimivat normaalisti ja salattuna ilman lisäparametriä:

$ gok update -i ruuvi-collector

TLS:n myötä Gokrazyä päivittäessäsi varmenteen sormenjälki tarkistetaan automaattisesti.

Käytettäessäsi gokrazyn www-käyttöliittymää osoitteessa https://ruuvi-collector/ saat selaimelta varoituksen suojausvarmenteesta. Varoitus johtuu siitä, että allekirjoitimme varmenteen itse. Tässä tapauksessa se on OK ja voit hyväksyä yhteyden.

Ruuvi Collectorisi on nyt valmis!

Ruuvi Collectorisi on nyt pelikunnossa ja kuuntelee dataa kaikilta havaitsemiltaan RuuviTageilta. Se ei kuitenkaan tallenna tietoja vielä mihinkään, vaan odottaa että joku pyytäisi sen tietoja.

Datan hakua ja tallennusta varten tarvitsemme Prometheuksen, jonka asennamme pilvipalveluun yhdessä Grafanan kanssa (artikkeli tulossa).

Artikkelisarja:

Osa 1 — Ruuvi Collector Raspberry Pi:lle
Osa 2 — Prometheus ja Grafana pilveen (tulossa)
Osa 3 — Etäyhteys ja muuta tarpeellista (tulossa)


Kiitos Joonas Kuorilehdolle hyvistä vinkeistä Ruuvi Collectoria varten ja ruuvi-prometheus exporterista! Kiitokset myös Jukka Taimistolle bluewalkerista :)


Mikä RuuviTag?

RuuviTag on langaton paristolla toimiva Bluetooth-anturi, joka mittaa lämpöä, ilmankosteutta, ilmanpainetta ja liikettä. Ruuvien keräämän datan reaaliaikainen seuranta ja 10 päivän historiakäyrän seuraaminen onnistuu puhelimen RuuviStation sovelluksella.

Lisäominaisuudet, kuten datan tarkastelu etäyhteydellä, hälytykset ja yli 10 päivän historiadatan seuraaminen vaativat Ruuvi Gateway laitteen ja Ruuvi Cloud tilauksen. Ruuvi Cloudia on saatavilla usein eri ominaisuuksin ja hinnoin ja jo muutaman euron kuukausihinnalla saa käyttöönsä varsin kattavan paketin. Data tallentuu Ruuvin pilvipalveluun.

Virittelijöille on tarjolla vaihtoehto, jossa Ruuvi Gatewaytä ja Ruuvi Cloud -tilausta ei tarvitse ja kaikki data säilyy omissa näpeissä. Tässä artikkelisarjassa esitellään yksi vaihtoehto, jossa täydelliset historiatiedot ovat käytettävissä mistä tahansa ja hälytyksiä sähköpostiin ja pikaviestimiin voi säätää mielin määrin.

Jos sinulla on jo Ruuvi Gateway, niin Ruuvin blogista löydät ohjeet datan ulos saamiseen MQTT:lla omia integraatioitasi varten.

--

--

alatalo

Software Development Generalist - Hybrid Worker - Human Being