Rauschunterdrückung

10 Messwerte zu einem Ergebnis mitteln, um Schwankungen und das Nachrichtenvolumen zu reduzieren. Für Werte 10 ist der Mittelwert 9, 11, 10, 10, 9, 11, 10, 10, 9, 11.

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. Legen Sie für Bicep außerdem CUSTOM_LOCATION_NAME auf den Namen Ihres vorhandenen benutzerdefinierten Speicherorts fest.

Konfigurieren eines Batches mit zehn Lesevorgängen

Diagramm eines Filters, der nur Lesevorgänge von line-1 beibehält, gefolgt von einem integrierten Fenster, das zehn Lesevorgänge in einem nicht überlappenden Batch mit meanValue 10 und readingCount 10 mittelt.

Das integrierte Fenster erzeugt einen Durchschnitt pro nicht überlappendem Batch, nicht nach jedem Lesevorgang. Sie warten, bis der Batch geschlossen wird, und ein Timeout kann einen unvollständigen Batch schließen.

Für die Konfigurationssyntax siehe Count-based window und Boundary behavior. Die Einstellung messageInCurrent schließt die zehnte Nachricht in den Batch ein, den sie schließt.

Dieser Graph sendet nur die Messwerte eines Assets an das Fenster. Der Filter verhindert, dass andere Assets in denselben Batch gemittelt werden. Die zehn Werte sind separate Nachrichten, kein Array in einer Nachricht. Ein Asset ID-Feld teilt ein Fenster nicht automatisch auf; halte auch nicht zusammenhängende Signale und Einheiten getrennt.

  1. Öffnen Sie in der Betriebsumgebung Ihre Instanz, und wählen Sie Datenflussgraph>Datenflussgraph erstellen aus.

  2. Benennen Sie das Diagramm average-line-1 und wählen Sie das default Profil aus.

  3. Fügen Sie eine Quelle mit dem Namen source mithilfe des Endpunkts factory-mqtt und des Themas factory/values hinzu.

  4. Fügen Sie eine Filtertransformation namens only-line-1 hinzu, wobei Sie azureiotoperations/graph-dataflow-filter:1.1.0 aus dem Registry-Endpunkt default verwenden. Füge eine Regel mit Eingabe assetId und Ausdruck $1 != "line-1"hinzu. Ein Ergebnis „true“ verwirft die Nachricht.

  5. Füge eine Fenstertransformation namens batch unter Verwendung von azureiotoperations/graph-dataflow-window:1.1.0 aus dem Registry-Endpunkt default hinzu. Setze die Nachrichtenanzahl auf 10 und das Verhalten der Grenznachrichten auf messageInCurrent. Lass den Timeout auf dem Standardwert von 60 Sekunden.

  6. Fügen Sie diese Akkumulationsregeln dem Fenster hinzu:

    Input Ausgabe Ausdruck
    assetId assetId first($1)
    value meanValue average($1)
    value readingCount count($1)
  7. Fügen Sie ein Ziel mit dem Namen factory-mqtt unter Verwendung des Endpunkts factory/means und des Themas destination hinzu.

  8. Verbinden Sie source → only-line-1 → batch → destination, und wählen Sie dann Speichern aus, um den aktivierten Graphen bereitzustellen.

Veröffentlichen Sie jede Zeile im folgenden Beispiel als separate Nachricht an factory/values:

{"assetId":"line-1","value":9}
{"assetId":"line-1","value":11}
{"assetId":"line-1","value":10}
{"assetId":"line-1","value":10}
{"assetId":"line-1","value":9}
{"assetId":"line-1","value":11}
{"assetId":"line-1","value":10}
{"assetId":"line-1","value":10}
{"assetId":"line-1","value":9}
{"assetId":"line-1","value":11}

Der Filter schließt andere Assets aus. Wenn es keinen früheren partiellen Batch gibt, schließt die zehnte Messung das Fenster und erzeugt diese Nutzlast auf factory/means (100 / 10 = 10):

{"assetId":"line-1","meanValue":10,"readingCount":10}

Senden Sie die zehn Messwerte innerhalb des Standard-60-Sekunden-Timeouts für das angegebene Zehn-Nachrichten-Ergebnis. Ein Timeout kann einen kleineren Batch veröffentlichen, was durch readingCount sichtbar gemacht wird. Überprüfen Sie, dass Sensor-Payloads numerische Werte enthalten, bevor Sie den Mittelwert verwenden.

Bei zehn Messwerten pro Sekunde dauert das Sammeln von zehn Messwerten etwa eine Sekunde; langsamere Eingaben erhöhen die Erfassungsverzögerung. Um das Standardtimeout zu ändern, konfigurieren Sie eine explizite dauerbasierte Schließungsbedingung, und berücksichtigen Sie unvollständige Batches nachgelagert.

Für einen geglätteten Wert nach jeder Messung siehe das Beispiel für den exponentiell gleitenden Durchschnitt in den Azure Samples Deployment-Anweisungen.