本篇背景是要利用eps8622觸發人體感應器,並將訊號送入HomeBridge,達成動作偵測。
環境:
- 利用docker安裝的HomeBridge一個
- PHP伺服器一個eps8622
- 紅外線感應器一個。
主要流程為:
ESP8266偵測到動作—>觸發http服務—>touch對應檔案—>docker判斷對應檔案異動—>觸發sensor服務
HomeBridge部分會利用到homebridge-better-filesensor這個插件,他的原理是偵測一個對應的檔案是否被異動,來當作觸發條件,因此這邊的作法是:
1.設定一個sensor對應檔案,此檔案直接對應到實體主機中的檔案。
2.eps8622偵測到對應人體訊號時異動該檔案,這樣插件就會偵測到檔案異動並觸發HomeBridge動作感應器。
–開始–
HomeBridge端
1.將docker內目錄對應到實體目錄,因後面要使用HTTP的方式觸發檔案異動,因此將目錄對應到主機網頁目錄
docker 實體主機
/var/www/html /mnt/sensor2
2.搜尋homebridge-better-filesensor 並安裝。
3.設定一個玄關動作感應器,且對應檔案為/mnt/sensor2/motion1.txt:
{
"accessory": "FileSensor",
"name": "玄關動作感應器",
"path": "/mnt/sensor2/motion1.txt",
"window_seconds": "5",
"inverse": false,
"sensor_type": "m"
}
eps8622觸發服務
建立一個PHP檔,這裡叫做filesensor.php,只需寫入以下短短程式
<?php
$typ = $_GET['typ'];
$file = __DIR__ .'/'.$typ.'.txt';
echo $file;
touch($file);
?>
當ESP8266偵測到人體活動時,只要觸發http://url/filesensor.php?typ=motion1
這樣filesensor.php就會執行touch /var/www/html/motion1.txt,
此時docker內/mnt/sensor2/motion1.txt也會異動,進而觸發sensor元件。
寫在最後
因HomeBridge是利用docker安裝,因此檔案管理需特別處理,原本一開始是另外寫一隻程式去偵測實體檔案是否有異動,再去docker中觸發對應檔案。但這樣會有以下缺點:
- 需要一直監視特定檔案是否異動。
- 需多維護一隻監控程式,風險加大。
- docker內檔案異動時間與實體檔案有時間差,造成人可能已經離開了才觸發對應服務。
因此最後想到不如將實體目錄掛進docker中,這樣不僅不用一直掃描檔案,而且可同步觸發sensor。
最後,這個方式任何homebirdge中利用file作處理的感應器都可如法炮製,將對應目錄連結至實體目錄,並將所需檔案產生至該目錄,這樣docker中就可同步取得所需資料。