Page History
Edge AI with ML.NET (Tutorial) demonstrates using ML.NET 4.0 for real-time anomaly detection on sensor data using Script Tasks.
Prerequisites:
- Complete Scripts & Data Enrichment (Tutorial)
- Tags for sensor monitoring
- ML.NET 4.0 references (included in FrameworX)
In
On this page:
Table of Contents maxLevel 2 minLevel 2 indent 10px exclude Steps style none
Scripts → Tutorial | Concept | How-to Guide | Reference
Step 1: Create Monitoring Tags
- Navigate to Unified Namespace → Tags
- Create tags:
Tag.SensorValue
(Double) - Current readingTag.AnomalyScore
(Double) - Detection scoreTag.IsAnomaly
(Boolean) - Alert flagTag.Threshold
(Double) - Detection threshold (default: 0.3)
Step 2: Create ML Detection Task
- Go to Scripts → Tasks
- Create task:
AnomalyDetector
- Set trigger: Period = 1000ms
- Add code:
csharp
// Simple spike detection using ML.NET
using Microsoft.ML;
using Microsoft.ML.Data;
// Static ML context (initialized once)
if (@Tag.MLContext == null)
{
@Tag.MLContext = new MLContext(seed: 0);
@Tag.DetectionEngine = InitializeDetector();
}
// Data class for ML model
public class SensorData
{
public float Value { get; set; }
}
public class AnomalyPrediction
{
[VectorType(3)]
public double[] Prediction { get; set; }
}
// Initialize detector (runs once)
private ITransformer InitializeDetector()
{
var dataView = @Tag.MLContext.Data.LoadFromEnumerable(new List<SensorData>());
var pipeline = @Tag.MLContext.Transforms
.DetectSpikeBySsa(
outputColumnName: "Prediction",
inputColumnName: "Value",
confidence: 95,
pvalueHistoryLength: 30,
trainingWindowSize: 90,
seasonalityWindowSize: 30);
return pipeline.Fit(dataView);
}
// Detection logic (runs every second)
var currentValue = (float)@Tag.SensorValue;
var data = new SensorData { Value = currentValue };
var prediction = @Tag.DetectionEngine.Transform(
@Tag.MLContext.Data.LoadFromEnumerable(new[] { data }));
var result = @Tag.MLContext.Data
.CreateEnumerable<AnomalyPrediction>(prediction, false)
.First();
// Update tags with results
@Tag.AnomalyScore = result.Prediction[0]; // Spike score
@Tag.IsAnomaly = result.Prediction[0] > @Tag.Threshold;
// Log anomalies
if (@Tag.IsAnomaly)
{
@Alarm.GlobalSettings.AuditTrail.AddCustomMessage(
$"Anomaly detected: Sensor={currentValue:F2}, Score={result.Prediction[0]:F3}");
}
Step 3: Create Simple Simulator
- Create task:
SensorSimulator
- Set trigger: Period = 500ms
- Add simulation code:
csharp
// Simulate normal sensor data with occasional spikes
Random rand = new Random();
double baseValue = 50.0;
double noise = rand.NextDouble() * 5 - 2.5;
// Inject anomaly occasionally (5% chance)
if (rand.NextDouble() < 0.05)
{
@Tag.SensorValue = baseValue + (rand.NextDouble() * 30 + 20); // Spike
}
else
{
@Tag.SensorValue = baseValue + noise; // Normal variation
}
Step 4: Create Monitoring Display
- Create display with:
- Trend chart for SensorValue
- Indicator for IsAnomaly
- Text display for AnomalyScore
- Threshold adjustment slider
Step 5: Test ML Detection
- Start runtime
- Observe sensor simulation
- Watch for anomaly detection
- Adjust threshold as needed
- Check audit trail for logged anomalies
Next Steps
- Advanced MCP Tools → Complex multi-tool scenarios
- ML.NET Models → Regression and classification
- Edge Computing → Deploy to field devices
In this section...
Page Tree | ||||
---|---|---|---|---|
|
Overview
Content Tools
Tasks