將軍澳私人氣象站資料 | 將軍澳私人氣象站設定及數據保存方法分享 |
將軍澳私人氣象站實時/每日數據圖表 | 將軍澳私人氣象站天氣要素排行榜 |
現在大部分私人氣象站品牌,都會自動將數據上載到其品牌旗下的雲端伺服器,讓你能夠在用電腦瀏覽器,或手機的專用應用程式,觀看實時及歷史數據。
不過上載到品牌旗下或其他雲端伺服器有幾個缺點:
網主使用的私人氣象站為 Ambient Weather WS-2902D。
Ambient Weather 這個私人氣象站品牌,很佛心地提供一個可以聯絡同一內聯網絡內自行架設的伺服器端網站編程語言 (server-side web programming language) (例如:php, asp, jsp等等) 編寫的網頁,將氣象站實時數據自行保存。根據自己的需要,那個自行編寫的網頁,可以將數據匯出到純文件檔案、CSV文件、任何格式的機讀檔案,或者是寫入自行架設的伺服器資料庫內。而網主就選擇寫入自行架設的伺服器資料庫內,以方便往後自行設計的圖表使用,及計算各類型氣象平均值及極端值排名。
這個品牌的私人氣象站,可以定時輸出一串實時數據,實時數據的例子如下:
如閣下想在電腦上架設網站伺服器,使用PHP為編程語言,以及使用MySQL作為資料庫,可用XAMPP作一條龍安裝及設定。這裡不詳述,可參考這個網站:https://flatcoding.com/tutorials/php-programming/install-php-server-and-mysql/
當基礎架構都準備好,那麼可以先在database內建立一個table,用來之後作儲存數據之用。以下是網主用作儲存私人氣象站數據的table設定。
之後,就要建立一個php檔案。將接收到的數據寫入到database內。以下是網主寫的程式碼,假設網頁名稱為data_upload.php。
data_upload.php
include 'connect_mysql.php';
// 將實時數據內以UTC作為時間基礎改為UTC+8的香港時間 - start
$datetime_from_query = $_GET["dateutc"];
$datetime_str = substr($datetime_from_query,0,10) . " " . substr($datetime_from_query,11,2) . ":" . substr($datetime_from_query,14,2) . ":" . substr($datetime_from_query,17,2);
$datetime = new DateTime($datetime_str, new DateTimeZone('UTC'));
date_timezone_set($datetime,timezone_open("Asia/Hong_Kong"));
// 將實時數據內以UTC作為時間基礎改為UTC+8的香港時間 - end
// 將實時數據內各項資料併合成為一個inert statement - start
$sql = "insert into [你之前建立的table名稱] values ( '";
$sql = $sql . date_format($datetime,"Y-m-d H:i:s") . "', ";
$sql = $sql . $_GET["tempf"] . ", ";
$sql = $sql . $_GET["humidity"] . ", ";
$sql = $sql . $_GET["windspeedmph"] . ", ";
$sql = $sql . $_GET["windgustmph"] . ", ";
$sql = $sql . $_GET["winddir"] . ", ";
$sql = $sql . $_GET["uv"] . ", ";
$sql = $sql . $_GET["solarradiation"] . ", ";
$sql = $sql . $_GET["hourlyrainin"] . ", ";
$sql = $sql . $_GET["eventrainin"] . ", ";
$sql = $sql . $_GET["dailyrainin"] . ", ";
$sql = $sql . $_GET["monthlyrainin"] . ", ";
$sql = $sql . $_GET["yearlyrainin"] . ", ";
$sql = $sql . $_GET["totalrainin"] . ", ";
$sql = $sql . $_GET["battout"] . ", ";
$sql = $sql . $_GET["tempinf"] . ", ";
$sql = $sql . $_GET["humidityin"] . ", ";
$sql = $sql . $_GET["baromrelin"] . ", ";
$sql = $sql . $_GET["baromabsin"] . ") ";
// 將實時數據內各項資料併合成為一個inert statement - end
// 進行寫入資料庫動作
$stmt = mysqli_prepare($conn, $sql);
mysqli_stmt_execute($stmt);
mysqli_stmt_close($stmt);
include 'close_mysql.php';
有幾個位置需要留意:
$servername = ""; // 資料庫地址:連接埠,如果網站伺服器與資料庫在同一主機內,通常會是 "localhost:3306"
$username = ""; // 用作登入資料庫的用戶名稱
$password = ""; // 上述用戶名稱的密碼
$dbname = ""; // 資料庫名稱
$conn = mysqli_connect($servername, $username, $password, $dbname);
close_mysql.php:
mysqli_close($conn);
CREATE FUNCTION `temp_f2c`(temp decimal(4,1)) RETURNS decimal(4,2)
BEGIN
SET @output = 0;
select (temp - 32) / (9 / 5) into @output;
return @output;
END
然後將寫入數據用的php內的insert statement稍作修改,就會自動轉換為攝氏:
$sql = "insert into [你之前建立的table名稱] values ( '";
$sql = $sql . date_format($datetime,"Y-m-d H:i:s") . "', ";
$sql = $sql . "temp_f2c(" . $_GET["tempf"] . "), "; // 轉換室外氣溫為攝氏
$sql = $sql . $_GET["humidity"] . ", ";
$sql = $sql . $_GET["windspeedmph"] . ", ";
$sql = $sql . $_GET["windgustmph"] . ", ";
$sql = $sql . $_GET["winddir"] . ", ";
$sql = $sql . $_GET["uv"] . ", ";
$sql = $sql . $_GET["solarradiation"] . ", ";
$sql = $sql . $_GET["hourlyrainin"] . ", ";
$sql = $sql . $_GET["eventrainin"] . ", ";
$sql = $sql . $_GET["dailyrainin"] . ", ";
$sql = $sql . $_GET["monthlyrainin"] . ", ";
$sql = $sql . $_GET["yearlyrainin"] . ", ";
$sql = $sql . $_GET["totalrainin"] . ", ";
$sql = $sql . $_GET["battout"] . ", ";
$sql = $sql . "temp_f2c(" . $_GET["tempinf"] . "), "; // 轉換室內氣溫為攝氏
$sql = $sql . $_GET["humidityin"] . ", ";
$sql = $sql . $_GET["baromrelin"] . ", ";
$sql = $sql . $_GET["baromabsin"] . ") ";
所有設定都保存好後,私人氣象站就會每16秒以以下形式聯絡這個php頁面:
看看資料庫的紀錄,就會發現數據開始儲存在database內了。
此分享文章建立於 2024年11月 。
Ambient Weather Network |
PWS Weather |
Weather Underground |
所有氣象站數據均由香港天文台及土木工程拓展署網站定期下載,若天文台或土木工程拓展署稍後修改某些數據,則本網站之數據會與天文台或土木工程拓展署網站所載有出入。
如發現本站任何數據與香港天文台或土木工程拓展署官方網站所載不同,歡迎各位來函 [email protected] 指正,所有數據一概以香港天文台及土木工程拓展署官方網站所載為準。
Copyright © 2017 - 2025 i-Lens all rights reserved