Aqara 系列門鎖進HA後的處理

前陣子裝了Aqara D200
一直覺得要想辦法加入HA做些應用才可以
經過 洋蔥大指導後成功將M2刷機
並順利讓門鎖狀態進入HA
於是在NR弄了一個人臉辨識的函數
今天分享給大家個人的用法

首先需要參考洋蔥大的文章進行網關刷機
詳情請參閱洋蔥大的GitHub
Aqara M1S M2 韌體
AqaraGateway

刷完機後請先在HACS安裝 AqaraGateway
rep請自行添加AqaraGateway

安裝完重開就會抓到你的網關 直接加入即可
如果沒有刷過只會顯示網關名稱
有刷過就可以抓到裝置跟實體
image
再來請到助手新增一個虛擬開關


個人是用D200內部開門 依照你自己的需求去設定

以上準備工作完成後我們就可以來到NodeRed進行設定了
Function內容如下

//從HA取得門鎖Key ID及內部開門虛擬開關狀態
const ha = global.get('homeassistant').homeAssistant;
const InSide = ha.states["內部開門虛擬開關"].state;
const keyID = ha.states["門鎖Key ID實體"].state;

//人員KeyID及開門方式設定
const knownIDs = {
    "HomeKeyID": { name: "HomeKey", type: "homekey" },
    "ID1": { name: "User1", type: "face" },
    "ID2": { name: "User1", type: "pass" },
    "ID3": { name: "User2", type: "face" },
    "ID4": { name: "User2", type: "pass" },
    "ID5": { name: "User3", type: "face" },
    "ID6": { name: "User3", type: "pass" }
};

//歡迎詞
const welcomeMessages = [
    "歡迎回家,name!",
    "辛苦了,name!歡迎回家!"
];

//亂數語音模式
const voices = [
    "zh-TW-HsiaoChenNeural",
    "zh-CN-XiaoxiaoNeural"
];

if (InSide === "on") {
    return null;
}

//確認開門方式
const id = knownIDs[keyID];
const name = id ? id.name : "未知人員";
const type = id ? id.type : "";
let lineMsg = "";
switch (type) {
    case "homekey":
        lineMsg = "用HomeKey開門";
        break;
    case "face":
        lineMsg = "用人臉辨識開門";
        break;
    case "finger":
        lineMsg = "用指紋辨識開門";
        break;
    case "pass":
        lineMsg = "用密碼開門";
        break;
    case "nfc":
        lineMsg = "用NFC卡片開門";
        break;
    default:
        lineMsg = "注意未知人員開門";
        break;
}

//Line訊息及語音播放處理
const getRandomItem = (array) => array[Math.floor(Math.random() * array.length)];
const randomMessage = getRandomItem(welcomeMessages).replace("name", knownIDs[keyID]?.name || "");
const randomVoice = getRandomItem(voices);

return {
    payload_line: { message: `${name}${lineMsg}` },
    payload_tts: {
        message: randomMessage,
        cache: true,
        options: {
            volume: "+100%",
            voice: randomVoice,
            pitch: "+0Hz",
            rate: "+0%"
        }
    }
};

因我自己TTS是用的是edge
如果你要用自己的請修改成你的方式
或者參考這篇去安裝設定edge tts
Edge TTS Node-Red 亂數語音+亂數訊息分享

內部開門虛擬開關 請填寫剛剛在助手新增的虛擬開關ID
門鎖Key ID實體請填寫你門鎖在HA的實體ID

人員KeyID 請在門鎖狀態這邊確認 每個人都有不同的ID

開門方式用type區分 homekey,face,finger,pass,nfc
依照你登錄門鎖的時候去區分type

function大致上就這些需要注意跟自行修改

整體flow大概這樣設定


因有個資就不po完整的flow了

以下為各節點設定截圖
門狀態

switch 設定

發送Line通知

HomePod 音量設定

HomePod TTS設定

D200內部開門on off


以上為本次分享
有問題可在群內詢問

2個讚

您好,請問我可以不刷機,透過HA控制homekit嗎?
例如某個人到家,開啟某個燈~

因為現在他homekit功能,只能開鎖跟鎖上,他無法分辨是回家還是出門
感謝您

沒刷幾
沒辦法進HA就沒辦法知道是誰透過什麼方式開門
HK只有簡單的HomeKey也不能知道是誰開門