2.6. ONVIF対応用ノード

2.6.1. ice onvif discovery

自動的に発見したカメラのオブジェクトIDなどの情報を、 以下のような形式でNode-REDフロー上に出力するノードです。

{
    payload : {
        type : "onvif_discovery",
        object_id : <オブジェクトID>,
        camera : {
            hostname : <IPアドレス>,
            port : <ポート番号>,
            device_information : <device_information>,
            stream_uri : <stream_uri>,
            capabilities : <capabilities>,
            profiles : <profiles>
        }
    }
}

ice onvif discoveryノードはカメラの情報をJSON形式で取得し、 キー名に含まれる「.」を「__」に、 キー名の先頭が「$」である場合「_$」に変換し、出力します。

2.6.1.1. 設定項目

ice onvif discoveryには以下の設定項目があります。

Discovery
カメラの自動発見設定名を指定します。必須項目です。
Name
ノードの名前です。ここで設定した値がNode-REDのGUIエディタ上で表示されます。

2.6.2. ice onvif pipe

入力として与えられたメッセージと設定項目で指定したテンプレートをもとにSOAPメッセージを作成し、 カメラに対して送信するノードです。

ice onvif pipeは以下の形式のメッセージを入力として受け付けます。

{
  ...,
  payload:{
    type: “onvif_pipe”,
    object_id: <SOAPメッセージを送信するカメラのオブジェクトID>,
    onvif_operation: {
      <プロパティ名> : <設定値>,
      ...
    }
  }
}

また、ice backend inから出力される以下の形式のメッセージも受け付けます。

{
  ...,
  ice_params:{
    object_id: <オブジェクトID>,
    ...
  },
  payload:{
    type: “onvif_pipe”,
    onvif_operation: {
      <プロパティ名> : <設定値>,
      ...
    }
  }
}

payload.object_idとice_params.object_idが同じメッセージ内に存在する場合、 ice_params.object_idに設定されている値を優先します。

上記以外のフォーマットのメッセージが入力された場合、 エラーが出力され、SOAPメッセージの作成・送信は行われません。

object_idはice-onvif-discovery-configによって採番される、カメラごとにユニークなIDとなります。 object_idが間違っていた場合(設定項目のCamera Managerで指定したice-onvif-discovery-configノードで管理されていない場合)、 エラーが出力されSOAPメッセージの作成・送信は行われません。

このノードはカメラからSOAPのレスポンスが返却された場合以下のような形式でSOAPメッセージのレスポンスをNode-REDフロー上に出力します。 レスポンスメッセージの内容から、送信したONVIF処理が失敗していた場合にはsuccessプロパティはfalseとなります。 この場合err_msgプロパティは出力メッセージに含まれません。

また、カメラがネットワークの切断や故障等によって 到達できなかったりリクエストを処理できない場合にはエラー出力を行い、 successプロパティをfalseとして、err_msgプロパティにエラーメッセージを格納して出力を送信します。 この場合、onvif_outプロパティは出力メッセージに含まれません

{
    object_id: <オブジェクトID>,
    operation_name: <`Operation Name`プロパティで設定した値>,
    success: <ONVIFリクエストが成功したかどうか>,
    onvif_out: {
        <SOAPメッセージのレスポンスをJSONに変換した内容>
    },
    err_msg: <カメラとの接続ミス等のエラーメッセージ>
}

2.6.2.1. 設定項目

ice onvif pipeには以下の設定項目があります。

