今回はOpenWeatherMapノードが出力するデータの構造を確認します。
OpenWeatherサイトで取得したAPIキーは、取得してから数十分から2時間程度で利用できるようになります。もしAPIキーを取得したばかりで、情報がうまく取得できない場合はしばらく時間を空けて試してみてください。
OpenWeatherMapノードはデフォルトでNode-REDにインストールされていませんので、最初にノードを追加する作業を行います。
今回の記事は以下の順番で説明を進めます。
- OpenWeatherMapノード追加
- OpenWeatherMapノートの設定
- 動作確認用フローの作成
- OpenWeatherMapノードのデータ構造
OpenWeatherMapノードの追加
ノードを追加しますので、いつものようにパレット管理メニューを選択します。
パレットの追加画面で、(1)パレットの追加タブを選択して、(2)検索欄に「openweathermap」と入力します。(3)検索結果に「node-red-node-openweathermap」がリストされますので、(4)「ノードを追加」をクリックします。
追加してよいか確認がありますので、追加ボタンをクリックします。
追加が終わると以下のメッセージが表示されて完了です。
追加されたノードを確認しましょう。パレットの下の方にある「Weather」グループにノードが追加されていると思います。
追加されたノードは2種類あります。「openweather map」と「openweather map in」という2種類です。
よく見ると、「openweather map」ノードは入力と出力があり、「openweather map in」は出力のノードしかありません。
この2種類のノードは取得できる情報は同じですが、情報取得のタイミングが異なっています。
「openweather map in」ノードは一定時間間隔でOpenWeatherサイトから情報を取得し、内容が変わっているときのみ、取得したデータを出力します。
一方「openweather map」のノードは、何かメッセージが送られてきたら、そのときOpenWeatherサイトから情報を取得し、取得したデータを出力します。前回の情報を変更がなくても情報を出力します。
今回は天気予報情報を頻繁に取得する必要はありませんので、openweather mapノード(何かメッセージを送ったときにデータ取得するノード)を使用します。
OpenWeatherMapノードの設定
それでは、前々回の記事で作成した「天気予報」タブを開き、以下のように「openweather map」ノードを配置します。(openweather map inノードではありませんので注意してください)
配置後、ノードをダブルクリックして設定画面を開きます。
OpenWeatherMapノードの設定項目はそれほど多くありません。ただ、地点の設定がちょっと厄介ですので、これから詳しく説明していきます。
それでは上から順番に設定していきましょう。
APIキー
ここには前回の記事で取得したAPIキーを入力します。
言語
取得する情報の中には当然ながら予報天気の文字列が含まれています。この文字列は「快晴」など、自然言語で表現されていますので、どの言語にするか設定する必要があります。
天気予報情報はDashboardにも表示しようと思いますので、ここでは「Japanese」に設定しておきます。
取得情報
ここでは取得する情報を以下から選択します。天気予報情報を処理しますので「5 day forecast for」(5日分の予報情報)を選択します。
選択肢 | 意味 |
---|---|
Current weather for | 現在の天気 |
5 day forecast for | 5日間の予報天気 |
combined current weather/forecast for | 両方(現在の天気と5日間の予報天気) |
情報取得地点
情報取得する地点は2通りの指定方法があります。ひとつは地名、もうひとつは緯度/経度です。
基本的には地名で指定できますが、地域によっては緯度/経度で指定した方が良いケースがあります。
そこで、情報取得地点は以下の手順で設定してみてください。
最初に、情報取得する地名がOpenWeatherMapに登録されているか確認するために、OpenWeatherページの「Map」メニューを開きます。
https://openweathermap.org/(別ウィンドウで開きます)
世界地図が表示されますので、自分の地域を表示して一番近くの地名を控えておきます(操作はGoogleマップと同じです)。特にローマ字表現が複数ある場合(例えば「八王子」のローマ字表現の「Hachioji」と「Hachiouji」など、登録されているローマ字を確認しておいてください。
次に地名の重複を確認します。
日本に限らず、同じ地名が複数存在するケースがあります。そこで、同じ地名が複数存在しないか確認します。
地名を検索するために、以下のOpenWeatherサイトの検索ページを開きます。
https://openweathermap.org/find(別ウィンドウで開きます)
このページで先ほど確認したローマ字の地名を入力して検索します。
以下の例は「浦安」(Urayasu)を検索した例です。検索すると、検索結果に千葉県の浦安市が1件のみ表示されます。
この場合は、地点名で設定することができ、都市名(City)が「Urayasu」、国名(Country)が「JP」となります。
次の例は、「横浜」(yokohama)で検索した例です。検索すると、以下のように神奈川県の横浜市と、青森県上北郡の横浜町の2件が表示されます。
両方とも「Yokohama, JP」のみの表示で、どちらがどちらかわからないと思います。
神奈川県横浜市の情報を取得したい場合、「yokohama」では2地点ありますので、この場合は緯度と経度で指定します。検索結果に緯度と経度が表示されていますので、控えておきます。上の例では、緯度(Latitude)が35.4478、経度(Longtude)が139.6425になります。
地点の情報がわかったらopenweathermapノードに設定します。
都市名がローマ字で指定できる場合は、以下のようにLocationで「City, Country」を選択して、Cityには地名のローマ字、Countryには「JP」と入力します。
緯度と経度で指定する場合は、以下のようにLocationで「Coordinates」を選択して、Latitude(緯度)に緯度の値を、Longitude(経度)に緯度の値を入力します。
以上でopenweather mapノードの設定は終わりです。
(ノード名は設定しませんでした)
動作確認のフロー作成
それでは実際に天気予報の情報を取得してみましょう。
openweather mapノードに何かメッセージを送ると天気予報情報を取得してくれますので、入力側にはInjectノードを使用します。また、取得した情報を確認するためにDebugノードを使用します。
InjectノードとDebugノードを以下のように配置、接続してデプロイします。
デプロイに問題なければ、Injectノードのボタンをクリックします。クリックするとデバッグウィンドウに以下のような情報が表示されると思います。
これからこのデータの中身を理解していきます。
OpenWeatherMapノードのデータ構造
1回の情報取得で3時間ごとの5日分の予報情報が取得できます。つまり、24時間 × 5日間 ÷ 3時間 = 40で、予報情報が40個送られてきます。
40個の細かい情報を表示すると大変なことになるので、上の表示は情報の塊が表示されている状態です。(プログラミングをご存知の方は、JSONオブジェクトの配列が表示されている、と説明したほうがわかりやすいかもしれません)
そこで、この表示を展開してみます。以下のようにグレーの三角マークをクリックしてみてください。
クリックすると、今度は以下のように10個ずつまとめて表示されます。具体的には、0から9番目、10番目から19番目、というように10個ずつまとめられています。
そこで、最初の10個を展開してみます。
これでやっとそれぞれの情報にたどりつきました。0番から9番までの情報がリストされていますが、これは0番が一番近い3時間先の予報、1番が6時間先の予報、ということで、3時間ごとに並べられています。
それでは、それぞれの3時間ごとの予報にどのようなものがあるか確認してみましょう。
以下は、2番目つまり9時間先の予報情報を展開したところです。2番の情報を展開してもさらに三角マークがありますので、一度すべての三角マークを展開してみてください。
これが3時間ごとの天気予報情報の内容で、1回の情報取得で40個送られてきます。どの3時間の予報も上のデータが入っています。
ちょっと長くなりますが、これから上のそれぞれの情報がどのような意味が説明します。
「dt」
最初の「dt」は、Date&Timeで予報時刻を意味しています。とはいっても日時には見えませんよね。
これはUNIX時間で表現されています。もしUNIX時間ご存知なければこの機会に覚えてみてください。
UNIX時間とは、1970年1月1日午前0時0分0秒を0秒として、1秒ごとにカウントした現在の値です。なお時刻はUTC(協定世界時)になります。
UNIX時間はあまり馴染みがないかもしれませんが、コンピュータや電子工作の世界では時間を扱うときによく出てきますので頭の片隅に置いておくとよいと思います。
なお、UNIX時間から現在の日時に変換する便利なサイトもあります。
「main」
これらは温湿度や気圧などの予測情報です。それぞれ以下の意味です。
キー | 意味 |
---|---|
temp | 気温 |
feels_like | 体感気温(℃) |
temp_min | 予測3時間内の最低気温(℃) |
temp_max | 予測3時間内の最高気温(℃) |
pressure | 基本的に海面気圧と同じ(hPa) |
sea_level | 海面気圧(hPa) |
grnd_level | 地上気圧(hPa) |
humidity | 湿度(%) |
temp_kf | 内部で使用しているパラメータ |
「weather」
weatherには0番目(のJOSNオブジェクト)に天気予報情報がセットされています。
「id」は天気コードで、以下のページで確認できます。(ページ下方のWeather Condition Codeにあります)
https://openweathermap.org/weather-conditions(別ウィンドウで開きます)
「main」は英語の天気予報情報です。
「description」は、openweather mapで指定した言語の天気予報情報です。
「icon」は予報されている天気のアイコン名です。アイコン名に対応するアイコンは上のサイトで確認できます。(ページ最初にあるWeather iconsにあります)
「coulds」「wind」「visibility」「pop」
雲の量や風に関する予測情報です。以下の意味になります。
キー | 意味 |
---|---|
cloudsのall | 全天に占める雲の割合(%) |
windのspeed | 風速(m/s) |
windのdeg | 風向で北が0度、東回りで1周360度 |
windのgust | 予報3時間内の最大瞬間風速 |
visibility | 視界距離で最大値10km。単位はm |
pop | 降水確率で0〜1 |
「rain」「sys」
降雨やその他の情報です。
キー | 意味 |
---|---|
rainの3h | 3時間の予測降雨量で単位はmm |
snowの3h | 過去3時間の降雪量。降雪がない場合は情報なし |
sysのpod | 昼の場合は「d」、夜の場合は「n」 6時〜18時が昼、18時〜翌6時が夜にセットされるようです。違っていたらすみません… |
「dt_txt」
UNIX時間の通常表示です。ただし、UTCになっていますので、日本時間の場合は+9時間にする必要があります。
次回(最終回)の記事では、取得した予報情報から天気予報の情報を取り出して、マイコン内蔵フルカラーLEDの色で表現してみます。
更新履歴
日付 | 内容 |
---|---|
2022.9.5 | 新規投稿 |