こんにちは、クリスマスを直前に控え、「自分」へのクリスマスプレゼント選びに余念が無いmi2yo4です。
オンラインで買い物が出来るとついつい買いすぎてしまいますね。気をつけましょう…
日の出時刻と日の入り時刻を求める重要性
あぐりログの新しい機能を実装する際に、日の出時刻と日の入り時刻を求める必要が出てきました。
正確に言うと、昼間平均気温と夜間平均気温を表示するために、日の出時刻と日の入り時刻が必要となる、という事ですね。
昼間平均気温と夜間平均気温が何故必要か?という事を以前質問したことがありまして、こんな答えを頂きました。
現状の植物状態を認識した上で、それを意図的にコントロールするために日較差を操作します。
そのためには日中平均気温と夜間平均気温を計測する必要がある、ということです。
植物の栄養生長と生殖生長等を施設内でコントロールするには、まず現状の立ち位置(日中平均気温と夜間平均気温)を知らなくては意味がないのですね。
その為には日中(昼間)時間がどこからどこまで、夜間がどこからどこまでという事を知らなくてはいけません。つまり日の出と日の入り時間が分からなければ日中と夜間の平均気温を算出できないことになります。
しかし、現状のシステムに組み込むとしたら結構色々と手間がかかりそうな話ですね…
例えば、自分の緯度経度を図って、それを何処かのシステムに問い合わせるorシステム内にデータベースを構築して作るetc…
うーん、「言うは易く行なうは難し」か…と思いきや、意外と解決策が手近にありました。
PHPでは日の出時刻、日の入り時刻用の関数が用意されている
弊社のあぐりログでは開発言語にPHPを使用している部分もあります。「日の出時刻 日の入り時刻」で検索してみると…いきなりPHPで日の出、日の入り時刻を求められる事が分かってしまいました(^^;
言われてみれば、巷にPHPでホームページを作ろう、という機運があった前世紀から2000年初頭にかけて日の出、日の入り時刻や現在の時刻をページ上に表示しているHPがチラホラ遭ったような気がします。その名残なんでしょうかね?
ともあれ、これを試してみましょうか。
date_sunrise, date_sunsetは「使える」かの調査
PHPの標準関数にはありますが、本当に「使える」かどうかは試してみないとわかりません。
という訳でサンプルコードで試してみました。
<?php $lon = 136.906565; $lat = 35.180188; echo date("D M d Y"). ', sunrise time : ' . date_sunrise( time(), SUNFUNCS_RET_STRING, $lat, $lon, 90, 9 ); echo "<br>"; echo date("D M d Y"). ', sunset time : ' . date_sunset( time(), SUNFUNCS_RET_STRING, $lat, $lon, 90, 9 );
サンプルで紹介されていたものを少し改造して、名古屋の緯度経度で日の出、日の入り時刻はどうなるかを算出してみました。
緯度、経度はここのものを入れています。
Wed Dec 24 2014, sunrise time : 07:01 Wed Dec 24 2014, sunset time : 16:42
googleで「名古屋 日の出時刻」、「名古屋 日の入り時刻」で検索した結果、それぞれ6:58と16:45となりました。googleの時刻が正確なものかどうかは分かりませんが、大体3分程度の誤差があるということですね。後日、スクリプトが間違っていた事が判明し、ほとんど誤差はありませんでした。
なぜ誤差が生じているかは謎です。測地系の違いなどが影響しているのでしょうか…?
でもまあ、昼間時間が長くなるわけでもなく、時刻がどちらかにズレる程度の誤差なので、システム上問題は無いと言えるでしょうね。
まとめ
今回のことをまとめてみました。
- 昼間平均気温、夜間平均気温を計測する需要がある
- 日中(昼間)、夜間は日の出、日の入り時刻から求められる
- PHPには日の出、日の入り時刻を求める標準関数がある
- PHPの標準関数で特に問題なく(おそらく)平均気温を求める事が出来る
気温は既に表示しているので、これで昼間平均気温・夜間平均気温をあぐりログで表示できそうです。
時期は…うーん、来年早々に実装したいですね。
それではまた!
追記
この機能を用いて、あぐりログでは昼間平均気温、夜間平均気温の表示が出来るようになりました!
ハウス環境計測サービスのあぐりログについては、「あぐりログは温室のモニタリングサービスです」をご覧ください。
簡単に、そして安価に温室の環境をお手持ちのPCやスマートフォンで確認できるようになりますよ!