Skip to content
Snippets Groups Projects
Commit 6e5d5705 authored by FrankR's avatar FrankR
Browse files

aktuellen Arbeitsstand hochgeladen (noch unfertig)

parent a55eeb23
No related branches found
No related tags found
No related merge requests found
Showing
with 214 additions and 23 deletions
......@@ -5,7 +5,7 @@
<semanticResources>iPos_Datamodel.genmodel</semanticResources>
<ownedViews xmi:type="viewpoint:DView" uid="_EpwecAQNEey-kNQ7esRa_g">
<viewpoint xmi:type="description:Viewpoint" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']"/>
<ownedRepresentationDescriptors xmi:type="viewpoint:DRepresentationDescriptor" uid="_Et4wgAQNEey-kNQ7esRa_g" name="iPos_Datamodel" repPath="#_Es-xkAQNEey-kNQ7esRa_g" changeId="6e23d65f-26dc-4643-838c-468a34fb58eb">
<ownedRepresentationDescriptors xmi:type="viewpoint:DRepresentationDescriptor" uid="_Et4wgAQNEey-kNQ7esRa_g" name="iPos_Datamodel" repPath="#_Es-xkAQNEey-kNQ7esRa_g" changeId="4f4a5b30-f4e8-4575-905e-d40e474ab771">
<description xmi:type="description_1:DiagramDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']"/>
<target xmi:type="ecore:EPackage" href="iPos_Datamodel.ecore#/"/>
</ownedRepresentationDescriptors>
......@@ -383,6 +383,10 @@
<styles xmi:type="notation:FontStyle" xmi:id="_UpH4wRFAEeydeasO1RaQEg" fontColor="2697711" fontName="Segoe UI" fontHeight="8"/>
<layoutConstraint xmi:type="notation:Location" xmi:id="_UpIf0BFAEeydeasO1RaQEg"/>
</children>
<children xmi:type="notation:Node" xmi:id="_ooLRABvcEeyPOIo-WqURQQ" type="3010" element="_onxBUBvcEeyPOIo-WqURQQ">
<styles xmi:type="notation:FontStyle" xmi:id="_ooLRARvcEeyPOIo-WqURQQ" fontColor="2697711" fontName="Segoe UI" fontHeight="8"/>
<layoutConstraint xmi:type="notation:Location" xmi:id="_ooLRAhvcEeyPOIo-WqURQQ"/>
</children>
<styles xmi:type="notation:SortingStyle" xmi:id="_lCOfwQZsEey-kNQ7esRa_g"/>
<styles xmi:type="notation:FilteringStyle" xmi:id="_lCOfwgZsEey-kNQ7esRa_g"/>
</children>
......@@ -454,7 +458,7 @@
<styles xmi:type="notation:FilteringStyle" xmi:id="_vpk49gZsEey-kNQ7esRa_g"/>
</children>
<styles xmi:type="notation:ShapeStyle" xmi:id="_vpk48QZsEey-kNQ7esRa_g" fontName="Segoe UI" fontHeight="8"/>
<layoutConstraint xmi:type="notation:Bounds" xmi:id="_vpk48gZsEey-kNQ7esRa_g" x="2478" y="120" width="138" height="195"/>
<layoutConstraint xmi:type="notation:Bounds" xmi:id="_vpk48gZsEey-kNQ7esRa_g" x="2487" y="54" width="138" height="195"/>
</children>
<children xmi:type="notation:Node" xmi:id="_yn7gcAZsEey-kNQ7esRa_g" type="2003" element="_yny9kAZsEey-kNQ7esRa_g">
<children xmi:type="notation:Node" xmi:id="_yn7gcwZsEey-kNQ7esRa_g" type="5007"/>
......@@ -2246,7 +2250,7 @@
<arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
<arrangeConstraints>KEEP_SIZE</arrangeConstraints>
<arrangeConstraints>KEEP_RATIO</arrangeConstraints>
<ownedStyle xmi:type="diagram:FlatContainerStyle" uid="_crga1RFAEeydeasO1RaQEg" borderSize="1" borderSizeComputationExpression="1" backgroundStyle="Liquid" foregroundColor="255,252,216">
<ownedStyle xmi:type="diagram:FlatContainerStyle" uid="_qwXFihvcEeyPOIo-WqURQQ" borderSize="1" borderSizeComputationExpression="1" backgroundStyle="Liquid" foregroundColor="255,252,216">
<description xmi:type="style:FlatContainerStyleDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@style"/>
</ownedStyle>
<actualMapping xmi:type="description_1:ContainerMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']"/>
......@@ -2258,6 +2262,14 @@
</ownedStyle>
<actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/>
</ownedElements>
<ownedElements xmi:type="diagram:DNodeListElement" uid="_onxBUBvcEeyPOIo-WqURQQ" name="sensorId : EString" tooltipText="">
<target xmi:type="ecore:EAttribute" href="iPos_Datamodel.ecore#//PositionEvent/sensorId"/>
<semanticElements xmi:type="ecore:EAttribute" href="iPos_Datamodel.ecore#//PositionEvent/sensorId"/>
<ownedStyle xmi:type="diagram:BundledImage" uid="_qwZhwRvcEeyPOIo-WqURQQ" labelAlignment="LEFT">
<description xmi:type="style:BundledImageDescription" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']/@style"/>
</ownedStyle>
<actualMapping xmi:type="description_1:NodeMapping" href="platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign#//@ownedViewpoints[name='Design']/@ownedRepresentations[name='Entities']/@defaultLayer/@containerMappings[name='EC%20EClass']/@subNodeMappings[name='EC%20EAttribute']"/>
</ownedElements>
</ownedDiagramElements>
<ownedDiagramElements xmi:type="diagram:DNodeList" uid="_ovifAAZsEey-kNQ7esRa_g" name="RawdataEvent" tooltipText="" outgoingEdges="_T72oPgaBEey-kNQ7esRa_g" width="12" height="10">
<target xmi:type="ecore:EClass" href="iPos_Datamodel.ecore#//RawdataEvent"/>
......
......@@ -119,6 +119,7 @@
eType="#//Placing"/>
<eStructuralFeatures xsi:type="ecore:EAttribute" name="timeStamp" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String"
transient="true"/>
<eStructuralFeatures xsi:type="ecore:EAttribute" name="sensorId" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="RawdataEvent">
<eStructuralFeatures xsi:type="ecore:EReference" name="rawdata" lowerBound="1"
......
......@@ -110,6 +110,7 @@
<genClasses ecoreClass="iPos_Datamodel.ecore#//PositionEvent">
<genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference iPos_Datamodel.ecore#//PositionEvent/placing"/>
<genFeatures createChild="false" ecoreFeature="ecore:EAttribute iPos_Datamodel.ecore#//PositionEvent/timeStamp"/>
<genFeatures createChild="false" ecoreFeature="ecore:EAttribute iPos_Datamodel.ecore#//PositionEvent/sensorId"/>
</genClasses>
<genClasses ecoreClass="iPos_Datamodel.ecore#//RawdataEvent">
<genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference iPos_Datamodel.ecore#//RawdataEvent/rawdata"/>
......
......@@ -34,7 +34,7 @@ public class MqttRequestHandler implements Handler {
MonitoringRequest monReqInternal = SimpleSceneTransformer.monReq_SScene2Internal(monReqProto);
// TODO: send request via JMS to MonitoringController
this.jmsTemplate.convertAndSend("/request123", monReqProto); // submit request to the internal broker
this.jmsTemplate.convertAndSend("/request123", monReqInternal); // submit request to the internal broker
} catch (InvalidProtocolBufferException e) {
e.printStackTrace();
}
......
......@@ -1345,6 +1345,15 @@ public interface IPos_DatamodelPackage extends EPackage {
*/
int POSITION_EVENT__TIME_STAMP = 1;
/**
* The feature id for the '<em><b>Sensor Id</b></em>' attribute.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
* @ordered
*/
int POSITION_EVENT__SENSOR_ID = 2;
/**
* The number of structural features of the '<em>Position Event</em>' class.
* <!-- begin-user-doc -->
......@@ -3253,6 +3262,17 @@ public interface IPos_DatamodelPackage extends EPackage {
*/
EAttribute getPositionEvent_TimeStamp();
/**
* Returns the meta object for the attribute '{@link ipos.project.DataModellntegration.iPos_Datamodel.PositionEvent#getSensorId <em>Sensor Id</em>}'.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @return the meta object for the attribute '<em>Sensor Id</em>'.
* @see ipos.project.DataModellntegration.iPos_Datamodel.PositionEvent#getSensorId()
* @see #getPositionEvent()
* @generated
*/
EAttribute getPositionEvent_SensorId();
/**
* Returns the meta object for class '{@link ipos.project.DataModellntegration.iPos_Datamodel.RawdataEvent <em>Rawdata Event</em>}'.
* <!-- begin-user-doc -->
......@@ -4588,6 +4608,14 @@ public interface IPos_DatamodelPackage extends EPackage {
*/
EAttribute POSITION_EVENT__TIME_STAMP = eINSTANCE.getPositionEvent_TimeStamp();
/**
* The meta object literal for the '<em><b>Sensor Id</b></em>' attribute feature.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
EAttribute POSITION_EVENT__SENSOR_ID = eINSTANCE.getPositionEvent_SensorId();
/**
* The meta object literal for the '{@link ipos.project.DataModellntegration.iPos_Datamodel.impl.RawdataEventImpl <em>Rawdata Event</em>}' class.
* <!-- begin-user-doc -->
......
......@@ -66,4 +66,26 @@ public interface PositionEvent extends EObject {
*/
void setTimeStamp(String value);
/**
* Returns the value of the '<em><b>Sensor Id</b></em>' attribute.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @return the value of the '<em>Sensor Id</em>' attribute.
* @see #setSensorId(String)
* @see ipos.project.DataModellntegration.iPos_Datamodel.IPos_DatamodelPackage#getPositionEvent_SensorId()
* @model
* @generated
*/
String getSensorId();
/**
* Sets the value of the '{@link ipos.project.DataModellntegration.iPos_Datamodel.PositionEvent#getSensorId <em>Sensor Id</em>}' attribute.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @param value the new value of the '<em>Sensor Id</em>' attribute.
* @see #getSensorId()
* @generated
*/
void setSensorId(String value);
} // PositionEvent
......@@ -1174,6 +1174,15 @@ public class IPos_DatamodelPackageImpl extends EPackageImpl implements IPos_Data
return (EAttribute) positionEventEClass.getEStructuralFeatures().get(1);
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public EAttribute getPositionEvent_SensorId() {
return (EAttribute) positionEventEClass.getEStructuralFeatures().get(2);
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
......
......@@ -59,6 +59,26 @@ public class PositionEventImpl extends MinimalEObjectImpl.Container implements P
*/
protected String timeStamp = TIME_STAMP_EDEFAULT;
/**
* The default value of the '{@link #getSensorId() <em>Sensor Id</em>}' attribute.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @see #getSensorId()
* @generated
* @ordered
*/
protected static final String SENSOR_ID_EDEFAULT = null;
/**
* The cached value of the '{@link #getSensorId() <em>Sensor Id</em>}' attribute.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @see #getSensorId()
* @generated
* @ordered
*/
protected String sensorId = SENSOR_ID_EDEFAULT;
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
......@@ -140,6 +160,28 @@ public class PositionEventImpl extends MinimalEObjectImpl.Container implements P
oldTimeStamp, timeStamp));
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public String getSensorId() {
return sensorId;
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
public void setSensorId(String newSensorId) {
String oldSensorId = sensorId;
sensorId = newSensorId;
if (eNotificationRequired())
eNotify(new ENotificationImpl(this, Notification.SET, IPos_DatamodelPackage.POSITION_EVENT__SENSOR_ID,
oldSensorId, sensorId));
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
......
......@@ -49,9 +49,9 @@ public class TestEventFilter {
events.put(tagNames.tagY,"2.456");
events.put(tagNames.tagZ, "1");
events.put(tagNames.tagAccuracy,"0.15"); */
testPoint3D.setX((float) 1.34);
testPoint3D.setY((float) 2.456);
testPoint3D.setZ((float) 1);
testPoint3D.setX((float) 3.34);
testPoint3D.setY((float) 2.656);
testPoint3D.setZ((float) 2);
testPosition.setPoint(testPoint3D);
testPlacing.setPosition(testPosition);
testLObject.setId("AGV001");
......
......@@ -5,6 +5,7 @@ import ipos.project.Functionality.eventfilter.Cell.Vector3;
import ipos.project.DataModellntegration.iPos_Datamodel.*;
import java.sql.Timestamp;
import java.lang.Math;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
......@@ -70,11 +71,14 @@ public class eventFilter {
return (float) Math.hypot(Math.hypot(dx, dy), dz);
}
private static boolean is_in_cell(Vector3 cod, Vector3 ref, Vector3 size, Quaternion rot){
cod.sub(ref);
rot.toMatrix();
private static boolean is_in_cell(Point3D cod, Float[] ref, Float[] size, Float[] rot){
if ((Math.abs(cod.getX()-ref[0])<= size[0]/2) && (Math.abs(cod.getY()-ref[1])<= size[1]/2) && (Math.abs(cod.getZ()-ref[2])<= size[2]/2)) {
return true;
}
else {
return false;
}
}
public boolean process(PositionEvent event) throws ParseException {
IPos_DatamodelFactory dataModelFactory = IPos_DatamodelFactory.eINSTANCE;
......@@ -216,19 +220,21 @@ public class eventFilter {
System.out.println("Filter status (position_delta) " + ": " + flag);
//filter positionCondition_cell condition
/*if (filterStructure[8] && !flag) {
if (filterStructure[8] && !flag) {
flag = true; //switch the filter status to block, if the event meet the filter condition, switch to pass
Vector3 cod = new Vector3(Double.parseDouble(event.getPositionInfo().getPosition().getCoordinate().getX()),Double.parseDouble(event.getPositionInfo().getPosition().getCoordinate().getY()),Double.parseDouble(event.getPositionInfo().getPosition().getCoordinate().getZ()));
for (int i = 0; i < positionCondition_cell.size(); i++) {
Vector3 ref = new Vector3(positionCondition_cell.get(i)[0][0], positionCondition_cell.get(i)[0][1], positionCondition_cell.get(i)[0][2]);
Vector3 size = new Vector3(positionCondition_cell.get(i)[1][0], positionCondition_cell.get(i)[1][1], positionCondition_cell.get(i)[1][2]);
Quaternion rot = new Quaternion(positionCondition_cell.get(i)[2][0], positionCondition_cell.get(i)[2][1], positionCondition_cell.get(i)[2][2], positionCondition_cell.get(i)[2][3]);
if (is_in_cell(cod, ref, size, rot)) {
if (event.getPlacing().getPosition() instanceof RelativePosition) {
RelativePosition rPosition = (RelativePosition) event.getPlacing().getPosition();
for (int i = 0; i < positionConditionCell.size(); i++) {
if (rPosition.getPoint() instanceof Point3D) {
Point3D cod = (Point3D) rPosition.getPoint();
if (is_in_cell(cod, positionConditionCell.get(i)[0], positionConditionCell.get(i)[1], positionConditionCell.get(i)[2])) {
flag = false;
}
}
}
System.out.println("Filter status (positionCondition_cell) " + ": " + flag);*/
}
}
System.out.println("Filter status (positionCondition_cell) " + ": " + flag);
if (!flag) {
......
package ipos.project.Functionality.eventfilter;
import ipos.project.DataModellntegration.iPos_Datamodel.EventFilterCondition;
import ipos.project.DataModellntegration.iPos_Datamodel.MonitoringRequest;
import ipos.project.DataModellntegration.iPos_Datamodel.WorldModel;
import ipos.project.DataModellntegration.iPos_Datamodel.Zone;
import org.json.JSONArray;
import org.json.JSONObject;
import javax.xml.stream.EventFilter;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.List;
public class readConfig {
// kommt später raus, Zugriff auf Weltmodell erfolgt eigentlich über Komponente DataRetrieval
private static WorldModel wm;
public static void readFilterConfigFromMonitoringRequest (MonitoringRequest monReq, EventFilterCondition config){
// wichtig bis Freitag: Kriterien "position_delta" und "position_condition_cell" aus config-file
float delta_monReq = monReq.getDelta();
String frameId_monReq = monReq.getFrameId();
Zone zone_monReq = retrieveZone(frameId_monReq);
config.setFilterStructure(new boolean[] {false, false, false, false, false, false, false, true, true});
config.setPositionDelta(delta_monReq);
ArrayList<Float[][]> position_condition_cell = new ArrayList<>();
Float[][] cell_c = new Float[3][4];
// erste Dimension wählt aus: Position, Space, Quaternion
// zweite Dimension wählt aus: x,y,z,w
}
private static Zone retrieveZone(String zoneId){
List<Zone> knownZones = wm.getZoneMap().get(0).getZone();
for (var zone : knownZones){
if(zone.getId().equals(zoneId)){
return zone;
}
}
return null;
}
public static void setWM(WorldModel worldModel){
wm = worldModel;
}
public static void readFilterConfigFromJson (String json_file, EventFilterCondition config) throws Exception {
//Time condition: One time condition consist of two timestamp in format "yyyy-MM-dd HH:mm:ss.SSS", if the timestamp of the position event falls in between, the event passes.
......@@ -261,8 +296,9 @@ public class readConfig {
System.out.println("\tsensor_id_condition : " + config.getSensorIdCondition());
System.out.println("\tid_condition : " + config.getIdCondition());
System.out.println("\taccuracy_condition : " + config.getAccuracyCondition());
System.out.println("\tposition_condition : " + config.getPositionCondition().get(0)[0] + ", " + config.getPositionCondition().get(0)[1] + ", " + config.getPositionCondition().get(0)[2] + ", " + config.getPositionCondition().get(0)[3]);
//System.out.println("\tposition_condition : " + config.getPositionCondition().get(0)[0] + ", " + config.getPositionCondition().get(0)[1] + ", " + config.getPositionCondition().get(0)[2] + ", " + config.getPositionCondition().get(0)[3]);
System.out.println("\ttime_min_interval : " + config.getTimeMinInterval());
System.out.println("\tposition_delta : " + config.getPositionDelta());
System.out.println("\tfilter_structure : " + config.getFilterStructure());
}
}
......@@ -10,7 +10,8 @@ import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import java.text.ParseException;
@SpringBootApplication
@EnableJpaRepositories("ipos.project.models.SimpleScene.*")
// @EnableJpaRepositories("ipos.project.models.SimpleScene.*")
@EnableJpaRepositories("ipos.project.DataModellntegration.iPos_Datamodel.impl")
public class MainApp {
public static void main(String[] args) throws ParseException {
TestEventFilter.test();
......
package ipos.project.UseCaseController;
import ipos.project.DataModellntegration.iPos_Datamodel.*;
import ipos.project.Functionality.eventfilter.eventFilter;
import ipos.project.Functionality.eventfilter.readConfig;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.jms.annotation.JmsListener;
......@@ -8,6 +10,8 @@ import org.springframework.stereotype.Component;
import ipos.models.SimpleScene.IposPosition;
import java.lang.ref.Reference;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
......@@ -17,7 +21,8 @@ import java.util.Map;
public class PositionMonitoring {
private final Logger LOG = LoggerFactory.getLogger(getClass());
WorldModel wm;
public WorldModel wm;
List<eventFilter> eventFilters = new ArrayList<eventFilter>();
private IPos_DatamodelFactory modelFactory = IPos_DatamodelFactory.eINSTANCE;
public void initialize(){
......@@ -120,4 +125,32 @@ public class PositionMonitoring {
public void receiveMessage(IposPosition pos) {
LOG.info("Received <" + pos + ">");
}
@JmsListener(destination = "/monitoringRequest", containerFactory = "jmsListenFactory")
public void receiveMessage(MonitoringRequest monReq) {
LOG.info("Received <" + monReq + ">");
eventFilter filter = new eventFilter();
EventFilterCondition config = modelFactory.createEventFilterCondition();
readConfig.setWM(wm);
readConfig.readFilterConfigFromMonitoringRequest(monReq, config);
filter.init(config);
eventFilters.add(filter);
// SimpleSceneIntegration muss MQTT-topic gemäß monreq.MonitoringTaskId einrichten
}
@JmsListener(destination = "/PositionEvent", containerFactory = "jmsListenFactory")
public void receiveMessage(PositionEvent posEvent) {
LOG.info("Received <" + posEvent + ">");
for (eventFilter eFilter : eventFilters){
try {
if(eFilter.process(posEvent)){
// mqtt-topic (=monitoringTaskId) beschaffen
// posEvent mit mqtt-topic an SimpleSceneIntegration-Komponente zum Aussenden weiterleiten
}
} catch (ParseException e) {
e.printStackTrace();
}
}
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment