RaspiとPrometheusでスマートガーデニング

By 清水 孝郎 - SEPTEMBER 9, 2021

SHARE:

本文の内容は、2021年9月9日にFrancesca Guadagniniが投稿したブログ(https://sysdig.com/blog/smart-gardening-raspi-prometheus)を元に日本語に翻訳・再構成した内容となっております。

PrometheusとRaspberry piを使って、スマートなガーデニングシステムを作ってみましょう。

家に植物があると、ストレスレベルが下がり、家の見た目も楽しくなります。室内のオアシスが成長しているのを見ると、達成感が得られ、誇らしい気持ちになります…最初の茶色い葉っぱを見るまでは。しかし、最初の茶色い葉を見るまでは、自分のグリーンフィンガーを疑い始めます。

植物にはさまざまなニーズがあります。水分量を正確に把握し、最適な温度と光を与えることができる監視システムがあれば、正しい方法で育てているかどうかを推測することなく、植物が丈夫で健康に育つのを見ることができます。

用意するもの

  • フラワーセンサー(このようなもの
  • Raspberry Pi(Bluetooth搭載)
  • MicroSDとアダプター(RaspOSをPiにインストールするため)
  • 植物
Raspberry Piの設定によっては、Micro HDMI/HDMIケーブルやUSBキーボードなどのオプション品が必要になります。

仕組みについて

センサーがRaspiのBluetoothレシーバーに測定値を送信します。次に、エクスポーターがこれらのメトリクスを解析し、Raspiにインストールされたサービス Prometheus インスタンスに送信します。最後に、このPrometheusインスタンスがメトリクスをPrometheus remote writeエンドポイントにプッシュして、長期的に利用できるようにします。

監視する内容

  • 水分
  • 温度
  • 土壌の肥沃度(土壌導電率による)
  • センサーのバッテリー残量
設定を開始する前に、センサーを土壌に設置し、携帯電話で正常に動作していることを確認します。葉っぱがセンサーを覆ってしまい、光量が0と表示されてしまうことがありますが、これは位置の問題です。

次のステップでは、センサーがPiと通信できるように設定します。

Raspberry Piのセットアップ

Raspberry Piを起動するには、Raspberry Pi Imagerを使ってRaspberry Pi Desktop OSをインストールし、ガイドに沿った手順でWiFiに接続するだけです。

フラワーセンサーの接続

Pi上で、以下のコマンドを実行します。

sudo bluetoothctl
scan on

これで、あなたの周りのBluetoothデバイスが検出されます。フラワーセンサーを見つけて、MACアドレスをメモしてください。これは後でフラワーエクスポーターを設定するときに必要になります。このようになります:

[NEW] Device C4:7C:8D:6B:85:69 Flower care 
[NEW] Device C4:7C:8D:6B:85:62 Flower care

Prometheusとエクスポーターの設定

dockerを使ってPrometheusをRaspberri Piにインストールする方法の手順に従って、PrometheusをRasperryにインストールします。

また、統計情報を収集してPrometheusのフォーマットに変換するためのエクスポーターが必要です。このプロジェクトでは、flowercare-exporterを使うことができます。

それをインストールしてみましょう:

git clone https://github.com/xperimental/flowercare-exporter.git

次に、Go をインストールしてビルドする必要があります:

sudo apt-get install golang
go build .

次に、flower exporter サービスの設定を行います。ここでは、検出したMACアドレスを植物と関連付けるためにペーストする必要があります。

[Unit]
Description=Flower exporter
After=network.target
[Service]
ExecStart=./flowercare-exporter -s your_plant_name=MACaddress
WorkingDirectory=/home/pi/flowercare-exporter
StandardOutput=inherit
StandardError=inherit
Restart=always
User=root
[Install]
WantedBy=multi-user.target

Prometheus remote writeの設定

最後に、Prometheus remote writeエンドポイントにメトリクスを送信するようにPrometheusを設定する必要があります。

Prometheus サーバーの設定は、どのようにインストールしたかによって異なります。一般的には、prometheus.yml 設定ファイルの remote_write セクションを設定する必要があります:

global:
  scrape_interval:     10s # By default, scrape targets every 15 seconds.
  evaluation_interval: 10s # By default, scrape targets every 15 seconds.
  scrape_timeout: 10s      # By default, is set to the global default (10s).
  # Attach these labels to any time series or alerts when communicating with
  # external systems (federation, remote storage, Alertmanager).
  external_labels:
      gardener: francesca
# A scrape configuration containing exactly one endpoint to scrape:
scrape_configs:
  - job_name: 'greendig_plants'
    static_configs:
      - targets: ['127.0.0.1:9294']
remote_write:
- url: "<PROMETHEUS_SERVER_URL>"
  tls_config:
    insecure_skip_verify: true

これで、Raspiで受信したメトリクスが、Prometheus remote writeエンドポイントにプッシュされるようになりました。

Prometheusで簡単スマートガーデニング


この記事では、Prometheusを使ったスマートガーデニングソリューションの構築方法をご紹介しました。このソリューションでは、植物の水分、温度、光量が問題ないことを確認できます。これで、植物が元気に育つ様子を見ながら、リラックスして過ごすことができますね。


Sysdigで今すぐガーデニングを始めよう

Sysdig Monitorのフリー・トライアルに登録すると、Sysdigが管理するPrometheusプラットフォームとPrometheus remote writeエンドポイントを使い始めることができます。

SysdigのPrometheus Remote writeエンドポイントにメトリクスを送信するようにRaspiを設定すると、SysdigにログインしてPromQL Exploreでメトリクスの表示を確認することができます。例えば、prometheus.ymlで設定したカスタムラベルである「gardener」でフィルタリングすることで、植物を識別することができます。

植物の水分量に問題がないか見てみましょう。照会する必要があるのは:

flowercare_moisture_percent

…するだけで、すべての植物の詳細な傾向を知ることができ、利用可能なすべてのラベルを見ることができます。


水分、光、温度の値に問題がないかどうかを知るには?


センサーのアプリはそのための画面を提供しています。植物の種類を指定して、各指標の正しい値を簡単に確認することができます。これらの値は、植物に対するアラートを設定する際の目安となります。

ダッシュボードの設定

Sysdigでは、ダッシュボードを作成して、プラントに目を配り、毎日監視することができます。PromQLに慣れている場合は、PromQL Exploreから直接ダッシュボードを作成することができます。


また、Sysdigのインターフェースを使って、ダッシュボード機能から直接新しいダッシュボードを作成することもできます。


ここでは、作成するダッシュボードの例をご紹介します:


特定の植物の水分量をチェックするパネルを設定してみましょう。その方法は以下の通りです。

新しい番号パネルを作成し、まずメトリクスを使用してクエリーを設定します。

flowercare_moisture_percent

… を使用してクエリーを構成し、それを特定の植物に適用します:


ご覧のとおり、クエリーはダッシュボードのスコープを継承し、そのプラントの値を表示します。

友人や家族と共有するダッシュボードを設定し、自分の植物だけを表示するようにフィルタリングしたい場合は、prometheus.ymlで設定したカスタムラベルである「gardener」フィルターを使用することができます。

最後のステップとして、植物に水をやる必要があるときに視覚的なガイダンスを得るために、「しきい値」を設定する必要があります。


これらの値は、アプリで見られるもので、ガイダンスとしてうまく機能します。
この場合、水分量は問題ないので、パネルには適切な色(と絵文字)が表示されます。

植物の声を届ける

最後に、アラートを設定することで、植物に注意が必要なときに通知を受けることができます。アラートの設定は、PromQLやSysdig UIを使って行うことができます:


ここでも必要なのは、通知を受けたい指標(ここでは水分)を設定し、特定の植物にスコープを当て、トリガーを設定することです。

最後に、通知方法を設定します(メールやSlackなど、複数のチャネルが用意されています)。

以上で完成です。ダッシュボードとアラートの設定が完了し、植物が元気に成長する様子を監視できるようになりました。