Kolla upp tillgångens kalibreringsoffset och lägg till den i varje mätning. Detta exempel lägger till en offset av 2 till värdet , 20vilket ger correctedValue: 22.
Förutsättningar
Fyll i förutsättningarna för det delade exemplet, inklusive default-profilen och factory-mqtt-slutpunkten. Använd YAML för felsökning och Azure CLI eller Bicep för produktionshantering.
Använd den befintliga inbyggda registerslutpunkten med namnet default. För miljövariablerna, sätt AIO_INSTANCE_NAME och RESOURCE_GROUP till namnen på din befintliga instans och resursgrupp. För Bicep anger du också CUSTOM_LOCATION_NAME till namnet på din befintliga anpassade plats.
Synkronisera state-store-skrivarklockan med brokern. Bekräfta ett lyckat svar från +OK när kalibreringsposten fylls i innan du publicerar avläsningar.
Använd enrichment för att läsa kalibreringsposter som en applikation håller i state store. Uppslagningen använder den kontext som finns tillgänglig under bearbetningen, inte nödvändigtvis den kontext som var giltig när avläsningen togs. I det fallet, matcha kontexten efter tidsstämpel.
Distribuera kalibreringsgrafen:
I vyn Operations öppnar du din instans och väljer Dataflödesgraf>Skapa dataflödesgraf.
Ge grafen namnet add-calibration och välj profilen default.
Lägg till en källa med namnet source med endpoint factory-mqtt och topic factory/readings.
Lägg till en karttransform med namnet calibrate, med hjälp av azureiotoperations/graph-dataflow-map:1.0.0 från registerslutpunkten default.
I karttransformkonfigurationen, lägg till en datamängd med State store-nyckelfactory-calibration as calibration, Match-indata$source.assetId och $context.assetId i den ordningen, samt Match-uttrycket$1 == $2.
Lägg till dessa kartregler:
| Indata i ordning |
Output |
Expression |
* |
* |
Lämna tom |
value, $context(calibration).offset |
correctedValue |
$1 + $2 |
Lägg till en destination namngiven destination med endpoint factory-mqtt och topic factory/calibrated.
Koppla source → calibrate → destination, välj sedan Spara för att distribuera den aktiverade grafen.
Spara dessa kompletta grafegenskaper som graph.json. Kommandot använder den befintliga default profilen.
{
"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
Spara denna mall som main.bicep. Den refererar till den befintliga instansen, den anpassade platsen och default profilen.
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
Användning av Kubernetes-distributionsmanifest stöds inte i produktionsmiljöer och bör endast användas för felsökning och testning.
Spara följande manifest som 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
Innan du skickar avläsningar, skriv denna syntetiska NDJSON-post under state-store-nyckeln factory-calibration. Använd state-store-proceduren SET i Fyll state store-nyckeln.
{"assetId":"line-1","offset":2}
Publicera denna läsning till factory/readings:
{"assetId":"line-1","value":20}
Förvänta dig denna payload på factory/calibrated. Kartan bevarar de ursprungliga fälten och lägger till 20 + 2:
{"assetId":"line-1","value":20,"correctedValue":22}
Denna graf förutsätter en matchande kalibreringspost med numerisk offset. Innan du använder det i produktion, definiera hur man hanterar saknad kontext och övervaka uppslagsfel; exemplet inkluderar inte en rutt för ogiltig kontext.
Relaterat innehåll