Skip to content
Snippets Groups Projects
Commit 39392a52 authored by FrankR's avatar FrankR
Browse files

GenericSensorValueProcessor receives JSON-SensorPositionEvent and transforms...

GenericSensorValueProcessor receives JSON-SensorPositionEvent and transforms it into Protobuf-SensorPositionEvent and Internal-PositionEvent
fixed IndexOutOfBounds-Exception in PositionMonitoringController-Initcode
eventFilter verification-code uses correct return-values
parent 36fbfba3
No related branches found
No related tags found
No related merge requests found
...@@ -107,15 +107,16 @@ public class eventFilter { ...@@ -107,15 +107,16 @@ public class eventFilter {
boolean flag = false; //false for pass, true for block boolean flag = false; //false for pass, true for block
if (null == event.getPlacing() || null == event.getPlacing().getPosition() || null == event.getPlacing().getPosition().getPoint()){ if (null == event.getPlacing() || null == event.getPlacing().getPosition() || null == event.getPlacing().getPosition().getPoint()){
System.out.println("EventFilter: Warning: Received event with unknown Position. Sensor-id: " + event.getSensorId()); System.out.println("EventFilter: Warning: Received event with unknown Position. Sensor-id: " + event.getSensorId());
return false; return true;
} }
if (null == lObject){ if (null == lObject){
System.out.println("EventFilter: Warning: Received event from sensor with unknown sensor-id: " + event.getSensorId()); System.out.println("EventFilter: Warning: Received event from sensor with unknown sensor-id: " + event.getSensorId());
return false; return true;
} }
Agent agent = lObject.getAgent(); Agent agent = lObject.getAgent();
if (null == agent){ if (null == agent){
System.out.println("EventFilter: Warning: Received event for sensor-id with unknown agent. Sensor-id: " + lObject.getId()); System.out.println("EventFilter: Warning: Received event for sensor-id with unknown agent. Sensor-id: " + lObject.getId());
return true;
} }
System.out.println("Filter structure: " + filterStructure[0] + ", " + filterStructure[1] + ", " + filterStructure[2] + ", " + filterStructure[3] + ", " + filterStructure[4] + ", " + filterStructure[5] + ", " + filterStructure[6] + ", " + filterStructure[7]); System.out.println("Filter structure: " + filterStructure[0] + ", " + filterStructure[1] + ", " + filterStructure[2] + ", " + filterStructure[3] + ", " + filterStructure[4] + ", " + filterStructure[5] + ", " + filterStructure[6] + ", " + filterStructure[7]);
......
...@@ -14,7 +14,7 @@ import java.text.ParseException; ...@@ -14,7 +14,7 @@ import java.text.ParseException;
@EnableJpaRepositories("ipos.project.DataModellntegration.iPos_Datamodel.impl") @EnableJpaRepositories("ipos.project.DataModellntegration.iPos_Datamodel.impl")
public class MainApp { public class MainApp {
public static void main(String[] args) throws ParseException { public static void main(String[] args) throws ParseException {
TestEventFilter.test(); // TestEventFilter.test();
SpringApplication.run(MainApp.class, args); SpringApplication.run(MainApp.class, args);
} }
} }
package ipos.project.SensorValueIntegration;
import ipos.models.SimpleScene.IposPosition;
import ipos.project.DataModellntegration.SimpleSceneIntegration.service.impl.ExternalPubServiceImpl;
import ipos.project.mapper.ProtoJsonMap;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jms.annotation.JmsListener;
import org.springframework.stereotype.Component;
@Component
public class GenericSensorValueProcessor {
private final Logger LOG = LoggerFactory.getLogger(getClass());
@Autowired
private ExternalPubServiceImpl mqttService;
@JmsListener(destination = "/positions", containerFactory = "jmsListenFactory")
public void receiveMessage(IposPosition pos) {
LOG.trace("Data integration get: " + pos);
// we can translate a class into a string using several methods: 1) `.toString()` 2) `JsonFormat` in `ProtoJsonMap`
String jsonPos = ProtoJsonMap.toJson(pos);
if (jsonPos != null) {
this.mqttService.publish("test51/subscribe/positions", jsonPos, 0, false);
}
}
}
package ipos.project.SensorValueIntegration.Service;
import com.google.protobuf.ProtocolStringList;
import ipos.models.GenericSensor;
import ipos.models.SimpleScene;
import ipos.project.DataModellntegration.iPos_Datamodel.*;
import java.util.ArrayList;
import java.util.List;
public class GenericSensorTransformer {
private static IPos_DatamodelFactory modelFactory = IPos_DatamodelFactory.eINSTANCE;
private static List<String> toJavaStringList(ProtocolStringList protoList){
List<String> javaList = new ArrayList<String>();
for(int i = 0; i < protoList.size(); i++ ){
javaList.set(i, protoList.get(i));
}
return javaList;
}
public static SimpleScene.IposMonitoringRequest monReq_Internal2SScene(){
return null;
}
public static PositionEvent posEvent_GSensor2Internal(GenericSensor.SensorPositionEvent protoSensPosEvent) {
PositionEvent positionEvent = modelFactory.createPositionEvent();
positionEvent.setTimeStamp(protoSensPosEvent.getLastPosUpdate());
positionEvent.setSensorId(protoSensPosEvent.getSensorId());
// TODO: Zugriff auf Weltmodell ermöglichen um Bezugssystem-Objekt beschaffen zu können
positionEvent.setPlacing(
createPlacing(
createPosition(
createPoint3D(
protoSensPosEvent.getPosition().getPoint().getX(),
protoSensPosEvent.getPosition().getPoint().getY(),
protoSensPosEvent.getPosition().getPoint().getZ()
),
protoSensPosEvent.getPosition().getAccuracy(),
createReferenceSystem("ROOT", "ROOT", null)
),
createOrientation(
protoSensPosEvent.getOrientation().getX(),
protoSensPosEvent.getOrientation().getY(),
protoSensPosEvent.getOrientation().getZ(),
protoSensPosEvent.getOrientation().getW()
)
));
return positionEvent;
}
private static ReferenceSystem createReferenceSystem(String name, String id, Placing origin){
ReferenceSystem refSystem = modelFactory.createReferenceSystem();
refSystem.setName(name);
refSystem.setId(id);
refSystem.setOrigin(origin);
return refSystem;
}
private static Placing createPlacing(Position position, Orientation orientation){
Placing placing = modelFactory.createPlacing();
placing.setPosition(position);
placing.setOrientation(orientation);
return placing;
}
private static Position createPosition(Point3D point3D, Float accuracy, ReferenceSystem refSystem){
Position position = modelFactory.createPosition();
position.setPoint(point3D);
Gaussian accrcy = modelFactory.createGaussian();
accrcy.setConfidenceInterval(accuracy);
position.setAccuracy(accrcy);
position.setReferenceSystem(refSystem);
return position;
}
private static Point3D createPoint3D(float x, float y, float z){
Point3D point3D = modelFactory.createPoint3D();
point3D.setX(x);
point3D.setY(y);
point3D.setZ(z);
return point3D;
}
private static Quaternion createOrientation(float x, float y, float z, float w){
Quaternion quaternion = modelFactory.createQuaternion();
quaternion.setX(x);
quaternion.setY(y);
quaternion.setZ(z);
quaternion.setW(w);
return quaternion;
}
}
package ipos.project.SensorValueIntegration.api; package ipos.project.SensorValueIntegration.api;
import com.google.protobuf.InvalidProtocolBufferException; import com.google.protobuf.InvalidProtocolBufferException;
import ipos.models.GenericSensor.SensorPositionEvent;
import ipos.models.SimpleScene.IposPosition; import ipos.models.SimpleScene.IposPosition;
import ipos.models.GenericSensor.SensorEventWrapper;
import ipos.project.DataModellntegration.iPos_Datamodel.PositionEvent;
import ipos.project.SensorValueIntegration.Service.GenericSensorTransformer;
import ipos.project.config.mqtt.Handler; import ipos.project.config.mqtt.Handler;
import ipos.project.config.mqtt.MqttListener; import ipos.project.config.mqtt.MqttListener;
import ipos.project.mapper.ProtoJsonMap; import ipos.project.mapper.ProtoJsonMap;
...@@ -13,7 +17,7 @@ import org.springframework.jms.core.JmsTemplate; ...@@ -13,7 +17,7 @@ import org.springframework.jms.core.JmsTemplate;
// subscribe to the topic // subscribe to the topic
@MqttListener("test51/publish/positions") @MqttListener("usertopic/SensorPositionEvent")
public class MqttPositionHandler implements Handler { public class MqttPositionHandler implements Handler {
private final Logger LOG = LoggerFactory.getLogger(getClass()); private final Logger LOG = LoggerFactory.getLogger(getClass());
...@@ -27,12 +31,17 @@ public class MqttPositionHandler implements Handler { ...@@ -27,12 +31,17 @@ public class MqttPositionHandler implements Handler {
// method that handle new message from the topic // method that handle new message from the topic
public void handle(MqttMessage message) { public void handle(MqttMessage message) {
try { try {
IposPosition pos = ProtoJsonMap.fromJson(message.toString(), IposPosition.class); System.out.println("Received MQTT-message: " + message.toString());
SensorPositionEvent protoSensPosEvent = ProtoJsonMap.fromJson(message.toString(), SensorPositionEvent.class);
// example-JSON: {"sensorId": "UWB_1", "position": {"refSystemId": "ROOT", "point": {"x": 3.0,"y": 2.0,"z": 3.0}, "accuracy": 1.0}, "orientation": {"x": 1.0,"y": 0.5,"z": 1.0, "w": 1.5}, "lastPosUpdate": "2021-09-14T09:41:20+00:00"}
//IposPosition pos = IposPosition.parseFrom(message.toString().getBytes()); //IposPosition pos = IposPosition.parseFrom(message.toString().getBytes());
assert pos != null; assert protoSensPosEvent != null;
LOG.info("IposPosition received: \n" + pos); LOG.info("SensorPositionEvent received: \n" + protoSensPosEvent);
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());
this.jmsTemplate.convertAndSend("/positions", pos); // submit position to the internal broker // ggf. anstatt JMS einfach den PositionMonitoringController per Funktionsaufruf aufrufen
this.jmsTemplate.convertAndSend("/PositionEvent", protoSensPosEvent); // submit position to the internal broker
//TODO: fix message converter for the internal broker //TODO: fix message converter for the internal broker
} catch (InvalidProtocolBufferException e) { } catch (InvalidProtocolBufferException e) {
LOG.error("Invalid mqtt message:", e); LOG.error("Invalid mqtt message:", e);
......
...@@ -22,17 +22,17 @@ public class PositionMonitoring { ...@@ -22,17 +22,17 @@ public class PositionMonitoring {
List<eventFilter> eventFilters = new ArrayList<eventFilter>(); List<eventFilter> eventFilters = new ArrayList<eventFilter>();
private IPos_DatamodelFactory modelFactory = IPos_DatamodelFactory.eINSTANCE; private IPos_DatamodelFactory modelFactory = IPos_DatamodelFactory.eINSTANCE;
public void initialize(){ public PositionMonitoring(){
wm = modelFactory.createWorldModel(); wm = modelFactory.createWorldModel();
wm.getReferenceSystem().set(0, createReferenceSystem("ROOT", "ROOT", null)); wm.getReferenceSystem().add(createReferenceSystem("ROOT", "ROOT", null));
wm.getPois().set(0, createPOI(createPosition(createPoint3D(1.4f, 2.0f, 0f), 1f, wm.getReferenceSystem().get(0)), "UWBToken1", new HashMap<String,String>())); wm.getPois().add(createPOI(createPosition(createPoint3D(1.4f, 2.0f, 0f), 1f, wm.getReferenceSystem().get(0)), "UWBToken1", new HashMap<String,String>()));
wm.getPois().set(1, createPOI(createPosition(createPoint3D(3.7f, -2.0f, 0f), 1f, wm.getReferenceSystem().get(0)), "UWBToken2", new HashMap<String,String>())); wm.getPois().add(createPOI(createPosition(createPoint3D(3.7f, -2.0f, 0f), 1f, wm.getReferenceSystem().get(0)), "UWBToken2", new HashMap<String,String>()));
wm.getPois().set(2, createPOI(createPosition(createPoint3D(-2.4f, -0.5f, 0f), 1f, wm.getReferenceSystem().get(0)), "UWBToken3", new HashMap<String,String>())); wm.getPois().add(createPOI(createPosition(createPoint3D(-2.4f, -0.5f, 0f), 1f, wm.getReferenceSystem().get(0)), "UWBToken3", new HashMap<String,String>()));
wm.getZoneMap().set(0, modelFactory.createZoneMap()); wm.getZoneMap().add(modelFactory.createZoneMap());
List<Space> spaces = Arrays.asList(createSpace(3.0f, 3.0f, 3.0f, createPlacing(createPosition(createPoint3D(1.1f, 0.9f, 0f), 1f, wm.getReferenceSystem().get(0)), createOrientation(0f, 0f, 0f, 0f)))); List<Space> spaces = Arrays.asList(createSpace(3.0f, 3.0f, 3.0f, createPlacing(createPosition(createPoint3D(1.1f, 0.9f, 0f), 1f, wm.getReferenceSystem().get(0)), createOrientation(0f, 0f, 0f, 0f))));
wm.getZoneMap().get(0).getZone().set(0, createZone("cobot1_warning_zone", "cobot1_warning_zone", spaces)); wm.getZoneMap().get(0).getZone().add(createZone("cobot1_warning_zone", "cobot1_warning_zone", spaces));
wm.getAgent().set(0, createAgent("Employee1", "HUMAN", null )); wm.getAgent().add(createAgent("Employee1", "HUMAN"));
wm.getAgent().get(0).getLObject().set(0, createLobject("UWB_1", "UWB", wm.getAgent().get(0), null)); wm.getAgent().get(0).getLObject().add(createLobject("UWB_1", "UWB", wm.getAgent().get(0), null));
} }
private POI createPOI(Position position, String description, Map<String, String> data){ private POI createPOI(Position position, String description, Map<String, String> data){
...@@ -43,11 +43,10 @@ public class PositionMonitoring { ...@@ -43,11 +43,10 @@ public class PositionMonitoring {
return poi; return poi;
} }
private Agent createAgent(String id, String type, List<LocalizableObject> lobjects){ private Agent createAgent(String id, String type){
Agent agent = modelFactory.createAgent(); Agent agent = modelFactory.createAgent();
agent.setId(id); agent.setId(id);
agent.setAgentType(type); agent.setAgentType(type);
agent.getLObject().addAll(lobjects);
return agent; return agent;
} }
...@@ -135,6 +134,7 @@ public class PositionMonitoring { ...@@ -135,6 +134,7 @@ public class PositionMonitoring {
readConfig.setWM(wm); readConfig.setWM(wm);
readConfig.readFilterConfigFromMonitoringRequest(monReq, config); readConfig.readFilterConfigFromMonitoringRequest(monReq, config);
filter.init(config); filter.init(config);
eventFilters.add(filter);
} }
@JmsListener(destination = "/PositionEvent", containerFactory = "jmsListenFactory") @JmsListener(destination = "/PositionEvent", containerFactory = "jmsListenFactory")
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment