Udostępnij za pomocą


Samouczek: dodawanie zasobów OPC UA do klastra operacji usługi Azure IoT

W tym samouczku ręcznie dodasz zasoby OPC UA do klastra operacji usługi Azure IoT. Te zasoby publikują komunikaty w brokerze MQTT w klastrze operacji usługi Azure IoT. Zazwyczaj użytkownik OT wykonuje te kroki.

Zasób to urządzenie fizyczne lub jednostka logiczna reprezentująca urządzenie, maszynę, system lub proces. Na przykład zasób fizyczny może być pompą, silnikiem, zbiornikiem lub linią produkcyjną. Zdefiniowany przez ciebie zasób logiczny może mieć właściwości, punkty danych strumieniowych lub generować zdarzenia.

Serwery OPC UA to aplikacje oprogramowania komunikujące się z elementami zawartości. Tagi OPC UA to punkty danych uwidaczniane przez serwery OPC UA. Tagi OPC UA mogą udostępniać dane historyczne dotyczące stanu, wydajności, jakości lub stanu zasobów w czasie rzeczywistym.

W tym samouczku użyjesz internetowego interfejsu użytkownika środowiska operacji do utworzenia zasobów. Możesz również użyć interfejsu wiersza polecenia platformy Azure, aby wykonać niektóre z tych zadań.

Wymagania wstępne

Instancja Azure IoT Operations z włączonymi ustawieniami zabezpieczeń wdrożona w klastrze Kubernetes. Aby utworzyć wystąpienie, użyj jednej z następujących metod, aby wdrożyć Azure IoT Operations.

Ważne

Nie można włączyć bezpiecznych ustawień w utworzonym wystąpieniu, jeśli wykonasz kroki opisane w artykule Szybki start: uruchamianie operacji usługi Azure IoT w usłudze GitHub Codespaces za pomocą języka K3s .

Po włączeniu ustawień zabezpieczeń grupa zasobów zawierająca instancję operacji Azure IoT zawiera również następujące zasoby:

  • Instancja usługi Azure Key Vault do przechowywania tajemnic do zsynchronizowania z Twoim klastrem Kubernetes.
  • Tożsamość zarządzana przypisana przez użytkownika, która jest używana przez operacje Azure IoT do uzyskiwania dostępu do instancji Azure Key Vault.
  • Tożsamość zarządzana przypisana przez użytkownika, której składniki operacyjne usługi Azure IoT, takie jak przepływy danych, mogą używać do łączenia się z punktami końcowymi w chmurze, takimi jak Azure Event Hubs.
  • Przestrzeń nazw usługi Azure Device Registry do przechowywania zasobów i urządzeń.

Upewnij się, że podczas konfigurowania bezpiecznych ustawień nadasz kontu użytkownika uprawnienia do zarządzania wpisami tajnymi za pomocą roli oficera wpisów tajnych usługi Key Vault .

Aby zalogować się do internetowego interfejsu użytkownika środowiska operacji, musisz mieć konto Microsoft Entra ID z co najmniej uprawnieniami współautora dla grupy zasobów zawierającej wystąpienie usługi Kubernetes — Azure Arc . Aby dowiedzieć się więcej, zobacz Interfejs użytkownika sieci Web środowiska operacji.

O ile nie określono inaczej, możesz uruchomić polecenia konsoli w tym samouczku w środowisku powłoki Bash lub programu PowerShell.

Jaki problem rozwiążemy?

Dane udostępniane przez serwery OPC UA mogą mieć złożoną strukturę i mogą być trudne do zrozumienia. Operacje usługi Azure IoT umożliwiają modelowanie zasobów OPC UA jako tagów, zdarzeń i właściwości. Modelowanie ułatwia zrozumienie danych i używanie ich w procesach podrzędnych, takich jak broker MQTT i przepływy danych.

W tym samouczku wyjaśniono również, jak używać poświadczeń przechowywanych w usłudze Azure Key Vault do uwierzytelniania na symulowanym serwerze OPC UA.

Wdrażanie symulatora OPC PLC

