Node-RED 進階(一):Function 的簡單應用

作者:紅軍

最近常有人問要怎麼將HA中傳實體資料傳到Line通知 個人習慣都是用Function來達到需求 應用的方式也很簡單 先來個簡單的

bash
var TimeNow = new Date();
var yyyy = TimeNow.getFullYear()
var MM = (TimeNow.getMonth() + 1 < 10 ? '0' : '') + (TimeNow.getMonth() + 1);
var dd = (TimeNow.getDate() < 10 ? '0' : '') + TimeNow.getDate();
var h = (TimeNow.getHours() < 10 ? '0' : '') + TimeNow.getHours();
var m = (TimeNow.getMinutes() < 10 ? '0' : '') + TimeNow.getMinutes();
var s = (TimeNow.getSeconds() < 10 ? '0' : '') + TimeNow.getSeconds();
var ms = (TimeNow.getMilliseconds() < 10 ? '0' : '') + TimeNow.getMilliseconds();
var date = '_' + yyyy + '_' + MM + '_' + dd + '_' + h + '_' + m + '_' + s;
var date2 = yyyy + '/' + MM + '/' + dd + ' ' + h + ':' + m + ':' + s + '.' + ms;
const globalHomeAssistant = global.get('homeassistant');
var DoorLockBattery = globalHomeAssistant.homeAssistant.states["sensor.0x54ef4410007b0240_battery"].state;
msg.payload_line = { "message": "宿舍門電池\n" + date2 + "\n宿舍門電池電量:" + DoorLockBattery + "%\n電池電量過低請盡快更換電池!!"};
return msg;

從上面的json中可以看到 一開始的前面8行用 var去定義現在的時間以及參數 var date date2 這兩行則是定義要顯示的格式 date 顯示出來的時間格式為 _yyyy_MM_dd_h_m_s date2 為 yyyy/MM/dd h: m: s.ms

const globalHomeAssistant = global.get(‘homeassistant’); 這行則是將HA中的資料載入NodeRed方便我們等下要單獨將實體資料抓出來使用

var DoorLockBattery = globalHomeAssistant.homeAssistant.states[“sensor.0x54ef4410007b0240_battery”].state; 這行則是將 HA裡面實體名稱為 sensor.0x54ef4410007b0240_battery 的資料抓出來 並定義該資料名稱為 DoorLockBattery

在Line api中我們可以查到文字訊息使用的的格式是

bash
message = {
  "type": "text",
  "text": "這裡是要回應的文字"
}

要傳貼圖格式如下

bash
message = {
  "type": "sticker",
  "packageId": "1",
  "stickerId": "1"
}

msg.payload_line = { “message”: “宿舍門電池\n” + date2 + “\n宿舍門電池電量:” + DoorLockBattery + “%\n電池電量過低請盡快更換電池!!”};

msg.payload_line 是一個物件,我們將其定義為主要的資料物件。 在 msg.payload_line 物件中,我們設置了 message 屬性,並將想要顯示的文字訊息放入其中。 訊息內容包括了 “宿舍門電池” 字樣、日期 date2 、宿舍門電池電量 DoorLockBattery 和 “電池電量過低請盡快更換電池!!” 字樣。 最後,這個訊息可以在後續節點中被使用,例如顯示在介面上、發送到通知系統等等。 message 裡面套用我們要的文字訊息 以本範例來說 顯示的內容如下

Node-RED 進階 Function 應用教學截圖 01

以上為本次分享的內容 當然function應用的好可以完成很多的判斷 比如之前分享的

Aqara 系列門鎖進HA後的處理分享 在NodeRed中使用function 來判斷當天是否為假日的2種方式

等等很多都是透過Function來達成我們要的 也希望更多人一起討論Function的應用

設定畫面可能因版本與設備不同而有差異。想交流使用經驗,歡迎加入惟家 LINE 社群;社群以使用者互助為主,非官方一對一技術支援。

Node-RED 進階(一):Function 的簡單應用 | 惟家 JustPlus