第 3 章

編輯器、工作區、Palette、側欄與 Deploy 概念

先學會讀畫面,再學會執行畫面。Node-RED 5.0.2 的 editor 是設計工具;只有 Deploy 才把變更交給執行環境。本章先巡覽,不變更正在運作的家庭自動化。

為何需要本章

打開 editor 後,最容易犯的錯是把「畫布上看得到」當成「runtime 正在執行」。你可以在 workspace 拖入節點、拉 wire、改名稱,這些都先是瀏覽器端的編輯狀態;按下 Deploy 後,runtime 才依選定 scope 套用。若現有走廊燈、夜間通知或溫控已由 Node-RED 執行,錯選 Full 可能讓與本次修改無關的節點也重新啟動。

本章的任務只有辨識 editor 各區域、開啟節點 Help、理解三個 Deploy 選項與建立操作前檢核。不匯入 flow、不修改 server config、不安裝 palette package,也不按 Deploy。下一章才會建立一條純 Inject → Change → Debug 的可控練習。

截圖安全:若你要製作筆記或求助截圖,先關閉 Debug 訊息、config details 與可能顯示 URL、entity ID、位置、通知內容的面板;完成取圖前不要按 Deploy。

核心觀念:設計面與執行面

動作發生在哪裡是否改變 runtime
切換 workspace tab、縮放、平移editor 視圖否
拖入節點、改屬性、連 wire未 Deploy 的 flow model尚未
查看 Information(info)/Help、搜尋 Paletteeditor UI否;但 Manage palette 安裝套件是另一種系統變更
按 Deployeditor 將完整 flow set 與 deployment type 送往 runtime是,依 Full/Modified Flows/Modified Nodes 決定重啟範圍
修改 Add-on options 並 restartHome Assistant Add-on 層是,範圍比 flow Deploy 更外層

Node-RED 5.0.2 editor 固定 locale 對三種部署顯示 Full、Modified Flows、Modified Nodes。內部 deployment type 分別是 full、flows、nodes。這些不是「儲存品質」等級,而是 runtime restart strategy;每種都會提交當前 flow 設定,差別在 runtime 如何套用。

不 Deploy 的 editor 巡覽

  1. 確認目前入口與版本脈絡。

    從 Add-on 的 OPEN WEB UI 進入。先確定你不是在另一套 Node-RED editor;本章畫面事實以 Node-RED 5.0.2 固定提交為準。

  2. 只用視線辨識四個主要區域。

    找到中央 workspace、左側 Palette、右側 sidebar,以及上方 header/Deploy 控制。不要拖節點,也不要開啟 Deploy 主按鈕。

  3. 巡覽 workspace tabs。

    切換現有 tab 但不要修改。若其中有家庭自動化,記住 tab 只是組織與 runtime flow scope 的一部分,不等於 Home Assistant Area。

  4. 搜尋核心節點並閱讀 Help。

    在 Palette 找 Inject、Change、Debug;選取後從 sidebar Help 讀節點說明。搜尋不等於安裝,切勿進入 Manage palette 新增 package。

  5. 展開 Deploy options 但不執行。

    只記錄 Full、Modified Flows、Modified Nodes 的名稱與描述,然後關閉選單。任何截圖都在 Deploy 前完成。

  6. 清理畫面資訊。

    離開前關閉可能含家庭資料的 Debug 訊息與 config details,不將真實 IDs、內部 URL 或 credentials 分享到公開筆記。

Workspace:Flow 的可視化工作面

中央 workspace 以 tabs 組織 flows。節點有輸入與輸出 ports,wire 將上游輸出連到下游輸入;訊息沿 wire 移動。節點放在左邊或右邊主要是閱讀布局,不會讓 runtime 自動形成時間順序;真正路徑由 wires 與節點行為決定。沒有接線的節點仍可能因自身事件來源而運作,因此不能只看有沒有上游 wire 判定副作用。

選取、編輯與 dirty 狀態

節點的 edit dialog 用來設定屬性;完成 dialog 只更新 editor model。Node-RED 會追蹤未部署變更,離開頁面時也有未 Deploy 變更確認邏輯。不要以瀏覽器重新整理當成可靠「復原」方法:若不確定曾改了什麼,先停止操作、記錄畫面並用 editor 的變更檢視或受控版本回復。

Tab 不是權限邊界

把「玄關照明」與「環境通知」分成 tabs 能改善可讀性,但不會隔離 credentials、網路或 Home Assistant 權限。共用 config nodes 也可能讓一個修改影響多個 flows。對 config node 的變更要特別檢查使用者清單與 deployment scope。

可讀布局

安全的家庭 flow 由左到右表達「來源 → 條件 → 動作/觀察」,節點名稱描述目的,例如「僅夜間」「確認燈目前為關」「測試輸出」。加 Comment 說明假設、失效安全與回復方式。視覺排列不是測試證據,Deploy 後仍須觀察每個分支。

Palette:可用節點目錄,不是能力保證

Palette 位於 editor 左側,依類別列出節點並提供搜尋。Node-RED 核心含 Inject、Debug、Complete、Catch、Status、Link、Comment,以及 Change、Switch、Template、Delay、Trigger、Function 等。本 Add-on 還預裝多項第三方 nodes 和 HA WebSocket 0.80.3;看見節點只表示 package 已註冊,不表示你的環境設定、設備或權限已完成。

