【经验】EmberZnet如何调用自定义API实现Zigbee数据上报?
SILICON LABS的Zigbee设备工作时有一个非常重要的功能即状态同步,通常需要同步的数据,包括传感器的数据,球泡灯的开关/颜色状态,开关面板的开关状态等;那么这些数据时如何发送给目标设备(网关)的呢?我们可以参考《【经验】利用CLI命令创建EFR32MG的Zigbee工程绑定和上报条目》使用 CLI 来实现标准的上报流程,这中间需要执行绑定和上报配置等操作,那么有没有办法直接自己构造命令并随时上报你要的数据呢?
下面的函数参考 conditionreport 的处理,对自定义的数据包进行封装并发送:
extern EmberApsFrame globalApsFrame;
//code:
/**
* General report message composition EX
* uint8 u8AttrNums --- need to report attr Num
* AttrID --- AttrID[1] = XXX; AttrID[2] = XXX;
*/
uint8_t UserReportSpecificAttributeEx(
uint16_t
u16ClusterID,
uint8_t
u8AttrNums,
uint16_t *u16AttrID,
uint8_t u8SrcEndPoint,
uint8_t u8DestEndPoint,
uint16_t ManufacturerCode)
{
uint8_t Data[50];
uint8_t ZCL_Data[90];
uint16_t ZclBufferLen = 0;
EmberStatus status = EMBER_SUCCESS;
globalApsFrame.clusterId = u16ClusterID;
globalApsFrame.destinationEndpoint = u8DestEndPoint;
globalApsFrame.sourceEndpoint = u8SrcEndPoint;
globalApsFrame.profileId = 0x0104;//HA
uint16_t mfgSpecificId = ManufacturerCode;
uint8_t disableDefaultResponse = 1;
EmberAfAttributeType type;
uint8_t index = 0;
uint8_t i1;
//zcl common header
ZCL_Data[index++] = (ZCL_GLOBAL_COMMAND
| ZCL_FRAME_CONTROL_SERVER_TO_CLIENT
| (mfgSpecificId != EMBER_AF_NULL_MANUFACTURER_CODE
? ZCL_MANUFACTURER_SPECIFIC_MASK
: 0)
| (disableDefaultResponse
? ZCL_DISABLE_DEFAULT_RESPONSE_MASK
: 0));
if (mfgSpecificId != EMBER_AF_NULL_MANUFACTURER_CODE)
{
ZCL_Data[index++] = (uint8_t)mfgSpecificId;
ZCL_Data[index++] = (uint8_t)(mfgSpecificId >> 8);
}
ZCL_Data[index++] = emberAfNextSequence();
ZCL_Data[index++] = ZCL_REPORT_ATTRIBUTES_COMMAND_ID;
ZclBufferLen = index;
for( i1=0; i1<u8AttrNums; i1++ )
{
status = emAfReadAttribute(u8SrcEndPoint,
(EmberAfClusterId)u16ClusterID,
(EmberAfAttributeId)u16AttrID[i1],
CLUSTER_MASK_SERVER,
mfgSpecificId,
Data,
sizeof(Data),
&type);
if (status != EMBER_ZCL_STATUS_SUCCESS)
{
emberAfCorePrintln("ERR:APP_eUserReportSpecificAttributeEx %x", status);
return status;
}
ZCL_Data[ZclBufferLen] = LOW_BYTE(u16AttrID[i1]);
ZclBufferLen += 1;
ZCL_Data[ZclBufferLen] = HIGH_BYTE(u16AttrID[i1]);
ZclBufferLen +=1;
ZCL_Data[ZclBufferLen] = type;
ZclBufferLen +=1;
uint16_t size = (emberAfIsThisDataTypeAStringType(type)
? emberAfStringLength(Data) + 1
: emberAfGetDataSize(type));
MEMMOVE( ZCL_Data+ZclBufferLen, Data, size);
ZclBufferLen += size;
MEMSET(Data, 0, 50);
}
uint8_t mode ;
mode = EMBER_OUTGOING_DIRECT;
status = emberAfSendUnicast(EMBER_OUTGOING_DIRECT,
0x0000,
&globalApsFrame,
ZclBufferLen,
ZCL_Data);
emberAfAppPrintln("Report>>%s u16ClusterID: %04x, SeqNum: %d, status: %d\n",__FUNCTION__, u16ClusterID,ZCL_Data[3], status);
return status;
}
上述函数可以在任何时间发送 report 命令给任意设备,方便进行自定义发送。
- |
- +1 赞 0
- 收藏
- 评论 0
本文由xiaoyangfengle提供,版权归世强硬创平台所有,非经授权,任何媒体、网站或个人不得转载,授权转载时须注明“来源:世强硬创平台”。
相关推荐
【经验】Zigbee网关替换操作指南之Host-NCP模式
在zigbee的网络实际应用中,可能会遇到需要替换网关,并希望网络的参数继续保持的情况。即更换了新的网关后,新的网关能够恢复之前的网络参数,网路中的其他设备不需要重新入网。本例程就基于Silicon Labs的EmberZNet 6.3版本协议栈、Zigbee 3.0、Host-NCP模式的网关,指导大家实现网关替换的功能。
设计经验 发布时间 : 2019-04-09
【经验】如何使用Simplicity Studio的Network Analyzer工具进行ZigBee抓包?
在做蓝牙、ZigBee等无线产品开发中,抓包进行数据分析是非常有效的解决问题方法。Silicon Labs的EFR32MG开发板提供PTI硬件抓包,结合Simplicity Studio的Network Analyzer软件工具可以完整抓取无线网络中数据包。本文指导大家如何使用开发板来实现PTI抓包。
设计经验 发布时间 : 2018-11-13
【经验】EmberZnet协议栈中如何关闭ZigBee工程中的APS ACK?
EmberZnet是Silicon Labs公司针对ZigBee无线技术开发的协议栈,运行与EFR32MG系列多协议无线SOC中。在ZigBee的开发中,有些用户会需要关闭APS ACK,避免APS层可能会出现的经常重传。那么如何在ZigBee工程中关闭APS ACK呢?
设计经验 发布时间 : 2020-03-07
【应用】EFR32MG系列无线SoC满足IO-Link要求,助力革新无线工厂自动化方案,实现长距离输出
芯科科技的EFR32MG13、EFR32MG21和EFR32MG24为IO-Link Wireless的快速RF通道和无线电状态切换时间、出色的无线电灵敏度和超低功耗模式提供了优质的选择。
应用方案 发布时间 : 2023-03-24
【经验】EFR32MG使用Railtest做产测功能时如何上电自动发送数据?
Railtest提供了非常完备的命令用于测试各种指标,但有些用户在实际产测时只测试部分功能,且不希望用串口CLI进行交互,实际上我们可以直接修改Railtest。本文就以EFR32MG为例针对Zigbee产品上电后默认进入18信道连续发送进行说明。
设计经验 发布时间 : 2020-11-23
【经验】如何使用EFR32开发板的PTI抓包用户ZigBee模块
在无线应用开发中,EFR32开发板提供的是PTI硬件抓包,配合Network Analyzer软件工具,能够非常容易分析无线通讯问题。工程师自己做的无线模块,配合EFR32开发板,也可以实现PTI抓包。本文以ZigBee工程为例,指导大家如何实现EFR32开发板的PTI抓包用户ZigBee模块。
设计经验 发布时间 : 2019-10-24
【经验】基于Silicon Labs 无线SoC EFR32MG的PTI抓包工具的使用
Silicon Labs的Zigbee无线SoC EFR32MG在Zigbee的应用中占有非常多的份额,主要的优势为集成PA,最高19.5dbm的发射功率,-102.7dbm接收灵敏度,整个链路预算即122.2db,穿墙的效果非常好。全球范围内使用EFR32MG作为Zigbee网关的产品高达80%。本文讲述基于Silicon Labs 无线SoC EFR32MG的PTI抓包工具的使用方法。
设计经验 发布时间 : 2019-01-18
【经验】在芯科的SSv5中使用MG系列芯片创建Bluetooth-SoC Empty工程
当我们拿到一个Silicon Labs EFR32MG系列蓝牙SoC芯片,想要创建一个Bluetooth-SoC Empty的工程,而打开simplicity studio v5却无从下手。
设计经验 发布时间 : 2023-02-26
开发必备:超全的ZigBee技术规范,参考设计,开发资料,一站式下载集合!
Silicon Labs的EFR32MG系列无线SOC为ZigBee产品开发提供了多种产品组合, EFR32MG13系列产品Flash 512KB和RAM 64KB最适用于需要OTA的产品;EFR32MG21系列适用于性价比高的产品。本文整理一份超全的设计开发资料,一站式提供给ZigBee开发人员下载。【世强硬创沙龙2019】
设计经验 发布时间 : 2018-11-21
【经验】Z3GatewayHost运行出错问题分析
使用Silicon Labs的多协议无线SOC EFR32MG开发过ZigBee的Host-NCP网关的工程师,可能大都遇到过Z3GatewayHost运行出错的问题,本文就和大家分析Z3GatewayHost运行出错的可能性,希望对于解决此类问题能有帮助。
设计经验 发布时间 : 2020-11-05
【应用】芯科科技SOC EFR32MG助力WorthCloud全面强化Zigbee智能家居体验
WorthCloud智能家居一体化服务的加持,可以使设备商将更多的精力投入到终端设备的研发设计,加之Silicon Labs的SOC EFR32MG系列产品的助力,使WorthCloud的客户可以最大限度降低硬件开发的技术难度和研发成本。
应用方案 发布时间 : 2021-12-21
【经验】替换ZigBee网关后,路由节点无法和新网关通信详解
Silicon Labs公司的EFR32MG系列产品由于其高集成度、高射频性能以及超低的功耗特性,受到广大的工程师青睐,用于ZigBee产品的开发。Silicon Labs的网关支持替换后恢复网络功能,详细操作可以参考:Zigbee信任中心替换之Host-NCP模式。最近有工程师反映按照文章操作后,替换新的网关可以恢复之前网络参数,但是网络中的路由节点无法和新网关通信,本文向大家分析此问题的解决。
设计经验 发布时间 : 2019-06-25
【经验】多协议无线SoC EFR32MG的ZigBee开发之Token概念解析
EFR32MG系列是Silicon Labs公司针对多协议推出的无线SOC,单芯片可以支持Sub-G、蓝牙、Thread和Zigbee多种协议。在EFR32MG芯片中没有eeprom,Silicon Labs提供了使用flash模拟eeprom(simulated eeprom)的用法,用来存储非易失性数据,所以实际上它们是直接存储在flash上。而这些数据的写入和访问就是通过token来实现的。
设计经验 发布时间 : 2019-02-12
电子商城
品牌:SILICON LABS
品类:Mighty Gecko Multi-Protocol Wireless SoC
价格:¥27.0929
现货: 90,767
品牌:SILICON LABS
品类:Wireless Gecko SoC
价格:¥8.1764
现货: 104,128
现货市场
品牌:SILICON LABS
品类:Switch Hall Effect Magnetic Position Sensor
价格:¥2.2924
现货:126,000
登录 | 立即注册
提交评论