package org.eclipse.basyx.examples.snippets.aas.deployment.device; | |
import static org.junit.Assert.assertTrue; | |
import org.eclipse.basyx.aas.api.resources.ISingleProperty; | |
import org.eclipse.basyx.aas.api.resources.ISubModel; | |
import org.eclipse.basyx.aas.backend.connected.ConnectedAssetAdministrationShellManager; | |
import org.eclipse.basyx.aas.backend.connector.basyx.BaSyxConnectorProvider; | |
import org.eclipse.basyx.aas.backend.provider.VABMultiSubmodelProvider; | |
import org.eclipse.basyx.aas.backend.provider.VirtualPathModelProvider; | |
import org.eclipse.basyx.aas.metamodel.factory.MetaModelElementFactory; | |
import org.eclipse.basyx.aas.metamodel.hashmap.aas.SubModel; | |
import org.eclipse.basyx.aas.metamodel.hashmap.aas.submodelelement.property.Property; | |
import org.eclipse.basyx.examples.support.directory.ExampleAASRegistry; | |
import org.eclipse.basyx.vab.backend.server.basyx.BaSyxTCPServer; | |
import org.junit.Test; | |
/** | |
* Code snippet that illustrates the deployment of a AAS sub model to a device, and connects to that sub model | |
* | |
* The AAS sub model is deployed to a dynamic BaSyxTCPServer that exports the sub model using the BaSyx TCP protocol. | |
* | |
* @author kuhn | |
* | |
*/ | |
public class DeviceSubModelDeployment { | |
/** | |
* Run code snippet. Connect to AAS sub model on server, access sub model properties. | |
*/ | |
@Test | |
public void createExportAndAccessSubModel() throws Exception { | |
// Create AAS sub model and sub model properties | |
// - The MetaModelElementFactory factory class creates sub model properties and ensures | |
// presence of all meta data | |
MetaModelElementFactory fac = new MetaModelElementFactory(); | |
// - Create sub model | |
SubModel submodel = new SubModel(); | |
// - Set sub model ID "SampleSM" to full qualified ID urn:de.FHG:devices.es.iese:SampleSM:1.0:3:x-509#003 | |
submodel.setId("urn:de.FHG:devices.es.iese:SampleSM:1.0:3:x-509#003"); | |
// - Add example properties | |
submodel.getProperties().put(fac.create(new Property(), 7, "prop1")); | |
submodel.getProperties().put(fac.create(new Property(), "myStr", "prop2")); | |
// Export sub model via BaSyx server | |
VirtualPathModelProvider modelProvider = new VirtualPathModelProvider(submodel); | |
VABMultiSubmodelProvider aasProvider = new VABMultiSubmodelProvider("urn:de.FHG:devices.es.iese:SampleSM:1.0:3:x-509#003", modelProvider); | |
BaSyxTCPServer<VABMultiSubmodelProvider> server = new BaSyxTCPServer<VABMultiSubmodelProvider>(aasProvider, 9998); | |
// - Start local BaSyx/TCP server | |
server.start(); | |
// Create connected aas manager to connect with the dynamic server | |
// We pre-register the aas endpoints to the dynamic BaSyx server | |
ExampleAASRegistry registry = new ExampleAASRegistry(); | |
registry.addOnlySubmodelMapping("urn:de.FHG:devices.es.iese:SampleSM:1.0:3:x-509#003", "basyx://localhost:9998"); | |
// Create manager using the directory stub an the HTTPConnectorProvider | |
ConnectedAssetAdministrationShellManager manager = new ConnectedAssetAdministrationShellManager(registry, | |
// We connect via BaSyx TCP protocol | |
new BaSyxConnectorProvider()); | |
// Create and connect SDK connector | |
// - Retrieve sub model | |
ISubModel subModel = manager.retrieveSM("urn:de.FHG:devices.es.iese:SampleSM:1.0:3:x-509#003"); | |
// Retrieve sub model values and compare to expected values | |
String submodelId = subModel.getId(); | |
String prop1Id = subModel.getProperties().get("prop1").getId(); | |
int prop1Val = (int) ((ISingleProperty) subModel.getProperties().get("prop1")).get(); | |
String prop2Id = subModel.getProperties().get("prop2").getId(); | |
String prop2Val = (String) ((ISingleProperty) subModel.getProperties().get("prop2")).get(); | |
// Compare received property values to expected values | |
assertTrue(submodelId.equals("urn:de.FHG:devices.es.iese:SampleSM:1.0:3:x-509#003")); | |
assertTrue(prop1Id.equals("prop1")); | |
assertTrue(prop1Val == 7); | |
assertTrue(prop2Id.equals("prop2")); | |
assertTrue(prop2Val.equals("myStr")); | |
// Stop local BaSyx/TCP server | |
server.stop(); | |
} | |
} |