繁体   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