1
2

More than 1 year has passed since last update.

Dahua VTH / VTO + Asterisk + Homebridge でセキュアなインターホン環境を構築 Vol. 4

Posted at

あらすじ

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()
1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2