Mitattujen arvojen tallentaminen SQL-tietokantaan

Comments Off on Mitattujen arvojen tallentaminen SQL-tietokantaan

Edellisissä postauksissa luettiin tietoa antureilta. Kokeillaan nyt miten saataisiin lämpötila, ilmanpaine ja ilmankosteus, valonmäärä yms. mittaustuloksia tallennettua talteen SQL-tietokantaan. Myöhemmin voidaan sitten piirtää tietokantaan tallennetusta historia tiedosta graafisia esityksiä.

Kokeillaan asentaa ilmainen MariaDB tietokanta pieneen Raspberry Pi tietokoneeseen. Tiedon lähteenä käytin pääasiasssa tätä Englannin kielistä sivustoa; https://raspberrytips.com/install-mariadb-raspberry-pi/

Asennus tapahtuu seuraavia terminaalikomentoja käyttäen;

sudo apt update
sudo apt upgrade

Eli ensin on hyvä päivittää paketit ajan tasalle, että osataan hakea mariadb:n asennuspaketteja oikeilta servereiltä, internetistä. Sitten jatketaan eteenpäin ja asennetaan “mariadb-server” paketti:

sudo apt install mariadb-server

MariaDB tietokanta on nyt asennettu. Nyt se kannattaa turvata salasanalla, jotta se on turvallinen käyttää jatkossa.

sudo mysql_secure_installation

Vanhaa salasanaa ei ole, painetaan Enter. Sitten syötetään uusi salasana, kaksi kertaa. Se kannattaa nyt kirjata ylös itselle varmaan paikkaan, että sen muistaa itse myöhemmin, kun kokeillaan tiedon tallentamista tietokantaan.

Samalla kannattaa poistaa “anonymous” käyttäjiltä oikeus tietokantaan, valitaan “y” ja painetaan Enter.

Myöskin “test” tietokanta kannattaa poistaa tässä vaiheessa. On parempi luoda itse uusi testitietokanta, ja määrittää sille turvalliset käyttöoikeudet. Valitaan siihenkin “y”, ja painetaan Enter painiketta.

Viimeiseksi asetustyökalu kysyy, “Ladataanko käyttöoikeusasetukset uudestaan, nyt?”. Siihenkin kannattaa valita “y”, ja painaa Enter painiketta.

Nyt tietokanta on asennettu, turvattu omalla salasanalla ja valmis käyttöön. Voidaan ottaa siihen yhteys komennoilla;

sudo su (Kun tehdään toimenpiteitä tietokantaa, tehdään ne root käyttäjänä. Tavallisella käyttäjällä ei ole nyt vielä oikeuksia annettu.)

mysql -u root -p ja kirjoittamalla oma, hetki sitten annettu “root salasana”, MariaDB tietokantaan.

Näin, nyt ollaan “sisällä SQL -tietokannassa”. Seuraavaksi voidaan luoda tietokantaan uusi oma tietokanta, ja lisätä siihen käyttäjiä. Ja antaa käyttäjille oikeuksia tietokantaan. Tällaiset toimenpiteet hoituvat “SQL-komennoilla”;

  • SHOW DATABASES;
  • USE <database>;
  • SHOW TABLES;
  • SELECT * FROM <table>;
  • UPDATE, INSERT, DELETE, …

Uuden tietokannan luominen tapahtuu esimerkiksi näin;

CREATE DATABASE oma_tietokanta;

Tietokantoja voi olla MariaDB:ssä useitakin yhtäaikaa, ja ne erotellaan tietokannan nimen perusteella.

Uuden käyttäjän lisääminen tapahtuu näin; (Esimerkiksi, uusi käyttäjä “automaatti”)

CREATE USER 'automaatti'@'localhost' IDENTIFIED BY '<salasana>';

Nyt tässä kannattaa huomata, että kun luodaan uusi käyttäjä, tälle voidaan asettaa oma käyttäjäkohtainen salasana. Ei kannata valita samaa salasanaa, mikä juuri edellä annettiin “root käyttäjälle”, vaan kannattaa luoda uusi, tälle käyttäjälle yksistään sovelias salasana. Näin eri käyttäjät on lokeroitu omiin osioihinsa, ja voidaan määrittää, mihin tietokantoihin heillä on oikeus.

Oikeudet tietylle käyttäjälle (automaatti), tiettyyn tietokantaan annetaan näin;

GRANT ALL PRIVILEGES ON oma_tietokanta.* TO 'automaatti'@'localhost';

Eli tämä käsky antaa “automaatti” nimiselle käyttäjälle, kaikki oikeudet (ALL PRIVILEDGES), “oma_tietokanta” nimiseen tietokantaan.

