| | |
| | | } |
| | | |
| | | private void printLog(ArdAlarmApponekey ardAlarmApponekey) { |
| | | log.info("收到数据:" + "【ID】" + ardAlarmApponekey.getId() + "【userId】" + ardAlarmApponekey.getUserId() |
| | | log.debug("收到数据:" + "【ID】" + ardAlarmApponekey.getId() + "【userId】" + ardAlarmApponekey.getUserId() |
| | | + "【经度】" + ardAlarmApponekey.getLongitude() + "【纬度】" + ardAlarmApponekey.getLatitude() |
| | | + "【高层】" + ardAlarmApponekey.getAltitude() + "【创建时间】" + ardAlarmApponekey.getCreateTime()); |
| | | } |
| | |
| | | return; |
| | | } |
| | | nettyUdpServer.init(udpPort); |
| | | log.info("管线泄露UDP服务已启动"); |
| | | log.debug("管线泄露UDP服务已启动"); |
| | | } |
| | | |
| | | |
| | |
| | | map.put("alarmType", start); |
| | | map.put("position", position); |
| | | map.put("watcher", watcher); |
| | | log.info("开始解析" + start); |
| | | log.info("主机:" + host); |
| | | log.info("管线编号:" + tubeId); |
| | | log.info("报警时间:" + alarmTime); |
| | | log.info("报警类型:" + type); |
| | | log.info("位置:" + position); |
| | | log.info("值班人:" + watcher); |
| | | log.info("结束解析" + stop); |
| | | log.debug("开始解析" + start); |
| | | log.debug("主机:" + host); |
| | | log.debug("管线编号:" + tubeId); |
| | | log.debug("报警时间:" + alarmTime); |
| | | log.debug("报警类型:" + type); |
| | | log.debug("位置:" + position); |
| | | log.debug("值班人:" + watcher); |
| | | log.debug("结束解析" + stop); |
| | | MqttConsumer.publish(2, false, "tube", JSON.toJSONString(map)); |
| | | } else { |
| | | log.error("数据异常"); |
| | |
| | | domainUrl = SpringTool.getYmlInfo("minio.endpoint"); |
| | | accessKey = SpringTool.getYmlInfo("minio.accessKey"); |
| | | secretKey = SpringTool.getYmlInfo("minio.secretKey"); |
| | | log.info("minio信息:" + domainUrl + "(" + accessKey + "/" + secretKey + ")"); |
| | | log.debug("minio信息:" + domainUrl + "(" + accessKey + "/" + secretKey + ")"); |
| | | } |
| | | |
| | | /** |
| | |
| | | //endregion |
| | | break; |
| | | default: |
| | | log.info("未知行为事件类型:" + strVcaAlarm.struRuleInfo.wEventTypeEx); |
| | | log.debug("未知行为事件类型:" + strVcaAlarm.struRuleInfo.wEventTypeEx); |
| | | printLog(info); |
| | | break; |
| | | } |
| | |
| | | publishMqtt(info); |
| | | break; |
| | | case HCNetSDK.COMM_UPLOAD_FACESNAP_RESULT: |
| | | log.info("人脸检测事件上报"); |
| | | log.debug("人脸检测事件上报"); |
| | | break; |
| | | case HCNetSDK.COMM_GISINFO_UPLOAD: |
| | | log.info("GPS报警信息上报"); |
| | | log.debug("GPS报警信息上报"); |
| | | break; |
| | | case HCNetSDK.COMM_ALARMHOST_CID_ALARM: |
| | | log.info("报警主机 CID 报告报警上传"); |
| | | log.debug("报警主机 CID 报告报警上传"); |
| | | //region 报警主机报警处理 |
| | | ArdEquipExternal ardEquipExternal = new ArdEquipExternal(); |
| | | ardEquipExternal.setIp(sDeviceIP); |
| | |
| | | * 打印报警主机事件日志 |
| | | */ |
| | | private void printLog(ExternalAlarmEventInfo info) { |
| | | log.info("【报警ID】" + info.getAlarmId() + "【报警名称】" + info.getAlarmName() + |
| | | log.debug("【报警ID】" + info.getAlarmId() + "【报警名称】" + info.getAlarmName() + |
| | | "【防区ID】" + info.getDefenseId() + "【防区名称】" + info.getDefenseName() + "【类型】" + info.getAlarmType() + |
| | | "【时间】" + info.getAlarmTime() + "【报警主机ID】" + info.getAlarmHostId()); |
| | | } |
| | |
| | | * 打印门禁事件日志 |
| | | */ |
| | | private void printLog(AccessControlHostEventInfo info) { |
| | | log.info("【报警ID】" + info.getSerialNo() + "【设备编号】"+ |
| | | log.debug("【报警ID】" + info.getSerialNo() + "【设备编号】"+ |
| | | "【门编号】" + info.getDoorNo() + "【事件类型】" + info.getAlarmType() + |
| | | "【防区类型】" + info.getDefenseType()+"【时间】" + info.getAlarmTime() + |
| | | "【门禁主机ID】" + info.getAcsId()); |
| | |
| | | public static int setupAlarmChan(String deviceIpPort, int lUserID, int lAlarmHandle) { |
| | | // 根据设备注册生成的lUserID建立布防的上传通道,即数据的上传通道 |
| | | if (lUserID == -1) { |
| | | log.info("请先注册"); |
| | | log.error("请先注册"); |
| | | return lUserID; |
| | | } |
| | | if (lAlarmHandle < 0) { |
| | |
| | | if (fMSFCallBack_V31 == null) { |
| | | fMSFCallBack_V31 = new FMSGCallBack(); |
| | | if (!hCNetSDK.NET_DVR_SetDVRMessageCallBack_V50(0, fMSFCallBack_V31, null)) { |
| | | log.info("设置回调函数失败!错误码==========》" + hCNetSDK.NET_DVR_GetLastError()); |
| | | log.error("设置回调函数失败!错误码==========》" + hCNetSDK.NET_DVR_GetLastError()); |
| | | } |
| | | } |
| | | // 这里需要对设备进行相应的参数设置,不设置或设置错误都会导致设备注册失败 |
| | |
| | | logout(lUserID); |
| | | return lAlarmHandle; |
| | | } else { |
| | | log.info("设备【" + deviceIpPort + "】布防成功"); |
| | | log.debug("设备【" + deviceIpPort + "】布防成功"); |
| | | return lAlarmHandle; |
| | | } |
| | | } |
| | |
| | | String deviceIpPort = deviceInfo.getIp() + ":" + deviceInfo.getPort(); |
| | | if (dwResult == 1) { |
| | | GlobalVariable.loginMap.put(deviceInfo.getDeviceId(), lUserID); |
| | | log.info("设备【" + deviceIpPort + "】登录成功"); |
| | | log.debug("设备【" + deviceIpPort + "】登录成功"); |
| | | // 设置报警回调函数,建立报警上传通道(启用布防) |
| | | HikClientUtil.setupAlarmChan(deviceIpPort, lUserID, -1); |
| | | } else { |
| | | log.info("设备【" + deviceIpPort + "】登录失败"); |
| | | log.debug("设备【" + deviceIpPort + "】登录失败"); |
| | | } |
| | | return 1; |
| | | } |
| | |
| | | |
| | | @Override |
| | | public void run(ApplicationArguments args) { |
| | | log.info("初始化并启动mqtt......"); |
| | | log.debug("初始化并启动mqtt......"); |
| | | if (PropertiesUtil.MQTT_ENABLED) { |
| | | this.connect(); |
| | | } |
| | |
| | | if (null == client) { |
| | | client = new MqttClient(PropertiesUtil.MQTT_HOST, PropertiesUtil.MQTT_CLIENT_ID, new MemoryPersistence()); |
| | | } |
| | | log.info("--创建mqtt客户端"); |
| | | log.debug("--创建mqtt客户端"); |
| | | } catch (Exception e) { |
| | | log.error("创建mqtt客户端异常:" + e); |
| | | } |
| | |
| | | options.setKeepAliveInterval(PropertiesUtil.MQTT_KEEP_ALIVE); |
| | | // 是否清除session |
| | | options.setCleanSession(true); |
| | | log.info("--生成mqtt配置对象"); |
| | | log.debug("--生成mqtt配置对象"); |
| | | return options; |
| | | } |
| | | |
| | |
| | | */ |
| | | qos[i] = 1; |
| | | } |
| | | log.info("--设置消息发布质量"); |
| | | log.debug("--设置消息发布质量"); |
| | | return qos; |
| | | } |
| | | |
| | |
| | | public void create(MqttConnectOptions options, String[] topic, int[] qos) { |
| | | try { |
| | | client.setCallback(new MqttConsumerCallback(client, options, topic, qos)); |
| | | log.info("--添加回调处理类"); |
| | | log.debug("--添加回调处理类"); |
| | | client.connect(options); |
| | | } catch (Exception e) { |
| | | log.info("装载实例或订阅主题异常:" + e); |
| | |
| | | */ |
| | | public void subscribe(String topic, int qos) { |
| | | try { |
| | | log.info("topic:" + topic); |
| | | log.debug("topic:" + topic); |
| | | client.subscribe(topic, qos); |
| | | } catch (MqttException e) { |
| | | e.printStackTrace(); |
| | |
| | | */ |
| | | public static void publish(int qos, boolean retained, String topic, String pushMessage) { |
| | | if (client != null) { |
| | | log.info("【主题】:" + topic + "【qos】:" + qos + "【pushMessage】:" + pushMessage); |
| | | log.debug("【主题】:" + topic + "【qos】:" + qos + "【pushMessage】:" + pushMessage); |
| | | MqttMessage message = new MqttMessage(); |
| | | message.setQos(qos); |
| | | message.setRetained(retained); |
| | |
| | | token = mTopic.publish(message); |
| | | token.waitForCompletion(); |
| | | if (token.isComplete()) { |
| | | log.info("消息发送成功"); |
| | | log.debug("消息发送成功"); |
| | | } |
| | | } catch (MqttPersistenceException e) { |
| | | log.error("mqtt持久异常:" + e.getMessage()); |
| | |
| | | if (null != topic && null != qos) { |
| | | if (client.isConnected()) { |
| | | client.subscribe(topic, qos); |
| | | log.info("mqtt连接成功,客户端ID:" + PropertiesUtil.MQTT_CLIENT_ID); |
| | | log.info("--订阅主题::" + Arrays.toString(topic)); |
| | | log.debug("mqtt连接成功,客户端ID:" + PropertiesUtil.MQTT_CLIENT_ID); |
| | | log.debug("--订阅主题::" + Arrays.toString(topic)); |
| | | } else { |
| | | log.info("mqtt连接失败,客户端ID:" + PropertiesUtil.MQTT_CLIENT_ID); |
| | | log.debug("mqtt连接失败,客户端ID:" + PropertiesUtil.MQTT_CLIENT_ID); |
| | | } |
| | | } |
| | | } catch (Exception e) { |
| | | log.info("mqtt订阅主题异常:" + e); |
| | | log.error("mqtt订阅主题异常:" + e); |
| | | } |
| | | } |
| | | } |
| | |
| | | byte[] heart = ByteUtils.appendArrays(header, payload, payloadCrc32, footer); |
| | | // byte[] heart = {0x01, 0x02, 0x01, 0x10, 0x00, 0x00, 0x00, (byte) 0x83, (byte) 0x88, 0x5d, 0x71, 0x01, 0x02, 0x00}; |
| | | String hexString = DatatypeConverter.printHexBinary(heart); |
| | | log.info("发送心跳:" + hexString); |
| | | log.debug("发送心跳:" + hexString); |
| | | message.writeBytes(heart); |
| | | context.writeAndFlush(message); |
| | | |
| | |
| | | } |
| | | }); |
| | | } |
| | | Thread.sleep(3000); |
| | | Thread.sleep(10000); |
| | | } catch (Exception e) { |
| | | log.error("Netty初始化配置监听地址出现异常"); |
| | | e.printStackTrace(); |
| | |
| | | // 异步连接tcp服务端 |
| | | bootstrap.remoteAddress(host, port).connect().addListener((ChannelFuture futureListener) -> { |
| | | if (!futureListener.isSuccess()) { |
| | | log.error(host + ":" + port + "雷达TCP服务端连接失败"); |
| | | log.error("雷达【" + host + ":" + port + "】连接失败"); |
| | | futureListener.channel().close(); |
| | | // 连接失败信息插入Set |
| | | falseConnectSet.add(ardEquipRadar); |
| | | // 连接失败信息从map移除 |
| | | tureConnectMap.remove(futureListener.channel().id()); |
| | | } else { |
| | | log.info(host + ":" + port + "雷达TCP服务端连接成功"); |
| | | log.info("雷达【" + host + ":" + port + "】连接成功"); |
| | | // 连接成功信息从Set拔除 |
| | | falseConnectSet.remove(ardEquipRadar); |
| | | // 连接成功信息写入map |
| | |
| | | for (ArdEquipRadar ardEquipRadar : ardEquipRadars) { |
| | | String host = ardEquipRadar.getIp(); |
| | | Integer port = Integer.valueOf(ardEquipRadar.getPort()); |
| | | log.info("TCP客户端尝试连接:" + host + ":" + port); |
| | | log.debug("TCP客户端尝试连接:" + host + ":" + port); |
| | | connectServer(ardEquipRadar);//连接每一个雷达服务 |
| | | } |
| | | } |
| | |
| | | serverBootstrap = serverBootstrap.handler(new NettyUdpHandler()); |
| | | //6、绑定server,通过调用sync()方法异步阻塞,直到绑定成功 |
| | | ChannelFuture channelFuture = serverBootstrap.bind(port).sync(); |
| | | log.info("started and listened on " + channelFuture.channel().localAddress()); |
| | | log.debug("started and listened on " + channelFuture.channel().localAddress()); |
| | | //7、监听通道关闭事件,应用程序会一直等待,直到channel关闭 |
| | | channelFuture.channel().closeFuture().sync(); |
| | | } catch (Exception e) { |
| | | log.error("error:" + e.getMessage()); |
| | | } finally { |
| | | log.info("netty udp close!"); |
| | | log.debug("netty udp close!"); |
| | | //8 关闭EventLoopGroup, |
| | | bossLoopGroup.shutdownGracefully(); |
| | | } |
| | |
| | | <?xml version="1.0" encoding="UTF-8"?> |
| | | <configuration> |
| | | <!--日志存放路径--> |
| | | <property name="log.path" value="./logs"/> |
| | | <property name="log.path" value="./alarmLogs"/> |
| | | <!--日志输出格式--> |
| | | <property name="log.pattern" value="%d{HH:mm:ss.SSS}[%thread]%-5level%logger{20}-[%method,%line]-%msg%n"/> |
| | | <!--控制台输出--> |
| | |
| | | <onMismatch>DENY</onMismatch> |
| | | </filter> |
| | | </appender> |
| | | <!--hikSdk日志输出--> |
| | | <appender name="hikSdk" class="ch.qos.logback.core.rolling.RollingFileAppender"> |
| | | <file>${log.path}/hikSdk.log</file> |
| | | <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> |
| | | <!--按天回滚daily--> |
| | | <fileNamePattern>${log.path}/hikSdk.%d{yyyy-MM-dd}.log</fileNamePattern> |
| | | <!--日志最大的历史60天--> |
| | | <maxHistory>60</maxHistory> |
| | | </rollingPolicy> |
| | | <encoder> |
| | | <pattern>${log.pattern}</pattern> |
| | | </encoder> |
| | | </appender> |
| | | <root level="DEBUG"> |
| | | <appender-ref ref="console"/> |
| | | </root> |
| | |
| | | <logger name="mqtt" level="INFO"> |
| | | <appender-ref ref="mqtt"/> |
| | | </logger> |
| | | <!--hiksdk日志打印等级--> |
| | | <logger name="hikSdk" level="debug"> |
| | | <appender-ref ref="hikSdk"/> |
| | | </logger> |
| | | </configuration> |
| | | |