私人氣象站過去24小時實時/每日數據圖表

氣象站:

選擇圖表日期 (開始及結束日期之間最長只提供7日):

開始日期(yyyy-mm-dd):
結束日期(yyyy-mm-dd):


將軍澳私人氣象站資料將軍澳私人氣象站設定及數據保存方法分享
將軍澳私人氣象站實時/每日數據圖表將軍澳私人氣象站天氣要素排行榜

前言

現在大部分私人氣象站品牌,都會自動將數據上載到其品牌旗下的雲端伺服器,讓你能夠在用電腦瀏覽器,或手機的專用應用程式,觀看實時及歷史數據。

▲ 網主使用的私人氣象站品牌在其官方網站上顯示的實時數據

不過上載到品牌旗下或其他雲端伺服器有幾個缺點:

  1. 氣象站通常有很頻密的數據傳輸間距,例如網主的私人氣象站就會每16秒傳輸數據一次,但上載到雲端伺服器的數據傳輸間距則較疏,通常只會每30秒或1分鐘一次。較疏的數據傳輸間距會使中間有可能出現的極端數據被濾掉。


    ▲ 官方網站上顯示 2024年11月1日 最高風速為 20.9 km/h,最高陣風為 33.1 km/h
    ▲ 經由氣象站每16秒傳輸到網主自行架設的伺服器,顯示 2024年11月1日 最高風速為 23.8 km/h,最高陣風為 34.9 km/h

  2. 品牌旗下的雲端伺服器,通常只會提供限時免費數據儲存,若想數據儲存期長一點,就需要付費。但即使不介意付費,也未必可以永久儲存。例如網主的私人氣象站,付款也只提供最多3年的數據儲存。

    ▲ 網主使用的私人氣象站品牌免費版本提供1年數據儲存期,每年繳付高達$49.99美元才能享有僅3年的數據儲存期

  3. 大部分品牌氣象站都可以設定將數據提供予國際私人氣象站平台的雲端伺服器,這些國際私人氣象站平台通常會提供更長年期,甚至永久的數據儲存,但儲存數據的間隔就更疏,通常會是5-10分鐘一次。

    ▲ Weather Underground的數據儲存期是永久,但數據間隔就變成每5分鐘一次。氣象站能夠提供的每16秒一次,即氣象站每傳輸18-19次數據,Weather Underground才為我儲存一次數據

  4. 雲端伺服器提供他們已經預設好的圖表供你查閱,但未必切合你的需要,甚至如果想與官方機構在附近的氣象站數據在同一圖表反映對比,品牌都未能達至此一要求。

  5. ▲ 官方網站的圖表無法選擇與甚麼氣象元素同時顯示,也無法與官方機構在附近的氣象站數據作實時對比,而且圖表由每5分鐘的數據編製,精細度不足
    ▲ 自行製作的圖表,可以自訂顯示甚麼氣象元素在同一圖表,不需要的話也可暫時隱藏,也可以將氣象站每16秒傳輸一次的數據全部顯示,而同時能夠從官方機構取下實時數據,顯示在圖表中作對比

  6. 有一些數據是品牌沒有計算給你,但你可以藉由氣象站傳輸的原始數據計算出來(例如:十分鐘平均風速、一小時滑動雨量等)。
  7. ▲ 由原始數據計算出來的一小時滑動雨量,顯示在圖表中更能突顯某個時間的降雨強度

數據保存方法設定

網主使用的私人氣象站為 Ambient Weather WS-2902D。

Ambient Weather 這個私人氣象站品牌,很佛心地提供一個可以聯絡同一內聯網絡內自行架設的伺服器端網站編程語言 (server-side web programming language) (例如:php, asp, jsp等等) 編寫的網頁,將氣象站實時數據自行保存。根據自己的需要,那個自行編寫的網頁,可以將數據匯出到純文件檔案、CSV文件、任何格式的機讀檔案,或者是寫入自行架設的伺服器資料庫內。而網主就選擇寫入自行架設的伺服器資料庫內,以方便往後自行設計的圖表使用,及計算各類型氣象平均值及極端值排名。

這個品牌的私人氣象站,可以定時輸出一串實時數據,實時數據的例子如下:

&PASSKEY=[MASSED PASSKEY]&stationtype=AMBWeatherPro_V5.1.5&dateutc=2024-11-02+10:44:58&tempf=75.6&humidity=68&windspeedmph=0.00&windgustmph=0.00&maxdailygust=19.46&winddir=114&uv=0&solarradiation=0.00&hourlyrainin=0.000&eventrainin=0.000&dailyrainin=0.000&weeklyrainin=0.000&monthlyrainin=0.000&yearlyrainin=20.429&totalrainin=20.429&battout=1&tempinf=76.6&humidityin=60&baromrelin=30.020&baromabsin=29.500

這一串實時數據格式顯示氣象站支援聯絡以伺服器端網站編程語言 (server-side web programming language) 編寫的頁面,只要這個頁面內編寫好拆解以上實時數據串,然後相應寫入資料庫,數據就成功保存。
網主則用網路附接儲存 (Network-attached storage (NAS)) ,即本資料庫網站所使用、位於網主家中的伺服器。因為它本身就設計成長期開機的伺服器,而網主也利用這個特點將其作為本資料庫網站的伺服器。因利成便,可順道用作接收及保存私人氣象站回傳的實時數據。
沒有NAS的朋友,也可以使用普通電腦作同樣設定,只是往後需要長期開機,較NAS浪費電力,電腦如有問題需重新開機,期間的數據也無法接收及保存。
NAS內本身已內建網站伺服器功能,所以首先在NAS內安裝相應的server-side web programming language compiler,網主使用的是PHP,因此找PHP的compiler來安裝。接著安裝database,網主使用的是MariaDB,是MySQL的其中一個分支,相對簡單易用,而且免費。

電腦/伺服器端設定及準備實戰

如閣下想在電腦上架設網站伺服器,使用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';
有幾個位置需要留意:
  1. 程式碼當中的connect_mysql.php及close_mysql.php是另一個檔案,用以儲存與資料庫建立構通渠道的資訊。程式碼例如如下:
    connect_mysql.php:
    
    $servername = ""; // 資料庫地址:連接埠,如果網站伺服器與資料庫在同一主機內,通常會是 "localhost:3306"
    $username = ""; // 用作登入資料庫的用戶名稱
    $password = ""; // 上述用戶名稱的密碼
    $dbname = ""; // 資料庫名稱
    
    $conn = mysqli_connect($servername, $username, $password, $dbname);
    
    close_mysql.php:
    
    mysqli_close($conn);
    
  2. 這款私人氣象站是美國產品,數據都以英制為單位,例如氣溫的原始數據以華氏為單位,雨量的原始數據以吋為單位。如果想儲存時變換為公制單位,就需要在php或資料庫內建立function,再在php程式內套用。 網主選擇在資料庫內建立function,以下為在資料庫建立一個將氣溫由華氏轉為攝氏的function的程式碼:
    
    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"] . ") ";
    

私人氣象站端設定實戰

當寫入數據用的php都準備好後,就可以到私人氣象站的設定頁,Customized部分,指定聯絡這個php頁面。Server IP / Hostname需要是與私人氣象站同一個區域網絡內的IP或電腦名稱,網主嘗試過輸入外網的IP不成功,如需要以外網作儲存,可能就需要在內網內架設網站伺服器,設立一個php頁面去聯絡外網的php頁面,期間帶同數據聯絡。上載間隔設為私人氣象站傳輸數據的間隔,網主的私人氣象站型號每隔16秒傳輸數據一次,所以也將聯絡上載間隔設為16秒,以儲存所有氣象站回傳的數據。
當中一個很重要的提示,是不要忘掉Path當中指定你那用以接收及寫入的php頁面後,在最後面加上一個 ? ,才能成功讓氣象站聯絡這個php頁面。

所有設定都保存好後,私人氣象站就會每16秒以以下形式聯絡這個php頁面:

http://192.168.0.1:80/data_upload.php?&PASSKEY=[MASSED PASSKEY]&stationtype=AMBWeatherPro_V5.1.5&dateutc=2024-11-02+10:44:58&tempf=75.6&humidity=68&windspeedmph=0.00&windgustmph=0.00&maxdailygust=19.46&winddir=114&uv=0&solarradiation=0.00&hourlyrainin=0.000&eventrainin=0.000&dailyrainin=0.000&weeklyrainin=0.000&monthlyrainin=0.000&yearlyrainin=20.429&totalrainin=20.429&battout=1&tempinf=76.6&humidityin=60&baromrelin=30.020&baromabsin=29.500

戰果收成

看看資料庫的紀錄,就會發現數據開始儲存在database內了。

此分享文章建立於 2024年11月 。

將軍澳私人氣象站數據提供予以下國際私人氣象站平台:


Ambient Weather Network

PWS Weather

Weather Underground