節點本課用途安全提醒
Inject手動產生測試 msg下一章明確關閉自動 Inject;只按一次按鈕觸發
Change設定、變更、刪除或搬移訊息屬性確認資料型別與目標 property,不把 secrets 寫入 msg
Debug輸出選定訊息內容到 Debug sidebar可能暴露敏感 payload;排障後停用或移除
Action日後請 Home Assistant 執行 action有實體副作用;舊文稱 Call Service 僅作 legacy 辨識,本章不使用

Theme 只改外觀

Add-on 22.0.1 預裝 @node-red-contrib-themes/theme-collection 5.0.1,Add-on option 的預設是 theme: default,並以固定 schema 清單限制可選名稱。Theme 會改變 editor 顏色與視覺呈現,不是認證、權限或資料隔離。變更 Add-on theme 後要 restart App,而不是按 Deploy。

Manage palette 是供應鏈操作

搜尋 Palette 不會安裝套件,但透過 Manage palette 安裝會把第三方 server code 帶入執行環境。Add-on 的 npm_packages 又是另一條啟動安裝路徑。兩者都需要審查 package 名稱、維護狀態、固定版本、權限面與回復方式;不要只因名稱或圖示相似就安裝。

精確的三種 Deploy scope 與重啟影響

UI 名稱5.0.2 描述runtime 影響家庭場景
FullDeploys everything in the workspace完整部署,停止後重新啟動全部 nodes無關的計時器、事件訂閱、連線與照明 flow 都可能重啟;變更面最大
Modified FlowsOnly deploys flows that contain changed nodes重新啟動包含已變更 nodes 的 flows同一 tab 內未修改但正在運作的節點也可能重啟;確認該 flow 是否含長時間等待或設備控制
Modified NodesOnly deploys nodes that have changedruntime stop list 精確為 changed 與 removed nodes通常縮小干擾;config node 變更可能把引用它的 nodes 標記為 changed,因此仍須檢查相依關係

Node-RED 5.0.2 runtime 的行為是:Full 會停止全部 nodes 再啟動;Modified Flows 會停止已修改 flow 上全部 nodes 再啟動;Modified Nodes 的 stop list 僅由 diff.changed 與 diff.removed 組成。config node 變更可能把引用它的 nodes 標記為 changed,因此仍須檢查相依關係;但這不表示 linked nodes 會因連結本身被加入 Modified Nodes stop list。節點重新啟動可能重設記憶體狀態、重建訂閱或連線,Inject 若配置為啟動時自動送出也可能再次產生訊息。因此 production 家庭自動化不能用「scope 比較小」取代影響分析。

按下前的五項檢核

  1. 確認修改清單與部署目的,不把未知的 dirty 變更一起送出。
  2. 確認 scope,列出會停止/重啟的 flow、changed/removed node,以及可能因 config node 變更而被標記為 changed 的引用節點。
  3. 檢查 Inject 啟動觸發、Delay/Trigger 等等待中訊息、Action、HTTP、檔案和設備輸出。
  4. 準備觀測與回復方式;涉及家中照明時選非關鍵測試設備並安排可見時段。
  5. Deploy 後讀通知、Debug 與必要日誌;不要連續點擊,先等待結果。

故障排除

  • 找不到 Palette:確認左側是否收合、瀏覽器寬度與縮放;不要因此直接進 Manage palette 安裝同名套件。
  • 找不到 Debug 訊息:確認右側 sidebar 已開啟 Debug tab、對應 Debug node 是否啟用,以及變更是否已在受控情況 Deploy。前四章不要輸出 complete message。
  • Deploy 按鈕無法使用:可能沒有未部署變更或沒有 flows.write 權限。不要用重開認證或 direct port 方式繞過;先確認登入與 editor 狀態。
  • Deploy 出現 unknown/invalid/unused config 警告:停止部署,逐一選取問題節點並看 Information/Help;不要忽略警告來取得「成功」畫面。
  • 按 Deploy 後其他自動化重啟:記錄當時 scope。Full 影響全部,Modified Flows 影響含變更的 flows;Modified Nodes 的 stop list 只有 changed 與 removed nodes,但 config node 變更可能把引用節點標記為 changed。
  • 畫面和網路文章不同:以 Node-RED 5.0.2 固定 editor locale 與原始碼為準;主分支或其他版本的側欄排列不能用來宣稱本版 UI。

固定來源

常見問題

把節點拖到 workspace 就開始執行了嗎?
不會。那是尚未部署的 editor 變更;只有 Deploy 後 runtime 才依 scope 套用。
Modified Nodes 是否完全不影響其他節點?
它的 runtime stop list 精確為 changed 與 removed nodes,不會另外因 links 納入節點。不過 config node 變更可能把引用它的 nodes 標記為 changed;部署前仍要檢查這些引用關係。
為什麼修改 Add-on theme 後 Deploy 沒有效果?
theme 是 Add-on configuration;固定 DOCS 要求設定變更後 restart Add-on。Deploy 只處理 flows。
Deploy 清單混入別人的草稿變更時怎麼辦?
停止部署,先辨識每項差異的擁有者與用途,分離或復原不屬於本次工作的變更。不要改選 Full 來略過審查,也不要假設未選取的分頁不會受影響。
Palette 看到節點是否表示可以安全使用?
只代表 package 已註冊。你仍須閱讀 Help、確認設定與權限,並為有網路、檔案、Action 或硬體副作用的節點設計測試與回復。