Bluemix
node-red
WeatherCompanyData
Node-REDDay 21

天気予報とか気象情報(Weather Company Data)をNode-REDで使ってみる

More than 1 year has passed since last update.


はじめに

Node-REDには初めから「Weather Insightsノード」があるので、いまの天気の状態とか、これからの天気予報のデータを扱うアプリを作るのに便利です。例えばスマホ内のカレンダーと連動して、これから行く先の天気を見据えて、傘(Bluetooth付き)の持参を促したり、洋服のコーディネートの相談ができるアプリとか...。

Screen Shot 2016-12-19 at 18.30.10.png

使い方の大まかなイメージは、まず緯度経度と言語と単位を設定して...

Screen Shot 2016-12-19 at 18.33.52.png

いまの天気状態(Observation)が知りたいのか?それとも、これからの天気予報(Forecast)を知りたいのか?を選ぶだけ...

Screen Shot 2016-12-19 at 18.35.44.png

...だけなのだが、ハマりどころはあって、それは出力結果が msg.forecasts, msg.observation , msg.observations に分かれて出るところ。つまり msg.payloadじゃないから、要注意。

Screen Shot 2016-12-19 at 18.40.55.png

もちろんこのノードを使えるようにするには、Weather Company Dataサービスを契約しておかないといけないので後述。

Screen Shot 2016-12-19 at 18.15.28.png

なお、この天気データは、あのiPhone公式「天気」アプリと同じ元データで、データ更新頻度は1時間ごとなので、アプリからの更新頻度も最短1時間ごとにすると良いかも。

Weather.jpeg


今回のフローのソースはこちら


flow.json

[{"id":"df71d016.2fe0d","type":"inject","z":"421ff698.b098a8","name":"","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"","once":false,"x":105.5,"y":75,"wires":[["e72fe020.d21ff8"]]},{"id":"7cb23f06.d920a8","type":"debug","z":"421ff698.b098a8","name":"","active":true,"console":"false","complete":"forecasts","x":386.5,"y":198,"wires":[]},{"id":"e72fe020.d21ff8","type":"weather_insights","z":"421ff698.b098a8","name":"","service":"/forecast/daily/10day.json","geocode":"35.681298,139.766247","units":"m","language":"ja-JP","x":244.62600708007812,"y":138.11885356903076,"wires":[["7cb23f06.d920a8","e11251a3.f8b65","33ccfa67.bb131e"]]},{"id":"e11251a3.f8b65","type":"debug","z":"421ff698.b098a8","name":"","active":true,"console":"false","complete":"observation","x":393.5641403198242,"y":244.2085018157959,"wires":[]},{"id":"33ccfa67.bb131e","type":"debug","z":"421ff698.b098a8","name":"","active":true,"console":"false","complete":"observations","x":393.96370697021484,"y":288.8330707550049,"wires":[]}]



Node-REDでの事前セットアップ


新規でWeather Company Dataサービス追加の場合

IMG_0579.PNG

Node-REDのCloud Foundryアプリのダッシュボードで、左にある「接続(Connections)」をクリック、次に右にある「新規接続(Connect new)」をクリック。

IMG_0580.PNG

新しいサービスとして追加するために、フィルター部分にweatherと入力で絞り込みして Weather Company Dataをクリック。

IMG_0581.PNG

サービスの契約内容に問題なければ、右下の「作成(Create)」をクリック。

IMG_0582.PNG

「再ステージ(Restage)」をクリック。

IMG_0583.PNG

ダッシュボードに戻ってきて、サービスが追加されていればOK。


既にWeather Company Dataサービスがある場合

上記と同じ要領で、ありもののサービスを選んで追加。再ステージ。


Node-REDでWeather Insightsノードを追加

IMG_0588.PNG

とりあえず確認のため、定番のInjectノードとDebugノードを追加して、二つを接続。

IMG_0586.PNG

左のノード一覧の中にWeather Insightsがあるのだが見つけずらいので、左上のフィルター部分で「wea」と入力してノードをしぼりこみ。さっきのノード間の線の上にドラッグし、点線になったらドロップ。

IMG_0587.PNG

こんな感じにInjectノード、Weatherノード、Debugノードがつながる。

Screen Shot 2016-12-19 at 18.33.52.png

Weatherノードを設定。例では天気予報(Forecast)を選び、緯度経度に東京駅の緯度経度を入力して、最後に言語にja-JPと入れると日本語で返ってくる。

今のところ、このサービスでは次の4つの操作を実行できるようになってる。


  • 天気予報(48時間分) (※以前は24時間分だった?)

  • 天気予報(10日間分)

  • 現在の気象観測情報

  • 現在の気象観測情報+過去24時間の観測情報

また、次の3つのパラメーターが必要。


  • unit: APIレスポンスで返す単位。サポートされている測定単位は、ヤード・ポンド法 (e)、メートル法 (m)、および UKハイブリッド (h) 。日本なら「Metric」

  • location: 気象情報の起点となる緯度と経度。例えば、東京駅の場合は「35.681298,139.766247」と指定。

  • language: 返されるレスポンスで使用する言語。デフォルトは「en-US」日本語なら「ja-JP」

IMG_0589.PNG

しかしInjectノードをクリックして結果を見ると、なぜかJSONが返ってこない...

IMG_0590.PNG

Weatherノードのinfoに詳しくは記載があるが、アウトプットはmsg.forecastsに入っているので、Debugノードを編集する。

IMG_0591.PNG

同じ要領で msg.forecasts, msg.observation , msg.observations を用意、それぞれに合わせた結果が戻ってくる。

Screen Shot 2016-12-19 at 18.40.55.png


参考

IMG_0592.PNG


iOS, Androidサンプルアプリ

チュートリアル