Netatmoを自作する(何をアホなことを言うか)

仕事でIoTに絡むようになって多少なりとも他人に「IoTとはなにか」を語れるようになってきました。一言で言うと、家電がインターネットにつながってる状態がIoT、と言って差し支えないとは思います。もっと広汎な概念なので、インターネットにつながっているのは家電とは限りませんし(最近の例ならコネクテッドカーなんて自動車ですよね)、じゃぁネットにつなげてなにすんの?ということも深く語るべきところではあったりします。

 

そういうことなので、IoT≒家電、ということで(「スマート家電」という言葉が用いられますが)、ネットなどで目にする記事は「こんな機器買った」だの「インターネットにつないで使い倒す」だの、(正しいんですけど)結局ガジェットを買ってみた、的なものばかり。そしてそういう機器は意外にもすぐに市場から姿を消すんです。海外のベンチャーが一瞬作ってある程度売ってそのままエグジット、というパターンなんでしょうか。

Netatmoとはなにか(概要)、そしてまた例の...。 

ウェザーステーション Netatmo Weather Station 【並行輸入品】
 

 Netatmo Weather Stationなる機器もそれに限りなく近く、後述するサービスは継続しているようですが本体が買えない、という状況が続いています。しかも個人的な印象として機器の値段高すぎ。温度計が15,000円って、どう思います?機能としては、設置場所の気温・湿度、気圧、二酸化炭素の濃度、騒音の5つの指標を測定してくれる、んですが、この機器からはその計測値を見ることができず、スマホでわざわざデータを見る。しかもそのデータはクラウドにアップされている、という。今どき100均に行けばアナログの温度湿度計が100円で売っていて、しかもその温度湿度計を見れば今の気温と湿度は一目瞭然であるにもかかわらず、15,000円で買った温度計はそれ自体が温度を表示してくれない、というのは高すぎる、と思いますよね*1

だったらNetatmoとほぼ同等の機能を持ち、かつ視認性にも優れた機器を作りましょう、というのが今回の目的*2です。

Netatmoとはなにか(解析)

スペック的なもの

スペックやネットにかかれている書き込みや(おそらくアフィな)ブログからわかるのは、

  • 計測できる気象情報は、気温、気圧、湿度、二酸化炭素濃度、騒音の5種類
  • 計測は5分おき、このスパンは変更できないような感じ
  • データは機器に持たず、クラウド上に保存されている(保存期間は無制限っぽい)
  • 機器自体はあくまでも「計測機器:センサー」として機能、現在の状態を知らせることはしない
  • 機器が情報を知らせることがないかわりに、フロントエンドとしてスマホアプリが用意されている
  • データの取り出し(独自のフロントエンドを作ることが可能になる)のためにAPIが用意されている

こんな感じです。もっと売れたらもっと安くなる気もするし、爆発的に売れるなにか出来事でもあればいいんだろうけどそういう要素を感じられないし、まぁ好きな人は好きでしょ、的な香りはしますわね。

考えられる中身

まぁラズパイみたいなシングルボードPCにセンサーとネット接続の仕組みがくっついている、というところでしょう。多分データは機器に一切持たず(データの書き込みをさせないことを意味していて、書き込むことで発生しうる「メモリの劣化」が起こらない、つまり壊れない)、ひたすら決められた時間(これも変更できないのは設定情報の変更がメモリへの書き込みになってしまうから?)にセンサーの情報を送る、というだけの物体、と考えて間違いない気はしますわな。

ということは、作れる気がするんですよね。

かる〜く設計してみる

IoT機器の設計

手元に気温・気圧・湿度を計測できるセンサーがありました。BME280というセンサーを積んだセンサーボードです。1500円とか。とりあえずコレで3つの情報が計測できるようになります。

これとラズパイ(5,000円)とラズパイ用のMicroSDカード(8G: 500円)、センサーを仮配線するためのブレットボード(500円)、ケーブル類(まとめて1,000円とか?)ってところでしょうか。ここまで半額程度。あとはセンサーの追加で金額がどの程度増えるか、ってところですよね。

もう一つ、せっかく自作するのでNetatmoにない機能で個人的に必要と思う機能を実装したいと思います。画面表示機能です。端末自身にLCDを付けて、そこで表示させればいいでしょう。これで「機器」側の設計はOKです。

機器の内部プログラムの設計

センサーから取得できる情報をデータベースに書き込む、という作業ができればOKなわけです。最初はローカルに書き込んで、いずれクラウド上に、という進め方でいいでしょう。Netatmoができるかどうかわからないのですが、「今現在のセンサー情報」の取得ができるようになると嬉しいですね。

*3

「フロントエンド」(表示部分)

センサー情報を常時表示させる機能は、データをクラウドで管理するのであればWebで実装することが可能になります(データをクラウド上のデータベースから呼び出すから)。Webだけでなく、スマホアプリでも可能でしょう。

実装

とりあえず動作確認から

ラズパイとセンサーの接続

ラズパイとBME280はI2Cで接続します。
ピンアサイン複雑ですがこんな感じ。

f:id:racchie:20190322173835p:plain

pin_assign_NTTM01

fritzingで実際に使っているステンシル(?)がなかったので同じチップを使った別のモノで代わりに書いてます。端子の名前が同じとこ(SCKとSD1)がラズパイのそれぞれ③と⑤に接続できていればOK。あとSD0はGND接続にしています(後述のI2Cのアドレスが0x76になり、後述のサンプルプログラムを書き換えずに使えます)。*4

なお、I2Cはデフォルトでは利用できないので、
・Raspi-ConfigでI2Cの利用をEnableにする
・i2c-toolsのインストール
をしておきます。

サンプルプログラム

今回購入したのはSwitchScience社さんのモジュールでした。Pythonのサンプルコードが以下の場所にあったのでダウンロードして実行してみます。
(その前にpipのインストールと、pipで当該プログラム実行に必要な:センサー利用に必要となるsmbus2のインストールが必要になります。)

実行すると、温度・湿度・気圧が表示されます。実行時の情報が表示されていると思われます。いろいろ間違いなく動作していることが確認できました。

今回はここまで

ずいぶん中途半端なところで終わっていますが、ここまでの作業でそこそこ時間を使っていて、だいたい3〜4時間くらいかな?*5、「実時間」としてはタイムアップです。

次は引き続きサンプルプログラムを改造してデータベースへの書き込み周りを実装してみましょう。

*1:ちなみにそう言い放ったのはうちのヨメです。技術者としては大きな機能の違いがあるという説明をして論破したいところですが、消費者として考えれば実にそのとおり。商品を売るって難しい...。

*2:実際には目的の一つに過ぎません。

*3:メモ:APIが機器に仕込まれていて、随時Pullでデータ取得ができる:DBへの書き込みはいらないかも

*4:電源周りの説明は省きます。赤黒の線ね。

*5:もちろんブログの記事として作成する時間は除きます。