找回密碼
 立即註冊
    查看: 172|回覆: 0

    天氣自動化實戰:接中央氣象署 API,做一個真的會叫你收衣服的系統

    [複製鏈接]

    !lvup!   100%

    386

    主題

    27

    回帖

    2200萬

    積分

    管理員

    積分
    22006063
    發表於 2026-9-21 14:20:46 | 顯示全部樓層 |閱讀模式
    Home Assistant 內建的天氣整合在台灣有一個很具體的問題:午後雷陣雨它幾乎抓不到。

    Met.no 是挪威氣象局的全球模式,格點粗、對台灣地形性的對流降雨不敏感。要做「要不要收衣服」這種自動化,你需要兩樣東西:中央氣象署的在地預報,以及一個真的會被雨淋到的感測器。

    一個真的會被雨淋到的感測器

    這篇從申請 API 授權碼開始,一路做到一個會自己修正的收衣服系統。全部做完大約要一個半小時,其中焊接零分鐘 —— 雨滴感測器是插接的。

    做完之後你會有


    • 一個 sensor.cwa_pop_6h,數字是氣象署對你所在縣市未來六小時的降雨機率
    • 一個 binary_sensor.xia_yu_le,是真的有水滴在感測器上才會 on
    • 一條「預報說要下雨 → 通知收衣服」的自動化,而且不會一直吵你
    • 兩個計數器告訴你「預報說會下、結果真的下了幾次」,讓你自己把門檻調到合理值


    步驟 1:申請中央氣象署的 API 授權碼

    免費、線上、不用審核,大約三分鐘。


    • 打開 https://opendata.cwa.gov.tw/
    • 右上角登入/註冊 → 加入會員,填 Email 與密碼送出
    • 到信箱收確認信,點裡面的連結完成啟用
    • 回到平臺登入,點上方的會員資訊 → API 授權碼 → 取得授權碼


    你會看到一串 CWA- 開頭、三十幾個字元的字串,長得像 CWA-XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX。複製下來。

    沒收到確認信 → 先看垃圾郵件匣;還是沒有就換一個信箱重來,平臺對某些企業郵件伺服器的投遞成功率不高。

    步驟 2:先用瀏覽器打一次 API,確認資料真的拿得到

    這一步不要跳過。 先確認網址對、授權碼對、你要的縣市名稱拼法對,後面 YAML 寫錯時才知道問題不在這裡。

    把下面這行的 你的授權碼 換掉,整行貼到瀏覽器網址列:
    1. https://opendata.cwa.gov.tw/api/v1/rest/datastore/F-D0047-089?Authorization=你的授權碼&format=JSON&LocationName=臺北市&ElementName=3小時降雨機率
    複製代碼

    F-D0047-089 是「鄉鎮天氣預報-台灣未來 3 天天氣預報」這個資料集的代碼,每 6 小時更新一次,時間解析度是 3 小時。

    你會看到一大段 JSON,開頭是 {"success":"true",中間可以找到這樣的結構:
    1. {
    2.   "success": "true",
    3.   "records": {
    4.     "Locations": [
    5.       {
    6.         "LocationsName": "台灣",
    7.         "Location": [
    8.           {
    9.             "LocationName": "臺北市",
    10.             "Geocode": "63000",
    11.             "WeatherElement": [
    12.               {
    13.                 "ElementName": "3小時降雨機率",
    14.                 "Time": [
    15.                   {
    16.                     "StartTime": "2026-09-25T00:00:00+08:00",
    17.                     "EndTime": "2026-09-25T03:00:00+08:00",
    18.                     "ElementValue": [
    19.                       { "ProbabilityOfPrecipitation": "10" }
    20.                     ]
    21.                   },
    22.                   ...
    複製代碼

    三個一定要注意的地方


    • LocationName 要用「臺」不是「台」。這個資料集只認得 22 個縣市名稱:連江縣、金門縣、宜蘭縣、新竹縣、苗栗縣、彰化縣、南投縣、雲林縣、嘉義縣、屏東縣、臺東縣、花蓮縣、澎湖縣、基隆市、新竹市、嘉義市、臺北市、高雄市、新北市、臺中市、臺南市、桃園市。寫成「台北市」會回一個 "Location": [] 的空清單
    • ElementName 是「3小時降雨機率」,不是 6 小時。網路上很多文章寫 6 小時降雨機率,那是另一個資料集(未來一週的 F-D0047-091)的欄位名。填錯不會報錯,會回一個 "WeatherElement": [] 的空清單
    • 這個資料集是縣市層級,不是鄉鎮層級。要精確到鄉鎮市區請改用 F-D0047-093,但結構多一層、資料量大 30 倍,做收衣服提醒完全不需要


    回傳 "Location": [] 或 "WeatherElement": [],但 success 是 true —— 授權碼是對的,是縣市名或要素名打錯。回去核對上面那份清單。

    回傳 401 或 success: false —— 授權碼錯了,或前後夾到空白字元。

    步驟 3:把授權碼存進 secrets.yaml

    在 Home Assistant 的設定資料夾(跟 configuration.yaml 同一層)找到 secrets.yaml,最後面加一行:
    1. cwa_api_key: CWA-你的授權碼
    複製代碼

    為什麼要放這裡:授權碼綁你的帳號,貼到論壇求助或上傳設定檔備份時很容易外流。放 secrets.yaml 之後 configuration.yaml 裡只會出現 !secret cwa_api_key。

    步驟 4:建立兩個 REST 感測器

    打開 configuration.yaml,在最外層(也就是頂格,前面沒有任何空格)加上這一整段:

    以下還有約 82% 的內容
    登入後即可閱讀完整教學

    登入繼續閱讀使用 Google 登入
    您需要登入後纔可以回帖 登入 | 立即註冊

    本版積分規則

    延伸閱讀

    加入惟家 LINE 群 QR Code加入惟家 LINE 群

    Archiver|手機版|惟家的智能論壇

    GMT+8, 2026-11-10 00:39 , Processed in 0.138350 second(s), 25 queries .

    快速回覆 返回頂部 返回列表