Exemplo n.º 1
0
        private IResult <IAssetAdministrationShellDescriptor> ReadAssetAdministrationShell(string aasFilePath)
        {
            if (string.IsNullOrEmpty(aasFilePath))
            {
                return(new Result <IAssetAdministrationShellDescriptor>(new ArgumentNullException(nameof(aasFilePath))));
            }

            if (File.Exists(aasFilePath))
            {
                try
                {
                    string aasContent = File.ReadAllText(aasFilePath);
                    IAssetAdministrationShellDescriptor descriptor = JsonConvert.DeserializeObject <IAssetAdministrationShellDescriptor>(aasContent, JsonSerializerSettings);

                    var submodelDescriptors = RetrieveSubmodels(descriptor.Identification.Id);
                    if (submodelDescriptors.Success && submodelDescriptors.Entity != null)
                    {
                        descriptor.SubmodelDescriptors = submodelDescriptors.Entity;
                    }

                    return(new Result <IAssetAdministrationShellDescriptor>(true, descriptor));
                }
                catch (Exception e)
                {
                    return(new Result <IAssetAdministrationShellDescriptor>(e));
                }
            }
            else
            {
                return(new Result <IAssetAdministrationShellDescriptor>(false, new NotFoundMessage("Asset Administration Shell")));
            }
        }
Exemplo n.º 2
0
        public IResult <IAssetAdministrationShellDescriptor> RetrieveAssetAdministrationShell(string aasId)
        {
            if (string.IsNullOrEmpty(aasId))
            {
                return(new Result <IAssetAdministrationShellDescriptor>(new ArgumentNullException(nameof(aasId))));
            }

            string aasIdHash   = GetHashString(aasId);
            string aasFilePath = Path.Combine(FolderPath, aasIdHash, aasIdHash) + ".json";

            if (File.Exists(aasFilePath))
            {
                try
                {
                    string aasContent = File.ReadAllText(aasFilePath);
                    IAssetAdministrationShellDescriptor descriptor = JsonConvert.DeserializeObject <IAssetAdministrationShellDescriptor>(aasContent, JsonSerializerSettings);

                    var submodelDescriptors = RetrieveSubmodels(aasId);
                    if (submodelDescriptors.Success && submodelDescriptors.Entity?.Count > 0)
                    {
                        descriptor.SubmodelDescriptors = submodelDescriptors.Entity;
                    }

                    return(new Result <IAssetAdministrationShellDescriptor>(true, descriptor));
                }
                catch (Exception e)
                {
                    return(new Result <IAssetAdministrationShellDescriptor>(e));
                }
            }
            else
            {
                return(new Result <IAssetAdministrationShellDescriptor>(false, new NotFoundMessage($"Asset Administration Shell with {aasId}")));
            }
        }
        public IActionResult RegisterAssetAdministrationShell([FromBody] IAssetAdministrationShellDescriptor aasDescriptor)
        {
            if (aasDescriptor == null)
            {
                return(ResultHandling.NullResult(nameof(aasDescriptor)));
            }

            var result = CreateAssetAdministrationShell(aasDescriptor);

            return(result.CreateActionResult(CrudOperation.Create, "api/v1/registry/" + HttpUtility.UrlEncode(aasDescriptor.Identification.Id)));
        }
Exemplo n.º 4
0
 public void RepeatRegistration(IAssetAdministrationShellDescriptor aas, CancellationTokenSource cancellationToken)
 {
     RepeatRegistrationCancellationToken = cancellationToken;
     Task.Factory.StartNew(async() =>
     {
         while (!cancellationToken.IsCancellationRequested)
         {
             IResult <IAssetAdministrationShellDescriptor> result = CreateAssetAdministrationShell(aas);
             logger.Info("Registration-Renewal - Success: " + result.Success + " | Messages: " + result.Messages.ToString());
             await Task.Delay(RepeatRegistrationInterval);
         }
     }, cancellationToken.Token, TaskCreationOptions.LongRunning, TaskScheduler.Default);
 }
        public AssetAdministrationShellHttpClient(IAssetAdministrationShellDescriptor aasDescriptor) : this()
        {
            aasDescriptor = aasDescriptor ?? throw new ArgumentNullException(nameof(aasDescriptor));
            HttpEndpoint httpEndpoint = aasDescriptor.Endpoints?.OfType <HttpEndpoint>()?.FirstOrDefault();

            if (httpEndpoint == null || string.IsNullOrEmpty(httpEndpoint.Address))
            {
                throw new Exception("There is no http endpoint for instantiating a client");
            }
            else
            {
                if (!httpEndpoint.Address.EndsWith(SEPARATOR + AAS) || !httpEndpoint.Address.EndsWith(SEPARATOR + AAS + SEPARATOR))
                {
                    Endpoint = new Uri(httpEndpoint.Address + SEPARATOR + AAS);
                }
                else
                {
                    Endpoint = new Uri(httpEndpoint.Address);
                }
            }
        }
