おはようございます。じぇいかわさきです。
今回は、いよいよmariadbに検出した温湿度データをテーブルにインサートするための準備に取り掛かる。
DB自体の使い方もいまいちよくわからないので、ネットを見ながらの進め方になる。
初めてDBを扱う人の参考になればいいよね。

まずはともあれDBにログインしデータベースを作成
それでは、チョット前にDBをインストールして準備したので、それに則り実行してみよう。

まずは最初に、rootでログインをする。
rootでログインしているので、基本は全ての操作が可能。
まずは、今回のIoTでデバイスから取得したデータを格納するためのデータベースを作成する。もちろん、標準でできているデータベースを使用することも可能だが、ここはやはり別のデータベースを作成して個別に管理することにした。
create database iotdata;
このコマンドラインでデータベースを作成する。今回は、iotdataという名前のデータベースを作成した。
[ads]

Query OKと表示されれば、コマンドの動作が受け付けられ実行が完了した事になる。
次は、今回作成したiotdataで作業をするので、データベースをiotdataに切り替える。
切り替えるのは以下のコマンドを実行。
use iotdata;
Datadase changedと表示されて、MariaDB [none]がMariaDB [iotdata]となり、データベースが切り替わったことが確認できる。

新規にユーザーを作成し権限を与える
次は、作成したデータベースiotdataについて、操作ができるユーザーを作成する。
普通、rootはスーパーユーザーなので、rootで作業は継続しない。基本はユーザーを作成し、そのユーザーで作業をするのだ。
従って、今回は新たにiotdataを操作するraspというユーザーを新規に作成した。
create user rasp identified by ‘passwd’;
これで新規にraspというユーザーが追加されたことになる。

次は、作成したraspというユーザーに対して、iotdataというデータベースに対してだけ全ての権限を与える。allと言ってもrootと同じ権限をもたせるわけでは無い。
grant all on iotdata.* to rasp;
これでraspはiotdataというデータベースに対して、全ての操作ができるようになった。
[ads]

実際に新規にユーザーが作られているか確認をする。操作を間違えて、プログラムを一旦終了してしまったが、useコマンドでデータベースを切り替えればそのまま可能であることを忘れていた。
データベースをmysqlに切り替える。
use mysql;
mysqlに切り替えたら、実際にユーザーが正しく登録されているか、確認してみる。
select user, password, plugin from user;
リストが表示されて、新規に作成したraspというユーザーがパスワード付きで登録されているのがわかる。
これで準備は完了した。

データを格納するテーブルを作成する
いよいよ、今回のメインイベントになるデータを本当に格納するためのテーブルを作成する。
これが完成すれば、後はデータを流し込むだけになる。
ますは新規作成したraspというユーザーでログインをする。
mariadb -u rasp -p
パスワードを入力してMariaDBを起動する。

次は、新規に作ったデータベースのiotdataへ作業データベースを切り替える。
use iotdata;
MariaDB [nono] が MariaDB [iotdata] に切り替わり準備完了。

それではデータを格納するテーブルを作っていきましょう。
今回、DHT11から吐き出すデータをタイムスタンプを付加して、CSV形式のカンマ区切りデータでレコードを作成している。
この時、タイムススタンプは西暦ー月ー日の11桁、ブラックを挟み時間は時:分の5桁。そうすると合計で11+1+5になり17桁となる。
温度と湿度は各々小数点以下が一桁なのでMAX5桁有れば十分可能。
従って、以下のようにカラム名と変数を決定。
date varchar(20)、temp varchar(5)、humd varchar(5)
ここで使用した変数varcharとは、可変文字列という意味があり、簡単に言うと varchar(20)の場合、最大で20桁までの文字列を格納できる。ただし、20桁以下の場合は桁数が自動的に縮小し、余分なデータを格納しない方式。
これに対して、char(20)とすると、20桁の文字列が固定になり、20桁以下の場合にも空いた桁にはNUL(ブランク)が付加されてしまい、無駄になりデータの圧縮ができないのが特徴。
ではテーブルを作ってみましょう。
create table temphumd ( data varchar(20), temp varchar(5), humd varchar(5));
これでQuery OKが返ってくればテーブルが作られたことになります。

最後に確認のため、本能にテーブルができているか確認をします。
show tables;
というコマンドになります。テーブルを作る時はtableですが、できたテーブルを確認する時はtablesになりますので注意してください。
show table;とすると、エラーになります。

このように、iotdataというデータベースの中に、temphumdというテーブルが作られている事が確認できました。
これでデータを格納する準備が整いました。
後は、前回作ったデータを流し込み、このテーブルに本当に格納できるかを、確認する事が次の作業になりますね。
少しづつですが、確実に前進はしております。
まとめ
とりあえず、ネットを見ながら手探りでテーブル作成にまでたどり着いた。
しかし、これで本当にうまくいくのかははっきり言って分からない。DBって簡単なようで意外と難しそうだしね。
そもそも、ラズパイOSのベースはLinuxのDebianなんだよ。忘れていたんですがLinuxって、ユーザーやその権限の管理が厳密に行われているので、その辺でトラブる事が多いんです。
過去にちょっとLinuxをかじった時に、辛り痛い目に合った記憶がある。
何かしようとすると、すぐにアクセス権限が無いとか言って、先に進まなくなる。
ちょっと悪夢がよみがえって来そうな感じ。
とりあえず、ここまで来たので先に進んでいきたいと思う。
[twt]