Camera Manager
カメラを管理している自動発見設定(ice-onvif-discovery-configノード)を指定します。 ここで指定したノードで発見管理されているカメラに対してのみメッセージを送信できます。 必須項目です。
XML Filepath
使用するONVIFメッセージのテンプレート(XML形式)のファイルパスをフルパスで指定します。 相対パスでの指定はできません。 ファイルパスに誤りがある場合はノードのデプロイ時にエラーが出力されます。 この場合、ノードへの入力は全て破棄され、SOAPメッセージの送信は行いません。 また、テンプレートの構文にエラーがある場合にはエラー出力を行い、SOAPメッセージの送信は行いません。
ONVIF Service Name
使用するONVIF Functionを提供しているONVIFのサービス名を入力します。必須項目です。 サービス名には以下などが記入できます。 カメラが対応していないサービスであった場合、すべてdeviceサービスに対するSOAPメッセージとして処理します。 送信するSOAPメッセージがdeviceサービスに対応したものではなかった場合、 本ノードはカメラからのONVIFエラーメッセージをエラー出力に出力し、Node-REDフロー上にメッセージは出力しません。
  • Device (deviceも可)

  • Media (mediaも可)

  • PTZ (ptzも可)

  • Events (eventsも可)

    正式なサービスの一覧及びサービス名ごとの使用できるONVIFの機能・設定項目については、 ONVIFの公式ドキュメントのページで、 各xxxx.wsdlのリンク先を参照ください。 ページ上部にあるhttp://www.onvif.org/ver10/サービス名/wsdlに記載れているサービス名が使用可能です。

Operation Name
操作の名前を設定します。 ここで設定した値がSOAPメッセージのレスポンスと共に出力されます。 省略された場合、出力のoperation_nameが空の文字列となります。
Name
ノードの名前です。ここで設定した値がNode-REDのGUIエディタ上で表示されます。

2.6.2.2. 使用方法

本ノードを使用するためには、使用したいONVIF機能に対応したXMLテンプレートを作成し、 ice-onvif-discovery-configノードでカメラを自動発見できる設定をする必要があります。 テンプレートについての詳細は次項を、ice-onvif-discovery-configノードの設定については該当項目を参照してください。

また、カメラに対してONVIF操作をするためには自動採番されるカメラのオブジェクトIDを知る必要があります。 オブジェクトIDはice-onvif-discoveryの出力やICEバックエンドにregisterされた情報から知ることができます。

ice-onvif-discoveryノードと結線して発見時にONVIF操作を行うか、 ice backend inノードと結線してバックエンドからの命令でONVFI操作を実行することが可能です。

2.6.2.3. XMLテンプレートとプロパティ名について

XMLテンプレートにはONVIF仕様のSOAPメッセージの<Body></Body>タグで囲われた部分の XMLを記載する必要があります。 XMLテンプレートにはMustacheで利用可能な構文を使用することが可能です。

テンプレート内の{{<プロパティ名>}}で表記される文字列が、 各テンプレートを使用する際に設定可能なプロパティ名となります。 入力メッセージのpayload.onvif_operation.<プロパティ名>に値を設定し、 ice onvif pipeノードに入力することで、 ice onvif pipeノードはテンプレートに設定値を挿入してSOAPメッセージを作成し、 カメラに送信します。

テンプレートにないプロパティがメッセージ内に設定されていた場合、 そのプロパティは無視されます。 また、テンプレート内のプロパティが入力メッセージ内に規定されていなかった場合、 <Tag>{{property}}</Tag><Tag></Tag>となるように、プロパティが空文字列となります。

プロパティには設定が必須なものがあります。 (どのプロパティが必須かはONVIFの仕様に従います。) 必須であるプロパティに値を設定しなかった場合、 カメラに対してSOAPメッセージを送信しても正しく設定が変更されない場合があります。

