Grafana

You are currently browsing the archive for the Grafana category.

学生のころから、電子部品を調達するために頻繁に秋葉原に出向いていたのですが、コロナ以降ほとんど通販ですますことが多くなって、実店舗に足を運ぶ機会は以前より少なくなってしまいました。(交通費より送料の方が安いし)
しかしやはり現物を手に取って形状や状態を確認したり、思わぬ掘り出し物に出会ったりするワクワク感は、現地に実際に足を運ばなければ得られないものです。

秋葉原に行ったら必ず訪れるのが「秋月電子」で、6月に2Fにもフロアーが拡張されたのですが、ここに「掘り出し物コーナー」というのがあります。そこで見つけたのが「ボッシュ製総合環境センサBME680を使用したセンサモジュール」です。これは現用品は1320円で普通に販売されているものですが、なぜか1個だけ300円で出ていて即Getしました。特に不良品でも無いようで、早速動作させ、まともなデータが得られることを確認しました。

K-14469

BME680は気温、湿度、気圧が1つで測定できるマルチセンサーですが、加えて「ガス(有機溶剤、アルコール等)濃度」の測定をサポートしています。テストでArduinoのライブラリーからこのガス濃度を取ってみると「GAS = xxxkΩ」という値で出てきて、いったいこれが何を示しているのか?さっぱりわかりません。

そこでボッシュ社のサイトをチェックすると、BSEC(Bosch Sensortec Environmental Cluster )というライブラリーがサポートされていて、これを利用すると上記のGAS値をIAQ(Index for Air Quality)やCO2濃度に変換してくれるのです。そしてなんとBSECはArduinoをサポートしていて、ライブラリーマネージャーから簡単にインストールして利用できます。

https://github.com/BoschSensortec/BSEC-Arduino-library

実際試してみるとこのライブラリーを利用できるプロセッサーは非常に限定されていて、最近よく使っているXIAOのESP32C3などではコンパイルエラーが出て使用できません。いろいろ試して「ESP32 Dev Module」で確実に動作することがわかりました。早速ブレッドボードで組んで、linuxサーバーにデータを送ってGrafanaで表示させてみました。

IMG_3245

iaq

IAQは写真のTable4のような定義になっていて、空気の汚れ具合を数値で確認することができます。CO2の値はほとんどこのIAQにリンクしているように見えますが、一応ppm値で出てきます。別にCO2モニターを持っているので比較すると、値の絶対値は目安程度?に考えた方が良いようです。

iaq_table

このBSECライブラリーはソフトウェアの後処理で換算値を算出するので、よくセンサーモニターでやる一定周期で測定して休止期間中にスリープさせてバッテリー駆動させるような使い方はできません。そのため電源を常時つないでおく必要があります。

CO2 gas

今回掘り出し物でたまたま300円で調達できてラッキーでしたが、普通に購入しても価値のある非常に面白いセンサーです。
あとこれの別機種の新製品でBME688というのが出ていて、これはなんと匂い成分のAIプロファイリングをサポートしています。

https://www.bosch-sensortec.com/…/gas-sensors/bme688/

例ではエスプレッソコーヒー豆とドリップ用コーヒー豆の匂い成分の違いをBME AI-Studioでモデリングしています。

https://youtu.be/4vdliMRtxBY?si=4A4DEWqV4ra1i-1S

コーヒー紅茶好きとしては、非常に興味深いので是非試してみたくなりました。

ということで、やはり実際に店舗やコンサートや講習会などに足を運ぶことで、意外な出会いや情報を得ることができるということを実感した、という次第であります。

家庭内のセンサー、環境モニターの測定データ送信先を順次Raspberry pi 3+のUbuntuサーバへ移行していますが、懸案であった「家庭内・消費電力モニター」の改版・移行作業が完了しました。これは2016年に作成したものですが、ラズパイA+を使用してレンタルサーバーにデータ送信し、自前のPHPプログラムでグラフ化していました。

これを宅内LinuxサーバーのGrafanaでグラフ表示させるように改版するわけですが、なにせ7年も前にpython2で作ったシステムなので、この際一気に最新の環境にアップデートしてみました。

