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

    Node-RED 五個實用流程:直接複製貼上就能用

    [複製鏈接]

    !lvup!   100%

    363

    主題

    27

    回帖

    2200萬

    積分

    管理員

    積分
    22005764
    發表於 3 天前 | 顯示全部樓層 |閱讀模式
    上一篇講了基本觀念,這篇直接給五個做好的流程。

    Node-RED 的流程可以用 JSON 匯入 ——
    複製下面的程式碼,在 Node-RED 按 選單 → Import,貼上,按 Import。



    匯入之後一定要做的兩件事


    • 把實體 ID 改成你自己的(我用的是 light.客廳 這種,你家一定不一樣)
    • 按 Deploy


    流程一:洗衣機洗好通知(含防抖動)

    這是最經典的入門專案。

    邏輯
    1. 功率感測器 → 功率 > 10W 持續 2 分鐘 → 記錄「開始洗了」
    2. 功率感測器 → 功率 < 5W 持續 5 分鐘 → 如果之前有開始洗 → 通知
    複製代碼

    為什麼要「持續 N 分鐘」


    • 洗衣機中途會有低功率階段(泡水、暫停)
    • 不加時間判斷會在洗到一半就通知你


    用到的節點


    • events: state —— 監聽功率感測器
    • switch —— 判斷功率高低
    • trigger —— 「持續 N 分鐘」的關鍵,設成「等待 X 分鐘,期間收到新訊息就重新計時」
    • call service —— 發通知


    trigger 節點的設定
    1. Send:        nothing
    2. then:        wait for  5  minutes
    3. then send:   the message
    4. Extra:       ☑ 若收到新訊息則重設計時器
    複製代碼

    這個節點是 Node-RED 最有價值的東西之一 ——
    HA 的 YAML 要做同樣的事要寫一長串。



    流程二:多重條件的燈光控制

    需求


    • 有人進客廳
    • 而且天黑了
    • 而且沒有在看電影(電視開著+燈是暗的)
    • 而且不是深夜(深夜的話只開小燈)


    這種邏輯用 YAML 寫會變成一團 template。

    Node-RED 的做法
    1. [人體感應] → [switch: 天黑?] → [switch: 在看電影?] → [switch: 深夜?]
    2.                                                             ↓ 是 → [開小燈 10%]
    3.                                                             ↓ 否 → [開正常亮度]
    複製代碼

    一眼就看得懂,而且改起來很簡單。

    switch 節點寫條件的方式


    • Property$entities("sun.sun").state
    • 比對 == below_horizon
    • 型別選 J: expression(JSONata)


    常用的 JSONata 查詢
    1. $entities("light.客廳").state              取狀態
    2. $entities("light.客廳").attributes.brightness  取屬性
    3. $entities("sensor.溫度").state * 1          轉成數字(重要!)
    複製代碼

    注意 * 1HA 的狀態全部是字串
    「30」比「9」小(字串比較)—— 這是超常見的坑。

    流程三:每日摘要通知

    每天晚上九點,發一則訊息給手機
    1. 今天:
    2.   最高溫 31 度、最低 25 度
    3.   用電 12.4 度
    4.   忘記關的燈:走道燈(開了 6 小時)
    5.   明天垃圾車:可回收
    複製代碼



    用到的節點


    • inject —— 排程觸發,可以設「每天 21:00」
    • get entities —— 一次抓一批實體
    • function —— 組出訊息文字
    • call service —— notify.mobile_app_xxx


    get entities 的威力

    設定
    1. Type:      Get Entities
    2. Search:     entity_id contains "light."
    3. Filter:     state  ==  on
    4. Output:     Array
    複製代碼

    這樣一個節點就抓到「所有開著的燈」
    YAML 要寫模板迴圈。

    function 節點(寫一點 JavaScript)
    1. const lights = msg.payload;
    2. const names = lights.map(e => e.attributes.friendly_name).join('、');
    3. msg.payload = {
    4.   message: names.length ? `還開著的燈:${names}` : '所有燈都關了',
    5.   title: '每日摘要'
    6. };
    7. return msg;
    複製代碼

    function 節點是 Node-RED 的逃生門 ——
    拉線做不到的,寫幾行 JavaScript 就好。

    流程四:智慧型通知去重

    問題:門磁一直開開關關,通知洗版。

    解法:用 delay 節點的 Rate Limit 模式
    1. Action:  Rate Limit
    2. Rate:    1 msg per 10 minutes
    3. ☑ drop intermediate messages
    複製代碼

    十分鐘內只會通過一則,其他的丟掉。

    進階版:同一個裝置去重,不同裝置各自計算
    1. ☑ 依 msg.topic 分開計算
    複製代碼

    然後在前面用 change 節點把 msg.topic 設成實體 ID

    這樣每個門磁各自有自己的十分鐘冷卻。



    流程五:外部 API 串接(空氣品質)

    需求:抓環境部的空品資料,超標就通知。
    1. [inject 每小時] → [http request] → [json] → [function 找出你家附近的站]
    2.   → [switch: AQI > 100?] → [call service 通知 + 開空氣清淨機]
    複製代碼

    http request 節點設定


    • Method:GET
    • URL:資料來源的網址
    • Return:a parsed JSON object


    這種事 HA 也做得到(用 RESTful sensor),
    Node-RED 的優勢是「拿到資料之後的處理」比較好寫

    Node-RED 的實用技巧

    一、用「群組」整理畫面


    • 框選幾個節點 → 右鍵 → Group
    • 可以命名、可以上色
    • 流程多了之後這個很重要


    二、用「link」節點跨分頁


    • link outlink in 可以把訊息送到別的分頁
    • 不用拉一條超長的線
    • 適合做「共用的通知流程」


    三、用「subflow」做可重複使用的元件


    • 框選 → 右鍵 → Selection to Subflow
    • 做成一個可以重複拉出來用的方塊
    • 例如「標準的通知流程」(含去重、含分時段靜音)


    四、狀態列顯示

    在 function 節點裡
    1. node.status({fill:"green", shape:"dot", text:"上次觸發 " + new Date().toLocaleTimeString()});
    複製代碼

    節點下方會顯示一行小字 ——
    不用開 debug 就知道流程有沒有在跑。

    五、catch 節點


    • 拉一個 catch 節點
    • 任何節點出錯都會送到這裡
    • 接一個通知 → 流程壞掉你會知道


    這個很重要 —— 沒有 catch 的話,流程默默壞掉你不會發現。

    效能注意事項


    • events: state 監聽 all entities 會很耗 —— 一定要指定實體
    • debug 節點開太多會拖慢
    • function 節點裡不要寫無限迴圈(會卡死整個 Node-RED)
    • 流程超過一百個節點就該拆分頁


    ---

    下一篇:HA 的進階自動化寫法 ——
    choose、repeat、parallel、變數,把一堆自動化合併成一個。
    您需要登入後纔可以回帖 登入 | 立即註冊

    本版積分規則

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

    GMT+8, 2026-9-24 13:16 , Processed in 0.085510 second(s), 23 queries .

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