Hinemosを使って気象情報を監視する
投稿日: / 更新日:
この記事は2年以上前に書かれたものです。情報が古い可能性があります。
こんにちは。
梅雨も明けて暑くなってきました。夏本番ですね。
皆さんがお出かけする際に一番気になるのは、その日の気象情報ですよね。
今はスマホのアプリを使うことにより簡単にその日の気温などの情報を通知で受け取ることが可能ですが、
例えば、”気温が〇〇℃以上で湿度が△△%以下のときは重要度”警告”で通知、湿度が△△%以上は重要度”危険”で通知“などもっと細かい通知の条件を設定したいと思ったことはありませんか?
そこで、統合運用管理ツール”Hinemos”の出番です。
Hinemosを使うことにより、お天気アプリではできないような細かい複雑な条件を元に監視・通知を行うことが可能です。
それでは早速Hinemosでいろいろ監視してみましょう!
①東京の最高気温を監視する
気象データは、以下サイト様から頂いております。
https://www.drk7.jp/weather/
上記サイトが提供しているXMLファイルから東京のその日の最高気温を取得するスクリプト(tokyo_max_temp.sh)を作成し、
Hinemosのカスタム監視機能と組み合わせて利用します。
<tokyo_max_temp.sh>
1 2 3 4 5 6 7 8 9 10 |
#!/bin/bash #東京の気象情報を取得 curl --silent -o /tmp/tokyo_weather.xml https://www.drk7.jp/weather/xml/13.xml #最高気温の値を抽出 max_temp=`cat /tmp/tokyo_weather.xml | grep -A 13 "東京地方" | grep "max" | sed -e "s/<range centigrade=\"max\">//g" | sed -e "s/<\/range>//g"` #Key,Valueの形に整形 echo Temp_Tokyo,${max_temp} |
注)実行対象となるコマンドからの標準出力は、上記のようにKey,Valueのフォーマットである必要があります。出力されたValueの値に対してHinemosはしきい値判定を行います。
スクリプトが用意できましたら、カスタム監視に設定してみましょう。
なお、Hinemosのインストールやノード登録等の手順につきましては、以下のスタートアップ記事をご参照下さい。
http://www.hinemos.info/technology/nttdata/2018040301
ノードの登録が終わりましたら、”監視設定”パースペクティブを開いて下さい。
監視設定[一覧]ビューの+ボタンを押下すると監視種別の一覧が表示されますので、カスタム監視(数値)を選択して下さい。
カスタム監視[作成・変更]ダイアログが表示されますので、必要な項目を入力して下さい。
画像:カスタム監視の設定画面
今回の設定:
・25℃未満の場合は重要度”情報”で通知
・25℃以上30℃未満の場合は重要度”警告”で通知
・30℃以上の場合は重要度”危険”で通知
取得した値が27.0だったので、重要度”警告”で通知が行われました。
なお、気象情報を取得する際の、xmlファイルの番号(上記は東京:13)とgrepする文字列を変更すると、他の地域の情報が取得できます。
例えば、茨城県北部の最高気温を取得したい場合は、以下のようにスクリプトを変更してください。
1 2 3 4 5 6 7 |
#!/bin/bash curl --silent -o /tmp/tokyo_weather.xml https://www.drk7.jp/weather/xml/08.xml max_temp=`cat /tmp/tokyo_weather.xml | grep -A 13 "北部" | grep "max" | sed -e "s/<range centigrade=\"max\">//g" | sed -e "s/<\/range>//g"` echo Temp_Ibaraki,${max_temp} |
さて、ここまでは、わざわざHinemosを使わなくてもアプリでも実現可能な範囲ですね。
では次はもっと複雑な条件を元に監視をしてみましょう。
②気温と湿度を組み合わせて監視する
私達が実際に感じる温度(体感温度)は、気温だけではなく湿度も大きく関係します。
整理すると、以下のようになります。
>湿度を多く含んでいるほど、体感温度は上昇する
>湿度が少ないほど、体感温度は低下する
ということで、今度は以下のような条件の監視を設定してみましょう。
・気温が25℃以上で湿度が50%以上の場合は、重要度”危険”
・気温が25℃以上で湿度が50%以下の場合は、重要度”情報”
危険=気温が高く湿度も高いため体感温度は高め
情報=気温は高いけど湿度が低いので体感温度は低め
今度はハワイのオアフ島の天気を対象に監視を実施します。
気象データは、以下サイト様から頂いております。
http://w1.weather.gov/xml/current_obs/
まずはオアフ島の現在の気温を取得するスクリプト(hawaii_temp.sh)を用意いたします。
<hawaii_temp.sh>
1 2 3 4 5 6 7 8 9 |
#!/bin/bash curl --silent -o /tmp/hawaii_weather.xml http://w1.weather.gov/xml/current_obs/PHJR.xml location=`cat /tmp/hawaii_weather.xml | grep "<location>" | sed -e "s/<location>//g" | sed -e "s/<\/location>//g"` temp=`cat /tmp/hawaii_weather.xml | grep "<temp_c>" | sed -e "s/<temp_c>//g" | sed -e "s/<\/temp_c>//g"` echo ${location},${temp} |
次に、オアフ島の湿度を取得するスクリプト(hawaii_humidity.sh)を用意いたします。
<hawaii_humidity.sh>
1 2 3 4 5 6 7 8 9 |
#!/bin/bash curl --silent -o /tmp/hawaii_weather.xml http://w1.weather.gov/xml/current_obs/PHJR.xml location=`cat /tmp/hawaii_weather.xml | grep "<location>" | sed -e "s/<location>//g" | sed -e "s/<\/location>//g"` humidity=`cat /tmp/hawaii_weather.xml | grep "<relative_humidity>" | sed -e "s/<relative_humidity>//g" | sed -e "s/<\/relative_humidity>//g"` echo ${location},${humidity} |
①と同様に、それぞれのスクリプトをカスタム監視に設定いたします。
※閾値の設定は適当で大丈夫です。
※閾値の設定は適当で大丈夫です。
次に、収集値統合監視を作成し、上記2つのカスタム監視を設定いたします。
画像:収集値統合監視の設定
今回の設定:
・気温が25℃以上で湿度が50%以上の場合は、重要度”危険”で通知
・気温が25℃以上で湿度が50%以下の場合は、重要度”情報”で通知
※気温が25℃以下の場合は、最初の条件(気温が25℃以上)に該当しないため、通知は行われません
監視結果を確認します。
上記では、気温が25℃以上で湿度も50%以上なので、収集値統合監視の監視は重要度”危険”となります。
試しに、湿度を50%より小さい値に下げてみます。
すると、気温が25℃以上でも、湿度が50%以下なので、監視結果は重要度”情報”となります。
補足)クライアントに表示されている時間と現在の時刻をハワイ(UTC-10)で一致させたい場合は、以下のようにパラメータ「common.timezone」を設定してください。
1 |
common.timezone=-36000000 |
このレベルの複雑な条件を元に情報を通知してくれるアプリは無いと思います。でも、Hinemosなら簡単に実現可能です。
③風の強さを考慮した体感温度を監視する
体感温度は湿度だけでなく、風の強さも大きく関わってきます。
ということで、今度は風の強さも考慮し、より正確な体感温度を監視してみましょう。
監視するのはハワイ(オアフ島)の現在の体感温度です。
なお、提供されているXMLファイルには体感温度の値は出力されていないため、気温・湿度・風の強さの値を元に体感温度を算出するスクリプト(hawaii_net.sh)を作ってみました。
計算式はミスナール(Missenard)が1937年に考案した式をグレゴルチュク(Gregorczuk)が改良したものを使用します。
<hawaii_net.sh>
1 2 3 4 5 6 7 8 9 10 11 12 13 |
#!/bin/bash curl --silent -o /tmp/hawaii_weather.xml http://w1.weather.gov/xml/current_obs/PHJR.xml temp=`cat /tmp/hawaii_weather.xml | grep "<temp_c>" | sed -e "s/<temp_c>//g" | sed -e "s/<\/temp_c>//g"` humidity=`cat /tmp/hawaii_weather.xml | grep "<relative_humidity>" | sed -e "s/<relative_humidity>//g" | sed -e "s/<\/relative_humidity>//g"` wind_kt=`cat /tmp/hawaii_weather.xml | grep "<wind_kt>" | sed -e "s/<wind_kt>//g" | sed -e "s/<\/wind_kt>//g"` location=`cat /tmp/hawaii_weather.xml | grep "<location>" | sed -e "s/<location>//g" | sed -e "s/<\/location>//g"` echo "$temp $humidity $wind_kt $location" | awk '{ print $4, (37 - (37 - $1) / (0.68 - 0.0014 * $2 + (1 / (1.76 + (1.4 * $3 ^ 0.75)))) - 0.29 * $1 * (1 - $2 * 100)); }' |
画像:スクリプトの実行結果
スクリプトが用意できましたら、カスタム監視に設定してみましょう。
画像:カスタム監視の設定画面
今回の設定:
・25℃未満の場合は重要度”情報”で通知
・25℃以上30℃未満の場合は重要度”警告”で通知
・30℃以上の場合は重要度”危険”で通知
出力された値が正しいか、念の為確認してみます。
スクリプトに以下の行を追加し実行します。
1 2 3 |
echo ${temp}, ${humidity}, ${wind_kt} 現在の気温と湿度と風の強さの値が出力されます。 |
画像:スクリプトの実行結果
それらの値を以下サイトの計算ツールに入力し、出力された値が正しいことを確認します。
https://keisan.casio.jp/exec/system/1257417058
このように、Hinemosでは様々なデータを対象に監視を行い、取得した値に対してしきい値判定を実施することにより、様々なレベルでユーザに通知を送ることが可能です。
皆さんも、ぜひ色々試してみて下さい。
以上、Hinemosを使って天気を監視する方法のご紹介でした。