Exemplo n.º 6
0
        public IResult <IAssetAdministrationShellDescriptor> CreateAssetAdministrationShell(IAssetAdministrationShellDescriptor aas)
        {
            var request  = base.CreateJsonContentRequest(GetUri(), HttpMethod.Post, aas);
            var response = base.SendRequest(request, Timeout);

            return(base.EvaluateResponse <IAssetAdministrationShellDescriptor>(response, response.Entity));
        }
Exemplo n.º 7
0
        public IResult <IAssetAdministrationShellDescriptor> CreateAssetAdministrationShell(IAssetAdministrationShellDescriptor aasDescriptor)
        {
            if (aasDescriptor == null)
            {
                return(new Result <IAssetAdministrationShellDescriptor>(new ArgumentNullException(nameof(aasDescriptor))));
            }
            if (aasDescriptor.Identification?.Id == null)
            {
                return(new Result <IAssetAdministrationShellDescriptor>(new ArgumentNullException(nameof(aasDescriptor.Identification))));
            }
            if (string.IsNullOrEmpty(aasDescriptor.IdShort))
            {
                return(new Result <IAssetAdministrationShellDescriptor>(new ArgumentNullException(nameof(aasDescriptor.IdShort))));
            }

            try
            {
                string aasIdHash        = GetHashString(aasDescriptor.Identification.Id);
                string aasDirectoryPath = Path.Combine(FolderPath, aasIdHash);

                if (!Directory.Exists(aasDirectoryPath))
                {
                    Directory.CreateDirectory(aasDirectoryPath);
                }

                if (aasDescriptor.SubmodelDescriptors?.Count > 0)
                {
                    foreach (var submodelDescriptor in aasDescriptor.SubmodelDescriptors)
                    {
                        var interimResult = CreateSubmodel(aasDescriptor.Identification.Id, submodelDescriptor);
                        if (!interimResult.Success)
                        {
                            return(new Result <IAssetAdministrationShellDescriptor>(interimResult));
                        }
                    }
                }
                aasDescriptor.SubmodelDescriptors.Clear();

                string aasDescriptorContent = JsonConvert.SerializeObject(aasDescriptor, JsonSerializerSettings);
                string aasFilePath          = Path.Combine(aasDirectoryPath, aasIdHash) + ".json";
                File.WriteAllText(aasFilePath, aasDescriptorContent);

                IResult <IAssetAdministrationShellDescriptor> readResult = RetrieveAssetAdministrationShell(aasDescriptor.Identification.Id);
                return(readResult);
            }
            catch (Exception e)
            {
                return(new Result <IAssetAdministrationShellDescriptor>(e));
            }
        }
Exemplo n.º 8
0
 public AssetAdministrationShellServices(IAssetAdministrationShellServiceProvider assetAdministrationShellServiceProvider)
 {
     this.assetAdministrationShellServiceProvider = assetAdministrationShellServiceProvider;
     ServiceDescriptor = assetAdministrationShellServiceProvider.ServiceDescriptor;
 }
 public IResult <IAssetAdministrationShellDescriptor> CreateAssetAdministrationShell(IAssetAdministrationShellDescriptor aas)
 {
     return(aasRegistryImpl.CreateAssetAdministrationShell(aas));
 }
Exemplo n.º 10
0
 public AssetAdministrationShellServiceProvider(IAssetAdministrationShellDescriptor assetAdministrationShellDescriptor) : this()
 {
     ServiceDescriptor = assetAdministrationShellDescriptor;
 }
