Lämpötilojen loggaamista Xiaomin BLE-antureilla (med Raspi, Influxdb, Grafana)

Liittynyt
30.10.2016
Viestejä
1 080
Aloitetaanpa tällainen ketju. Itse tilailin taannoin Ebaystä halpoja Xiaomin BLE-lämpötila-antureita kun katselin että niillä saa suht helposti tehtyä lämpötilaloggerin. Maksavat kiinasta tilattuna noin viisi euroa kappale. Nykyään tietysti tulee arvonlisävero tuohon päälle. Hobbyhallista näkyy saavan noita ainakin tällä erää 6,95EUR/kpl


Kyse siis näistä:



Nuo saa tuollaisenaankin lähettämään tietoa, mutta itse ajoin alemman linkin mukaisesti customfirmwaren, joka muuttaa anturien toiminnan advertisement-tilaan. Tämä kuuleman mukaan säästää anturien paristoja. Firmis on helppo päivittää noihin puhelimen bluetoothilla alemmasta linkistä löytyvällä selaimessa toimivalla over-the-air-päivitysohjelmalla. Meni ainakin heittämällä Xiaomi Redmi Note 9T:llä ja Chromella.


Kannattaa samalla vaihtaa advertisement typeksi "atc1441" ja itse myös kasvatin advertising intervalin 10 000 millisekuntiin (eli 10 sekuntiin). Desimaalipiste pitää ottaa pois kentästä, siihen ei ilmeisesti sovi kuin viisi numeroa.




Antureita kannattaa ottaa käyttöön yksi kerrallaan ja kirjoittaa anturin MAC-osoitteen neljä viimeistä numeroa anturin pohjaan, jotta ne erottaa helposti myöhemminkin.


Custom-firmiksellä kosteusmittauksen kalibrointi menee jostain syystä pieleen. Itse en lähtenyt tarkasti noita uudestaan kalibroimaan, vaan yhdellä vakiofirmiksellä varustetulla anturilla vertailin, paljonko noihin tuli heittoa. Keskimäärin ATC-firmiksellä näyttää 6 %-yksikköä liian pientä kosteusprosenttia. Tuon offsetin voi sitten määritellä sensors.ini-tiedostoon


Eli tarvitaan vain linuxilla ja bluetoothilla varustettu tietokone, esim. Raspberry Pi. Raspberry Pi Zeroa/Zero W:tä käyttäessä on huomioitava, että kyseessä on ARMv6-laite. Grafanasta on olemassa erilliset ARMv6- ja ARMv7-versiot (Raspi 3- ja 4-sarjat), joten pitää katsoa, kumman asentaa. Väärää versiota oleva Grafana server asentuu kyllä Raspi Zeroon, mutta ei suostu käynnistymään


Työjärjestys on jotakuinkin seuraava:


-Asenna Raspbian. SSH:n saa aktivoitumaan ekalla bootilla, kun laittaa boot-osiolle tyhjän tiedoston, jonka nimi on "ssh"

-Mikäli haluaa Raspin suoraan wifi-verkkoon ekalla bootilla, on boot-osiolle luotava tiedosto "wpa_supplicant.conf", jonka sisällöksi

Koodi:
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev

country=<Insert 2 letter ISO 3166-1 country code here>

update_config=1


network={

ssid="<Name of your wireless LAN>"

psk="<Password for your wireless LAN>"

}
Country-koodiksi siis FI ja ssid/psk-kohtiin lainausmerkkien sisään oman wifi-verkon ssid ja salausavain


Nyt pitäisi ekalla bootilla olla ssh aktivoituna ja wifin tapauksessa Raspi verkkoon yhdistettynä. Raspi hakee IP-osoitetta DHCP:llä ja sen voi etsiä verkosta esim. Angry IP Scannerilla (vaatii Javan asentamisen)


Mikäli Raspille haluaa määrittää kiinteän IP-osoitteen, se onnistuu seuraavan ohjeen mukaan. Verkkokortin tunnus sen mukaan, käytätkö langallista vai langaton verkkoa Raspin liittämiseen. Ifconfigilla pystyy tarkastamaan verkkokortin tunnuksen



Salasana kannattaa vaihtaa ja päivitellä Raspi seuraavaksi.


Sitten voi asennella MiTemperature2-Github-sivun ohjeen mukaan tarvittavat softat. Itse asensin myös Gitin, jolla saa tuon MiTemperature2-paketin ladattua sekä screenin, jossa tuota loggeria voi myöhemmin ajaa, jos ei sitä laita automaattisesti käynnistyväksi.


Kun nuo on asenneltu, voi kokeilla komennolla
Koodi:
sudo hcitool lescan --duplicate
että sensorit löytyvät kantamalta. Maksimikantoaluetta ei tiedä kuin kokeilemalla ja siihen vaikuttaa välissä olevat esteet ja niiden materiaali. Muutamien metrin päästä kantaa kyllä seinien läpi pakastimen/jääkaapinkin sisältä signaali. Jos anturit löytyivät, niin voi kokeilla tiedostoon logittamista

Koodi:
sudo ./LYWSD03MMC.py --atc --rssi --skipidentical 50  --callback sendToFile.sh
Kansioon pitäisi olla ilmestynyt data.txt-tiedosto, josta löytyy mittaustuloksia. Komento hakee kaikki kantamalla olevien ATC-firmiksellä olevien antureiden tiedot. Jos toimii, niin seuraavaksi voi kasata sensors.ini-tiedoston. Sen sisältö on seuraavankaltainen. Kannattaa alusta pyyhkiä esimerkkitekstit pois

Koodi:
[A4:C1:38:C6:09:61]

sensorname=Storage_freezer

humidityOffset=6

topic=Storage/freezer


[A4:C1:38:78:68:41]

sensorname=Garage_refridgerator

humidityOffset=6

topic=Garage/refridgerator


[A4:C1:38:E9:09:B0]

sensorname=Kitchen_freezer

humidityOffset=6

topic=Kitchen/freezer


[A4:C1:38:06:A3:4B]

sensorname=Indoor_temp

humidityOffset=6

topic=Indoor/indoor01
Hakasulkeisiin siis kunkin lämpömittarin MAC-osoite, jonka löytää esim. aiemmin kokeillusta data.txt-tiedostosta sekä anturille haluttu nimi. humidityoffset liittyy aiemmin mainittuun customfirmiksen aiheuttamaan näyttämävirheeseen, jota voi tässä korjata. Eli jos anturi näyttää pienempää ilmankosteutta kuin oikeasti on, tähän laitetaan positiivinen luku. Jos näyttää suurempaa lukemaa, laitetaan miinusmerkkinen luku. Topicin-merkitys ei itselle auennut, mutta siihen voi jotain kuvaavaa laittaa. Tämän jälkeen voi kokeilla seuraavalla komennolla, että tiedosto on oikein täytetty.

Koodi:
sudo ./LYWSD03MMC.py --atc --rssi --skipidentical 50 --devicelistfile sensors.ini --onlydevicelist --callback sendToFile.sh
Seuraavaksi voi asennella Influxdb:n ja Grafanan tämän ohjeen mukaisesti sekä luoda influx-tietokannan. Tuossa lisätään softien omat repositoryt, joista nuo ladataan. Raspbianin omissa repoissa softaversiot laahaavat hieman jäljessä

Influxdb:stä on olemassa myös uusi 2-versio, joka löytyy repositorysta nimellä influxdb2

Jos käytät Raspberry Pi Zeroa, älä asenna Grafanaa ohjeen mukaan, vaan tämän sivun ohjeilla

Tuolta pitää siis valita Ubuntu/Debian ARMv6
Koodi:
sudo apt-get install -y adduser libfontconfig1
wget https://dl.grafana.com/oss/release/grafana-rpi_8.0.6_armhf.deb
sudo dpkg -i grafana-rpi_8.0.6_armhf.deb
Grafanan pitäisi asennuksen jälkeen aueta selaimella osoitteesta http://<RASPIN IP-OSOITE>:3000
Oletustunnukset ovat admin/admin

Muokkaa seuraavaksi sendToInflux.sh-tiedostoa omia tarpeitasi vastaavaksi
Koodi:
curl -i -u "databaseuser:databasepasswd" -XPOST http://localhost:8086/write?db=temperatures\&precision=s --data-binary "AquaraBluetoothSensors,sensorname=$2 temperature=$3,calibratedHumidity=$4,voltage=$5,rssi=$6 $7"
Muutettavia kohtia ovat tietokannan käyttäjätunnus ja salasana, sekä XPOST-osoitteessa oleva tietokannan nimi. Eli db=TIETOKANTA. Kannattaa data.txt:stä katsoa, että muuttujien numerot ovat oikein.

