|
|
天氣資料在 HA 裡很好用,但大部分人只是拿來顯示。
這篇講怎麼把它變成有用的自動化。

資料來源的選擇
HA 內建的
- Met.no —— 挪威氣象局,免費、不用金鑰、全球覆蓋
- OpenWeatherMap —— 要註冊拿免費金鑰
- AccuWeather —— 免費版有次數限制
台灣的資料
- 中央氣象署有開放資料,可以用 RESTful sensor 接
- 社群有做 HACS 整合
- 在地的資料通常比國際的準(尤其是降雨)
自己的感測器
最準的還是自己家的。
- 室外溫濕度計(放在遮陰通風處)
- 雨滴感測器
- 照度計
混合使用:
weather 實體的結構
- {{ states('weather.forecast_home') }}
- → 現在的天氣狀態(sunny / rainy / cloudy...)
- {{ state_attr('weather.forecast_home', 'temperature') }}
- {{ state_attr('weather.forecast_home', 'humidity') }}
- {{ state_attr('weather.forecast_home', 'wind_speed') }}
- {{ state_attr('weather.forecast_home', 'pressure') }}
複製代碼
重要的改變:
HA 2024 之後,預報資料不再是屬性,
要用動作取得:
- - action: weather.get_forecasts
- target:
- entity_id: weather.forecast_home
- data:
- type: hourly
- response_variable: 預報
複製代碼
然後用 預報['weather.forecast_home'].forecast 取資料。

實用自動化一:要下雨了,收衣服
- automation:
- - alias: 快下雨了
- id: rain_warning
- mode: single
- triggers:
- - trigger: time_pattern
- minutes: "/30"
- conditions:
- - condition: state
- entity_id: input_boolean.衣服晾在外面
- state: "on"
- actions:
- # 取得未來幾小時的預報
- - action: weather.get_forecasts
- target:
- entity_id: weather.forecast_home
- data:
- type: hourly
- response_variable: 預報
- - variables:
- 未來三小時: >
- {{ 預報['weather.forecast_home'].forecast[:3] }}
- 會下雨: >
- {{ 未來三小時
- | selectattr('precipitation_probability', 'defined')
- | selectattr('precipitation_probability', 'gt', 60)
- | list | count > 0 }}
- - condition: template
- value_template: "{{ 會下雨 }}"
- - action: script.通知
- data:
- 等級: 重要
- 標題: 三小時內可能下雨
- 訊息: >
- 降雨機率
- {{ 未來三小時 | map(attribute='precipitation_probability')
- | list | join('% / ') }}%
- ,衣服要收了
複製代碼
幾個設計重點:
- 用 input_boolean 記錄「衣服晾在外面」 —— 不然會一直通知
- mode: single + 每半小時檢查
- 降雨機率門檻 60%(太低會一直誤報)
更聰明的做法:用雨滴感測器
- automation:
- - alias: 下雨了
- triggers:
- - trigger: state
- entity_id: binary_sensor.雨滴感測器
- to: "on"
- actions:
- - action: script.通知
- data:
- 等級: 緊急
- 標題: 下雨了
- 訊息: 立刻收衣服
- # 如果有電動遮雨棚
- - action: cover.close_cover
- target:
- entity_id: cover.遮雨棚
複製代碼
雨滴感測器很便宜(一兩百塊),而且比預報準。
用 ESPHome 做一個:
- binary_sensor:
- - platform: gpio
- pin:
- number: GPIO34
- inverted: true
- name: 下雨了
- device_class: moisture
- filters:
- - delayed_on: 10s
- - delayed_off: 5min
複製代碼
delayed_off: 5min —— 停止感應後要等五分鐘才算「沒下雨」
(感測器上的水要蒸發)。

實用自動化二:開窗建議
- template:
- - binary_sensor:
- - name: 適合開窗
- unique_id: good_window
- state: >
- {% set 外溫 = state_attr('weather.forecast_home', 'temperature')
- | float(99) %}
- {% set 內溫 = states('sensor.客廳溫度') | float(0) %}
- {% set 天氣 = states('weather.forecast_home') %}
- {% set aqi = states('sensor.空氣品質指標') | float(0) %}
- {{ 天氣 not in ['rainy', 'pouring', 'lightning', 'lightning-rainy']
- and aqi < 100
- and 外溫 < 內溫 - 1
- and 外溫 > 18 }}
複製代碼
四個條件:
- 沒在下雨
- 空氣品質可以
- 外面比裡面涼(差一度以上)
- 外面不會太冷
再加上前面講的絕對濕度判斷會更準。
實用自動化三:颱風準備
- automation:
- - alias: 颱風警報
- triggers:
- - trigger: numeric_state
- entity_id: sensor.風速
- above: 12
- actions:
- # 收遮陽篷
- - action: cover.close_cover
- target:
- entity_id: cover.遮陽篷
- # 關窗
- - action: cover.close_cover
- target:
- entity_id: cover.電動窗
- # 檢查有沒有窗戶開著
- - if:
- - condition: state
- entity_id: binary_sensor.有門窗開著
- state: "on"
- then:
- - action: script.通知
- data:
- 等級: 緊急
- 標題: 風很大但有窗戶開著
- 訊息: >
- {{ state_attr('binary_sensor.有門窗開著', '清單')
- | join('、') }}
複製代碼
實用自動化四:冷氣的天氣連動
- automation:
- - alias: 明天會很熱,提早預冷
- triggers:
- - trigger: time
- at: "06:00:00"
- actions:
- - action: weather.get_forecasts
- target:
- entity_id: weather.forecast_home
- data:
- type: daily
- response_variable: 預報
- - variables:
- 今日高溫: >
- {{ 預報['weather.forecast_home'].forecast[0].temperature }}
- - condition: template
- value_template: "{{ 今日高溫 | float(0) > 33 }}"
- - action: script.通知
- data:
- 等級: 一般
- 標題: 今天會到 {{ 今日高溫 }} 度
- 訊息: 建議中午前就把冷氣打開
複製代碼
實用自動化五:日出日落的應用
sun 實體比固定時間好用太多:
- triggers:
- - trigger: sun
- event: sunset
- offset: "-00:30:00" # 日落前 30 分鐘
複製代碼
可用的屬性:
- {{ state_attr('sun.sun', 'elevation') }} 仰角
- {{ state_attr('sun.sun', 'azimuth') }} 方位角
- {{ state_attr('sun.sun', 'next_dawn') }} 下次黎明
- {{ state_attr('sun.sun', 'next_dusk') }} 下次黃昏
- {{ state_attr('sun.sun', 'next_midnight') }}
- {{ state_attr('sun.sun', 'next_noon') }}
- {{ state_attr('sun.sun', 'next_rising') }}
- {{ state_attr('sun.sun', 'next_setting') }}
複製代碼
用仰角判斷「天黑了」比用日落時間準:
- - condition: numeric_state
- entity_id: sun.sun
- attribute: elevation
- below: 3
複製代碼
為什麼:
- 日落之後還有一段時間是亮的(暮光)
- elevation 可以精細調整
- 陰天可以搭配照度感測器
最準的做法:
- template:
- - binary_sensor:
- - name: 該開燈了
- state: >
- {{ states('sensor.室外照度') | float(9999) < 200
- or state_attr('sun.sun', 'elevation') | float(90) < 2 }}
- delay_off: "00:10:00"
複製代碼
有照度感測器就用照度,沒有就用太陽仰角當備援。

天氣儀表板
- type: vertical-stack
- cards:
- - type: weather-forecast
- entity: weather.forecast_home
- forecast_type: daily
- show_current: true
- - type: entities
- entities:
- - entity: binary_sensor.適合開窗
- name: 現在適合開窗嗎
- - entity: binary_sensor.該開燈了
- - entity: sensor.室外溫度
- name: 室外(自己的感測器)
- - entity: sensor.室外濕度
- - entity: sensor.空氣品質指標
- - type: conditional
- conditions:
- - condition: state
- entity: input_boolean.衣服晾在外面
- state: "on"
- card:
- type: markdown
- content: >
- ### 👕 衣服晾在外面
- 未來三小時降雨機率:{{ ... }}
複製代碼
幾個實用的小提醒
- 預報不準是正常的 —— 不要完全依賴
- 台灣的午後雷陣雨很難預測 —— 雨滴感測器比較實在
- weather 整合的更新間隔通常是一小時
- 用 homeassistant.update_entity 可以強制更新
---
下一篇:植物照顧 ——
土壤濕度、光照、自動澆水。 |
|