Schau dir den Kalibrierungsoffset eines Assets an und füge ihn zu jeder Messung hinzu. Dieses Beispiel addiert einen Offset von 2 zu einem Wert von 20, was ergibt correctedValue: 22.
Voraussetzungen
Erfüllen Sie die gemeinsamen Beispielvoraussetzungen, einschließlich des factory-mqtt Profils und des default Endpunkts. Verwenden Sie YAML zum Debuggen und Azure CLI oder Bicep für das Produktionsmanagement.
Verwenden Sie den vorhandenen integrierten Registrierungs-Endpunkt namens default. Für die Umgebungsvariablen setzen Sie AIO_INSTANCE_NAME und RESOURCE_GROUP auf die Namen Ihrer vorhandenen Instanz und Ressourcengruppe. Für Bicep sollten Sie auch CUSTOM_LOCATION_NAME auf Ihren bestehenden benutzerdefinierten Standortnamen einstellen.
Synchronisieren Sie die Uhr des State-Store-Writers mit dem Broker. Bestätigen Sie eine erfolgreiche +OK Antwort beim Ausfüllen des Kalibrierungsdatensatzes, bevor Sie die Messwerte veröffentlichen.
Verwenden Sie enrichment, um Kalibrierungsdatensätze zu lesen, die eine Anwendung im State Store verwaltet. Das Lookup verwendet den während der Verarbeitung verfügbaren Kontext, nicht unbedingt den Kontext, der gültig war, als der Messwert ermittelt wurde. In diesem Fall gleichen Sie den Kontext nach Zeitstempel ab.
Stellen Sie das Kalibrierungsdiagramm bereit:
Öffnen Sie in der Vorgangsanzeige Ihre Instanz und wählen Sie Datenflussdiagramm>Datenflussdiagramm erstellen.
Benennen Sie das Diagramm add-calibration und wählen Sie das default Profil aus.
Fügen Sie eine Quelle namens source hinzu, die den Endpunkt factory-mqtt und das Thema factory/readings verwendet.
Fügen Sie eine Map-Transformation namens calibrate unter Verwendung von azureiotoperations/graph-dataflow-map:1.0.0 aus dem Registry-Endpunkt default hinzu.
In der Map Transform-Konfiguration fügen Sie einen Datensatz mit State Store-Schlüsselfactory-calibration as calibration, Match-Eingaben$source.assetId und $context.assetId in dieser Reihenfolge und Match-Ausdruck$1 == $2 hinzu.
Fügen Sie diese Kartenregeln hinzu:
| Eingaben (der Reihe nach) |
Ausgabe |
Ausdruck |
* |
* |
Leer lassen |
value, $context(calibration).offset |
correctedValue |
$1 + $2 |
Fügen Sie ein Ziel mit dem Namen factory-mqtt unter Verwendung des Endpunkts factory/calibrated und des Themas destination hinzu.
Verbinden Sie source → calibrate → destination, und wählen Sie dann Speichern, um das aktivierte Diagramm bereitzustellen.
Speichere diese vollständigen Grapheigenschaften als graph.json. Der Befehl verwendet das bestehende default Profil.
{
"mode": "Enabled",
"nodes": [
{
"name": "source",
"nodeType": "Source",
"sourceSettings": {
"endpointRef": "factory-mqtt",
"dataSources": ["factory/readings"]
}
},
{
"name": "calibrate",
"nodeType": "Graph",
"graphSettings": {
"registryEndpointRef": "default",
"artifact": "azureiotoperations/graph-dataflow-map:1.0.0",
"configuration": [
{
"key": "rules",
"value": "{\n \"datasets\": [\n {\n \"key\": \"factory-calibration as calibration\",\n \"inputs\": [\"$source.assetId\", \"$context.assetId\"],\n \"expression\": \"$1 == $2\"\n }\n ],\n \"map\": [\n {\"inputs\": [\"*\"], \"output\": \"*\"},\n {\n \"inputs\": [\"value\", \"$context(calibration).offset\"],\n \"output\": \"correctedValue\",\n \"expression\": \"$1 + $2\"\n }\n ]\n}\n"
}
]
}
},
{
"name": "destination",
"nodeType": "Destination",
"destinationSettings": {
"endpointRef": "factory-mqtt",
"dataDestination": "factory/calibrated"
}
}
],
"nodeConnections": [
{ "from": { "name": "source" }, "to": { "name": "calibrate" } },
{ "from": { "name": "calibrate" }, "to": { "name": "destination" } }
]
}
az iot ops dataflowgraph apply \
--name add-calibration \
--instance $AIO_INSTANCE_NAME \
--resource-group $RESOURCE_GROUP \
--config-file graph.json
Speichere diese Vorlage als main.bicep. Es verweist auf die bestehende Instanz, den benutzerdefinierten Standort und das default-Profil.
param aioInstanceName string
param customLocationName string
resource aioInstance 'Microsoft.IoTOperations/instances@2026-07-01' existing = {
name: aioInstanceName
}
resource customLocation 'Microsoft.ExtendedLocation/customLocations@2021-08-31-preview' existing = {
name: customLocationName
}
resource defaultDataflowProfile 'Microsoft.IoTOperations/instances/dataflowProfiles@2026-07-01' existing = {
parent: aioInstance
name: 'default'
}
resource dataflowGraph 'Microsoft.IoTOperations/instances/dataflowProfiles/dataflowGraphs@2026-07-01' = {
parent: defaultDataflowProfile
name: 'add-calibration'
extendedLocation: {
name: customLocation.id
type: 'CustomLocation'
}
properties: {
mode: 'Enabled'
nodes: [
{
name: 'source'
nodeType: 'Source'
sourceSettings: {
endpointRef: 'factory-mqtt'
dataSources: [ 'factory/readings' ]
}
}
{
name: 'calibrate'
nodeType: 'Graph'
graphSettings: {
registryEndpointRef: 'default'
artifact: 'azureiotoperations/graph-dataflow-map:1.0.0'
configuration: [
{
key: 'rules'
value: '{\n "datasets": [\n {\n "key": "factory-calibration as calibration",\n "inputs": ["$source.assetId", "$context.assetId"],\n "expression": "$1 == $2"\n }\n ],\n "map": [\n {"inputs": ["*"], "output": "*"},\n {\n "inputs": ["value", "$context(calibration).offset"],\n "output": "correctedValue",\n "expression": "$1 + $2"\n }\n ]\n}\n'
}
]
}
}
{
name: 'destination'
nodeType: 'Destination'
destinationSettings: {
endpointRef: 'factory-mqtt'
dataDestination: 'factory/calibrated'
}
}
]
nodeConnections: [
{
from: { name: 'source' }
to: { name: 'calibrate' }
}
{
from: { name: 'calibrate' }
to: { name: 'destination' }
}
]
}
}
az deployment group create \
--resource-group $RESOURCE_GROUP \
--template-file main.bicep \
--parameters aioInstanceName="$AIO_INSTANCE_NAME" customLocationName="$CUSTOM_LOCATION_NAME"
Important
Die Verwendung von Kubernetes-Bereitstellungsmanifesten wird in Produktionsumgebungen nicht unterstützt und sollte nur zum Debuggen und Testen verwendet werden.
Speichern Sie das folgende Manifest als add-calibration.yaml.
apiVersion: connectivity.iotoperations.azure.com/v1
kind: DataflowGraph
metadata:
name: add-calibration
namespace: azure-iot-operations
spec:
profileRef: default
mode: Enabled
nodes:
- name: source
nodeType: Source
sourceSettings:
endpointRef: factory-mqtt
dataSources: [factory/readings]
- name: calibrate
nodeType: Graph
graphSettings:
registryEndpointRef: default
artifact: azureiotoperations/graph-dataflow-map:1.0.0
configuration:
- key: rules
value: |
{
"datasets": [
{
"key": "factory-calibration as calibration",
"inputs": ["$source.assetId", "$context.assetId"],
"expression": "$1 == $2"
}
],
"map": [
{"inputs": ["*"], "output": "*"},
{
"inputs": ["value", "$context(calibration).offset"],
"output": "correctedValue",
"expression": "$1 + $2"
}
]
}
- name: destination
nodeType: Destination
destinationSettings:
endpointRef: factory-mqtt
dataDestination: factory/calibrated
nodeConnections:
- from: { name: source }
to: { name: calibrate }
- from: { name: calibrate }
to: { name: destination }
kubectl apply -f add-calibration.yaml
Bevor Sie die Messwerte senden, schreiben Sie diesen synthetischen NDJSON-Datensatz unter State-Store Key factory-calibration. Verwenden Sie das Zustandsspeicher-SET-Verfahren in Den Zustandsspeicher-Schlüssel eingeben.
{"assetId":"line-1","offset":2}
Veröffentlichen Sie diesen Wert unter factory/readings:
{"assetId":"line-1","value":20}
Erwarten Sie diese Payload auf factory/calibrated. Die Karte bewahrt die ursprünglichen Felder und fügt hinzu:20 + 2
{"assetId":"line-1","value":20,"correctedValue":22}
Dieser Graph setzt einen passenden Kalibrierungsdatensatz mit numerischem Offset voraus. Bevor Sie es in der Produktion verwenden, definieren Sie, wie man mit fehlendem Kontext umgeht und Nachschlagefehler überwacht; das Beispiel enthält keine Route für ungültigen Kontext.
Verwandte Inhalte