Koodi:
sensorname,temperature,humidity,voltage,rssi,timestamp Kitchen_refridgerator 6.7 54 2.735 -83 1627232024
$1=selitteet
$2=Anturin nimi
$3=Lämpötila
$4=Kosteusprosentti
$5=Pariston jännite
$6=Signaalinvoimakkuus dBm
$7=Kellonaika UNIX-muodossa
Kun scripti on kohdallaan, voi kokeilla seuraavalla komennolla, tallentuvatko lukemat tietokantaan
Koodi:
sudo ./LYWSD03MMC.py --atc --rssi --influxdb 1 --skipidentical 50 --devicelistfile sensors.ini --onlydevicelist --callback sendToInflux.sh
Jos scripti toimii, pitäisi ruudulla juosta jotain tämän näköistä
Koodi:
/home/pi/MiTemperature2/sendToInflux.sh sensorname,temperature,humidity,voltage,rssi,timestamp Indoor_temp 23.6 62 3.002 -52 1627649170
HTTP/1.1 204 No Content
Content-Type: application/json
Request-Id: 1f1d4e54-f134-11eb-8c69-000000000000
X-Influxdb-Build: OSS
X-Influxdb-Version: 1.6.4
X-Request-Id: 1f1d4e54-f134-11eb-8c69-000000000000
Date: Fri, 30 Jul 2021 12:46:12 GMT

BLE packet: A4:C1:38:06:A3:4B 00 1110161a18a4c13806a34b00ec38580bb409 -43
Temperature:  23.6
Humidity:  56
Battery voltage: 2.996 V
RSSI: -43 dBm
Battery: 88 %
Humidity calibrated (offset calibration):  62
Grafanasta pitäisi nyt add dashboard ja add panel -valinnoilla olla mahdollista lisätä halutun anturin ja mittaustiedon käppyrä valitsemalla:
Koodi:
FROM default AquaraBluetoothsensors WHERE sensorname = "HALUTTU SENSORI"
SELECT field(ESIM. TEMPERATURE)
GROUP BY time(HALUTTU PIIRTOTARKKUUS)
Itse en ole mikään ekspertti näiden suhteen tai koodauksen suhteen ylipäänsä, eli parannusehdotuksia tai lisäyksiä otetaan vastaan. Ja Influxdb:n downsamplingista kuulisin mielelläni, jos siitä joku tietää enemmän. Eli miten toteuttaa sellainen, että vaikkapa kahden vuorokauden ajan tietokannassa pysyy kaikki tallennettu data. Sitten kahden vuorokauden jälkeen mittauksista lasketaan tunnin tarkkuudella oleva keskiarvo, joka tallennetaan tietokantaan pysyvästi ja tuo kahta vuorokautta vanhempi raakadata poistetaan.
 
Viimeksi muokattu:
Liittynyt
30.10.2016
Viestejä
1 080
Pari Grafana-screenshottia



Muutamista paikoista on saanut lukea väitteitä, että Raspi Zero W:n bluetoothin kantama olisi merkittävästi parempi kuin Raspi 3:n tai Raspi 4:n. En ole aivan vakuuttunut, että näin on. Oman havainnon mukaan asiaan vaikuttaa Raspin asento ja yleisesti liikenne 2,4 GHz taajuudella. Zero-mallia on helpompi pyöritellä ja asetella optimaalisesti. Itsellä testissä sekä Raspi Zero W että Raspi 3B+. Nuo ovat nyt vierekkäin kirjahyllyn päällä jotakuinkin anturiverkon keskellä. Zeron olen havainnut saavan parhaat signaalit, kun sen pitää pystyssä muistikorttipaikka kattoa kohti. Pitää yrittää asetella Raspi 3:stakin eri asentoihin, että mikä siinä on optimaalisin.
 
Viimeksi muokattu:
Toggle Sidebar

Statistiikka

Viestiketjut
141 082
Viestejä
2 695 089
Jäsenet
52 604
Uusin jäsen
Korte

Hinta.fi

Ylös Bottom