追蹤設備是否在家(以nmap追蹤IP)

追蹤設備是否在家,如果人總是攜帶此設備,像是手機,就可以想像成人是否在家。

一旦狀態改變,從偵測不到變成偵測到,就是一個回家的情境。

有一些偵測法,如藍牙掃描、人體感應器、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 ,打門時啟動一個,人回家時啟動一個,一旦兩個同時開啟,舊式人回家又打門的情境。