この記事で扱っていること
- 天気予報アプリを作る方法
を紹介しています。
注意:すべてのエラーを確認しているわけではないので、記事の内容を実装する際には自己責任でお願いします。また、エラー配線は適当な部分があるので適宜修正してください。
LabVIEWはハードウェアに関連した計測、制御に特化したプログラミング言語ですが、できることは何もそれだけではありません。
HTTPのリクエストを投げてその応答を見る、といったことを行うことで、インターネット上の情報にアクセスしそれを取得することができます。
今回はその一例として、天気予報のAPIを提供しているOpenWeatherというサイトのAPIを利用して、各地の天気予報を知るということをLabVIEW上で行う例を紹介します。
どんな結果になるか
フロントパネル上には、どこの地域を知りたいかの選択を行う部分があり、選ばれた地域に対して気温の情報および天気をアイコン等で示す形式としてみました。
実行すると、その時点での天気の情報を色々と取得してくれます。
プログラムの構造
ブロックダイアグラムでは、天気の情報を取得するために、HTTPの関数を使用しています。
今回はHTTP GETを使用して、特定のURLを送信、その応答を見て、その応答の中身から各種情報を抜き出しています。
この記事の例では、現在の天気を取得する、ということを目的にしています。OpenWeatherのホームページでアクセスできるドキュメントによると、
http://api.openweathermap.org/data/2.5/weather?q={都市名},jp&appid={固有のid}&units=metric
とすることで、都市名を指定して、単位を摂氏で気温を取得できます。
Current weather data – OpenWeatherMap
そのため、HTTP GETの関数に入力する送信URLの文字列を作るために、都市名の部分のみ選択式にして、後は定数としました。
なお、固有のidとは、Openweatherのサイトでアカウントを作成した後に手に入るidとなります。有料プランの他に無料プランもあり、制限はあるのですが、そんなに頻繁にこのアプリを使用するのでなければ無料プランでも十分使えると思います。
GETで得られた応答は実際は気温以外の情報もいろいろ含んでいます。この応答全体から、自分が欲しい情報のみを抜き出します。
おそらく抜き出す方法はもっとうまいやり方があるような気もしますが、今回は愚直にパターンで一致関数などを駆使して目的の情報を取得するようにしました。
サブVIの中身は、似たような操作を繰り返すことが多かったのでブロックダイアグラムを簡潔にするためにこのようにしてみました。
ところで、フロントパネルにあった天気アイコンは、もともとこのような表示器があるわけではなく、クラシックのピクチャリングをカスタマイズして用意しています。
手順を簡単に確認していきます。まずは、対象の制御器/表示器をカスタマイズするために上級からカスタマイズを選びます。
そして、貼り付けたい画像をいったんクリップボードにインポート、それをピクチャリングに貼り付けます。
再び別の画像ファイルをクリップボードにインポートし、これを「後にピクチャをインポート」で足していきます。これを繰り返し、複数の画像をピクチャとして表示させられます。
大きさが思った通りになっていない場合には、カスタマイズモードで変更できます。
また、ピクチャリングにもともとついているボタンや、大元のバックグラウンドの色も変更できます。今回の記事のプログラムでは、増分減分のスイッチは透明にしてしまい、背景のパーツを真っ白としました。
これでオリジナルの天気アイコンの完成です。
なお、制御器のカスタマイズについては、他の記事でも取り上げているので良かったらこれらもどうぞ。
本記事ではGETに対して得られる応答の種類は、Clear、Clouds、Mist、Rain、Snowの5つしか定義していません。(これら以外のデータがくるとデフォルト設定であるClearと同じアイコンになります。)Openweatherの方ではもっと他の応答もあると記載があるようなので、気になった方はカスタマイズして増やすとより正確なプログラムになると思います。
Openweatherの活用
今回の記事では、現在の天気を知るという目的でURLをGETの関数に渡しました。しかしOpenweatherのホームページを見ると、例えば日ごとの天気予報や細かい時間ごとの天気予報の情報も取得することができます。
ただし、無料版のアカウントだとアクセスできるのはCurrent Weather Dataと5 Day/3 Hour Forecastに限られるようです。
試しに5 Day/3 Hour Forecastでやる場合にはこのようになります。
GETの関数にファイルパスを入力しているのは、応答をxmlファイルに出力させているためです。このとき、GETの関数から応答の文字列は出力されません。xmlファイルはまた別途解析させることになります。
LabVIEWでHTTPのリクエストを投げて応答を見ることができるようになると、APIさえわかればインターネット上の情報にアクセスできるようになるため、応用の幅が広がると思います。そういったアプリケーションに慣れるのに今回の記事が役に立てばうれしいです。
ここまで読んでいただきありがとうございました。
コメント