作者 钟来

添加plc004数据监听

  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<project xmlns="http://maven.apache.org/POM/4.0.0"
  3 + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4 + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5 + <parent>
  6 + <artifactId>lh-device-protocol-parser</artifactId>
  7 + <groupId>com.zhonglai.luhui</groupId>
  8 + <version>1.0-SNAPSHOT</version>
  9 + </parent>
  10 + <modelVersion>4.0.0</modelVersion>
  11 +
  12 + <artifactId>lh-device-plc004</artifactId>
  13 +
  14 + <dependencies>
  15 + <dependency>
  16 + <groupId>com.zhonglai.luhui</groupId>
  17 + <artifactId>lh-device-protocol-factory</artifactId>
  18 + </dependency>
  19 + </dependencies>
  20 +</project>
  1 +package com.zhonglai.luhui.device.protocol.plc004.analysis;
  2 +
  3 +import com.zhonglai.luhui.device.analysis.comm.factory.Topic;
  4 +import com.zhonglai.luhui.device.analysis.util.TopicUtil;
  5 +import com.zhonglai.luhui.device.protocol.factory.analysis.ProtocolParserFactory;
  6 +import com.zhonglai.luhui.device.protocol.factory.analysis.topic.Online;
  7 +import com.zhonglai.luhui.device.protocol.factory.dto.AnalysisResult;
  8 +import com.zhonglai.luhui.device.protocol.plc004.analysis.topic.AllPost;
  9 +import com.zhonglai.luhui.device.protocol.plc004.analysis.topic.PutReq;
  10 +
  11 +public class Plc004ProtocolParserFactoryImpl implements ProtocolParserFactory<byte[]> {
  12 + private static final String topicModel = "/{{roleid}}/{{username}}/{{topicType}}/{{clientid}}";
  13 + @Override
  14 + public Topic analysisTopic(String topicStr) {
  15 + Topic topic = TopicUtil.initTopicFromModelStr(topicStr,topicModel);
  16 + return topic;
  17 + }
  18 +
  19 + @Override
  20 + public AnalysisResult analysisPayload(Topic topic, byte[] payload) {
  21 +
  22 + switch (topic.getTopicType())
  23 + {
  24 + case "PUT_REQ":
  25 + return new PutReq().analysisPayload(payload);
  26 + case "ALL_POST":
  27 + return new AllPost().analysisPayload(payload);
  28 + case "online":
  29 + return new Online().analysisPayload(payload);
  30 + }
  31 + return null;
  32 + }
  33 +}
  1 +package com.zhonglai.luhui.device.protocol.plc004.analysis.topic;
  2 +
  3 +import com.google.gson.JsonObject;
  4 +import com.ruoyi.common.utils.GsonConstructor;
  5 +import com.zhonglai.luhui.device.protocol.factory.dto.AnalysisResult;
  6 +
  7 +public class AllPost {
  8 + public AnalysisResult analysisPayload(byte[] payload)
  9 + {
  10 + String str = new String(payload);
  11 + JsonObject jsonObject = GsonConstructor.get().fromJson(str,JsonObject.class);
  12 + if(jsonObject.has("data"))
  13 + {
  14 + jsonObject.add("1", jsonObject.get("data").getAsJsonObject());
  15 + return new AnalysisResult(true,false,jsonObject);
  16 + }
  17 + return new AnalysisResult(false,false,null);
  18 + }
  19 +}
  1 +package com.zhonglai.luhui.device.protocol.plc004.analysis.topic;
  2 +
  3 +import com.alibaba.fastjson.JSONObject;
  4 +import com.google.gson.JsonObject;
  5 +import com.ruoyi.common.utils.GsonConstructor;
  6 +import com.zhonglai.luhui.device.analysis.comm.dto.ApiClientRePlyDto;
  7 +import com.zhonglai.luhui.device.analysis.dto.Message;
  8 +import com.zhonglai.luhui.device.analysis.dto.MessageCode;
  9 +import com.zhonglai.luhui.device.protocol.factory.dto.AnalysisResult;
  10 +
  11 +import java.util.HashMap;
  12 +import java.util.Map;
  13 +
  14 +public class PutReq {
  15 + public AnalysisResult analysisPayload(byte[] payload)
  16 + {
  17 + String str = new String(payload);
  18 + JsonObject jsonObject = GsonConstructor.get().fromJson(str,JsonObject.class);
  19 + if(jsonObject.has("data"))
  20 + {
  21 + jsonObject.add("1", jsonObject.get("data").getAsJsonObject());
  22 + return new AnalysisResult(false, false, jsonObject, new ApiClientRePlyDto() {
  23 + @Override
  24 + public void setReplyMessage(Message message) {
  25 + message.setCode(MessageCode.DEFAULT_SUCCESS_CODE);
  26 + message.setData(JSONObject.parseObject(jsonObject.get("data").toString(),HashMap.class));
  27 + }
  28 + });
  29 + }
  30 + return new AnalysisResult(false,false,null);
  31 + }
  32 +}
  1 +package com.zhonglai.luhui.device.protocol.plc004.control;
  2 +
  3 +import com.google.gson.JsonObject;
  4 +import com.zhonglai.luhui.device.analysis.comm.factory.Topic;
  5 +import com.zhonglai.luhui.device.analysis.comm.util.ByteUtil;
  6 +import com.zhonglai.luhui.device.analysis.comm.util.DateUtils;
  7 +import com.zhonglai.luhui.device.domain.IotProduct;
  8 +import com.zhonglai.luhui.device.protocol.factory.config.DeviceCach;
  9 +import com.zhonglai.luhui.device.protocol.factory.control.DeviceCommandServiceFactory;
  10 +import com.zhonglai.luhui.device.protocol.factory.dto.NoticeMessageDto;
  11 +import com.zhonglai.luhui.device.protocol.factory.dto.ParserDeviceHostDto;
  12 +import org.slf4j.Logger;
  13 +import org.slf4j.LoggerFactory;
  14 +
  15 +import java.util.Arrays;
  16 +
  17 +/**
  18 + * 指令控制监听实现
  19 + */
  20 +public class DeviceCommandListenServiceImpl implements DeviceCommandServiceFactory {
  21 + private static final String topicModel = "/{{roleid}}/{{username}}/{{topicType}}/{{clientid}}";
  22 +
  23 + private static final Logger log = LoggerFactory.getLogger(DeviceCommandListenServiceImpl.class);
  24 + @Override
  25 + public NoticeMessageDto read(String deviceId, JsonObject jsonObject) {
  26 + return null;
  27 + }
  28 +
  29 + @Override
  30 + public NoticeMessageDto write(String deviceId, JsonObject jsonObject) {
  31 + ParserDeviceHostDto parserDeviceHostDto = DeviceCach.getDeviceHost(deviceId);
  32 +
  33 + Topic topic = getWriteTopic(deviceId,parserDeviceHostDto.getIotProduct());
  34 + NoticeMessageDto noticeMessageDto = new NoticeMessageDto();
  35 + noticeMessageDto.setTopic(topic);
  36 + noticeMessageDto.setTopicconfig(topicModel);
  37 + if (jsonObject.has("1"))
  38 + {
  39 + JsonObject data = jsonObject.get("1").getAsJsonObject();
  40 + if (data.has("3") && data.has("106"))
  41 + {
  42 + byte[] bytes = new byte[]{(byte) 0xA5, 0x07, 0x01, 0x20, (byte) data.get("3").getAsInt(), (byte) (data.get("106").getAsInt() - 1)};
  43 + bytes = Arrays.copyOf(bytes, bytes.length + 1);
  44 + bytes[bytes.length - 1] = ByteUtil.calculateChecksum(bytes);
  45 + noticeMessageDto.setCommd(bytes);
  46 + }
  47 + }
  48 + return noticeMessageDto;
  49 + }
  50 +
  51 + @Override
  52 + public boolean notice(String deviceId, JsonObject jsonObject) {
  53 + return false;
  54 + }
  55 +
  56 +
  57 + private Topic getWriteTopic(String deviceId, IotProduct iotProduct)
  58 + {
  59 + Topic topic = new Topic();
  60 + topic.setTopicType("PUT");
  61 + topic.setClientid(deviceId);
  62 + topic.setRoleid(iotProduct.getRole_id()+"");
  63 + topic.setUsername(iotProduct.getMqtt_username());
  64 + return topic;
  65 + }
  66 +}
