见帖子 https://sns.bladex.cn/q-16341.html
描述:
1、我们是现有的设备,协议都是厂家现有的,不能改动。
2、目前的协议都是类似 tmqtt/{clientId}/v3/req, tmqtt/{clientId}/v3/status, tmqtt/{clientId}/v3/event类似的
3、协议内容也是自定义的,不兼容阿里、华为。如:
{
"datas": {
....
},
"context": {
"traceId": "123456789",
...
}
}
4、目前只有clientId, productKey 和deviceName没有,是不可以把clientId当做deviceName,productKey 写死?
5、设备到平台和平台到设备都要支持。
求助:
1、需要修改哪部分的代码?
2、修改后是否还需要协议转换?
3、修复后是否需要转发,怎么操作?
4、设备注册部分是否也得修,修改哪部分代码?
5、OTA升级部分是否需要修改,修改哪部分代码?
6、能否提供示例代码(物联网新手小白)
项目比较紧,卡在这里后面没办法紧张,j紧急求助,不胜感激!!!
首先有一个大前提我们需要了解下,这个clientId是不是每台设备都不一样?如果每个clientId绑定一台设备,可以用平台里的唯一编码绑定到设备里,也就是说创建设备的时候,在如下字段配置给设备。 这种情况下,productKey和deviceName还可以按照正常情况生成,只需要把对应设备绑定到唯一的clientId即可做成一对一的映射逻辑。

在以上大前提下,需要你们给出详细的设备文档,否则我们很难给出代码例子,只能给你一个模糊的方向或者思路。之前的帖子已经给出过思路,但好像对你们没有帮助,所以现在请给出详细文档,包括设备的完整说明、完整的topic格式、完整的数据格式、完整其他协议等等。
关于完全不同系列的设备对接到平台,就没法用协议转换这个功能,因为协议转换是必须要productKey和deviceName这个概念才可以的。你们的这种情况有两种选择:
1. 选择边缘网关,比如node-red,或者其他平台的实体网关盒子(但是这个考虑到你们的设备是否要经常移动或者网络问题,实体的边缘网关也不是100%好的选择),边缘网关的好处是不需要去修改系统原来的代码,可以直接通过拖拽设计来进行数据的解析、重组和转发。边缘网关的用法看这里:https://iot.bladex.cn/feature/gateway/device.html
2. 选择直接进行系统原生协议的修改,来脱离边缘网关这一层能直接通过平台来实现,但是这样相对有难度,需要进行源码的二开来实现。
以上两种各有长短,看你们实际业务需求来定。
关于其他的问题可以先简单回答下,但是代码demo还无法给出:
1. 上报、下发等设备交互的都需要修改,上报修改这里:https://center.javablade.com/blade/BladeX-Links/src/commit/dca423f06367f74468400a427411d4a26adeedf9/blade-core/blade-broker-local/src/main/java/org/springblade/iot/broker/local/listener/BladeMqttMessageListener.java#L107
2. 修改后不需要再配置协议转换
3. 修改后,直接在代码内部直接转发,不需要配置其他额外的地方,关于代码里转发,也就一行的代码,可以指定执行对应的topic函数 :https://center.javablade.com/blade/BladeX-Links/src/commit/dca423f06367f74468400a427411d4a26adeedf9/blade-core/blade-broker-local/src/main/java/org/springblade/iot/broker/local/listener/BladeMqttMessageListener.java#L113
4. 注册逻辑也需要按照你们设备固定的协议来定,无非就是修改API的地址、参数等等,但是现在没有productKey和deviceName的逻辑了,改动相对多一点,很多字段需要自动生成随机值来和clientId来绑定,注册的代码在这里修改:https://center.javablade.com/blade/BladeX-Links/src/branch/master/blade-core/blade-broker-core/src/main/java/org/springblade/iot/broker/core/api/device/DeviceAuthController.java#L73
5. ota也得修改,逻辑也和上报数据的处理机制一样,读取设备本身ota的topic地址和参数,然后通过mqtt client把处理完毕后符合平台的数据再重新发送一份,就可以走平台原本的ota逻辑了。处理代码依旧在这里:https://center.javablade.com/blade/BladeX-Links/src/branch/master/blade-core/blade-broker-local/src/main/java/org/springblade/iot/broker/local/listener/BladeMqttMessageListener.java
对应的topic原本的函数在这里:https://center.javablade.com/blade/BladeX-Links/src/branch/master/blade-core/blade-data-core/src/main/java/org/springblade/iot/data/core/function/ota
6. 需要你们提供完整的设备详细文档,包括设备的完整说明、完整的topic格式、完整的数据格式、完整其他协议等等,才能给出对应的一些demo。如果设备信息需要保密,可以将详细文档发到 bladejava@qq.com,但切记不要什么文档都不筛选就全部丢给我们了哦,这种情况就已经超出了答疑范畴相当于是给你们进行业务开发了,这种情况是不含在技术支持里的。