簡體   English   中英

帶C的Z波協議:關於Z波幀結構和編程的一般問題

[英]Z-wave protocol with C: Questions about Z-wave frame structure & programming in general

(在我提出問題之前;我不知道是否允許任何人回答我的問題,因為Z波協議應該是機密信息,但如果它確實違反了任何類型的規則,那么隨意刪除這個帖子。)

我目前正在嘗試編寫一個C程序,它只是構造一個由原始二進制數據組成的Z波消息,然后將該消息發送到連接Z波控制器的USB接口(我正在使用AEOTEC Z-Stick USB加密狗由Aeon Labs提供)。 我也使用指南作為參考,並試圖在簡單C中重寫示例代碼。但是,如果你看一下指南,特別是他試圖發送給USB控制器的消息:

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

...也許只是我,但似乎缺少來自通常的Z波框架的一些信息。 我的猜測是前4個字節代表Home ID后跟節點ID,但是我無法弄清楚'0x03'之后的含義,假設該字節后的其余部分代表“Basic”命令類(' 0x20',1字節)和相應的“設置”應用程序命令('0x01',1字節)。 在校驗和位之前'0x05'代表什么? 那傳輸頭信息呢,為什么不包含它? 看起來他不需要包含它......或者我只是在解釋數據包完全錯誤。 有人可以開導我嗎?

另外,如果您從USB端口讀取應用程序層信息(f.ex.中帶有open()&read()命令,那么它是否正確無法檢索應用程序層信息?)

先感謝您!

我認為通過研究OpenZWave的源代碼可以節省大量的時間和精力。 這是一個用於處理ZWave的開源C ++庫,它非常成熟且功能齊全。 你可以從平原C輕松使用它。

您可以在Msg類構造函數中看到您要求的部分內容,該構造函數構造幀的開始(0x01),后跟消息長度(0x09 == 9字節),消息類型(0x00 == REQUEST)和函數(FUNC_ID_ZW_SEND_DATA) == 0x013),然后是目標nodeID,然后是實際的命令體,我想這是一個基本的命令:

./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;
}

找到了我想要的東西。 如果有人有興趣,這是我在谷歌搜索的日子和天后發現的......

巨大的Z-Wave信息匯編

在該頁面上稍微向下(直接在Z-Wave幀描述下)是用於直接與USB控制器通信的幀結構的描述。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM