[ラズパイ] Rubyを使ってBME280センサの気温、湿度、気圧をslackに通知する

この記事は公開されてから7年経過しています。現在とは内容が異なる場合がありますのでご注意ください。
最新の記事や関連記事をお探しの方は下の「サイト内検索」で検索してみてください。

前回は環境センサBME280を使ってRubyで気温、湿度、気圧を取得するまでやりました。
最終回は取得した気温、湿度、気圧をslackに通知してみます。前々回ですでにRubyをつかってslackへの通知はやっていたのでそのスクリプトにBME280の気温、湿度、気圧取得をいれこみます。

RubyでBME280から値を取得する

rubyでi2cを経由してbme280のデータを読み込むスクリプトがRaspberryPiフォーラムありましたのでそれを使わせてもらいます。

このうち bme280.rb にセンサのアドレスが書かれているのでこれを 0x77 に変更します。
あとでライブラリを読み解いてみたところ RPi::BME280.new(i2cbus) するときにプロパティを設定して、
RPi::BME280.new(i2cbus, 0x77)とするのがいいかもしれません。

ライブラリの読み込みパスを指定するためにsample.rbを編集します。

保存したら実行してみます。

お、前回の Python スクリプトと同じように取得することができました。

前々回のslackへの通知スクリプトに気温、湿度、気温取得を組み込む

まずは前々回テストしたときの post_to_slack.rb を ruby-bme280 にコピーしてきます。
コピーしてきた post_to_slack.rb に sample.rb を移植してきます。
sample.rb では puts で標準出力していましたが、そのときに bme.temperature で気温、 bme.humidity で湿度、 bme.pressure で気圧が取得できていました。
なので、あとはslackに通知する内容にこれらを追加すればOKです。

attachment オブジェクトのなかで、 textプロパティがslackに通知されるテキストなのでそこを
text: "気温: #{bme.temperature}, 湿度: #{bme.humidity}, 気圧: #{bme.pressure}",
とするとslackには次のように通知が届きます。

slack-notifier を使うといろいろな通知の送り方がカスタマイズできますのでいろいろ試してみるといいと思います。
ちなみに、私はこんな感じにしています。
attachment を使うことで気温、湿度、気圧を並べて表示して見やすくしています。
あと ts プロパティを追加することでメッセージフッター部分の時刻表示を追加しています。

実際に届く内容はこんな感じです。

左側の緑色のところですが、温度が30度を越えたらオレンジ色に、35度をこえたら赤になるようにしています。
それと、アイコンが温度計のものになるように icon_emoji: ":themometer:" を追加しています。

スクリプト全体は GitHub で公開しています。

crontab に追加して定期実行する

あとはこれをcrontabについかして定期的(30分ごと)にslackへ通知できるようにします。

ポイントは rbenvを使っているため、bashコマンドを経由して実行しています。
あと、エラーについてはエラーログに書き込むように 2>post_to_slac.err を追加しています。
ときおり、うまく通知されないことがあったのですが、エラーログのおかげでGPIOのエラーが起きていたのがわかりました。

あとはこれを1週間くらい放置しておけば30分毎にあなたのslackにラズパイからの通知がとどきます。

コメント

  1. くまもん より:

    いろいろみましたが、このページが一番わかりやすかったです。結局、pythonでSlack通知をできるように改良しました。お世話になりました。