最近常有人問要怎麼將HA中傳實體資料傳到Line通知
個人習慣都是用Function來達到需求
應用的方式也很簡單
先來個簡單的
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中我們可以查到文字訊息使用的的格式是
message = {
"type": "text",
"text": "這裡是要回應的文字"
}
要傳貼圖格式如下
message = {
"type": "sticker",
"packageId": "1",
"stickerId": "1"
}
參考資料
Line Messaging API 的各種訊息格式
Line 可用 Sticker 列表
msg.payload_line = { “message”: “宿舍門電池\n” + date2 + “\n宿舍門電池電量:” + DoorLockBattery + “%\n電池電量過低請盡快更換電池!!”};
-
msg.payload_line
是一個物件,我們將其定義為主要的資料物件。 - 在
msg.payload_line
物件中,我們設置了message
屬性,並將想要顯示的文字訊息放入其中。 - 訊息內容包括了 “宿舍門電池” 字樣、日期
date2
、宿舍門電池電量DoorLockBattery
和 “電池電量過低請盡快更換電池!!” 字樣。 - 最後,這個訊息可以在後續節點中被使用,例如顯示在介面上、發送到通知系統等等。
message 裡面套用我們要的文字訊息 以本範例來說 顯示的內容如下
以上為本次分享的內容
當然function應用的好可以完成很多的判斷
比如之前分享的
Aqara 系列門鎖進HA後的處理
分享 在NodeRed中使用function 來判斷當天是否為假日的2種方式
等等很多都是透過Function來達成我們要的
也希望更多人一起討論Function的應用