|
|
這一篇做完,你會有一組自動化:投影機一播放就把燈調暗、窗簾拉上;播完三十秒後把燈光窗簾還原成你開始看之前的樣子——不是還原成某個預設值,是還原成當時實際的狀態。

難的地方在「原本的樣子」。你事先不知道使用者把燈調成幾趴、什麼色溫。所以不能寫死一個「正常場景」,要在執行的當下把現況拍下來。
Home Assistant 有一個動作專門做這件事:scene.create。
步驟 0:湊齊要用的實體
這篇會動到四樣東西,你家的名字一定不一樣,先查出來:
到 設定 → 工具 → 狀態,在「實體」欄位分別打 `light.`、`cover.`、`media_player.`,把你要用的記下來。
(「開發者工具」搬過兩次家:2026.2 移進「設定」底下,2026.8 改名叫「工具」。舊教學寫的側邊欄路徑現在找不到,不是你的 HA 壞了。)
本篇範例用的是:
- `light.living_room` — 客廳主燈
- `light.ambient` — 氛圍燈
- `cover.living_room_curtain` — 客廳窗簾
- `media_player.projector` — 投影機
沒有投影機也可以照做,把觸發器換成一個手動開關就好。建法:設定 → 裝置與服務 → 輔助元件 → 建立輔助元件 → 切換,名稱打 `movie mode`,建出來會是 `input_boolean.movie_mode`。下面會說明怎麼換。
步驟 1:先手動跑一次 scene.create,看它到底建出什麼
不要直接寫自動化。先到 設定 → 工具 → 動作,右上角切成 YAML 模式,貼上:
- action: scene.create
- data:
- scene_id: before_movie
- snapshot_entities:
- - light.living_room
- - light.ambient
- - cover.living_room_curtain
複製代碼
按執行動作。
你會看到畫面上出現綠色的「已成功執行動作」。
看到紅字 `extra keys not allowed @ data['scene_id']` 之類,代表 `scene_id` 寫成 `scene.before_movie` 了。建立時不加 `scene.` 前綴,使用時要加——這個不一致是這個功能最常見的打錯點。
看到紅字說找不到某個實體,代表名字打錯,回步驟 0 重查。
步驟 2:檢查它建出來的東西(這一步是整篇的關鍵)
到 設定 → 工具 → 狀態,實體欄位打 `scene.before_movie`。
你會看到這一列:
- 實體 狀態 屬性
- scene.before_movie unknown entity_id: light.living_room, light.ambient, ...
- friendly_name: before_movie
複製代碼
請特別看「狀態」那一欄:它是 `unknown`。
這不是壞掉。官方文件寫得很清楚:場景實體是無狀態的,它的 state 記的是「上一次被啟動的時間戳」。剛建好、還沒被啟動過,當然沒有時間戳,所以是 `unknown`。
為什麼這件事很重要
網路上(包括這篇文章的舊版本)很常看到這種「安全判斷」:
|
|