From 3c34f8abab5c0cea06f08d5c147d8f5baec1e5db Mon Sep 17 00:00:00 2001 From: Frank Rohde <frank.rohde@tu-dresden.de> Date: Mon, 27 Sep 2021 14:47:24 +0200 Subject: [PATCH] added much fake-functionality for demo --- .../SimpleSceneIntegration.java | 18 +++++-- .../Functionality/eventfilter/readConfig.java | 2 +- src/main/java/ipos/project/MainApp.java | 8 +++- .../api/MqttPositionHandler.java | 16 ++++++- .../UseCaseController/PositionMonitoring.java | 47 +++++++++++++++++-- src/main/resources/application.yml | 5 +- 6 files changed, 85 insertions(+), 11 deletions(-) diff --git a/src/main/java/ipos/project/DataModellntegration/SimpleSceneIntegration/SimpleSceneIntegration.java b/src/main/java/ipos/project/DataModellntegration/SimpleSceneIntegration/SimpleSceneIntegration.java index 2bcbd46..40987e4 100644 --- a/src/main/java/ipos/project/DataModellntegration/SimpleSceneIntegration/SimpleSceneIntegration.java +++ b/src/main/java/ipos/project/DataModellntegration/SimpleSceneIntegration/SimpleSceneIntegration.java @@ -14,8 +14,13 @@ import org.springframework.stereotype.Component; public class SimpleSceneIntegration { private final Logger LOG = LoggerFactory.getLogger(getClass()); + //@Autowired + public static ExternalPubServiceImpl mqttService; + @Autowired - private static ExternalPubServiceImpl mqttService; + public SimpleSceneIntegration(ExternalPubServiceImpl mqttService_){ + mqttService = mqttService_; + } /* @JmsListener(destination = "/positions", containerFactory = "jmsListenFactory") @@ -28,14 +33,21 @@ public class SimpleSceneIntegration { } }*/ - public static void receiveMessage(PositionEvent positionEvent) { + public static void receiveMessage(PositionEvent positionEvent, String monitoringTaskId) { // LOG.trace("Data integration get: " + pos); System.out.println("SimpleSceneIntegration: Data integration get: " + positionEvent); // we can translate a class into a string using several methods: 1) `.toString()` 2) `JsonFormat` in `ProtoJsonMap` //String jsonPos = ProtoJsonMap.toJson(positionEvent); // TODO: Transform Internal-PositionEvent to Protobuf-SensorPositionEvent if (positionEvent != null) { - mqttService.publish("usertopic/SensorPositionEvent", positionEvent.toString(), 0, false); + System.out.println("SimpleSceneIntegration: mqtt-message will be published: monitoringTaskId: " + monitoringTaskId + " positionEvent: " + positionEvent.toString()); + + if (null == mqttService) { + System.out.println("Warning: SimpleSceneIntegration: mqttService is null"); + } + // getsensorId, load sensor-type, agent-type, agent-id and create IposPositionEvent + // SimpleSceneTransformer.posEvent_internal2Proto(); + mqttService.publish(monitoringTaskId, positionEvent.toString(), 0, false); }else{ System.out.println("Warning: SimpleScene: Received empty PositionEvent"); } diff --git a/src/main/java/ipos/project/Functionality/eventfilter/readConfig.java b/src/main/java/ipos/project/Functionality/eventfilter/readConfig.java index da7fe67..027151f 100644 --- a/src/main/java/ipos/project/Functionality/eventfilter/readConfig.java +++ b/src/main/java/ipos/project/Functionality/eventfilter/readConfig.java @@ -24,7 +24,7 @@ public class readConfig { config.setPositionConditionCell(transformZone2PositionConditionCell(zone_monReq)); } - private static ArrayList<Float[][]> transformZone2PositionConditionCell(Zone zone) { + public static ArrayList<Float[][]> transformZone2PositionConditionCell(Zone zone) { // TODO: support Point-Types other than Point3D ArrayList<Float[][]> position_condition_cell = new ArrayList<>(); for (var space : zone.getSpace()) { diff --git a/src/main/java/ipos/project/MainApp.java b/src/main/java/ipos/project/MainApp.java index 9de63c5..e4358e3 100644 --- a/src/main/java/ipos/project/MainApp.java +++ b/src/main/java/ipos/project/MainApp.java @@ -1,5 +1,6 @@ package ipos.project; +import ipos.project.DataModellntegration.SimpleSceneIntegration.SimpleSceneIntegration; import ipos.project.Functionality.eventfilter.TestEventFilter; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @@ -15,6 +16,11 @@ import java.text.ParseException; public class MainApp { public static void main(String[] args) throws ParseException { // TestEventFilter.test(); - SpringApplication.run(MainApp.class, args); + SpringApplication.run(MainApp.class, args); + System.out.println("MainApp: Attempting to send mqtt-testmessage"); + SimpleSceneIntegration.mqttService.publish("UWB", "Testnachricht", 0, false); + SimpleSceneIntegration.mqttService.publish("Human_at_Window_Side", "Testnachricht", 0, false); + SimpleSceneIntegration.mqttService.publish("Human_at_Door_Side", "Testnachricht", 0, false); + System.out.println("sent mqtt-testmessage"); } } diff --git a/src/main/java/ipos/project/SensorValueIntegration/api/MqttPositionHandler.java b/src/main/java/ipos/project/SensorValueIntegration/api/MqttPositionHandler.java index a2c1717..a0326b2 100644 --- a/src/main/java/ipos/project/SensorValueIntegration/api/MqttPositionHandler.java +++ b/src/main/java/ipos/project/SensorValueIntegration/api/MqttPositionHandler.java @@ -4,6 +4,7 @@ import com.google.protobuf.InvalidProtocolBufferException; import ipos.models.GenericSensor.SensorPositionEvent; import ipos.models.SimpleScene.IposPosition; import ipos.models.GenericSensor.SensorEventWrapper; +import ipos.project.DataModellntegration.SimpleSceneIntegration.service.impl.ExternalPubServiceImpl; import ipos.project.DataModellntegration.iPos_Datamodel.PositionEvent; import ipos.project.SensorValueIntegration.Service.GenericSensorTransformer; import ipos.project.UseCaseController.PositionMonitoring; @@ -29,6 +30,9 @@ public class MqttPositionHandler implements Handler { this.jmsTemplate = jmsTemplate; } + // @Autowired + // private ExternalPubServiceImpl mqttService; + // method that handle new message from the topic public void handle(MqttMessage message) { try { @@ -38,9 +42,19 @@ public class MqttPositionHandler implements Handler { //IposPosition pos = IposPosition.parseFrom(message.toString().getBytes()); assert protoSensPosEvent != null; LOG.info("SensorPositionEvent received: \n" + protoSensPosEvent); + System.out.println("SimpleSceneIntegration: Proto-Point: " + protoSensPosEvent.getPosition().getPoint().toString()); PositionEvent positionEvent = GenericSensorTransformer.posEvent_GSensor2Internal(protoSensPosEvent); - System.out.println("Transformed Protobuf-SensorPositionEvent into Internal-PositionEvent: " + positionEvent.toString() + ", " + positionEvent.getPlacing().getPosition().getPoint().toString() + ", " + positionEvent.getPlacing().getOrientation().toString()); + System.out.println("SimpleSceneIntegration: Internal-Point: " + positionEvent.getPlacing().getPosition().getPoint().toString()); + + System.out.println("SensorValueIntegration: Transformed Protobuf-SensorPositionEvent into Internal-PositionEvent: " + positionEvent.toString() + ", " + positionEvent.getPlacing().getPosition().getPoint().toString() + ", " + positionEvent.getPlacing().getOrientation().toString()); + /* System.out.println("Sending Internal-PositionEvent using mqttService"); + if (null == mqttService) + System.out.println("SimpleSceneIntegration: mqttService is null"); + else + System.out.println("SimpleSceneIntegration: mqttService is not null"); + mqttService.publish("Human_at_Window_Side", positionEvent.toString(), 0, false); +*/ // ggf. anstatt JMS einfach den PositionMonitoringController per Funktionsaufruf aufrufen PositionMonitoring.receiveMessage(positionEvent); // this.jmsTemplate.convertAndSend("/PositionEvent", protoSensPosEvent); // submit position to the internal broker diff --git a/src/main/java/ipos/project/UseCaseController/PositionMonitoring.java b/src/main/java/ipos/project/UseCaseController/PositionMonitoring.java index 212871a..aae8da2 100644 --- a/src/main/java/ipos/project/UseCaseController/PositionMonitoring.java +++ b/src/main/java/ipos/project/UseCaseController/PositionMonitoring.java @@ -34,6 +34,42 @@ public class PositionMonitoring { wm.getZoneMap().get(0).getZone().add(createZone("cobot1_warning_zone", "cobot1_warning_zone", spaces)); wm.getAgent().add(createAgent("Employee1", "HUMAN")); wm.getAgent().get(0).getLObject().add(createLobject("UWB_1", "UWB", wm.getAgent().get(0), null)); + initEventFiltersForDemo(); + } + + private void initEventFiltersForDemo(){ + String taskIdWindow = "Human_at_Window_Side"; + String taskIdDoor = "Human_at_Door_Side"; + ReferenceSystem rootRefSystem = createReferenceSystem("ROOT", "ROOT", null); + eventFilter filterWindow = createWindowZoneEventFilter(taskIdWindow, rootRefSystem); + eventFilter filterDoor = createDoorZoneEventFilter(taskIdDoor, rootRefSystem); + eventFilters.add(filterDoor); + eventFilters.add(filterWindow); + } + + private eventFilter createWindowZoneEventFilter(String monitoringTaskId, ReferenceSystem rootRefSystem){ + Space windowSpace = createSpace(2.0f, 2.0f, 2.0f, createPlacing(createPosition(createPoint3D(2.0f, 4.0f, 0f), 1f, rootRefSystem), createOrientation(0f, 0f, 0f, 0f))); + Zone windowZone = createZone("cobot1_window_zone", "cobot1_window_zone", Arrays.asList(windowSpace)); + return createEventFilter(monitoringTaskId, windowZone); + } + + private eventFilter createDoorZoneEventFilter(String monitoringTaskId, ReferenceSystem rootRefSystem){ + Space windowSpace = createSpace(2.0f, 2.0f, 2.0f, createPlacing(createPosition(createPoint3D(2.0f, 0.0f, 0f), 1f, rootRefSystem), createOrientation(0f, 0f, 0f, 0f))); + Zone windowZone = createZone("cobot1_door_zone", "cobot1_door_zone", Arrays.asList(windowSpace)); + return createEventFilter(monitoringTaskId, windowZone); + } + + private eventFilter createEventFilter(String monitoringTaskId, Zone zone){ + eventFilter filter = new eventFilter(monitoringTaskId); + filter.setWM(wm); + EventFilterCondition config = modelFactory.createEventFilterCondition(); + readConfig.setWM(wm); + config.setFilterStructure(new boolean[] {false, false, false, false, false, false, false, false, true}); + config.setPositionConditionCell(readConfig.transformZone2PositionConditionCell(zone)); + + //readConfig.readFilterConfigFromMonitoringRequest(monReq, config); + filter.init(config); + return filter; } private POI createPOI(Position position, String description, Map<String, String> data){ @@ -142,9 +178,14 @@ public class PositionMonitoring { public static void receiveMessage(PositionEvent posEvent) { // LOG.info("Received <" + posEvent + ">"); System.out.println("MonitoringController: Received <" + posEvent.toString() + ">"); - eventFilter filterWindow = new eventFilter("Human_at_Window_Side"); - eventFilter filterDoor = new eventFilter("Human_at_Door_Side"); - SimpleSceneIntegration.receiveMessage(posEvent); + String taskIdWindow = "Human_at_Window_Side"; + String taskIdDoor = "Human_at_Door_Side"; + float y_coordinate = ((Point3D) posEvent.getPlacing().getPosition().getPoint()).getY(); + if (y_coordinate > 2.08f){ + SimpleSceneIntegration.receiveMessage(posEvent, taskIdWindow); + }else{ + SimpleSceneIntegration.receiveMessage(posEvent, taskIdDoor); + } /* for (eventFilter eFilter : eventFilters){ diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index c41bd95..69565e6 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -10,8 +10,9 @@ mqtt: cleanSession: true setKeepAliveInterval: 10 connectionTimeout: 20 - clientId: ipos.project - hostname: broker.hivemq.com + clientId: ipos.project.fw + hostname: 192.168.0.192 + # hostname: broker.hivemq.com port: 1883 spring: -- GitLab