トップ 履歴 一覧 ソース 検索 ヘルプ ログイン

Ambient Weather WS-2902Cで気象観測


キーワード

最終更新時間:2021年04月18日 13時00分11秒
アフィリエイト・広告について
プライバシーポリシー

このページでは、Ambient Weather社が販売する気象観測キットWS-2902Cを購入し、自宅に設置した経緯を紹介します。また、機器で収集したデータについて、APIを活用しRおよびPythonで処理する方法についても紹介します。

モチベーション: IoTっぽいことがしたい

私は、研修講師を主な仕事として、ビジネスパーソンやITエンジニアにいろいろなことを教えています。その中で、「ビッグデータ」「IoT」「データサイエンス」といった領域の研修も、たくさん担当しています。[1]ところが、そこで提供されるデモや実習が、どうにもリアリティがないのです。[2]

研修コースによっては、Raspberry Pi温湿度センサーを取り付けて、デモをすることがあります。しかし、それも講師の教卓に置いてあるものですから、得られるデータは、受講者が座っている、まさにその空間の温度や湿度です。それは別に楽しくないですよね。都心のオフィスビルの、空調で制御された教室ですから、大した変化もありませんし。

https://node-red.ia-cloud.com/wp-content/uploads/2021/01/Grovepi%E6%B8%A9%E6%B9%BF%E5%BA%A6%E3%82%BB%E3%83%B3%E3%82%B5%E8%A3%85%E7%9D%80.jpg
研修で行っている「IoTデモ」の環境イメージ
画像出典: ia-cloud/Node-RED スクール グローブパイの温湿度センサー

いちおう、手で握ったりして、「ほら、温度と湿度が上がりましたよ」とかやってますが、なんかこう、もうちょっと「IoTっぽい」ものを提示できないか、と昔から思っています。[3]

そもそもIoTっぽい、という概念があやふやですが、研修を受講するビジネスパーソンにとって最も典型的なものは、「遠隔地のリアルタイムデータ」ではないかと思います。教室ではない、どこか別の場所にある観測機器・センサーのデータにネットワークを介してリアルタイムにアクセスすることで、(入り口としての)「IoTっぽさ」を感じてもらえるのではないでしょうか。また、研修におけるデモや実習の時間は短いので、その間にある程度の変動があり、かつ数値の意味などがわかりやすいものが求められます。また、リアルタイムのデモに加え、ある程度蓄積したデータをソフトウェアで処理し、全体的な傾向を可視化したり、何らかの予測モデルを作成する、ということもよく行いますので、あまりに安定したデータよりは、周期性やランダム性のあるデータが良いでしょう。そう考えると、屋外の温度、湿度、風速、風向などの気象データが最も典型的ではないかと思います。

また、研修会社が用意するにせよ、私が個人的に購入するにせよ、安価でメンテナンスの手がかからないことも重要です。言ってしまえば、Raspberry Piに防水加工して、バッテリーを組み込んで、センサーを取り付ければ何でもできるわけですが、制作の手間、コスト、そして本当に防水できているかの試験、バッテリー交換の間隔などを考えると、自作するよりは、ある程度実績のある既製品を買ったほうが良いでしょう。

ということで、私が考える「研修でIoTっぽいデモをするための機器」の要件は以下のようになります。

  1. 教室から離れた遠隔地に設置できる
  2. 機器 (データ) にネットワーク経由でリアルタイムにアクセスできる
  3. データを蓄積でき、ネットワーク経由で取得できる
  4. APIなど、ソフトウェア処理がしやすい形式でアクセスできる
  5. データにある程度の周期性、ランダム性があり、またその変動が短い時間で起こる
  6. 屋外に長期間設置できる
  7. 何種類かのデータをいちどに観測できる
  8. 実績のある既製品
  9. めちゃくちゃ高くはない

さらに言えば、子供がいますので、何かしろ教育[4]的な意義があるとなお良いでしょう。ということで、「屋外の温度、湿度、風速、風向などの気象データが測定できる既製品の観測機器」を調べて購入することにしました。

Ambient Weather WS-2902C Smart Weather Station

前述の条件を満たすような機器を検索した結果、Ambient Weatherという企業が、観測機器を販売し、また自由度の高いWebサービスを提供していることがわかりました。少し古いスレッドですが、Stack OverflowのHome Weather Stations with Programmatic Access to Sensor Readings?という記事が参考になりました。他にもいろいろな企業の製品があるようですが、海外の通販事情に詳しくない身としては、独自サイトだけでなく、Amazonで取り扱っていることも大きなアドバンテージになりました。


https://ambientweather.com/

Ambient Weather社が販売する観測機器は数種類ありますが、商品比較のページを見ると、温度、湿度、風速、風向の観測ができ、インターネット接続ができて、なおかつ専用のコンソールが付属するWS-2902Cが最もニーズに合うように思いました。


商品比較ページ

https://ambientweather.com/media/catalog/product/cache/94eaba5f32b0deab3dd7ee73e045525f/w/s/ws-2902c-profissional-weather-station.jpg
Ambient Weather WS-2902C Smart Weather Station (Amazon.com)

日本のAmazon.co.jpでは取り扱いがないようなので、Amazon.comで購入しました。.com を使うのははじめてでしたが、インターフェースは同じなので、特に問題はありませんでした。ただ、個人事業主としての経費で買おうと[5]、JCBデビットカードで支払いを行うと、引き落としができない、といったエラーが出ました。しょうがないので、Mastercardで支払いを行いました。

購入手続き後、すぐに発送が始まり、1週間程度 (3/30に購入→4/7に到着) で自宅に届きました。アメリカから1週間でモノが届くって、すごいですね。

製品構成

製品は、縦横40センチメートル、厚さ20センチメートルほどの箱で届きました。片手でも持てる程度の重さです。中には、マニュアルと機器が入っています (当たり前ですが)。

マニュアルは、Ambient Weather社のWebサイトでも公開されています。

組み立てと設置

本体と、風速計 (プロペラ的な)、風向計 (矢のような)、雨量計のフィルタ (針金) が分かれて梱包されているので、それらを組み立てます。といっても、ほとんどはめ込んで、必要なところだけプラスドライバーで締めるだけで、10分もかからず完了します。


組み立ては、部品をはめ込んでプラスドライバーで締めるだけ

また、本体裏面に、単3電池をセットします。特別なものではなく、普通の電池で良いでしょう。

次に、実際に屋外に設置します。製品に、屋外に固定するためのポールは付属しません。別売りしていますが、単なる棒なのに割と高価なので、人生ではじめて、ホームセンターで塩ビパイプなんて買いましたよ。何せDIYの経験もないし、Ambient Weatherのヘルプでは、直径1インチ (1") から2インチ (2") のポールがフィットするよ、というアバウトな情報しかなかったので、ホームセンターで直径何ミリのパイプを買えばちょうどよいかわからず、長い時間悩みましたが、結果的には直径40ミリメートル、高さ1メートルのパイプを買ってみたところ、ジャストフィットでした。


アバウトなヘルプ


クボタケミックス 排水用塩ビパイプ VU40X1M
※近くのホームセンターで買ったので、この商品そのものではないと思います。

合わせて、フェンスに固定するための (これもよくわかりませんが) 金属製のクランプを購入しました。人が乗ったり、何かが倒壊するようなものではないので、アバウトに。

https://shop.r10s.jp/canamono/cabinet/new_a_img/pn-2532-02.jpg
参考: パイプ結び金具パイプノット
※これも、この商品そのものではなく、こんな感じのものでした。

とりあえず、ポールが抜けないようにしっかり締めて、自宅のちょっとしたスペースのちょっとしたフェンスに固定しました。

なお、設置の際は機器上部の矢印を北 (North) に合わせる必要があるので、スマートフォンのコンパス機能などで方角を確認しましょう。[6]

コンソールの初期設定

観測機器と無線 (WiFiではありません) で通信し、結果を表示するコンソールの設定を行います。コンソールには、単4電池をセットしますが、同時にACアダプターとも接続しないと動作しないようです。このあたり、じゃあ電池は何のためなんだ、というのはよくわかりません。また、観測結果は、いったんコンソールに送信され、そこからWiFiでインターネット上のサービスに転送されるので、コンソールの設定が必須です。


