現在、いくつかのテストカメラ(すべてOnvif準拠)でリレー出力の状態を切り替えようとしています。 Hikvision PTZカメラのリレー出力のリストを取得しようとすると、混乱が始まります。私は正常にリレー出力を取得することができます(これには1つしかありません)、RelayLogicalStateを要求します。Onvifプロトコルを使用してリレー出力の状態を切り替える方法
私は 'SetRelayOutputState'を使用してリレー出力を切り替えます。そのパラメータは、切り替えるリレー出力のトークンと 'RelayLogicalState'です。リレー出力は1つしかないので、私はそのトークンを送ることができます。 'RelayLogicalState'はここで間違っていない2項目(アクティブまたは非アクティブ)の列挙です。私はリレー出力の状態を切り替えることができますが、 'GetrelayOutputs'を再度呼び出して状態をチェックすると、この関数は常に入力を '非アクティブ'に設定します。
BOSCHの場合、リレー出力を再度取得することはできますが、1は存在しますが、 'SetRelayOutputState'を呼び出すと、2つの 'RelayLogicalState'のどちらも呼び出されません。参考のため
:http://www.onvif.org/ver10/deviceio.wsdl
両方のカメラは、最新のファームウェアがインストールされているとONVIFデバイスマネージャに応じて、両方のONVIFバージョン2.0を使用します。
private void OutputLowButton_Click(object sender, EventArgs e)
{
if (relayOutputs != null)
{
//only 1 present so we take the first for this example
var output = relayOutputs.First();
execute(() => IOClient.SetRelayOutputState(output.token, RelayLogicalState.inactive));
}
}
private void OutputHighButton_Click(object sender, EventArgs e)
{
if (relayOutputs != null)
{
//only 1 present so we take the first for this example
var output = relayOutputs.First();
execute(() => IOClient.SetRelayOutputState(output.token, RelayLogicalState.active));
}
}
private void OutputStateButton_Click(object sender, EventArgs e)
{
//only 1 present so we take the first for this example
var relayOutputs = execute(() => IOClient.GetRelayOutputs());
if(relayOutputs != null)
MessageBox.Show(relayOutputs.First().Properties.IdleState.ToString());
}
EDIT
結局私は、それは次のように働いてしまった:
relayOutput.Properties.Mode = Onv_Device_Management.RelayMode.Bistable;
relayOutput.Properties.IdleState = Onv_Device_Management.RelayIdleState.open;
TryCatch(() => deviceClient.SetRelayOutputSettingsAsync(relayOutput.token, relayOutput.Properties));
TryCatch(() => deviceClient.SetRelayOutputState(relayOutput.token, Onv_Device_Management.RelayLogicalState.active));
あなたのコメントをありがとう、それは私のために働いていなかった、いくつかの異なるブランドを試してみる。 –