2017年9月11日月曜日

phpのGDを使ってグラフ化

ようやくセンサーのデータをSQLiteでまともにロギングを初めて手軽にブラウザで確認しようとググってみるとグラフ化してるものは市販のライブラリを利用しているものが多く、基盤的なところから気軽に扱えそうなものがありませんでした。

最悪ロギングのタイミングで画像に落とし込んでwebで表示できればいいかな?とは思ったものの、phpは動かしているのでその線で色々調べてみました。
いまさらphpですけども。
市販のライブラリで私用なら無料のライブラリもあるようですが、正直大したグラフにしたいわけでもなく、基盤的なものがないかと調べていたらGDというものでグラフ描画できそうだというのを知りました。


今まで使ったことが無かったのですが、とりあえず四角や円、線、点は描画できそうなのでいざサンプルを…

動かないわけで、結構悩んだのが動かせる環境になっていないのかも?という疑念のために動作確認が取れるまでに手間取りました。

必要なものはsqliteとかgdとかのライブラリ。最小限の構成だったのでgdはinstallしてませんでした。

動かしているのがApache 2.0とphp5という組み合わせですが、最後までハマったのが、phpのソースのコメントです。
サンプルが<?php .... ?>の前にコメントが<!-- -->形式で入っていたのですが、このコメントのために画像出力がブラウザでうまく表示されないという…。
気づいたきっかけは、phpをターミナルで直接動かして画像のバイナリが出てるっぽいことが確認できたので、もしや?と思ってコメントを消したらちゃんと出力できることが確認できました。

そして寝る前にようやくグラフっぽい何かが出力されるようになり、寝ながらグラフっぽくして行きました。

半日ぐらいの結果ですが、上からRaspberry piのボード上の温度、矩形っぽくあらぶっているのがDHT11、一番下にBMP180とBME280の温度でほぼ重なっています。
DHT11のあらぶり様が激しいので少し取得タイミングを調整してみましたがあまり変化はありませんでした。
昨日までは1回ぐらいだったので、あまり気にならなかったのですが、さすがに見た目的にアウトなので、もうちょっと調整してみたいところ。ただ、DHT11はおそらく取り外しちゃうと思うので無視してもいいのですが(笑)

全て小数点計算で、誤差調整は行っていませんが、1pixelズレ程度だと思うので実用レベルかな?あとはグラフ機能としては軸ラベルとか描画の線を変えたりしてみたいかな。

グラフデータはテンポラリ内だけなので、過去データの扱いや、月、週の平均データとかも表示させたいかな?

0 件のコメント:

コメントを投稿