追蹤設備是否在家,如果人總是攜帶此設備,像是手機,就可以想像成人是否在家。
一旦狀態改變,從偵測不到變成偵測到,就是一個回家的情境。
有一些偵測法,如藍牙掃描、人體感應器、IP掃描或是門窗感應器等等,都是可以當成回家的指標,而藍牙與IP掃描是可以區分是誰的設備,能做到對應不同人回家的指令。
在 Homeassistant ,有一個專門用來追蹤設備內建整合:Device Tracker。而這次要用的nmap也在其中,而這個內建整合也可使用藍牙掃描。
回到正題,IP掃描是一個區域網路內的掃描,而於WiFI訊號比藍牙更強更穩定,所以一旦在家,就不容易失聯而造成誤判情形。
設備的IP需要是固定的
要固定設備IP有兩種方式,一種是DHCP Server去用MAC綁定IP,第二種是設備設定靜態IP。如果使用DHCP Server,建議把MAC隨機化關掉,以免5GHz跟2.4GHz有不同的Name,到時產生兩組隨機MAC,然後就被當成兩種裝置。
以下要簡單的指令,使用nmap去做到追蹤個人設備是否在家。
/config/configuration.yaml
device_tracker: !include device_tracker.yaml #新增此行
/config/device_tracker.yaml #第一次需要手動新增該檔案
- platform: nmap_tracker
hosts: [DeviceIPaddress]
interval_seconds: 15 # seconds
consider_home: 210 # seconds
home_interval: 1 # minutes
/config/known_devices.yaml #第一次需要手動新增該檔案
[DeviceName]:
name: [DeviceName]
mac: [DeviceMACaddress]
track: true
nmap是一個網路檢測工具,預設指令是會去檢測該IP位置最常用的100個Port是否開放,如果有一個Port開放,就會判定在家。可以想像成一旦設備離家,這是nmap去測試設備IP那100個Port就會全數不通。
以上設定完後,重新啟動HA伺服器,就能看到一個實體名稱為 device_tracker.[DeviceName] 的設備,狀態只有兩種:「home」跟「not_home」。如果是回家,狀態就會從 not_home 變成 home 。
以下是「回家」自動化的觸發條件寫法:
platform: state
entity_id: device_tracker.[DeviceName]
to: home
from: not_home
不過這樣的寫法會有一點狀況,因為無線訊號可以傳出家門,所以,你在家門外時,還沒打開門,就已經連入家中Wi-Fi,然後nmap就已經偵測到了。
對於進門才能觸發的事件,像是用語音表達進門歡迎,就會特別吃重時機。總得要打開門,人進來才能播放語音吧。
這情境可以使用 timer ,打門時啟動一個,人回家時啟動一個,一旦兩個同時開啟,舊式人回家又打門的情境。