Bladeren bron

fix: 透传-modbus组件

jay 1 jaar geleden
bovenliggende
commit
26499b5cac

BIN
data/components/750da259-ff77-4869-a5a5-12a5433b0e4c/iot-nb-component-0.4.5-SNAPSHOT.jar


+ 4 - 1
data/converters/50b0fdd0-9bc8-448d-a7cf-d3b1b4df944c/converter.js

@@ -294,13 +294,16 @@ this.encode = function (service, device) {
         payloadArray = payloadArray.concat(buffer_int32(parseInt(id))); // ALink JSON格式 'id'
         payloadArray = payloadArray.concat(buffer_uint8(code));
     }
+    var hexstr = ab2hex(payloadArray);
+    console.log("hexstr:" + hexstr);
+
     return {
         productKey: service.productKey,
         deviceName: service.deviceName,
         mid: deviceMid,
         content: {
             topic: topic,
-            payload: ab2hex(payloadArray).toUpperCase()
+            payload: hexstr
         }
     }
 };

+ 14 - 2
iot-components/iot-nb-component/src/main/java/cc/iotkit/comp/nb/NBDeviceComponent.java

@@ -12,6 +12,7 @@ package cc.iotkit.comp.nb;
 import cc.iotkit.common.enums.ErrCode;
 import cc.iotkit.common.exception.BizException;
 import cc.iotkit.common.thing.ThingService;
+import cc.iotkit.common.utils.HexUtil;
 import cc.iotkit.common.utils.JsonUtils;
 import cc.iotkit.comp.AbstractDeviceComponent;
 import cc.iotkit.comp.CompConfig;
@@ -20,11 +21,13 @@ import cc.iotkit.converter.DeviceMessage;
 import cc.iotkit.model.device.message.ThingModelMessage;
 import io.vertx.core.Future;
 import io.vertx.core.Vertx;
+import io.vertx.core.buffer.Buffer;
 import lombok.*;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.beanutils.BeanUtils;
 
 import java.lang.reflect.InvocationTargetException;
+import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.concurrent.CountDownLatch;
@@ -115,9 +118,18 @@ public class NBDeviceComponent extends AbstractDeviceComponent {
         } catch (Throwable e) {
             throw new BizException(ErrCode.DATA_FORMAT_ERROR);
         }
-        log.info("publish topic:{},payload:{}", msg.getTopic(), msg.getPayload());
+        Buffer content = null;
+        String topic = msg.getTopic();
+        String payload = msg.getPayload();
+        if (topic.endsWith("thing/model/down_raw")) {
+            content = Buffer.buffer(HexUtil.hexStringToByteArray(payload));
+        }else {
+            content = Buffer.buffer(payload);
+        }
+
+        log.info("publish topic:{},content:{}", topic, content);
         NBVerticle.publish(parent.getProductKey(), parent.getDeviceName(),
-                msg.getTopic(), msg.getPayload());
+                topic, content);
 
         return message;
     }

+ 2 - 3
iot-components/iot-nb-component/src/main/java/cc/iotkit/comp/nb/NBVerticle.java

@@ -207,13 +207,12 @@ public class NBVerticle extends AbstractVerticle {
         return endpointMap.containsKey(getEndpointKey(productKey, deviceName));
     }
 
-    public void publish(String productKey, String deviceName, String topic, String msg) {
+    public void publish(String productKey, String deviceName, String topic, Buffer msg) {
         MqttEndpoint endpoint = endpointMap.get(getEndpointKey(productKey, deviceName));
         if (endpoint == null) {
             throw new BizException(ErrCode.SEND_DESTINATION_NOT_FOUND);
         }
-        byte[] bytes = HexUtil.hexStringToByteArray(msg);
-        Future<Integer> result = endpoint.publish(topic, Buffer.buffer(bytes),
+        Future<Integer> result = endpoint.publish(topic, msg,
                 MqttQoS.AT_LEAST_ONCE, false, false);
         result.onFailure(e -> log.error("public topic failed", e));
         result.onSuccess(integer -> log.info("publish success,topic:{},payload:{}", topic, msg));

+ 4 - 1
iot-components/iot-nb-component/src/main/resources/convert.js

@@ -294,13 +294,16 @@ this.encode = function (service, device) {
         payloadArray = payloadArray.concat(buffer_int32(parseInt(id))); // ALink JSON格式 'id'
         payloadArray = payloadArray.concat(buffer_uint8(code));
     }
+    var hexstr = ab2hex(payloadArray);
+    console.log("hexstr:" + hexstr);
+
     return {
         productKey: service.productKey,
         deviceName: service.deviceName,
         mid: deviceMid,
         content: {
             topic: topic,
-            payload: ab2hex(payloadArray).toUpperCase()
+            payload: hexstr
         }
     }
 };