おはようございます。じぇいかわさきです。
やっとの思い、独学まっしぐらでなんとかDHT11が採取した温湿度を、MariaDBのテーブルへ保管できるようになった。
言葉で書くと、ほんの1行で終わってしまうような内容なんだけれども、実際にはネットで調べまくりっていう状態だったのです。
歳を取ってから、なにか勉強しようっていうのは、やはり大変なこと。若い内にやっておく方が、120%楽だと思うと経験者は語る。

絶対に忘れてはいけないこと
実は、安易な考えでラズパイを使ってIoTに挑戦だ。そう考えていたんです。しかし、実際に触り始めると、もう分からないことだらけ。
IoTのフロントエンドで、データを採取したりデータベースに書き込んだり、読み出したり。そんな操作をするのはPython3で構築する。
IoTで得られたデータを、後で加工しやすいようにデータベースに登録するのだが、そのデータベースはフリーで使いやすいということで、MySQLの姉妹であるMariaDBを使用する。
しかし、ここで忘れてはいけないのは、Python3にしてもMariaDBにしても、これらはアプリケーションだという事。
簡単に言えば、Windows上で動いているEVisual BasicやMS-Accessみたいなものなんだ。
[ads]
これら単独でも動くことは動く。しかし、システムとして構築し、各々を連携して使用していくためには、OSであるLinuxを知る必要がある。
つまり、Windowsをしらなくでは、アプリケーション間でデータの授受はできないってこと。(正確に言えばチョット違うが)
そう、ラズパイで動くアプリは、全てラズビアンというOS、すなわちLinuxのディストリビューションの一つで動いているんだ。
最後の最後で手こずったこと
前回のcronでも書いたのだが、マルチタスク/マルチユーザーで動作しているUNIX系OSであるLinuxは、ユーザー毎に設定ファイルは異なっている。
つまりだ、ラズパイを自動起動させた時のログインユーザーはpiであり、rootではない。ましてや、今回テスト用に使用しているraspでもない。
従って、この3者の環境設定ファイルは全て異なっているので、一生懸命にrootの設定ファイルやraspの設定ファイルを、細かく設定してみても、標準でログインするpiにはなんの影響を与えていないということである。
すなわち、なにかするにはpiの環境変数を加工してあげなければいけない。
良い例が前回のcronの設定だった。
rootのcrontabを一生懸命に設定していたが、これはrootでのログイン時おけるものなので、今回のpiでは全く動かなかった。
と言うより、piのcrontabを開くと、全く設定されていない状態だった。当たり前といえば、当たり前だよね。
最終的に、piのcrontabに設定をすることで動作するようになった。
同じように、rasptemp.pyとして作ったPythonのプログラムだが、このプログラム自体の属性が644という属性で、オーナーは読み書きの変更ができるが、それ以外は読み込みしかできない属性が設定されていた。
これでは、実行ファイルであるrasptemp.pyは実行はできない属性なので、644→755への変更をしなければならない。
つまり、プログラムを書いても、実行権を与えなければ動作しないということなのだ。このようなことは、Windowsを普通に人ではまずわからないだろう。
そして、今回の作業で本当に最後に困ったのは、CSVファイルを書き出すことができなかったことだ。
実は、MariaDBからデータをCSVで吐き出そうとしたのだが、吐き出し先を指定するとアクセス権が無いと言われて、エラーになってしまうのだ。
いろいろなパスを調べたのだが、書き込めない。多分、MariaDBはraspというユーザーで動いており、書き出し先はpiというユーザーの権限の場所だからだと思う。
色々とやったが、分からなかったので、結局以下のような処理をした。
まず、MariaDBからのCSVデータ出力
select * from temphumd into outfaile ‘test_sample.csv’;
[ads]
こうすると、MariaDBが初期値のDIRにファイルを書き出す。この場合、/var/lib/mysql/iotdata という場所になる。
この/var/lib/mysql/iotdataは、ユーザーraspの権限の場所なので、他にコピーする場合でも簡単に行かないんだ。
そこで、強制的にroot権限でのコピー動作を行い、raspのデータをpiの権限の場所にコピーした。
cp /var/lib/mysql/iotdata/test_sample.csv /home/pi/rasptemp
これで、どこにでもコピーやメールで送れる場所にデータベースのデータを置くことができた。
まとめ
今までいろいろとラズパイを弄ってきたが、実はラズパイでなにかやらせようとした場合、そのものズバリだけではなく、それに付帯するものも理解しないといけないということが分かった。
特に重要なのは、ファイルやDIRを作ったり変更したりする際に、そのユーザー自身に権限があるかどうかという事。
つまりだ、先に書いたマルチユーザーでの使用を前提にしているので、ログインしたユーザー毎に仮想環境を持っていると言っても過言ではない。
これは、Linuxの構造や考え方の話であり、ラズパイで何かをしようとした場合には、OSであるラズビアン(Linux)を理解している知識がないと、ファイル一つコピーできないということなのだ。
当たり前といえば当たり前なのだが、このラズパイの小さな中で動くファイルの一つ一つに、所収者と所有者権限が付随している。
その権限を無視しては、何も実行することができないのだ。
結論として、IoTをやりたいからPythonとMariaDBを理解すれば終わりではなく、それらを連携しているOSのLinuxも理解する必要があるということ。
これがわからないと、自分のように全然先に進まないってことだよ。
すごく良い勉強になったね。
次は、今回採取したデータを、活用していく方法を考えてみようと思う。
またワクワクする事が始まるね。
[twt]
