找回密碼
 立即註冊
惟家LINE群QRCODE
    查看: 2|回覆: 0

    Node-RED 入門:用拉線的方式做自動化

    [複製鏈接]

    !lvup!   100%

    363

    主題

    27

    回帖

    2200萬

    積分

    管理員

    積分
    22005752
    發表於 3 天前 | 顯示全部樓層 |閱讀模式
    HA 的 YAML 自動化寫到一個程度會遇到瓶頸:
    邏輯一複雜,看不懂自己在寫什麼。

    Node-RED 是另一條路 —— 把邏輯畫出來。



    它是什麼

    一個「用拖拉方式寫程式」的工具。


    • 每個方塊叫「節點(node)」,做一件事
    • 用線把節點連起來,資料從左流到右
    • 整組線叫「流程(flow)」


    跟 HA 自動化的對應
    1. HA 自動化          Node-RED
    2. --------------     -----------------
    3. triggers(觸發)   events: state 節點
    4. conditions(條件) switch 節點
    5. actions(動作)    call service 節點
    複製代碼

    什麼時候該用 Node-RED

    該用


    • 邏輯有很多分支(如果 A 而且 B,除非 C,但 D 的時候例外)
    • 需要複雜的時間控制(延遲、限流、防抖動)
    • 要串接外部服務(API、資料庫、Telegram)
    • 你看圖比看文字快


    不該用


    • 簡單的「A 發生就做 B」 —— YAML 三行搞定,何必開一個服務
    • 你已經寫 YAML 很順
    • 主機資源很緊 —— Node-RED 大概吃 200-400MB 記憶體


    我的建議:兩個都用。


    • 簡單的放 HA 的 YAML/UI
    • 複雜的放 Node-RED




    安裝

    HA OS / Supervised


    • 設定 → 附加元件 → 附加元件商店
    • 搜尋 Node-RED
    • 安裝 → 啟動 → 在側邊欄顯示


    設定裡至少改兩個
    1. credential_secret: 隨便一串長密碼
    2. http_node:
    3.   username: admin
    4.   password: 你的密碼
    複製代碼

    credential_secret 是用來加密你存在 Node-RED 裡的帳密的。
    沒設的話每次重啟會重新產生,你存的憑證就全丟了。

    Docker:官方有 nodered/node-red 的映像檔。
    記得掛載 /data 目錄,不然重建容器流程就沒了。

    連到 HA

    用附加元件的話通常會自動連。

    手動設定


    • 拉一個 events: state 節點進畫面
    • 雙擊它 → Server 旁邊的鉛筆
    • Base URL:http://homeassistant:8123
    • Access Token:去 HA 的個人資料頁最下面產生一個「長期存取權杖」


    權杖產生之後只會顯示一次,複製起來。



    最常用的六個節點

    一、events: state(監聽狀態變化)

    等同 HA 的 trigger。


    • Entity:要監聽哪個實體
    • If State:只有變成某個值才往下走
    • For:持續多久才觸發


    二、call service(呼叫服務)

    等同 HA 的 action。


    • Domain:light
    • Service:turn_on
    • Entity:light.客廳
    • Data:{"brightness_pct": 50}


    三、switch(分流)

    根據條件把訊息送到不同的出口。

    一個 switch 節點可以有好幾個出口,右邊會長出好幾個接點。

    四、change(改資料)

    修改訊息的內容。

    常用來設定 msg.payload 或者存變數

    五、delay(延遲 / 限流)

    兩個模式


    • Delay —— 等 N 秒再往下
    • Rate Limit —— 限制「每 N 秒最多通過一則」(防止洗頻)


    Rate Limit 超好用:感應器一直觸發的時候,
    用它擋住多餘的訊息。

    六、debug(看發生什麼)

    最重要的除錯工具。


    • 接在任何地方,右邊的 debug 面板就會顯示流過的資料
    • 卡住的時候,一個一個接 debug 看到哪裡斷了


    第一個流程:門開燈亮


    1. [events: state]  →  [switch]  →  [call service]
    2. 門磁                  是 open?       開燈
    複製代碼

    步驟


    • 拉一個 events: state,Entity 選門磁
    • 拉一個 call service,設成開燈
    • 把兩個連起來(從第一個的右邊圓點拉到第二個的左邊)
    • 在 events: state 的 If Stateon
    • 右上角按 Deploy


    Deploy 之後才會生效 —— 這是最多人忘記的一步。

    第二個流程:有人回家而且天黑才開燈
    1. [events: state]  →  [switch]  →  [call service]
    2. person.charles      太陽下山了?      開燈
    3. 變成 home
    複製代碼

    switch 節點的設定


    • Property:改成 msg.payload 以外的東西
    • $entities("sun.sun").state 取得太陽的狀態
    • 條件:== "below_horizon"


    這個寫法(JSONata)是 Node-RED 的查詢語法
    等同 HA 的 states('sun.sun')



    五個新手一定會踩的坑

    一、忘記按 Deploy

    改了沒按 Deploy = 沒有生效。

    右上角的按鈕變成紅色就是有未部署的變更

    二、流程沒有備份


    • Node-RED 的流程存在 /config/node-red/flows.json(附加元件)
    • HA 的完整備份會包含它
    • 也可以在 Node-RED 裡「匯出」成 JSON(選單 → Export)


    養成習慣:做完一個複雜流程就匯出一份。

    三、debug 節點忘記關

    太多 debug 節點會拖慢速度而且洗版。

    做完之後把它們停用(點節點上的小方塊)或刪掉。

    四、無限迴圈

    最經典的錯誤
    1. [監聽燈的狀態] → [開燈] → 燈狀態變了 → [監聽燈的狀態] → ...
    複製代碼

    解法


    • 在 events: state 設定裡勾「Ignore state change events」
    • 或者用 If State 限制只有特定變化才往下


    五、重啟之後流程行為不對


    • Node-RED 重啟時,events: state 節點可能會收到「初始狀態」
    • 在節點設定裡有 Output on Connect 的選項,
        不想要的話關掉


    HA 整合的專用節點

    Node-RED 的 HA 節點包還有這些好東西


    • current state —— 查某個實體現在的狀態(不是等它變)
    • get entities —— 一次抓一堆實體(例如「所有開著的燈」)
    • wait until —— 等到某個條件成立才往下
    • time —— 在特定時間觸發(等同 HA 的 time trigger)
    • sun —— 日出日落相關
    • trigger: state —— 比 events: state 更進階的觸發


    get entities 特別好用,例如「找出所有開著超過兩小時的燈」
    這種事,YAML 要寫一長串模板,Node-RED 一個節點就好。

    ---

    下一篇:Node-RED 的實用流程 ——
    五個直接可以拿來用的範例,包含匯出的 JSON。
    您需要登入後纔可以回帖 登入 | 立即註冊

    本版積分規則

    Archiver|手機版|惟家的智能論壇

    GMT+8, 2026-9-24 11:25 , Processed in 0.082198 second(s), 24 queries .

    快速回覆 返回頂部 返回列表