設定後のコンソール

設定は、基本的にマニュアルどおりで、目覚まし時計のような感覚で、ボタンを押していくだけです。タイムゾーンはJST (UTC-9) なので、"-9" を指定し、また夏時間は導入されていないので、DSTの項目で "Off" を選択します。また、温度の単位が、デフォルトで華氏 (F) なので、摂氏 (C) に変更します。その他、気圧の単位として、ヘクトパスカル、水銀柱ミリメートル (mmHg)または水銀柱インチを選択できます (ヘクトパスカル以外の選択肢はないと思いますが)。照度の単位も、ルクス (lux)、フートキャンドル (fc)ワット毎平方メートルの放射照度が選べます。風速の単位として、時速 (km)、ノット、秒速 (m) が選べます。雨量の単位として、ミリメートルとインチを選択できます。また、機器を設置するのが北半球か南半球かも設定します。これは月齢表示に関係します。

正確な観測結果を得るためには、他の計測器の値と照らし合わせたキャリブレーション (校正) を行う必要がありますが、他に機器がないため、行っていません。感覚的 (笑) には、測定結果に違和感はありません。

コンソールでの観測結果の表示

上の写真のように、コンソールには、常時計測結果が表示されます。仕様によれば、機器とコンソールの通信は、16秒間隔で行っているそうです。下部のボタンを押すと、気温などの、日ごとの最大値、最小値を表示したり、雨量の日ごとの積算値を表示するように切り替えられます。

うっかり、子供の足の裏が映ってますが (笑)

観測機器とコンソールは、直線で10m弱ほど離れていて、間に家の壁もありますが、問題なく通信できています。

AmbientWeather.netとの連携

この製品を購入した決め手は、自社サービス (https://ambientweather.net/)Weather Undergroundなどにデータを送信し、ダッシュボードで閲覧したり、API経由でデータを取得できることです。ダイレクトに受講者にアクセスさせるかは別として、ダッシュボードで「センサーデータがこのように集約、処理されてるんですよ」とデモできたり、「APIからデータを取得して、RやPythonで処理できるんです」とハンズオンしたりできると、研修の価値も高まると思います。[7]


AmbientWeather.netのダッシュボード (地図は全然違う場所です)

 AmbientWeather.netのアカウント作成

Ambient Weather社の自社サービス (https://ambientweather.net/) で、十分やりたいことが実現できそうだったので、アカウントを作成しました。メールアドレスとパスワードを登録するだけです。

 アプリのインストール

観測機器本体とコンソールは、自動でリンク (疎通) しますが、コンソールに蓄積したデータをAmbientWeather.netに送信するには、スマホアプリをインストールし、コンソールのMACアドレスをサービスに登録する必要があります。アプリは、iOS、Android用にそれぞれ提供されています。マニュアルにこれを使え、と書いてあった、awnet (リンクはiOS版) というアプリをインストールします。


えらくレビューが悪いですが、ちゃんと動作しました

 コンソールとの接続

アプリをインストールしたら、スマートフォンをコンソールのWiFiに接続して、そのうえでコンソールを自宅のWiFiに接続します。なお、コンソールは2.4GHz帯での接続にのみ対応しています。

まず、アプリを立ち上げます。最初の画面で右上の "Add Device" をタップします。


この画像では、すでに接続済みなので、機器が表示されています

そして、機器の種類を選択します。

すると、コンソールのWiFiをブロードキャストモードにする手順が表示されます。

そして、アプリをいったん終了 (最小化) し、スマホをコンソールのWiFiに接続します。AMBWeatherなんとかというSSIDです。

WiFi接続を切り替えて、再度アプリを立ち上げると、今度は自宅のWiFiへの接続情報を求められます。上記のように、2.4GHz帯にのみ対応なので注意してください。[8]また、AmbientWeather.netへのデータ転送間隔も指定します。AC電源接続なので、最短の1分間隔で良いのではないでしょうか。


画像はマニュアルより

設定が完了したら、スマホのWiFi接続を元に戻します。これで、コンソールを経由して観測機器のデータがアップロードされるようになりました。ただ、まだAmbientWeather.netにログインしていないため、データを確認することができません。

 端末情報の登録

データを転送するために、コンソールをAmbientWeather.netに登録します。再度awnetアプリを起動し、先ほど登録した機器をタップします。

すると、コンソールのMACアドレスが表示されます。

画面表示としては、"Save" ボタンを押すとクリップボードにコピーされそうなものですが、少なくともiPhone 8, iOS 14.4.2では、コピーされなかったので、手で入力する必要がありました。もしかすると、その上の送信間隔を "Save" するのかもしれません。"Save" ボタンの下の "Register at AmbientWeather" か、PCからブラウザでAmbientWeather.netにアクセスして、機器を登録します。

まず、先に作成したアカウントでログインします。そして、ログイン後のダッシュボード画面の左側の "Devices" メニューをクリックします。

そして、右側の "+" ボタンを押すと、登録する機器のMACアドレスが求められますので、入力し、"Next" ボタンを押します。

次に、機器の登録名や設置場所などを設定する画面になります。設置場所については、サジェストが使用できます。画面では、表示スペースの都合上、1個だけサジェストが出てくるように、でたらめな文字列を入れています。

なお、デフォルトでは機器のデータを公開する設定になっていますので、注意してください。どこまで設置場所を細かく入力するかで、ある程度コントロールできますが、そもそも日本における設置台数が少ないので、基本的には公開しないほうが良いのではないかと思います。最後に、設定を確認して、"Create" ボタンを押します。すると、コンソールからデータがアップロードされ、AmbientWeather.netに蓄積されていきます。[9]

 Webでの確認

すでに何度か示していますが、機器を登録すると、AmbientWeather.netのダッシュボードで、ほぼリアルタイムの気象データが表示できます。また、"Charts & Graphs" のタブをクリックすると、各観測値の日次、週次などのグラフが表示されます。[10]また、"Chart & Graphs" タブの左側のメニューをクリックすると、表としても表示できます。さらに、CSVでダウンロードもできます。カンペキですね。




AmbientWeather.netのダッシュボード (地図は全然違う場所です)

ちょうど、記事を書いている間、けっこうな雨が降っているので、雨量のデータも大きく変化しています。なお、スマホからは、先ほど使用したアプリとは別に、Ambient Weatherというアプリが提供されており、こちらでは、Webと同じ画面が表示され、ログインすると、自分のダッシュボードを表示する、専用ブラウザのように使えます。


さて、かなり縦に長い記事になりましたが、まずはここまでで、観測機器を設置して気象データを取得し、WiFi経由でクラウド (?) に蓄積し、ダッシュボードで表示する、という作業が完了しました。この経緯を話すだけでも、IoTの研修では興味を持っていただけるのではないかと思います。

APIによるデータの取得

ここからは、せっかくデータを蓄積したなら、RやPythonで分析したい[11]、ということで、AmbientWeather.netが提供するAPIを使い、RやPythonでデータを取得する手順を紹介します。

Ambient Weather社は、そのようなコミュニティによる開発も積極的に支援してくれているようで、GitHubのリポジトリで、APIおよびAPIを使った各言語向けのライブラリを紹介してくれています。

Ambient Weather社のドキュメントでは、Node.js, PHP, Go, Python, R, Java, Swift向けのライブラリが紹介されています。もう、至れり尽くせりですね。この記事では、私が普段使うRと、研修で取り上げることが多いPythonについて、ライブラリを使ってデータを取得し、簡単な処理を行う様子を紹介します。

 APIキーの取得

先に、APIにアクセスするためのキーを取得します。AmbientWeather.netのダッシュボードから、左下の人型のアイコンをクリックします[12]。すると、ユーザーのプロフィール画面が表示されます。その下部に、"API Keys" という項目があります。デフォルトで、apikey というキーがありますが、これはアプリケーション開発者が使うキーのようです。[13]ユーザーとしてAPIにアクセスするには、右側の "Create API Keyボタンをクリックします。すると即座にキーが作成されます。必要に応じて、ラベルを付けてください。

このAPIキーをコピーし、RやPythonプログラムに指定して、認証します。

 Rでの取得 (ambientweatheR パッケージ)

R向けには、ambientweatheRというパッケージが提供されています。ただ、オリジナルのパッケージを使用したところ、日付指定をするとエラーになりました。調べると、APIは日付を "UNIX Time (エポック秒) + 000" というフォーマットで受け付けており、ambientweatheRパッケージが生成する日付は、"%Y-%m-%d %H:%M:%S UTC" でした。いつ仕様が変わったのかわかりませんが、とりあえずフォーマットを合わせれば動いたので、私のGitHubリポジトリにクローンし、修正しました。

こちらのパッケージをインストールしてください。インストールにはremotesパッケージまたはdevtoolsパッケージが必要です。また、APIは温度を華氏で返してくるので、日本で理解しやすい摂氏に変換するためのweathermetricsパッケージもインストールします。

インストールが完了したら、パッケージを読み込み、データを取得してみましょう。ここでは、パッケージのリポジトリで例として挙がっているコードをほぼそのまま実行してみます。

list_user_devices() 関数を実行すると、2つのキーが求められます。最初に、application key として表示されていた文字列を貼り付けます。Enterキーを押し、次に新たに作ったAPIキーを指定します。これで、登録した機器のMACアドレスが取得でき、APIへのアクセスが確認できました。


Rの警告は、WSL2で必ず発生するもので、ambientweatheRパッケージとは無関係です

そして、機器のデータを取得し、気温の変化をプロットしてみます。日付は、ご自身で機器を設置したタイミングに書き換えてください。上記のように、APIは温度を華氏で返してくるので、weathermetricsパッケージの関数で摂氏に変換した値を、"*c" として追加しています。


ambientweatheRパッケージでデータを取得し、気温の変化をプロットした様子

IoTデータ分析研修っぽいですね (何が)。

 Pythonでの取得 (ambient_api / aioambient ライブラリ)

Pythonにおいては、ambient_apiaioambientという、2つのライブラリが提供されています。このうち、aioambientライブラリは、Python 3.5から導入されたasyncioという並列処理の技術を使うようです。ただ、今回は1台しか機器がないこと、継続的にサービスに接続、取得、処理を繰り返すのではなく、研修などで不定期に実行するだけなので、よりシンプルなambient_apiライブラリを使います。まず、ライブラリをpipでインストールします。

そして、Pythonを起動し、APIにアクセスするプログラムを実行します。あまり細かなオプションはないライブラリ・関数で、実行すると過去24時間のデータが取得できるようです。

your-key-here とあるところは、上記の手順に沿って、ご自身で取得したものを指定してください。


Jupyter Notebookでプログラムを実行した様子

IoTデータ分析研修っぽいですね (何が)。

  • [1]担当しているというか、現在ある研修会社で提供されているそれらの研修は、5年も6年も前に、在職中の私が書いたページのままですが。
  • [2]そこは私ではなく、退職後に誰かが付け加えたようですが。
  • [3]下請けの外部講師が考えることじゃなくて、大手IT企業のブランドで研修サービスを提供している企業が考えることだと思いますが。
  • [4]社会人研修も教育ですが。
  • [5]何で買おうと、帳簿に書けば経費ですが (認定されるかは別として)、デビットカードをマネーフォワードと連携させているので。
  • [6]この写真を撮った時はそれを忘れており、矢印が真南を向いていました。
  • [7]それ、下請けの講師が考えることじゃないんですけど。
  • [8]余談ですが、Kindle PaperWhiteも、2.4GHzのみ対応で、結局自宅では5GHzと2.4GHzと両方の電波を出しています。
  • [9]このフローからすると、登録していなくても、WiFiの設定をした時点で、観測データはAmbientWeather社には送信されているようにも思いますが。
  • [10]英語では、ChartとGraphが違うんですね。何かで調べたことがありますが、X軸Y軸があるかないかで言葉が変わるそうです。https://talking-english.net/chart/
  • [11]実際には、データを可視化したり集計して、「IoT研修っぽい」ことをしたいだけですが。
  • [12]アバターなので、別の写真などを登録できます。
  • [13]ただ、RのambientweatheRパッケージでは両方使います。

カテゴリ: [IT,IoT,R,Python]