|
|
模板(template)是 Home Assistant 最好用也最容易寫錯的地方。這篇只放兩種東西:你真的會用到的寫法,以及那些「看起來對、跑起來錯、而且不報錯」的。

步驟 1:先把測試環境打開,這篇後面每一段都要貼進去
⚠ 路徑在一年內改了兩次,而且是兩件不同的事:
- 2026.2 —— 從側邊欄搬進「設定」底下
- 2026.8 —— 名字從「開發者工具」改成「工具」
所以舊教學寫的「側邊欄 → 開發者工具 → 模板」、以及半新不舊的「設定 → 開發者工具」都是錯的。找不到就按 Ctrl + K 搜「範本」。
你會看到什麼:左邊一塊可編輯的文字區(預設已經有一段示範),右邊即時顯示算出來的結果。改左邊,右邊立刻跟著變。
這個習慣可以省掉八成的除錯時間:模板在這裡寫錯會直接紅字告訴你哪裡錯;同一段寫進 YAML 之後,唯一的症狀是「自動化沒反應」。
步驟 2:四個取值函式,先認完
把下面整段貼進範本工具(把實體 ID 換成你家真的有的):
- 狀態:{{ states('sensor.living_room_temperature') }}
- 屬性:{{ state_attr('light.living_room', 'brightness') }}
- 是不是開著:{{ is_state('light.living_room', 'on') }}
- 屬性比對:{{ is_state_attr('climate.living_room', 'hvac_action', 'cooling') }}
- 有沒有值:{{ has_value('sensor.living_room_temperature') }}
複製代碼
你會看到什麼:右邊五行,分別是一個數字(字串形式)、一個 0~255 的數字或 None、true 或 false、true 或 false、true 或 false。
實體 ID 一律用英文。HA 會把中文名稱音譯成拼音,`sensor.客廳溫度` 多半不存在。去「設定 → 工具 → 狀態」查真正的 ID。
states() 和 states.sensor.x.state 的差別
- {{ states('sensor.not_exist') }} → unknown(安全)
- {{ states.sensor.not_exist.state }} → 直接報錯,整個模板爆掉
複製代碼
一律用 states('...') 那種寫法。官方文件在「Considerations / Startup」段落特別講這件事:HA 剛啟動時很多實體還沒建出來,點號寫法會在那幾秒內讓你的模板實體整個變成 unavailable。
點號寫法只在你要拿 `last_changed`、`last_reported`、`entity_id` 這類狀態物件本身的欄位時才需要。

陷阱一:所有狀態都是字串
這是第一名,而且症狀最離奇。
- {{ states('sensor.living_room_temperature') > 25 }}
- → 報錯:'>' not supported between instances of 'str' and 'int'
- {{ states('sensor.living_room_temperature') | float(0) > 25 }}
- → 對
複製代碼
float(0) 裡那個 0 是「轉不出來就當 0」。不寫預設值的話,感測器變成 `unavailable` 的那一刻整個模板會拋錯 —— 然後你的自動化在裝置掉線時連「沒動」都不是,是直接失敗。
兩個字串比較會出現的真實災難:
- {{ '30' > '9' }} → false
- {{ '100' < '9' }} → true
複製代碼
字串是逐字比的,`'3'` 小於 `'9'`,所以 30 度會被判成「小於 9 度」。冷氣自動化寫錯這個,夏天會完全不開。
在範本工具裡自己跑一次上面兩行,親眼看到 false 和 true 比記規則有用。
兩個轉換函式:
|
|