@@ -26,6 +26,7 @@ @@ -26,6 +26,7 @@
26 <module>lh-device-http-public</module> 26 <module>lh-device-http-public</module>
27 <module>lh-device-modbus</module> 27 <module>lh-device-modbus</module>
28 <module>lh-device-uyu</module> 28 <module>lh-device-uyu</module>
  29 + <module>lh-device-plc004</module>
29 </modules> 30 </modules>
30 <description> 31 <description>
31 设备协议解析工厂 32 设备协议解析工厂
@@ -19,7 +19,8 @@ spring: @@ -19,7 +19,8 @@ spring:
19 19
20 mqtt: 20 mqtt:
21 #链接地址 21 #链接地址
22 - broker: tcp://175.24.61.68:1883 22 +# broker: tcp://175.24.61.68:1883
  23 + broker: tcp://47.112.163.61:1883
23 #唯一标识 24 #唯一标识
24 clientId: ${random.uuid} 25 clientId: ${random.uuid}
25 topicconfig: "/{{roleid}}/{{username}}/{{clientid}}/{{payloadtype}}/{{topicType}}/{{messageid}}" 26 topicconfig: "/{{roleid}}/{{username}}/{{clientid}}/{{payloadtype}}/{{topicType}}/{{messageid}}"
@@ -28,7 +29,7 @@ mqtt: @@ -28,7 +29,7 @@ mqtt:
28 client: 29 client:
29 #客户端操作时间 30 #客户端操作时间
30 operationTime: 10 31 operationTime: 10
31 - productids: 27,23 32 + productids: 17
32 33
33 #rocketmq配置信息 34 #rocketmq配置信息
34 rocketmq: 35 rocketmq: