一、该问题的重现步骤是什么?
1. 我想要将自定义的mqtt的topic和数据格式实时保存到时序库中 需要怎么做
2. 时序库的保存查询是怎么触发的
3.我想知道整个从mqtt到时序库以及数据库再到页面的流程
二、你期待的结果是什么?实际看到的又是什么?
三、你正在使用的是什么产品,什么版本?在什么操作系统上?
四、请提供详细的错误堆栈信息,这很重要。
五、若有更多详细信息,请在下面提供。
自定义topic可以看这里:https://iot.bladex.cn/feature/link/topic.html
写入逻辑可以看这里:
时序库写入的核心就是注入个统一的接口,调用save方法就行了
时序库更多的介绍看这里:https://iot.bladex.cn/tech/prologue/tsdb/tsdb.html
怎么发你文档
没有保存到数据是怎么回事呢?还有就是topic的转换 你写的也不全 我的topic是这个CarIO/<Group_ID>/<Device_ID/SensorData,数据格式是这个
{
"DataType":"SensorData",
"AxleData":
{
"AXLE1":{
"Adc_L":"<raw_data_1>",
"Weight_L":"<weight_1>",
"Adc_R":"<raw_data_2>",
"Weight_R":"<weight_2>",
"":""
},
"AXLE2":{
…
},
…
"AXLEn":{
…
}
}
"Location":
{
"Latitude":"<latitude>",
"Longitude":"<longitude>"
}
"TimeStamp":<current_time>
}
能保存么 怎么触发的呢 我需要mq直接上数据触发呢 保存那张表单
这个不是标准的格式,请问设备有相关的文档么?发我们看下,如果不是标准的mqtt协议报文,那就需要通过边缘网关来解析后转发到平台了。
如果用了边缘网关,就不需要你们去修改代码改topic,直接可视化配置就能支持。
相关文档看:https://iot.bladex.cn/tech/edge/intro.html
https://iot.bladex.cn/feature/link/edge.html
边缘网关的技术资料(强烈推荐,学会后大部分对接硬件都不用再修改bladex物联网平台的任何代码):
还有一个功能是协议转换,可以看下相关文档:https://iot.bladex.cn/feature/protocol/mapper.html
主要用于上报的mqtt的topic不一致以及数据不一致的情况。可以通过协议转换创建后,自动根据格式转换成bladex平台所需要的格式,这样也不需要修改代码。你可以看下两种方案,综合考虑尝试下。
协议转换怎么进行调试呢 我没看到调试的例子
文档怎么发你呢
编辑界面右下角有调试按钮,左边是现有设备的格式,右边是bladex平台的格式,调试后可以看实际的格式输出。
邮件发这里:bladejava@qq.com
看下配置的对么 我昨天就是这么配置的 但是不好使 是不是需要修改啥呢
还是建议你用node-red来对接
开端口有点太费劲 正在找人开端口 现在可以先试试这个方法
{
"DataType":"SensorData",
"AxleData":
{
"AXLE1":{
"Adc_L":"<raw_data_1>",
"Weight_L":"<weight_1>",
"Adc_R":"<raw_data_2>",
"Weight_R":"<weight_2>",
"":""
},
"AXLE2":{
…
},
…
"AXLEn":{
…
}
}
"Location":
{
"Latitude":"<latitude>",
"Longitude":"<longitude>"
}
"TimeStamp":<current_time>
}
这个应该怎么转换呢
没设备文档,看不懂
1. 传感器测量数据上报
方向:设备->服务器(定时上报)
标题:CarIO/<Group_ID>/<Device_ID/SensorData
其中CarIO为统一系统标识,所有系统的标题统一由CarIO开头;Group_ID为设备分组编号,通常对应到每个客户,可以为字符串、数字或者二者混合;Device_ID为设备编号,对应设备的组内编号,统一的形式为Dxxxxxx,其中x为十进制数字。SensorData为传感器数据标识符
例:CarIO/SINOPEC/D003176/SensorData
SensorData报文格式:
{
"DataType":"SensorData",
"AxleData":
{
"AXLE1":{
"Adc_L":"<raw_data_1>",
"Weight_L":"<weight_1>",
"Adc_R":"<raw_data_2>",
"Weight_R":"<weight_2>",
"":""
},
"AXLE2":{
…
},
…
"AXLEn":{
…
}
}
"Location":
{
"Latitude":"<latitude>",
"Longitude":"<longitude>"
}
"TimeStamp":<current_time>
}
字段说明:
DataType标识数据类型,“SensorData”为上报传感器数据,每个车轴为一组进行上报。
AxleData标识车桥传感器数据
AXLEn代表编号为n的车桥,通常最前面的车桥编号为1,依次往后递增。
<raw_data_L>和<raw_data_R>分别代表对应车桥的左侧和右侧采样数据原始值,取值为0-4095之间的正整数。
<weight_L>和<weight_R>为经过车载终端转换之后得到的重量,取值为正整数。
<temp>为每个数据采集器内的温度值,单位为摄氏度,精确到0.1度。
左右区分以驾驶员正常驾驶时所面向的方向左右侧确定。
Location为位置数据,其中<latidude>是当前经度,<longitude>为当前纬度,取值为实数。
TimeStamp为时间戳,<current_time>为当前时间,格式为yyyy-mm-dd-hh-mm-ss
例:
{
"AxleData":
{
"AXLE1":
{
"Adc_L": "430",
"Adc_R": "453",
"Temp": "26.88",
"Weight_L": "1813",
"Weight_R": "1883"
},
"AXLE2":
{
"Adc_L": "382",
"Adc_R": "402",
"Temp": "26.88",
"Weight_L": "1472",
"Weight_R": "1603"
},
"AXLE3":
{
"Adc_L": "375",
"Adc_R": "368",
"Temp": "26.88",
"Weight_L": "1499",
"Weight_R": "1404"
},
"AXLE4":
{
"Adc_L": "375",
"Adc_R": "368",
"Temp": "0",
"Weight_L": "1499",
"Weight_R": "1404"
}
},
"DataType": "SensorData",
"Location":
{
"Latitude": "39.9024",
"Logitude": "119.3361 "
}
"TimeStamp": "2025-03-31T16:38:47"
}
是这个 您看下 怎么转换呢
1. 传感器测量数据上报
方向:设备->服务器(定时上报)
标题:CarIO/<Group_ID>/<Device_ID/SensorData
其中CarIO为统一系统标识,所有系统的标题统一由CarIO开头;Group_ID为设备分组编号,通常对应到每个客户,可以为字符串、数字或者二者混合;Device_ID为设备编号,对应设备的组内编号,统一的形式为Dxxxxxx,其中x为十进制数字。SensorData为传感器数据标识符
例:CarIO/SINOPEC/D003176/SensorData
SensorData报文格式:
{
"DataType":"SensorData",
"AxleData":
{
"AXLE1":{
"Adc_L":"<raw_data_1>",
"Weight_L":"<weight_1>",
"Adc_R":"<raw_data_2>",
"Weight_R":"<weight_2>",
"":""
},
"AXLE2":{
…
},
…
"AXLEn":{
…
}
}
"Location":
{
"Latitude":"<latitude>",
"Longitude":"<longitude>"
}
"TimeStamp":<current_time>
}
字段说明:
DataType标识数据类型,“SensorData”为上报传感器数据,每个车轴为一组进行上报。
AxleData标识车桥传感器数据
AXLEn代表编号为n的车桥,通常最前面的车桥编号为1,依次往后递增。
<raw_data_L>和<raw_data_R>分别代表对应车桥的左侧和右侧采样数据原始值,取值为0-4095之间的正整数。
<weight_L>和<weight_R>为经过车载终端转换之后得到的重量,取值为正整数。
<temp>为每个数据采集器内的温度值,单位为摄氏度,精确到0.1度。
左右区分以驾驶员正常驾驶时所面向的方向左右侧确定。
Location为位置数据,其中<latidude>是当前经度,<longitude>为当前纬度,取值为实数。
TimeStamp为时间戳,<current_time>为当前时间,格式为yyyy-mm-dd-hh-mm-ss
例:
{
"AxleData":
{
"AXLE1":
{
"Adc_L": "430",
"Adc_R": "453",
"Temp": "26.88",
"Weight_L": "1813",
"Weight_R": "1883"
},
"AXLE2":
{
"Adc_L": "382",
"Adc_R": "402",
"Temp": "26.88",
"Weight_L": "1472",
"Weight_R": "1603"
},
"AXLE3":
{
"Adc_L": "375",
"Adc_R": "368",
"Temp": "26.88",
"Weight_L": "1499",
"Weight_R": "1404"
},
"AXLE4":
{
"Adc_L": "375",
"Adc_R": "368",
"Temp": "0",
"Weight_L": "1499",
"Weight_R": "1404"
}
},
"DataType": "SensorData",
"Location":
{
"Latitude": "39.9024",
"Logitude": "119.3361 "
}
"TimeStamp": "2025-03-31T16:38:47"
}
上面是关于mq的设备文档内容 应该怎么转换呢
CarIO/${groupId}/${deviceId}/SensorData
CarIO/SINOPEC/D003176/SensorData
/blade/sys/${topic.groupId}/${topic.deviceId}/thing/event/property/post
{
"DataType": "SensorData",
"AxleData": {
"AXLE1": {
"Adc_L": "430",
"Weight_L": "1813",
"Adc_R": "453",
"Weight_R": "1883",
"Temp": "26.88"
},
"AXLE2": {
"Adc_L": "382",
"Weight_L": "1472",
"Adc_R": "402",
"Weight_R": "1603",
"Temp": "26.88"
}
},
"Location": {
"Latitude": "39.9024",
"Longitude": "119.3361"
},
"TimeStamp": "2025-03-31T16:38:47"
}
{
"id": "123",
"version": "1.0",
"method": "thing.event.property.post",
"sys": {
"ack": 0
},
"params": {
# var ts = body.TimeStamp;
# for(axleEntry in body.AxleData) {
"${axleEntry.key}": {
"value": {
"Adc_L": "${axleEntry.value.Adc_L}",
"Adc_R": "${axleEntry.value.Adc_R}",
"Weight_L": "${axleEntry.value.Weight_L}",
"Weight_R": "${axleEntry.value.Weight_R}",
"Temp": "${axleEntry.value.Temp}"
},
"time": "${ts}"
}${(!axleEntryLP.last || isNotEmpty(body.Location)) ? ',' : ''}
# }
# if(isNotEmpty(body.Location)) {
"Location": {
"value": {
"Latitude": "${body.Location.Latitude}",
"Longitude": "${body.Location.Longitude}"
},
"time": "${ts}"
}
# }
}
}
配置好之后,物模型配置你需要的字段,字段类型看描述应该是要改成json格式。
物模型配置可以看这里:https://iot.bladex.cn/feature/device/product/tsl.html
如果不行,就用node-red
扫一扫访问 Blade技术社区 移动端