Exemplo n.º 11
0
        private static async void DiscoveryServer_ServiceInstanceDiscovered(object sender, ServiceInstanceEventArgs e)
        {
            try
            {
                IAssetAdministrationShellDescriptor aasDescriptor = null;
                foreach (var server in e.Servers)
                {
                    bool pingable = await BaSyx.Utils.Network.NetworkUtils.PingHostAsync(server.Address.ToString());

                    if (pingable)
                    {
                        string uri = string.Empty;
                        if (server.Address.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork)
                        {
                            uri = "http://" + server.Address.ToString() + ":" + server.Port + "/aas";
                        }
                        else if (server.Address.AddressFamily == System.Net.Sockets.AddressFamily.InterNetworkV6)
                        {
                            uri = "http://[" + server.Address.ToString() + "]:" + server.Port + "/aas";
                        }
                        else
                        {
                            continue;
                        }

                        Uri aasEndpoint = new Uri(uri);
                        AssetAdministrationShellHttpClient            client             = new AssetAdministrationShellHttpClient(aasEndpoint);
                        IResult <IAssetAdministrationShellDescriptor> retrieveDescriptor = client.RetrieveAssetAdministrationShellDescriptor();
                        if (retrieveDescriptor.Success && retrieveDescriptor.Entity != null)
                        {
                            retrieveDescriptor.LogResult(logger, LogLevel.Info, "Successfully retrieved AAS descriptor");
                            if (aasDescriptor == null)
                            {
                                aasDescriptor = retrieveDescriptor.Entity;
                                aasDescriptor.SetEndpoints(new List <IEndpoint>()
                                {
                                    new HttpEndpoint(uri)
                                });

                                foreach (var submodelDescriptor in retrieveDescriptor.Entity.SubmodelDescriptors)
                                {
                                    List <IEndpoint> submodelEndpoints = new List <IEndpoint>();
                                    foreach (var submodelEndpoint in submodelDescriptor.Endpoints)
                                    {
                                        if (submodelEndpoint.Address.Contains(server.Address.ToString()))
                                        {
                                            submodelEndpoints.Add(submodelEndpoint);
                                        }
                                    }
                                    aasDescriptor.SubmodelDescriptors[submodelDescriptor.IdShort].SetEndpoints(submodelEndpoints);
                                }
                            }
                            else
                            {
                                aasDescriptor.AddEndpoints(new List <IEndpoint>()
                                {
                                    new HttpEndpoint(uri)
                                });

                                foreach (var submodelDescriptor in retrieveDescriptor.Entity.SubmodelDescriptors)
                                {
                                    List <IEndpoint> submodelEndpoints = new List <IEndpoint>();
                                    foreach (var submodelEndpoint in submodelDescriptor.Endpoints)
                                    {
                                        if (submodelEndpoint.Address.Contains(server.Address.ToString()))
                                        {
                                            if (aasDescriptor.SubmodelDescriptors[submodelDescriptor.IdShort].Endpoints.FirstOrDefault(f => f.Address == submodelEndpoint.Address) == null)
                                            {
                                                submodelEndpoints.Add(submodelEndpoint);
                                            }
                                        }
                                    }
                                    aasDescriptor.SubmodelDescriptors[submodelDescriptor.IdShort].AddEndpoints(submodelEndpoints);
                                }
                            }
                        }
                        else
                        {
                            retrieveDescriptor.LogResult(logger, LogLevel.Info, "Could not retrieve AAS descriptor");
                        }
                    }
                }
                if (aasDescriptor != null)
                {
                    var registeredResult = assetAdministrationShellRegistry.CreateAssetAdministrationShell(aasDescriptor);
                    if (registeredResult.Success)
                    {
                        registeredResult.LogResult(logger, LogLevel.Info, "Successfully registered AAS at registry");
                    }
                    else
                    {
                        registeredResult.LogResult(logger, LogLevel.Error, "Could not register AAS at registry");
                    }
                }
            }
            catch (Exception exc)
            {
                logger.Error(exc, "Error accessing discovered service instance");
            }
        }