Viimeinen komento, jota yleensä paljon käytetään aina lopuksi on seuraavanlainen;

FLUSH PRIVILEGES;

Tämä päivittää juuri tehdyt muutokset oikeuksiin. Ja nyt “automaatti” nimisellä käyttäjällä pitäisi olla oikeus “oma_tietokanta” nimiseen kantaan, ja käyttäjä voi ruveta tallentamaan sinne tietoa, vaikkapa Python ohjelmointikielen avulla.

Voidaan kokeilla ottaa uudestaan yhteys tietokantaan, tällä kertaa “automaatti” käyttäjänä.

SHOW DATABASES; komennolla voidaan tarkastaa, että oma_tietokanta löytyy.

USE oma_tietokanta; komennolla, siirrytään sisälle “oma_tietokanta” nimiseen kantaan. Ja sinne voidaan luoda uusi tietokanta-taulu, vaikkapa seuraavanlaisella komennolla;

CREATE TABLE tietoa(datetime DATETIME NOT NULL,

lampotila FLOAT(5,2) NOT NULL,

kosteus FLOAT(5,2) NOT NULL,

ilmanpaine FLOAT(6,2) NOT NULL);

Näin, nyt tietokannassa on käyttäjä, ja taulu, valmiina tiedon tallennusta varten. Nyt voidaan lähteä tekemään Python koodia, jolla Raspberry Pi tietokone voi tallettaa tietokantaan, vaikkapa 5 minuutin välein, aikaleiman, lämpötilan, ilmankosteuden ja ilmanpaine-arvon. Poistutaan tietokannasta “exit-komennolla”.

Python koodia voidaan kirjoittaa vaikkapa nano-tekstieditorilla:

Kokeillaan ensin tällaisella yksinkertaisella Python-koodilla, jonka pitäisi lukea lämpötila ja kosteusarvo, tulostaa ne konsoliin ja LCD-näytölle ja tallettaa arvot myös tietokantaan. Kopioidaan Python-koodi I2C-kansioon, koska sieltä löytyy LCD-näytön vaatima lcddriver.py ajurikirjasto. Se tapahtuu “cp mistä minne” komennolla. Ajo-oikeus +x voidaan asettaa “sudo chmod +x tiedostonimi” komennolla”. Ja Python ohjelma voidaan käynnistää “python tiedostonimi.py” komennolla.

Jotta ohjelma toimisi, pitää nyt kuitenkin ensin asentaa vielä ensin Pythoniin tuki MySQL tietokanta kommunikointia varten, se tapahtuu tuttuun tyyliin “sudo apt-get install” komennolla;

sudo apt-get install python-mysqldb

Tämän jälkeen voidaan yrittää käynnistää Python-ohjelma:

Nyt voidaan käydä katsomassa tietokannassa, tuliko tieto sinne talteen:
tietoa voidaan kysellä SELECT * FROM taulunimi; komennolla.

Tietokantaan “oma_tietokanta”, tauluun nimeltä “tietoa”,
tuli uusi rivi, jossa on tietoina; aikaleima, lämpötila, kosteus ja ilmanpaine.

Eli kokeilu onnistui. Nyt voidaan jatkaa eteenpäin, ja kehittää ohjelmaa edelleen. On mahdollista laittaa tämä Python-ohjelma käynnistymään vaikka automaattisesti 5 minuutin välein. Tällöin se tallettaisi tietoa tietokantaan jatkuvasti.

Linux käyttöjärjestelmissä kuten Raspberry Pi:n Raspbian, voidaan tehdä ajastettua toiminteita esimerkiksi Crontab:n avulla. Lisäämällä /etc/crontab tiedostoon komento joka käynnistää python ohjelman, on mahdollista suorittaa tehtäviä haluttuina ajankohtina. https://www.linux.fi/wiki/Komentojen_ajastaminen

Nano tekstieditorilla voi lisätä uuden rivin /etc/crontab tiedostoon, komennolla;
sudo nano /etc/crontab

Ctrl ja x lopettaa, nano kysyy tallennetaanko, valitaan “y” ja hyväksytään Enter painikkeella. Näin /etc/crontab tiedosto on muokattu ja tallennettu. Tämän jälkeen tietoa pitäisi alkaa tallentumaan tietokantaan, 5 minuutin välein. Pi käyttäjällä pitää tietenkin olla käyttö oikeus kyseiseen kansioon, ja tiedostoon, sen voi tarkastaa “sudo chown pi:pi -R kansionimi” komennolla.