Weather.php概要
Yahoo!JAPANの気象情報APIを用いて、指定した緯度経度の雨の強さを取得します。取得した絵、現在時刻の降水強度実測値から、60分後までの降水強度予測値をもとに、今後の雨予報を行います。
スクリプト仕様
- Yahoo!JAPANの気象APIより現在の降水量実測値と60分後までの降水量を取得します
- 降水量予測は、10分単位で取得を行います。
https://map.yahooapis.jp/weather/V1/place?interval=10&output=json&coordinates=139.745451,35.658577&appid=@YAHOO_API_ID@
以下、XMLで取得した際のサンプル。
<YDF xmlns="http://olp.yahooapis.jp/ydf/1.0" firstResultPosition="1" totalResultsAvailable="1" totalResultsReturned="1"> <ResultInfo> <Count>1</Count> <Total>1</Total> <Start>1</Start> <Status>200</Status> <Latency>0.003471</Latency> <Description/> <Copyright>(C) Yahoo Japan Corporation.</Copyright> </ResultInfo> <Feature> <Id>201907082015_139.74545_35.658577</Id> <Name> 地点(139.74545,35.658577)の2019年07月08日 20時15分から60分間の天気情報 </Name> <Geometry> <Type>point</Type> <Coordinates>139.74545,35.658577</Coordinates> </Geometry> <Property> <WeatherAreaCode>4410</WeatherAreaCode> <WeatherList> <Weather> <Type>observation</Type> <Date>201907082015</Date> <Rainfall>0.00</Rainfall> </Weather> <Weather> <Type>forecast</Type> <Date>201907082025</Date> <Rainfall>0.00</Rainfall> </Weather> <Weather> <Type>forecast</Type> <Date>201907082035</Date> <Rainfall>0.00</Rainfall> </Weather> <Weather> <Type>forecast</Type> <Date>201907082045</Date> <Rainfall>0.00</Rainfall> </Weather> <Weather> <Type>forecast</Type> <Date>201907082055</Date> <Rainfall>0.00</Rainfall> </Weather> <Weather> <Type>forecast</Type> <Date>201907082105</Date> <Rainfall>0.00</Rainfall> </Weather> <Weather> <Type>forecast</Type> <Date>201907082115</Date> <Rainfall>0.00</Rainfall> </Weather> </WeatherList> </Property> </Feature> </YDF>
- 現在(observation)の雨量(Rainfall)を取得し、将来(forecast)の雨量を順番に見てゆきます。雨判定のしきい値を超えた時点で、雨予報のトリガーを実施します。(home-api.phpへ通知します)
- このままだと、checkインターバルにもよりますが通知回数が多くなるので、通知間隔を調整する設定値を準備しております。
雨が降り始めても、止むことなく降り続ける場合は少ないので、少し時間が空いた後の、雨の降り始めが通知出来るようにしております。 - 雨トリガー実行、現時点の雨や60分先までの雨を検知した時点の時間を記憶し、インターバル時間以上の雨検知まで、雨トリガーを抑制します。
インターバルを70分と設定した場合。
雨トリガー実施08:00(次回09:10以降の雨検知までトリガー抑止)→数十分先の雨を検知08:40(次回9:50以降の雨検知までトリガー抑止)
雨が降り続いている限り(70分以上の雨検知がなくなるまで)、雨トリガーは抑止されます。
動作定義
- @URL4HOMEAPI@:home-api.phpのURLを登録 home-api.php V1
- @APIKEY@:home-api.php のAPI KEYを登録 home-api.php V1
- @YAHOO_API_ID@:Yahoo! JAPANのアプリケーションID
Yahoo!JAPANアプリケーションの管理 - @PLACE@:経度・緯度の順番で、コンマ区切りで指定
例:https://www.geocoding.jp/?q=東京都港区芝公園4丁目2−8
東京都港区芝公園4丁目2−8 座標(WGS84) 緯度: 35.658577 経度: 139.745451
139.745451,35.658577
//ログのファイル名 define("HOME_API_LOG_NAME","log-weather"); //前回通知時間記録ファイル define("HOME_API_TEMP_NAME","temp"); //home-api-key define("HOME_API_URL","http://@URL4HOMEAPI@/home-api.php"); define("HOME_API_KEY","@APIKEY@"); //動作設定 //雨判定閾値(通常0.5mm/hが雨(小雨)) define("MIN_RAIN_VALUE",0.55); //雨判定閾値(小雨以上の雨、通常1.0mm/h以上) define("STD_RAIN_VALUE",1.0); //雨アナウンス後の次アナウンスまでの間隔(分) アナウンスなし期間の小雨以上判定で期間延長 define("NO_NOTICE_TIME",70); //Yahoo API Infromation $appid = '@YAHOO_API_ID@'; $coordinates ='@PLACE@';
スクリプトファイル
Gist
https://gist.github.com/kenichimiki/42fb1736da90a911dd9c3bffda4a8f10