正在显示
7 个修改的文件
包含
174 行增加
和
2 行删除
| 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: |
-
请 注册 或 登录 后发表评论