ice onvif pipeノードのXML Filepathプロパティに指定できるテンプレート のサンプルとして、以下を用意しています。

  • AddPTZConfiguration.xml
    • 既存のメディアプロファイルに対してPTZ設定を追加するためのテンプレートです。
    • Service Nameはmediaを指定してください。
  • CreateUsers.xml
    • ユーザを作成するためのテンプレートです。
    • Service Nameはdeviceを指定してください。
  • GetDNS.xml
    • DNS設定を取得するためのテンプレートです。
    • Service Nameはdeviceを指定してください。
  • GetNetworkInterfaces.xml
    • カメラのネットワークインタフェース設定を取得するためのテンプレートです。
    • Service Nameはdeviceを指定してください。
  • GetVideoEncoderConfiguration.xml
    • ビデオエンコーダ設定を取得するためのテンプレートです。
    • Service Nameはmediaを指定してください。
  • RemovePTZConfiguration.xml
    • 既存のメディアプロファイルに登録されているPTZ設定を削除するためのテンプレートです。
    • Service Nameはmediaを指定してください。
  • SetDNS.xml
    • DNS設定を変更するためのテンプレートです。
    • Service Nameはdeviceを指定してください。
  • SetNetworkInterfaces_ipv4.xml
    • カメラのネットワークインタフェース設定を変更するためのテンプレートです。IPV4アドレスの設定のみ対応しています。
    • Service Nameはdeviceを指定してください。
  • SetNetworkProtocols.xml
    • ネットワークプロトコルを変更するためのテンプレートです。
    • Service Nameはdeviceを指定してください。
  • SetNTP.xml
    • NTPサーバの設定変更を行うためのテンプレートです。
    • Service Nameはdeviceを指定してください。
  • SetSystemDateAndTime.xml
    • カメラの日付、時間を変更するためのテンプレートです。
    • Service Nameはdeviceを指定してください。
  • SetUser.xml
    • ユーザ設定を変更するためのテンプレートです。
    • Service Nameはdeviceを指定してください。
  • SetVideoEncoderConfiguration.xml
    • ビデオエンコーダ設定を変更するためのテンプレートです。
    • Service Nameはmediaを指定してください。

各サンプルのレスポンスでどのようなデータが返却されるかは、 ONVIFの公式ドキュメントから、 サービス名.wsdlのリンク先に記載されている各機能のoutputの項をご確認ください。

2.6.3. ノード共通設定

2.6.3.1. 自動発見設定(ice-onvif-discovery-config)

ice onvif discoveryノードのDiscoveryプロパティ及び ice onvif pipeノードCamera Managerプロパティで共通して使用される、 カメラの接続先情報の設定を行うためのノードです。

設定は ice onvif discoveryノード、 ice onvif pipeノードの間で共有することができます。

ice-onvif-discovery-configはNode-REDフロー上に単体で設置できるノードではありません。 ONVIFアクチュエーションノードのDiscoveryプロパティ又はCamera Managerプロパティから 設定値を入力することで使用できるノードです。

2.6.3.1.1. 設定項目

ice-discovery-configには以下の設定項目があります。

Name
ノードの名前です。ここで設定した値がONVIFアクチュエーションノードのDiscoveryプロパティに表示されます。 必須項目です。
User Name
カメラへの接続ユーザ名を指定します。 ここで設定した値は他の設定項目の値とは別に保存されるため、 Node-REDフローを外部にエクスポートしたときには含まれません。
Password
カメラへの接続パスワードを指定します。こせ設定値は伏字で表示されます。 ここで設定した値は他の設定項目の値とは別に保存されるため、 Node-REDフローを外部にエクスポートしたときには含まれません。
Data Type
カメラが送信するデータのタイプを指定します。必須項目です。
Connection Timeout
カメラに対して設定変更メッセージやPTZ制御メッセージを送信する際のタイムアウト時間をミリ秒で指定します。 規定値は120000です。
Device
カメラを発見する際に使用するネットワークインタフェースを指定します。 指定がない場合は、eth0が適用されます。
Discovery TImeout
サブネットワーク上にカメラ発見メッセージを送信した後、カメラからの応答を待つ時間をミリ秒で指定します。 規定値は5000です。
Interval
カメラ発見メッセージを送信し、発見・管理処理を行ってから、次にカメラ発見メッセージを送信するまでの間隔をミリ秒で指定します。 規定値は300000です。