6

(質問する前に; Z-wave プロトコルは機密情報であると想定されているため、誰かが私の質問に答えてよいかどうかはわかりませんが、実際に何らかの規制に違反している場合は、遠慮なく削除してください。この郵便受け。)

現在、生のバイナリ データで構成される Z-wave メッセージを単純に作成し、そのメッセージを Z-wave コントローラーが接続されている USB インターフェイスに送信する C プログラムを作成しようとしています (AEOTEC Z-Stick USB ドングルを使用しています)。イオン研究所による)。私もこのガイドを参考にして、プレーンな C でサンプル コードを書き直そうとしています。ただし、ガイド、特に彼が USB コントローラーに送信しようとしているメッセージを確認すると、次のようになります。

/*
0x01, 0x09, 0x00, 0x13, nodeId, 0x03, 0x20, 0x01, state, 0x05, checksum
*/

... 私だけかもしれませんが、通常の Z-wave フレームからの情報が欠落しているようです。私の推測では、最初の 4 バイトはホーム ID とそれに続くノード ID を表していると思いますが、そのバイトの後の残りが「基本」コマンド クラス (' 0x20'、1 バイト) および対応する「設定」アプリケーション コマンド ('0x01'、1 バイト)。また、チェックサム ビットの前の「0x05」は何を表していますか? トランスポート ヘッダー情報についてはどうでしょうか。なぜ含まれていないのでしょうか。彼はそれを含める必要がなかったようです...または、パケットを完全に間違って解釈しているだけかもしれません. 誰か教えてください。

また、USB ポートから読み取った場合 (例: C の open() & read() コマンドを使用) にのみ、アプリケーション層の情報を USB ポートから取得できるというのは正しいですか?

前もって感謝します!

4

2 に答える 2

5

OpenZWave のソース コードを調べることで、かなりの時間と労力を節約できると思います。これは、ZWave を操作するためのオープン ソース C++ ライブラリであり、非常に成熟しており、機能が充実しています。プレーンCから簡単に使用できます。

あなたが求めているものの一部は、フレームの開始 (0x01) を構築するMsg クラス コンストラクターで確認でき、その後にメッセージ長 (0x09 == 9 バイト)、メッセージ タイプ (0x00 == REQUEST)、関数 (FUNC_ID_ZW_SEND_DATA) が続きます。 == 0x013)、次にターゲット ノード ID が続き、次に実際のコマンド本体が続きます。これは、基本的なコマンド用であると思われます。

./src/Defs.h:#define COMMAND_CLASS_BASIC 0x20:

bool Basic::SetValue
...
            Msg* msg = new Msg( "BasicCmd_Set", GetNodeId(), REQUEST, FUNC_ID_ZW_SEND_DATA, true );
            msg->SetInstance( this, _value.GetID().GetInstance() );
            msg->Append( GetNodeId() );
            msg->Append( 3 );
            msg->Append( GetCommandClassId() );
            msg->Append( BasicCmd_Set );
            msg->Append( value->GetValue() );
            msg->Append( GetDriver()->GetTransmitOptions() );
            GetDriver()->SendMsg( msg, Driver::MsgQueue_Send );
            return true;
    }

    return false;
}
于 2015-10-25T07:48:49.190 に答える
4

探していたものが見つかりました。誰かが興味を持っている場合に備えて、これが私が何日も何日もグーグルで見つけたものです...

Z-Wave 情報の膨大な編集

そのページの少し下 (Z-Wave フレームの説明のすぐ下) には、USB コントローラと直接通信するために使用されるフレーム構造の説明があります。

于 2015-07-16T13:56:00.373 に答える