华为IoTDA解码插件报告错误:The decoding result is empty.data

前面的博文讲过,在使用Neuron上传数据到华为IoTDA的时候没有使用华为的物模型进行解析,因为两者的数据格式不同。具体的说Neuron上传的格式是

{
    "node": "RS485", 
    "group": "Data", 
    "timestamp": 1721737594934, 
    "values": 
        {
            "湿度": 56.8, 
            "温度": 28.3
        }, 
    "errors": {}, 
    "metas": {}
}

而华为要求的格式是这样的:

{
	"services": [
		{
			"serviceId": "温湿度",
			"properties": {
				"温度": 20,
				"湿度": 4
			},
			"event_time": "20230321T081126Z" 
		}
	]
}

而在Neuron中并没有配置编码插件的地方。

今天在华为云的IoT平台上发现一个可以配置编解码插件的地方。

 

于是就想能不能用这个插件机制将收到的MQTT载荷转换为物模型的格式。用JavaScript写了解码函数,实际测试了一下,发现报告错误。从消息跟踪中可以看到错误信息。

 错误的详情是这样的。

 从中可以看出,我的想法不可行。因为MQTT的载荷类型为二进制数据时,华为的平台才调用decode函数,否则就不调用。所以上传的数据为JSON格式时就无法进行转换。

现在看来只有一个解决办法,就是写一个Neuron插件,在其中修改neu_json_encode_read_resp1函数(定义在main/src/parser/neu_json_rw.c中),实现对华为物模型的支持。

 

海思(HiSilicon)芯片通常使用华为提供的开发套件和API来实现特定功能。对于SD卡图片读写以及Venc(视频编码器)解码,需要使用海思的SDK和相应的API函数。以下是根据您的要求提供的一段简化的C语言代码框架,用于说明如何实现这些功能。请注意,具体的函数实现和API的细节可能需要根据海思提供的开发文档进行调整。 ```c #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <fcntl.h> #include <sys/stat.h> #include "hi_venc.h" // 假设这是海思提供的Venc API的头文件 #include "hi_sdcard.h" // 假设这是海思提供的SD卡操作API的头文件 // 假设的Venc解码初始化函数 HI_S32 Venc_Init(HI_U32 u32Width, HI_U32 u32Height) { // 初始化Venc模块 // 设置解码参数(例如:分辨率,格式等) // ... return HI_SUCCESS; } // 假设的Venc解码函数 HI_S32 Venc_Decode(const char* pcInFileName, const char* pcOutFileName) { // 打开输入视频文件 // 执行解码操作 // 将解码的帧保存到pcOutFileName指定的文件 // ... return HI_SUCCESS; } // 主函数 int main() { // SD卡初始化 if (SD_Init() != HI_SUCCESS) { printf("SD card init failed!\n"); return -1; } // 图片读取路径和文件名 const char* pcImgReadPath = "/sdcard/image.jpg"; const char* pcImgWritePath = "/sdcard/out_image.jpg"; // Venc解码参数 HI_U32 u32Width = 1920; // 假设视频宽度为1920 HI_U32 u32Height = 1080; // 假设视频高度为1080 // 执行Venc解码初始化 if (Venc_Init(u32Width, u32Height) != HI_SUCCESS) { printf("Venc init failed!\n"); return -1; } // 读取SD卡图片 if (SD_Read(pcImgReadPath, pcImgWritePath) != HI_SUCCESS) { printf("SD card read failed!\n"); return -1; } // 执行Venc解码 if (Venc_Decode(pcImgWritePath, "/dev/video0") != HI_SUCCESS) { printf("Venc decode failed!\n"); return -1; } // 完成后清理资源 Venc_Cleanup(); printf("Decoding and writing operation completed!\n"); return 0; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

神一样的老师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值