Partilhar via


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=trueapenas .
² 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.

  1. 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 com opc.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
    
  2. 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:

  1. 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.

  2. 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-assete 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.

  3. 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\"……