W tym samouczku jest używany symulator OPC PLC do generowania przykładowych danych. Aby wdrożyć symulator OPC PLC:

  1. Pobierz plik opc-plc-tutorial-deployment.yaml z repozytorium GitHub. Aby pobrać plik przy użyciu wiersza polecenia, uruchom następujące polecenie:

    wget https://raw.githubusercontent.com/Azure-Samples/explore-iot-operations/refs/heads/main/samples/quickstarts/opc-plc-tutorial-deployment.yaml -O opc-plc-tutorial-deployment.yaml
    
  2. opc-plc-tutorial-deployment.yaml Otwórz plik pobrany w edytorze tekstów i zmień hasło symulatora. Hasło jest ustawiane przy użyciu parametru --defaultpassword . Zanotuj wartość hasła. Będzie ona potrzebna później. Następnie zapisz zmiany.

  3. Aby wdrożyć symulator OPC PLC w klastrze, uruchom następujące polecenie:

    kubectl apply -f opc-plc-tutorial-deployment.yaml
    

Poniższy fragment kodu przedstawia zastosowany plik YAML:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: opc-plc-000000
  namespace: azure-iot-operations
  labels:
    app.kubernetes.io/component: opcplc-000000
spec:
  replicas: 1
  selector:
    matchLabels:
      app.kubernetes.io/component: opcplc-000000
  template:
    metadata:
      labels:
        app.kubernetes.io/component: opcplc-000000
    spec:
      containers:
      - name: opc-plc
        image: mcr.microsoft.com/iotedge/opc-plc:latest
        args:
          - "--plchostname=opcplc-000000"
          - "--portnum=50000"
          - "--certdnsnames=opcplc-000000"
          - "--unsecuretransport"
          - "--slownodes=5"
          - "--slowrate=10"
          - "--fastnodes=10"
          - "--fasttypelowerbound=212"
          - "--fasttypeupperbound=273"
          - "--fasttyperandomization=True"
          - "--veryfastrate=1000"
          - "--guidnodes=1"
          - "--appcertstoretype=FlatDirectory"
          - "--dontrejectunknownrevocationstatus"
          - "--disableanonymousauth"
          - "--defaultuser=contosouser"
          - "--defaultpassword=contosouserpassword"
        ports:
        - containerPort: 50000
        volumeMounts:
          - name: opc-plc-default-application-cert
            mountPath: /app/pki/own
          - name: opc-plc-trust-list
            mountPath: /app/pki/trusted
      volumes:
        - name: opc-plc-default-application-cert
          secret:
            secretName: opc-plc-default-application-cert
        - name: opc-plc-trust-list
          secret:
            secretName: opc-plc-trust-list
      serviceAccountName: opcplc-000000-service-account
---
apiVersion: v1
kind: Service
metadata:
  name: opcplc-000000
  namespace: azure-iot-operations
  labels:
    app.kubernetes.io/component: opcplc-000000
spec:
  type: ClusterIP
  selector:
    app.kubernetes.io/component: opcplc-000000
  ports:
    - port: 50000
      protocol: TCP
      targetPort: 50000
---
apiVersion: cert-manager.io/v1
kind: Issuer
metadata:
  name: opc-plc-self-signed-issuer
  namespace: azure-iot-operations
  labels:
    app.kubernetes.io/component: opcplc-000000
spec:
  selfSigned: {}
---
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
  name: opc-plc-default-application-cert
  namespace: azure-iot-operations
  labels:
    app.kubernetes.io/component: opcplc-000000
spec:
  secretName: opc-plc-default-application-cert
  duration: 2160h # 90d
  renewBefore: 360h # 15d
  issuerRef:
    name: opc-plc-self-signed-issuer
    kind: Issuer
  commonName: OpcPlc
  dnsNames:
    - opcplc-000000
    - opcplc-000000.azure-iot-operations.svc.cluster.local
    - opcplc-000000.azure-iot-operations
  uris:
    - urn:OpcPlc:opcplc-000000
  usages:
    - digital signature
    - key encipherment
    - data encipherment
    - server auth
    - client auth
  privateKey:
    algorithm: RSA
    size: 2048
  encodeUsagesInRequest: true
  isCA: false