IMG_3242 IMG_3243

まずラズパイOSを最新版にしたところ、今まで使っていたUSB/Wifiアダプターが認識されなくなりました。どうもチップが古いようで、ドライバーを探すのも面倒なので手持ちのラズパイZero 2Wに載せ換えました。

python2で書いたプログラムは、移行環境ではそのまま動作しなかったので、こちらも最新のpython3に書き換えました。python3だとThonnyも使えるし。同じpythonという名前ですが、2と3ではかなり変更点が多く、特にライブラリー関係で互換性のないものが多数あるので非常に厄介です。

このシステムでは、電流センサーの出力電圧を読むA/DコンバーターにMCP3002というチップを使っており、ラズパイとはSPIで接続されます。python2のSPIライブラリーは「py-spidev」というものを使用していたのですが、これがなぜかpython3環境だとMCP3002からデータを取ってきません。特にエラーも出ないし、デバックする元気もないので「gpiozero」ライブラリを使用してみました。

https://gpiozero.readthedocs.io/en/latest/api_spi.html

当方はこれを初めて使ったのですが、なんとSPIライブラリでMCP3002を直接指定でき、データの取得も非常に楽です。全く問題なく電圧測定・読み取りできました。

次にサーバーに接続するhttpのライブラリですが、python2では「urllib/urllib2」を使用していました。しかしこちらはpython3ではサポートされないので、使い慣れた「requests」に変更しました。

あとサーバー側ではhttp/POSTで受信したデータをデータベース:mysqlに格納するPHPプログラムを作成し、データベースを設定します。測定データがデータベースに格納されることが確認できれば、後はGrafanaでグラフ表示・可視化を行います。

自宅消費電力w1w2 自宅消費電力w1w2avr

Grafanaではmin/max/aveのほか、積算値(Total)の表示ができるので、任意の期間で総消費電力の表示が可能です。(例えば1日とか1ヶ月など、秒単位で指定可能)

これで電力会社の請求書との比較が簡単に行えます。もっと複雑な計算がしたければSQLでプログラムすることも可能で、Grafanaのフレキシビリティーの高さは圧倒的です。

今回懸案のシステム移行が完了し、色々面倒はありましたがとても気分がスッキリしました。

現在自宅ではRaspberry pi3 B+をSSDでWebサーバー化して、気象ステーション2号機のデータ蓄積サーバーとして稼働させています。
SSDはmac bookより外して余っていた120GBのものをUSBケースに入れてラズパイに接続しています。
OSは使い慣れたUbuntu系で、piのARM系CPUをサポートしている軽量ディストリ・Ubuntu mateをインストール。pi 3のパフォーマンス&メモリ1GだとGUIを動かすのは無謀なところですが、SSDにしたことでオペレーションだけなら普通に使えました。
非常に順調なので宅内に設置しているセンサー類を全てこのpi3にデータ集約することにしました。

IMG_3144

まず、各部屋に設置している環境ロガーと放射能測定器をこのサーバーにデータ送信するようプログラムの書き換えを行い、サーバー側のPHP作成、データベースエントリー、Grafanaの設定を行なっていきます。これらを作ったのは2017年で6年も前なので、今の開発環境でコンパイルするとエラー出まくりでちょっと手間取りましたが無事完了しました。

放射線レベル移動平均

前はグラフ表示をPHPで自前で書いていたのですが、Grafanaのフレキシビリティーの高さに今更ながら圧倒されました。特にSQL文でデータを加工できるので、放射能測定結果に移動平均を計算して表示させることが非常に楽に実現できました。もっと早くSQL+Grafanaに移行すればよかった。いままでSQLをプログラミング言語として認識・作成することはなかったのですが、非常に便利なのでもう少し文法などを学習してみたいと思います。

IMG_3163 IMG_3153

あと、電力消費測定システムと、PM2.5のセンサー、赤外・紫外線測定システムが残っているので順次追加して行こうかと思いますが、電力消費測定システムはpython2.0で書いていて、もう化石のようになっているのでこの際python3かC++に作り替えたほうが良さそうです。