|
|
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 寫錯時才知道問題不在這裡。
把下面這行的 你的授權碼 換掉,整行貼到瀏覽器網址列:
- 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",中間可以找到這樣的結構:
- {
- "success": "true",
- "records": {
- "Locations": [
- {
- "LocationsName": "台灣",
- "Location": [
- {
- "LocationName": "臺北市",
- "Geocode": "63000",
- "WeatherElement": [
- {
- "ElementName": "3小時降雨機率",
- "Time": [
- {
- "StartTime": "2026-09-25T00:00:00+08:00",
- "EndTime": "2026-09-25T03:00:00+08:00",
- "ElementValue": [
- { "ProbabilityOfPrecipitation": "10" }
- ]
- },
- ...
複製代碼
三個一定要注意的地方
- 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,最後面加一行:
為什麼要放這裡:授權碼綁你的帳號,貼到論壇求助或上傳設定檔備份時很容易外流。放 secrets.yaml 之後 configuration.yaml 裡只會出現 !secret cwa_api_key。
步驟 4:建立兩個 REST 感測器
打開 configuration.yaml,在最外層(也就是頂格,前面沒有任何空格)加上這一整段:
|
|