---
apiVersion: v1
kind: Secret
metadata:
  name: opc-plc-trust-list
  namespace: azure-iot-operations
  labels:
    app.kubernetes.io/component: opcplc-000000
data: {}
---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: opcplc-000000-service-account
  namespace: azure-iot-operations
  labels:
    app.kubernetes.io/component: opcplc-000000
---
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: opc-plc-000000-secret-access-role
  namespace: azure-iot-operations
rules:
- apiGroups: [""]
  resources: ["secrets"]
  verbs: ["get", "patch"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: opc-plc-000000-secret-access-rolebinding
  namespace: azure-iot-operations
subjects:
- kind: ServiceAccount
  name: opcplc-000000-service-account
  namespace: azure-iot-operations
roleRef:
  kind: Role
  name: opc-plc-000000-secret-access-role
  apiGroup: rbac.authorization.k8s.io

Ustanawianie wzajemnego zaufania

Aby symulator OPC PLC mógł wysyłać dane do łącznika dla OPC UA, należy ustanowić wzajemne zaufanie między nimi. W tym samouczku symulator OPC PLC i łącznik OPC UA używają certyfikatów z podpisem własnym w celu ustanowienia wzajemnego zaufania z łącznikiem OPC UA:

  • Certyfikat instancji aplikacji symulatora jest przechowywany w sekrecie opc-plc-default-application-cert Kubernetes.
  • Łącznik certyfikatu wystąpienia aplikacji OPC UA jest przechowywany w kluczu tajnym aio-opc-opcuabroker-default-application-cert platformy Kubernetes.

Ważne

W środowisku produkcyjnym użyj certyfikatów wystąpień aplikacji klasy korporacyjnej, aby ustanowić wzajemne zaufanie. Aby dowiedzieć się więcej, zobacz Skonfiguruj certyfikat instancji aplikacji klasy korporacyjnej.

Dodawanie certyfikatu łącznika do listy zaufania symulatora

Każdy serwer OPC UA ma własny mechanizm zarządzania listą zaufania. Aby dodać certyfikat łącznika do listy zaufania symulatora, uruchom następujące polecenia:

cert=$(kubectl -n azure-iot-operations get secret aio-opc-opcuabroker-default-application-cert -o jsonpath='{.data.tls\.crt}' | base64 -d)
data=$(kubectl create secret generic temp --from-literal=opcuabroker.crt="$cert" --dry-run=client -o jsonpath='{.data}')
kubectl patch secret opc-plc-trust-list -n azure-iot-operations -p "{\"data\": $data}"
$cert = kubectl -n azure-iot-operations get secret aio-opc-opcuabroker-default-application-cert -o jsonpath='{.data.tls\.crt}' | %{ [Text.Encoding]::UTF8.GetString([Convert]::FromBase64String($_)) }
$data = kubectl create secret generic temp --from-literal=opcuabroker.crt="$cert" --dry-run=client -o jsonpath='{.data}'
kubectl patch secret opc-plc-trust-list -n azure-iot-operations -p "{""data"": $data}"

Dodawanie certyfikatu symulatora do listy zaufania łącznika

Każdy typ serwera OPC UA ma swój własny mechanizm zarządzania certyfikatem aplikacji. Aby pobrać certyfikat symulatora do pliku o nazwie opcplc-000000.crt, uruchom następujące polecenie:

kubectl -n azure-iot-operations get secret opc-plc-default-application-cert -o jsonpath='{.data.tls\.crt}' | base64 -d > opcplc-000000.crt
kubectl -n azure-iot-operations get secret opc-plc-default-application-cert -o jsonpath='{.data.tls\.crt}' | %{ [Text.Encoding]::UTF8.GetString([Convert]::FromBase64String($_)) } > opcplc-000000.crt

Aby dodać certyfikat symulatora do listy zaufania łącznika:

  1. Przejdź do internetowego interfejsu użytkownika środowiska operacji i zaloguj się przy użyciu poświadczeń identyfikatora Entra firmy Microsoft.

  2. Wybierz witrynę. Jeśli pracujesz z nowym wdrożeniem, nie ma jeszcze żadnych stron internetowych. Klaster utworzony wcześniej można znaleźć, wybierając pozycję Wyświetl nieprzypisane wystąpienia. W środowisku operacji wystąpienie reprezentuje klaster, w którym wdrożono operacje usługi Azure IoT.

    Zrzut ekranu przedstawiający węzeł z nieprzypisanymi wystąpieniami w środowisku operacji.

  3. Wybierz wystąpienie, w którym wdrożono operacje usługi Azure IoT:

    Zrzut ekranu przedstawiający listę wystąpień operacji usługi Azure IoT.

    Napiwek

    Jeśli nie widzisz żadnych wystąpień, być może nie jesteś we właściwej dzierżawie identyfikatora Entra firmy Microsoft. Dzierżawę można zmienić z menu w prawym górnym rogu w środowisku operacji.

  4. Wybierz pozycję Urządzenia , a następnie pozycję Zarządzaj certyfikatami i wpisami tajnymi:

    Zrzut ekranu przedstawiający sposób znajdowania strony zarządzanie certyfikatami w środowisku operacji.

  5. Na stronie Certyfikaty i wpisy tajne wybierz pozycję Dodaj nowy certyfikat:

    Zrzut ekranu przedstawiający sposób dodawania certyfikatu do listy zaufania w środowisku operacji.

  6. Wybierz pozycję Przekaż certyfikat, wybierz listę zaufania OPC UA jako magazyn certyfikatów, a następnie wybierz opcplc-000000.crt pobrany wcześniej plik. Następnie wybierz pozycję Przekaż:

    Zrzut ekranu przedstawiający pomyślne przekazanie certyfikatu.

  7. Wybierz i zastosuj.

Certyfikat instancji aplikacji symulatora znajduje się teraz na liście zaufania łącznika OPC UA.

Dodawanie urządzenia

W tym kroku użyjesz środowiska operacji, aby dodać urządzenie, które umożliwia nawiązywanie połączenia z symulatorem OPC PLC. Aby dodać urządzenie:

  1. Wybierz pozycję Urządzenia , a następnie pozycję Utwórz nowe:

    Zrzut ekranu przedstawiający stronę urządzeń w środowisku operacji.

  2. Wprowadź opc-ua-connector jako nazwę urządzenia i wybierz pozycję Nowy na kafelku Microsoft.OpcUa :

    Zrzut ekranu przedstawiający sposób dodawania urządzenia w środowisku operacji.

  3. Wprowadź następujące informacje o przychodzącym punkcie końcowym microsoft.OpcUa:

    Pole Wartość
    Nazwa punktu końcowego opc-ua-connector-0
    Adres URL serwera OPC UA opc.tcp://opcplc-000000:50000
    Tryb uwierzytelniania użytkownika Username password

W tym samouczku dodasz nowe tajemnice do wystąpienia Azure Key Vault za pomocą interfejsu użytkownika w środowisku operacyjnym. Wpisy tajne są automatycznie synchronizowane z klastrem Kubernetes:

  1. Aby dodać odwołanie do nazwy użytkownika, wybierz pozycję Dodaj odwołanie, a następnie pozycję Utwórz nową.

  2. Wprowadź plcusername jako nazwę wpisu tajnego i contosouser jako wartość wpisu tajnego. Następnie wybierz pozycję Zastosuj.

  3. Aby dodać odwołanie do hasła, wybierz pozycję Dodaj odwołanie, a następnie pozycję Utwórz nową.

  4. Wprowadź plcpassword jako tajną nazwę i hasło dodane do pliku opc-plc-deployment.yaml jako tajną wartość. Następnie wybierz pozycję Zastosuj.

  5. Na stronie Szczegóły urządzenia wybierz pozycję Dalej , aby przejść do strony Dodatkowe informacje .

  6. Na stronie Dodawanie właściwości niestandardowej możesz opcjonalnie zaktualizować lub dodać właściwości niestandardowe do urządzenia. Po zakończeniu wybierz pozycję Dalej .

  7. Aby zapisać definicję urządzenia na stronie Podsumowanie , wybierz pozycję Utwórz.

Ta konfiguracja wdraża nowe urządzenie o nazwie opc-ua-connector z punktem końcowym wywoływanym opc-ua-connector-0 w klastrze. Urządzenie można wyświetlić w witrynie Azure Portal lub użyć kubectl polecenia , aby wyświetlić urządzenia w klastrze Kubernetes:

kubectl get device -n azure-iot-operations

Wpisy tajne i plcusername są widoczne plcpassword w wystąpieniu usługi Azure Key Vault w grupie zasobów. Wpisy tajne są synchronizowane z klastrem Kubernetes, gdzie można je wyświetlić za pomocą kubectl get secret -n azure-iot-operations polecenia . Możesz również zobaczyć tajemnice w doświadczeniu operacyjnym na stronie Zarządzanie zsynchronizowanymi tajemnicami.

Zarządzanie zasobami

Po wybraniu wystąpienia w środowisku operacji zostanie wyświetlona lista dostępnych zasobów na stronie Zasoby . Jeśli jeszcze nie ma żadnych zasobów, ta lista jest pusta:

Zrzut ekranu przedstawiający pustą listę elementów zawartości operacji usługi Azure IoT.

Tworzenie składnika majątku

Aby utworzyć zasób, wybierz pozycję Utwórz zasób. Następnie wprowadź następujące informacje o zasobie:

Pole Wartość
Przychodzący punkt końcowy opc-ua-connector-0
Nazwa zasobu thermostat
opis A simulated thermostat asset

Usuń istniejące właściwości niestandardowe i dodaj następujące właściwości niestandardowe. Zachowaj ostrożność, aby używać dokładnych nazw właściwości, ponieważ szablon usługi Power BI w późniejszym samouczku wykonuje dla nich zapytania:

Nazwa właściwości Szczegóły właściwości
partia 102
klient Contoso
indywidualnej Kocioł
isSpare prawda
lokalizacja Seattle

Zrzut ekranu strony szczegółów zasobu Azure IoT Operations.

Wybierz przycisk Dalej , aby przejść do strony Zestawy danych .

Tworzenie zestawu danych

Aby utworzyć zestaw danych, wybierz pozycję Utwórz zestaw danych. Wprowadź szczegóły zestawu danych pokazane w poniższej tabeli:

Pole Wartość
Nazwa zestawu danych thermostat
Destynacja MQTT
Temat azure-iot-operations/data/thermostat

Wybierz Utwórz i dalej, aby zapisać zestaw danych i przejść do strony Punkty danych.

Napiwek

Możesz wybrać pozycję Zarządzaj ustawieniami domyślnymi , aby zmienić domyślny interwał próbkowania i rozmiar kolejki dla każdego punktu danych.

Tworzenie punktów danych OPC UA

Dodaj punkt danych OPC UA na stronie Punkty danych . Aby dodać punkt danych, wybierz pozycję Dodaj punkt danych. Wprowadź szczegóły punktu danych pokazane w poniższej tabeli:

Źródło danych Nazwa punktu danych
ns=3; s=SpikeData temperatura

Wartość źródła danych w tym miejscu jest określonym węzłem symulatora OPC UA. Węzeł generuje losowe wartości w określonym zakresie, a także ma sporadyczne skoki.

Wybierz Zapisz.

Zrzut ekranu przedstawiający stronę dodawania punktu danych w operacjach Azure IoT.

Wybierz przycisk Dalej , aby przejść do strony Grupy zdarzeń , a następnie wybierz przycisk Dalej , aby przejść do strony Grupy zarządzania , a następnie Dalej , aby przejść do strony Przegląd .

Wykonaj przegląd

Przed wybraniem pozycji Utwórz przejrzyj szczegóły zasobu i tagu i wprowadź potrzebne zmiany:

Zrzut ekranu strony przeglądu zasobów działających w ramach operacji na platformie Azure IoT.

Ta konfiguracja wdraża nowy zasób wywoływany thermostat w klastrze. Możesz również użyć kubectl, aby wyświetlić zasoby lokalnie w klastrze.

kubectl get assets.namespace -n azure-iot-operations

Wyświetlanie zasobów w witrynie Azure Portal

Aby wyświetlić urządzenie i zasób utworzony w witrynie Azure Portal, przejdź do usługi Azure Device Registry:

Zrzut ekranu witryny Azure Portal przedstawiający rejestr urządzeń platformy Azure.

Portal umożliwia wyświetlanie szczegółów zasobu. Wybierz widok JSON, aby uzyskać więcej szczegółów:

Zrzut ekranu przedstawiający szczegóły zasobu operacji usługi Azure IoT w witrynie Azure Portal.

Sprawdzanie, czy dane przepływają

Sprawdź, czy dane przepływają do brokera MQTT przy użyciu narzędzia mosquitto_sub . W tym przykładzie uruchomisz narzędzie mosquitto_sub w klastrze Kubernetes:

  1. Uruchom następujące polecenie, aby wdrożyć zasobnik zawierający narzędzia mosquitto_pub i mosquitto_sub przydatne do interakcji z brokerem MQTT w klastrze:

    kubectl apply -f https://raw.githubusercontent.com/Azure-Samples/explore-iot-operations/main/samples/quickstarts/mqtt-client.yaml
    

    Poniższy fragment kodu przedstawia zastosowany plik YAML:

    # Important: do not use in production environments
    # Create a service account
    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: mqtt-client
      namespace: azure-iot-operations
    ---
    # Creates a pod with mosquitto-clients and mqttui utilities in your cluster
    apiVersion: v1
    kind: Pod
    metadata:
      name: mqtt-client
      # The namespace must match the IoT MQ BrokerListener's namespace
      # Otherwise use the long hostname: aio-broker.azure-iot-operations.svc.cluster.local
      namespace: azure-iot-operations
    spec:
      # Use the "mqtt-client" service account which comes with default deployment
      # Otherwise create it with `kubectl create serviceaccount mqtt-client -n azure-iot-operations`
      serviceAccountName: mqtt-client
      containers:
        # Install mosquitto and mqttui utilities on Alpine linux
      - image: alpine
        name: mqtt-client
        command: ["sh", "-c"]
        args: ["apk add mosquitto-clients mqttui && sleep infinity"]
        resources:
          limits:
            cpu: 500m
            memory: 200Mi
          requests:
            cpu: 100m
            memory: 100Mi
        volumeMounts:
        - name: broker-sat
          mountPath: /var/run/secrets/tokens
        - name: trust-bundle
          mountPath: /var/run/certs
      volumes:
      - name: broker-sat
        projected:
          sources:
          - serviceAccountToken:
              path: broker-sat
              audience: aio-internal # Must match audience in BrokerAuthentication
              expirationSeconds: 86400
      - name: trust-bundle
        configMap:
          name: azure-iot-operations-aio-ca-trust-bundle # Default root CA cert
    

    Uwaga

    Ta konfiguracja nie jest bezpieczna. Nie używaj tej konfiguracji w środowisku produkcyjnym.

  2. Po uruchomieniu zasobnika mqtt-client uruchom następujące polecenie, aby utworzyć środowisko powłoki w utworzonym zasobniku:

    kubectl exec --stdin --tty mqtt-client -n azure-iot-operations -- sh
    
  3. W powłoce Bash w zasobniku mqtt-client uruchom następujące polecenie, aby połączyć się z brokerem MQTT przy użyciu narzędzia mosquitto_sub i użyć symbolu wieloznakowego, aby subskrybować data/# tematy:

    mosquitto_sub --host aio-broker --port 18883 --topic "azure-iot-operations/data/#" -v --debug --cafile /var/run/certs/ca.crt -D CONNECT authentication-method 'K8S-SAT' -D CONNECT authentication-data $(cat /var/run/secrets/tokens/broker-sat)
    

    To polecenie jest nadal uruchamiane i wyświetla komunikaty w miarę ich nadejścia w dowolnych data/# tematach do momentu naciśnięcia Ctrl+C , aby go zatrzymać. Aby zamknąć środowisko powłoki, wpisz exit.

Aby sprawdzić, czy dodany zasób termostatu publikuje dane, wyświetl komunikaty w temacie azure-iot-operations/data/thermostat :

Client $server-generated/0000aaaa-11bb-cccc-dd22-eeeeee333333 received PUBLISH (d0, q0, r0, m0, 'azure-iot-operations/data/thermostat', ... (92 bytes))
azure-iot-operations/data/thermostat {"temperature":{"SourceTimestamp":"2025-02-14T11:27:44.5030912Z","Value":48.17536741017152}}
Client $server-generated/0000aaaa-11bb-cccc-dd22-eeeeee333333 received PUBLISH (d0, q0, r0, m0, 'azure-iot-operations/data/thermostat', ... (90 bytes))
azure-iot-operations/data/thermostat {"temperature":{"SourceTimestamp":"2025-02-14T11:27:45.50333Z","Value":98.22872507286887}}
Client $server-generated/0000aaaa-11bb-cccc-dd22-eeeeee333333 received PUBLISH (d0, q0, r0, m0, 'azure-iot-operations/data/thermostat', ... (92 bytes))
azure-iot-operations/data/thermostat {"temperature":{"SourceTimestamp":"2025-02-14T11:27:46.503381Z","Value":12.533323356430426}}

Jeśli nie ma przepływanych danych, uruchom ponownie zasobnik aio-opc-opc.tcp-1 :

  1. Znajdź nazwę aio-opc-opc.tcp-1 zasobnika przy użyciu następującego polecenia:

    kubectl get pods -n azure-iot-operations
    

    Nazwa zasobnika wygląda następująco: aio-opc-opc.tcp-1-849dd78866-vhmz6.

  2. Uruchom ponownie zasobnik aio-opc-opc.tcp-1 , używając polecenia, które wygląda jak w poniższym przykładzie. aio-opc-opc.tcp-1 Użyj nazwy zasobnika z poprzedniego kroku:

    kubectl delete pod aio-opc-opc.tcp-1-849dd78866-vhmz6 -n azure-iot-operations
    

Przykładowe tagi dodane w poprzednim samouczku generują komunikaty z zasobu, które wyglądają jak w poniższym przykładzie:

{
    "temperature":{
        "Value":24.86898871648548,
        "SourceTimestamp":"2025-04-25T14:50:07.195274Z"
    }
}

Jak rozwiązaliśmy ten problem?

W tym samouczku dodano urządzenie, a następnie zdefiniowano zasób i tagi. Dane modelu zasobów i tagów z serwera OPC UA ułatwiają korzystanie z danych w brokerze MQTT i innych procesach podrzędnych.

Użyto poświadczeń przechowywanych w usłudze Azure Key Vault do uwierzytelniania na serwerze OPC UA. Takie podejście jest bezpieczniejsze niż twarde kodowanie poświadczeń w definicji zasobu.

Użyj zasobu termostatu zdefiniowanego w następnym samouczku.

Czyszczenie zasobów

Jeśli przejdziesz do następnego samouczka, zachowaj wszystkie zasoby.

Jeśli chcesz usunąć wdrożenie operacji usługi Azure IoT, ale zachować klaster, użyj polecenia az iot ops delete :

az iot ops delete --cluster $CLUSTER_NAME --resource-group $RESOURCE_GROUP

Jeśli chcesz usunąć wszystkie zasoby utworzone na potrzeby tego przewodnika Szybki start, usuń klaster Kubernetes, w którym wdrożono operacje usługi Azure IoT, a następnie usuń grupę zasobów platformy Azure zawierającą klaster.

Jeśli na potrzeby tych przewodników Szybki start użyto usługi Codespaces, usuń środowisko Codespace z usługi GitHub.

Następny krok

Samouczek: wysyłanie wiadomości z zasobu do chmury za pomocą przepływu danych.