ラズパイを使って室温と外気温の関係を視覚的に調査


岩石です。朝晩が冷え込むようになってきました。 我が国は冬の寒さと夏の暑さで四季ができ、それによる自然からの影響で様々な文化や感性を生み出しているのだと思います。

でも毎年毎年の記録的な暑さは辛いですし、冬の寒さもやはり辛いです。毎日ふとんから出るたびに、ちゃんと起きれた自分を褒めています。あと数ヶ月こんな日々が続くのですね...

今回のブログはそんな気温の話です。


2020年8月17日(月)朝の出来事

夏季休暇明けの朝、社員から事務所のwifiが使用できないとの呼びかけが...

弊社の夏季休暇は8/13〜16で8/17までの4日間誰も入室していない状況でした。報告があった時におおよそ検討はついてましたが、室温が高くなりUPSが故障していました。UPSが古くなっていることは認識していましたので代替UPSを準備済みでした(休暇明けのどこかでリプレイスをやる予定でした)。異常認知後すぐにUPSを交換し、この連絡から15分程度のちには復旧の連絡がありました。(私は在宅勤務だったので応援をがんばりました)

ちなみに、弊社が提供するサービスは全てクラウド上で稼働しており影響は全くありません。また社内サービスも同様ですので業務への影響はほとんどありませんでした。なお、社内にサーバなどが無いのでサーバルームは設けてません。

室温測定をしよう

ところでUPSがいつまで普通に稼働していたのか、何度まで室温が上がったのかが気になります。

私たちの事務所は10階建のビルの最上階にあり、比較的外気や日照の影響を受けます。事務所内には複数の室温計があり、当時は真夏でしたので毎日最初の出勤者が体感や室温を確認してエアコンのスイッチを入れてました。社員が出勤中は快適な温度が保たれているのですが、夜間は何度になっているのかは把握できていませんでした。空調はビルの設備であるので温度監視などのカスタマイズはできません。ということで室温の計測をして夜間や休日など不在時の温度管理に役立てようということになりました。

弊社ではオンプレミスのサーバは存在しないのですが、業務のサポートとしてラズパイ(Raspberry PI)が動作していましたのでこれを活用することにしました。Webで情報を探ると結構多くの情報が見つかり、ラズパイに簡単に繋がる温度センサとしてUSBで接続できるPCSensorというブランドのTEMPerシリーズの情報が多くあり、これを採用することにしました。

実際に調達したのはTEMPer1Fというモデルです。AlibabaやeBayなどでも取り寄せができます。現時点ではAmazon.co.jpにおいては古いモデルが出ている程度であまり多く取り扱われている雰囲気では無いです(2020年8月の時点でもそうでした)。

TEMPer1F

温度センサーで取得した温度などを文字データとして出力します。今回選択したTEMPer1Fというモデルは本体にセンサがなく、センサープローブを接続し測定を行います。このおかげで本体やUSB接続した機器(今回はラズパイ)の温度の影響を受けません。

TEMPer2という本体内蔵のセンサーとプロープのセンサの二つの温度を取得するモデルもあり、いろいろ遊べそうでしたが今回の目的には余分でした。

ラズパイでの測定

ラズパイへTEMPerを接続する記事はいくつもあるのですが、多くは最近のものではなくTEMPer内部の使用デバイスが変わったのか記事通りにはデータを取得できませんでした。いろいろ調べてみるとUSBデバイスIDが 413d:2107 のものでは多くの記事で取り上げられているスクリプトでは動作しないというものでした。

$ lsusb
Bus 001 Device 006: ID 413d:2107  
・
・
Bus 001 Device 001: ID ****:**** Linux Foundation 2.0 root hub

ちょっとつまづいてしまったのですが、USBデバイスとして認識されていますので何らか手はあるなと思い、Githubで公開されている情報やスクリプトを調べたり試してみたりを繰り返した結果、次のPythonスクリプトで取得できることがわかりました。

GitHub - urwen/temper: Simple python for accessing TEMPer USB thermometers

このスクリプトはUSBで接続されたTEMPerデバイスにTTYで接続し、データを取得します。

libusb(USBアクセス用C言語ライブラリ)やhid(Human Interface Device)関連のライブラリ等を使用しません。そのため高度な制御は行えませんが、センサーから測定値を取得するだけであれば気軽に使用することが可能です。

sudo ./temper/temper.py
Bus 001 Dev 006 413d:2107 TEMPerX_V3.3 28.18C 82.72F - - - -

使い方や適応機種などの情報は上記ページから確認をお願いします。

温度を取得できるようになりましたので、皆で測定値が確認できるようにSlackに専用チャンネルを作成し30分ごとに時刻と室温を書き出すようにしました。


Slackの専用チャンネルに室温を書き出す

グラフにしよう

Slackへの書き出しを24時間365日行うことでおおよその現時点の室温や夜間・休日の室温を確認することができるようになりました。目的は果たせたのですが、文字・数値だけの情報では傾向であったり、どう対策べきかなどの検討が難しいです。このためグラフ化し見やすくすることにしました。

当初はラズパイにRRDtoolを導入しグラフを描くことを考えていましたが、

といった懸念があり、確認がいつでもできるようにするにはクラウドなどにデータを持たせた方がよいと判断しました。クラウド上にサーバを立ててRRDtoolやもっと高機能な可視化アプリを入れることも考えましたが、サーバ自体が無駄(というか目的に対して構築するリソースが大きすぎる)と感じ、良いものを探していたところ Machinist というサービスを見つけました。


Machinist

データをPOSTすると自動でグラフを描画してくれます。プランも複数あり、10メトリック(データの種類数)でかつデータの保存が直近1ヶ月間であれば無料で使用することができるフリープランというものがあります。

「昨年の夏と比較したい」というようなニーズも無いわけでは無いですが、今回の問題に対しては直近数週間の傾向が確認できればよく、データの保存が必要であれば他のやり方もできますので、このサービスをフリープランで使用させていただくことにしました。データは個人情報などの重要性の高いものでは無いので大きな問題では無いですが、サービスの運営を 株式会社インターネットイニシアティブ さんが行っていらっしゃるというのも安心して利用できる理由の一つとなりました。

グラフにすることで室温の上下が見やすくなりましたが、外気との関係が確認できないことには対策を検討することができません。外気温の測定のため同様の方法を取るとなると窓の近くにラズパイを設置するとかプローブを延長する(キャリブレーションなど行う必要がありそう)とか必要でしょうし、そもそも窓に隙間などあるわけもなく対応が難しそうです(日光からの影響も考えないといけません)。そこで外気温についてはセンサーでの取得を諦め、インターネット上から松江気象観測所のアメダスデータを取得し参照することにしました。

わかったこと

下記にグラフを表示します。青線が室温、緑線が気温です。まだ暑かった9月上旬と涼しくなってきた10月上旬のころの24時間・1週間のそれぞれのグラフが次のような感じです。

9月7日の24時間のグラフ

エアコンをつけている間は室温が下がっている
10月6日の24時間のグラフ

エアコンでの調整が不要になったため室温の上昇・下降がなだらか
9月7日〜14日の1週間のグラフ

週の後半は気温が下がって猛暑が収まっている
10月1日〜7日の1週間のグラフ

暑かったころ(9月7日の24時間のグラフ)は、最初の出勤者がエアコンをつけ一気に室温が下がり、最後の勤務者がエアコンを切って帰ると温度が上昇していきます。日々これを繰り返しているのですが、この週の後半に気温のグラフ(9月7日〜14日の1週間のグラフ)からも読み取れる通り猛暑が収まります。その結果週末の不在時の室温上昇が低くなります。それでも若干は外気温の変化の影響を受けていることがわかります。

そして10月のグラフ(10月6日の24時間のグラフ、10月1日〜7日の1週間のグラフ)では室温の上昇・下降がなだらかです。この頃にはエアコンを使用しての調整をしなくなったため温度の変化が小さくなりました。

この活動の他にも私たちが行ったことや日照状況、計測データなどを踏まえると

ということがわかり、真夏の長期休暇ではなんらかの対策が必要であることがわかりました。

下記は今週取得したグラフです。朝の寒さや室温管理を気にしなくても良い感じが見て取れます。

10月26日の24時間のグラフ
10月20日〜27日の1週間のグラフ

最後に10月7日に取得した1ヶ月グラフ(9/07〜10/07)と10月26日に取得した1ヶ月グラフ(9/26〜10/26)を載せます。

9月7日〜10月7日の1ヶ月のグラフ

y軸の目盛りは15・20・25・30・35℃
9月26〜10月26日の1ヶ月のグラフ

y軸の目盛りは10・15・20・25・30℃

取得日が違うためブラウザの幅が異なり、ちょっと見にくいかもしれないのですが、y軸の数字の違いやグラフの傾きから季節を感じ取ることができました。

想像していた以上に簡単に室温管理・分析のための仕組みを構築することができました。この取り組みの効果が本領を発揮するのは来年夏になりますが、今後は測定結果からどのように休暇中の温度上昇に対策するかを考えてみたいと思います。


My Redmine

こちらの記事もオススメです!
換気してますか?二酸化炭素濃度計をオフィスに設置しました
二酸化炭素濃度計を導入して、オフィスの換気を行うようになりました。体調が良くなるなどの効果があるようです。
フレックスタイム制の会社側視点でのメリット
フレックスタイム制の導入で従業員の満足度向上・労務管理の簡素化などが実現できました。
マインドマップを使ってAWSクラウドプラクティショナー試験の勉強をしています
マインドマップ作成ツール「XMind」を使用。マインドマップを用いることで頭の中が整理されより理解を深めることができます。
オンラインイベント「Redmine Japan 2020」に初出展
「Redmine Japan 2020」が開催。初めてオンラインイベントにブースを出展しました。
とにかく素早くRedmineの開発環境を作りたい
OSなどの環境によってインストールが失敗して困ること無く、素早くRedmineの開発環境を作る方法です。
ファーエンドテクノロジーからのお知らせ(2020/11/25更新)
RubyWorld Conference 2020にファーエンドテクノロジーの坂本が登壇します
12月17日(木)にオンラインで開催される「RubyWorld Conference 2020」に弊社エンジニアの坂本が登壇します。オープンソースのプロジェクト管理ソフトウェア「Redmine」の脆弱性診断をRubyとSeleniumで自動化したことを発表します。
RedMica 1.2 バージョンアップのお知らせ
My Redmineで提供しているソフトウェアをRedMica 1.1からRedMica 1.2へバージョンアップいたします。
「RedMica 1.2」リリース Redmine互換のプロジェクト管理ソフトウェア(ファーエンドテクノロジー版Redmine)
Redmine 4.2の新機能を先行して利用できるRedMica 1.2 (2020-11) をリリースしました。
ファーエンドテクノロジー代表の前田剛が「Ruby Prize 2020」の候補者に推薦
Ruby Prize 2020にファーエンドテクノロジーの前田剛(Redmineコミッター)を候補者として推薦して頂きました。
Redmineの最新情報をメールでお知らせする「Redmine News」配信中
新バージョンやセキュリティ修正のリリース情報、そのほか最新情報を迅速にお届け