あらすじ
Dahua VTH / VTO + Asterisk + Homebridge でセキュアなを構築しようと考えていましたが、HomeBridgeプラグインでSIP双方向通信可能なものがみつからなかったため、Homekitは通知&録画(Homekit Secure Video化)機能のみもたせ、実際の通話はiPhoneにインストールしたSoftPhoneで実装することにしました。
Vol4にしてやっと設定のお話です。
構成イメージ(再掲)
上手くNAT超えができなかったので、外部用Asterisk(in AWS)と内部用Asterisk(in Home)に分割しました。
設定(Homebridge)
※ Homebridge と Homebridge UI がインストールされている前提です。
-
必要なプラグイン
- Homebridge Camera Ui
- Homebridge Dummy (GeoFenceが必要な方のみ)
-
Camera Uiの設定
admin:Dahua VTOの管理画面のID(通常変更不要)
Password:Dahua VTOの管理画面のパスワード
aaa.aaa.aaa.aaa:Dahua VTOのIPアドレス
ポイントは「"http": true」でHTTPサーバとして待ち受け、「"doorbell": true」でDoorbell化(HTTPサーバへのリクエストをトリガに通知出し&HomePodを鳴らすこともできる)
"http": {
"active": true,
"port": 19080,
"localhttp": false
},
"cameras": [
{
"name": "DahuaIntercom",
"motion": true,
"doorbell": true,
"switches": false,
"unbridge": false,
"hsv": true,
"prebuffering": true,
"prebufferLength": 4,
"hksvConfig": {
"source": "-i rtsp://admin:Password@aaa.aaa.aaa.aaa:554/cam/realmonitor?channel=1&subtype=1",
"audio": true
},
"videoConfig": {
"source": "-i rtsp://admin:Password@aaa.aaa.aaa.aaa:554/cam/realmonitor?channel=1&subtype=1",
"vcodec": "copy",
"acodec": "libfdk_aac",
"audio": true,
"subSource": "-i rtsp://admin:Password@aaa.aaa.aaa.aaa:554/cam/realmonitor?channel=1&subtype=1",
"stillImageSource": "-i rtsp://admin:Password@aaa.aaa.aaa.aaa:554/cam/realmonitor?channel=1&subtype=1"
},
"videoanalysis": {
"active": true
},
"motionTimeout": 15,
"smtp": {
"email": "DahuaIntercom"
},
"mqtt": {}
}
],
- DummySwitchの設定(GeoFenceが必要な方のみ):
{
"name": "Anyone IN",
"stateful": true,
"reverse": false,
"time": 1000,
"resettable": false,
"accessory": "DummySwitch"
}
- Home Appの設定(GeoFenceが必要な方のみ):
- 以下のオートメーションルールを設定します。
- 最後の人が家を出発したとき:"Anyone IN"をOFF
- 最初の人が家に到着したとき:"Anyone IN"をON
- 以下のオートメーションルールを設定します。
設定(Asterisk in Home)
- フラグファイルの書き出しスクリプト(GeoFenceが必要な方のみ):
- このファイルをcronで毎分実行するようにしてください。
- aaa.aaa.aaa.aaa: HomebridgeのIP(とポート)
- ID: HomebridgeのID
- Pass: HomebridgeのPassword
- [ItemID]: Homebridge内の"Anyone IN"のuniqueID
- http:// aaa.aaa.aaa.aaa:8080/swagger もしくは http:// aaa.aaa.aaa.aaa:8080/api/accessories から確認可能
#!/bin/bash
TOKEN=`curl -s -X 'POST' 'http://aaa.aaa.aaa.aaa:8080/api/auth/login' -H 'Content-Type: application/json' -d '{"username": "ID","password": "Pass"}'|jq -r '.access_token'`
VALUE=`curl -s -X 'GET' 'http://aaa.aaa.aaa.aaa:8080/api/accessories/[ItemID]' -H "Authorization: Bearer $TOKEN"|jq '.values.On'`
echo $VALUE > /usr/share/bin/status.txt
- extensions.conf
- 上で作成したフラグファイルから値を取得し、誰かが家に居ればDahua VTHのみ、誰も家に居なければiPhoneを鳴らすように設定しています。
- extentions内で直セルHomebrisgeのAPIを叩かないのは、HomebridgeのAPIの応答性が悪い(応答までに1-2秒かかる)ため
- CURLコマンドの箇所でDoorbell化したHomebridgeのCameraUiにリクエストを渡しています。これでHomekitからの通知とHSVによる録画が可能です。
[from-internal]
exten => 8002,1,Set(foo=${CURL(http://aaa.aaa.aaa.aaa:19080/doorbell?DahuaIntercom)})
exten => 8002,2,Set(INHOME=${FILE(/usr/share/bin/status.txt)})
exten => 8002,3,GotoIf($[${INHOME} = 0]?9999,1)
exten => 8002,4,GotoIf($[${INHOME} = 1]?9998,1)
exten => 9998,1,Dial(PJSIP/8002,30,r) ; 誰かが家にいれば8002(Dahua VTHのみ鳴らす)
same => n,Hangup()
exten => 9999,1,Dial(PJSIP/8002&PJSIP/299@aws,30,r) ; 誰も家にいなければAsterisk in AWSの299(家族のSoftphoneにつながってます)を鳴らす
same => n,Hangup()