Descubra fontes de dados OPC UA usando o Azure IoT Akri Preview
Importante
Azure IoT Operations Preview – habilitado pelo Azure Arc está atualmente em visualização. Não deve utilizar este software de pré-visualização em ambientes de produção.
Veja Termos de Utilização Complementares da Pré-visualizações do Microsoft Azure para obter os termos legais que se aplicam às funcionalidades do Azure que estão na versão beta, na pré-visualização ou que ainda não foram lançadas para disponibilidade geral.
Neste artigo, você aprenderá a descobrir fontes de dados OPC UA automaticamente. Depois de implantar o Azure IoT Operations Preview, configure o Azure IoT Akri Preview para descobrir fontes de dados OPC UA na borda. O Azure IoT Akri cria recursos personalizados em seu cluster Kubernetes que representam as fontes de dados descobertas. A capacidade de descobrir fontes de dados OPC UA elimina a necessidade de configurá-las manualmente usando o portal Azure IoT Operations (visualização).
Importante
Atualmente, você não pode usar o Registro de Dispositivo do Azure para gerenciar os ativos que o Azure IoT Akri descobre e cria.
O Azure IoT Akri permite detetar e criar ativos no espaço de endereço de um servidor OPC UA. A deteção de ativos OPC UA gera AssetType
recursos personalizados para ativos compatíveis com a especificação OPC UA Device Asset
Integration (DI).
Pré-requisitos
Instale o Azure IoT Operations Preview. Para instalar o Azure IoT Operations para fins de demonstração e exploração, consulte Guia de início rápido: implantar o Azure IoT Operations Preview em um cluster Kubernetes habilitado para Arc.
Verifique se os pods Akri do Azure IoT estão configurados corretamente executando o seguinte comando:
kubectl get pods -n azure-iot-operations
A saída inclui linhas que mostram que o agente Akri e os pods do manipulador de descoberta estão em execução:
NAME READY STATUS RESTARTS AGE aio-akri-agent-daemonset-hwpc7 1/1 Running 0 17m akri-opcua-asset-discovery-daemonset-dwn2q 1/1 Running 0 8m28s
Configurar o manipulador de descoberta OPC UA
Para configurar o manipulador de descoberta OPC UA para deteção de ativos, crie um arquivo de configuração YAML que contenha os valores descritos nesta seção:
Nome | Obrigatório | Datatype | Predefinido | Comentário |
---|---|---|---|---|
EndpointUrl |
verdadeiro | String | nulo | A URL do ponto de extremidade OPC UA a ser usada para a descoberta de ativos |
AutoAcceptUntrustedCertificates |
verdadeiro ¹ | Booleano | false | O cliente deve aceitar automaticamente certificados não confiáveis? Um certificado só pode ser aceito automaticamente como confiável se não ocorrerem erros não supressíveis durante a validação da cadeia. Por exemplo, um certificado com cadeia incompleta não é aceito. |
UseSecurity |
verdadeiro ¹ | Boolean | verdadeiro | O cliente deve usar uma conexão segura? |
UserName |
false | String | nulo | O nome de usuário para autenticação de usuário. ² |
Password |
false | String | nulo | A senha para autenticação do usuário. ² |
¹ A versão atual do manipulador de descoberta suporta UseSecurity=false
e requer autoAcceptUntrustedCertificates=true
apenas .
² Uma implementação temporária até que o Azure IoT Akri possa passar segredos do Kubernetes.
O exemplo a seguir demonstra a descoberta de um servidor OPC PLC. Você pode adicionar os parâmetros de ativos para vários servidores PLC OPC.
Para criar o arquivo de configuração YAML, copie e cole o seguinte conteúdo em um novo arquivo e salve-o como
opcua-configuration.yaml
:Se você estiver usando o servidor PLC simulado que foi implantado com o Guia de início rápido de operações do Azure IoT, não precisará alterar o
endpointUrl
. Se você tiver seus próprios servidores OPC UA em execução ou estiver usando os servidores PLC simulados implantados no Azure, adicione a URL do ponto de extremidade de acordo. Os URLs de ponto de extremidade de descoberta se parecem comopc.tcp://<FQDN>:50000/
. Para localizar os FQDNs de seus servidores PLC OPC, navegue até sua implantação no portal do Azure. Para cada servidor, copie e cole o valor FQDN em suas URLs de ponto de extremidade.apiVersion: akri.sh/v0 kind: Configuration metadata: name: aio-akri-opcua-asset spec: discoveryHandler: name: opcua-asset discoveryDetails: "opcuaDiscoveryMethod:\n - asset:\n endpointUrl: \" opc.tcp://opcplc-000000:50000\"\n useSecurity: false\n autoAcceptUntrustedCertificates: true\n" brokerProperties: {} capacity: 1
Para aplicar a configuração, execute o seguinte comando:
kubectl apply -f opcua-configuration.yaml -n azure-iot-operations
Verificar a configuração
Para confirmar se o contêiner de descoberta de ativos está configurado e em execução:
Use o seguinte comando para verificar os logs do pod:
kubectl logs <insert aio-akri-opcua-asset-discovery pod name> -n azure-iot-operations
Um log do
aio-akri-opcua-asset-discovery
pod indica após alguns segundos que o manipulador de descoberta se registrou no Azure IoT Akri:2023-06-07 10:45:27.395 +00:00 info: OpcUaAssetDetection.Akri.Program[0] Akri OPC UA Asset Detection (0.2.0-alpha.203+Branch.main.Sha.cd4045345ad0d148cca4098b68fc7da5b307ce13) is starting with the process id: 1 2023-06-07 10:45:27.695 +00:00 info: OpcUaAssetDetection.Akri.Program[0] Got IP address of the pod from POD_IP environment variable. 2023-06-07 10:45:28.695 +00:00 info: OpcUaAssetDetection.Akri.Program[0] Registered with Akri system with Name opcua-asset for http://10.1.0.92:80 with type: Network as shared: True 2023-06-07 10:45:28.696 +00:00 info: OpcUaAssetDetection.Akri.Program[0] Press CTRL+C to exit
Após cerca de um minuto, o Azure IoT Akri emite a primeira solicitação de descoberta com base na configuração:
2023-06-07 12:49:17.344 +00:00 dbug: Grpc.AspNetCore.Server.ServerCallHandler[10] => SpanId:603279c62c9ccbb0, TraceId:15ad328e1e803c55bc6731266aae8725, ParentId:0000000000000000 => ConnectionId:0HMR7AMCHHG2G => RequestPath:/v0.DiscoveryHandler/Discover RequestId:0HMR7AMCHHG2G:00000001 Reading message. 2023-06-07 12:49:18.046 +00:00 info: OpcUa.AssetDiscovery.Akri.Services.DiscoveryHandlerService[0] => SpanId:603279c62c9ccbb0, TraceId:15ad328e1e803c55bc6731266aae8725, ParentId:0000000000000000 => ConnectionId:0HMR7AMCHHG2G => RequestPath:/v0.DiscoveryHandler/Discover RequestId:0HMR7AMCHHG2G:00000001 Got discover request opcuaDiscoveryMethod: - asset: endpointUrl: "opc.tcp://opcplc-000000:50000" useSecurity: false autoAcceptUntrustedCertificates: true from ipv6:[::ffff:10.1.7.47]:39708 2023-06-07 12:49:20.238 +00:00 info: OpcUa.AssetDiscovery.Akri.Services.DiscoveryHandlerService[0] => SpanId:603279c62c9ccbb0, TraceId:15ad328e1e803c55bc6731266aae8725, ParentId:0000000000000000 => ConnectionId:0HMR7AMCHHG2G => RequestPath:/v0.DiscoveryHandler/Discover RequestId:0HMR7AMCHHG2G:00000001 Start asset discovery 2023-06-07 12:49:20.242 +00:00 info: OpcUa.AssetDiscovery.Akri.Services.DiscoveryHandlerService[0] => SpanId:603279c62c9ccbb0, TraceId:15ad328e1e803c55bc6731266aae8725, ParentId:0000000000000000 => ConnectionId:0HMR7AMCHHG2G => RequestPath:/v0.DiscoveryHandler/Discover RequestId:0HMR7AMCHHG2G:00000001 Discovering OPC UA endpoint opc.tcp://opcplc-000000:50000 using Asset Discovery ... 2023-06-07 14:20:03.905 +00:00 info: OpcUa.Common.Dtdl.DtdlGenerator[6901] => SpanId:603279c62c9ccbb0, TraceId:15ad328e1e803c55bc6731266aae8725, ParentId:0000000000000000 => ConnectionId:0HMR7AMCHHG2G => RequestPath:/v0.DiscoveryHandler/Discover RequestId:0HMR7AMCHHG2G:00000001 Created DTDL_2 model for boiler_1 with 35 telemetries in 0 ms 2023-06-07 14:20:04.208 +00:00 info: OpcUa.AssetDiscovery.Akri.CustomResources.CustomResourcesManager[0] => SpanId:603279c62c9ccbb0, TraceId:15ad328e1e803c55bc6731266aae8725, ParentId:0000000000000000 => ConnectionId:0HMR7AMCHHG2G => RequestPath:/v0.DiscoveryHandler/Discover RequestId:0HMR7AMCHHG2G:00000001 Generated 1 asset CRs from discoveryUrl opc.tcp://opcplc-000000:50000 2023-06-07 14:20:04.208 +00:00 info: OpcUa.Common.Client.OpcUaClient[1005] => SpanId:603279c62c9ccbb0, TraceId:15ad328e1e803c55bc6731266aae8725, ParentId:0000000000000000 => ConnectionId:0HMR7AMCHHG2G => RequestPath:/v0.DiscoveryHandler/Discover RequestId:0HMR7AMCHHG2G:00000001 Session ns=8;i=1828048901 is closing ... 2023-06-07 14:20:05.002 +00:00 info: OpcUa.AssetDiscovery.Akri.Services.DiscoveryHandlerService[0] => SpanId:603279c62c9ccbb0, TraceId:15ad328e1e803c55bc6731266aae8725, ParentId:0000000000000000 => ConnectionId:0HMR7AMCHHG2G => RequestPath:/v0.DiscoveryHandler/Discover RequestId:0HMR7AMCHHG2G:00000001 Sending response to caller ... 2023-06-07 14:20:05.003 +00:00 dbug: Grpc.AspNetCore.Server.ServerCallHandler[15] => SpanId:603279c62c9ccbb0, TraceId:15ad328e1e803c55bc6731266aae8725, ParentId:0000000000000000 => ConnectionId:0HMR7AMCHHG2G => RequestPath:/v0.DiscoveryHandler/Discover RequestId:0HMR7AMCHHG2G:00000001 Sending message. 2023-06-07 14:20:05.004 +00:00 info: OpcUa.AssetDiscovery.Akri.Services.DiscoveryHandlerService[0] => SpanId:603279c62c9ccbb0, TraceId:15ad328e1e803c55bc6731266aae8725, ParentId:0000000000000000 => ConnectionId:0HMR7AMCHHG2G => RequestPath:/v0.DiscoveryHandler/Discover RequestId:0HMR7AMCHHG2G:00000001 Sent successfully
Após a conclusão da descoberta, o manipulador de descoberta envia o resultado de volta para o Azure IoT Akri para criar um recurso personalizado de instância Akri com informações de ativos e variáveis observáveis. O manipulador de descoberta repete a descoberta a cada 10 minutos para detetar quaisquer alterações no servidor.
Para exibir as instâncias do Azure IoT Akri descobertas, execute o seguinte comando:
kubectl get akrii -n azure-iot-operations
A saída do comando anterior se parece com o exemplo a seguir. Talvez seja necessário aguardar alguns segundos para que a instância Akri seja criada:
NAMESPACE NAME CONFIG SHARED NODES AGE azure-iot-operations akri-opcua-asset-dbdef0 akri-opcua-asset true ["my-aio-vm"] 35m
O supervisor do OPC UA Connector procura novos recursos personalizados de instância do Azure IoT Akri do tipo
opc-ua-asset
e gera os tipos de ativos iniciais e os recursos personalizados de ativos para eles. Você pode modificar recursos personalizados de ativos adicionando configurações como publicação estendida para mais pontos de dados ou configurações de observabilidade do OPC UA Broker.Para confirmar se a instância Akri está conectada corretamente ao OPC UA Broker, execute o seguinte comando. Substitua o espaço reservado pelo nome da instância Akri que foi incluída na saída do comando anterior:
kubectl get akrii <AKRI_INSTANCE_NAME> -n azure-iot-operations -o json
A saída do comando inclui uma seção que se parece com o exemplo a seguir. O trecho mostra os valores da instância
brokerProperties
Akri e confirma que o OPC UA Broker está conectado."spec": { "brokerProperties": { "ApplicationUri": "Boiler #2", "AssetEndpointProfile": "{\"spec\":{\"uuid\":\"opc-ua-broker-opcplc-000000-azure-iot-operation\"……