2025-05-26 17:09:18 +02:00
{
"general" : {
"name" : {
2025-09-04 17:06:30 +02:00
"default" : "Sensor" ,
2025-05-26 17:09:18 +02:00
"rules" : {
"type" : "string" ,
"description" : "A human-readable name or label for this measurement configuration."
}
} ,
"id" : {
"default" : null ,
"rules" : {
"type" : "string" ,
"nullable" : true ,
"description" : "A unique identifier for this configuration. If not provided, defaults to null."
}
} ,
"unit" : {
"default" : "unitless" ,
"rules" : {
"type" : "string" ,
"description" : "The unit of measurement for this configuration (e.g., 'meters', 'seconds', 'unitless')."
}
} ,
"logging" : {
"logLevel" : {
"default" : "info" ,
"rules" : {
"type" : "enum" ,
"values" : [
{
"value" : "debug" ,
"description" : "Log messages are printed for debugging purposes."
} ,
{
"value" : "info" ,
"description" : "Informational messages are printed."
} ,
{
"value" : "warn" ,
"description" : "Warning messages are printed."
} ,
{
"value" : "error" ,
"description" : "Error messages are printed."
}
]
}
} ,
"enabled" : {
"default" : true ,
"rules" : {
"type" : "boolean" ,
"description" : "Indicates whether logging is active. If true, log messages will be generated."
}
}
}
} ,
"functionality" : {
"softwareType" : {
"default" : "measurement" ,
"rules" : {
"type" : "string" ,
"description" : "Specified software type for this configuration."
}
} ,
"role" : {
"default" : "Sensor" ,
"rules" : {
"type" : "string" ,
"description" : "Indicates the role this configuration plays (e.g., sensor, controller, etc.)."
}
2025-06-25 10:55:50 +02:00
} ,
"positionVsParent" : {
"default" : "atEquipment" ,
"rules" : {
"type" : "enum" ,
"values" : [
{
"value" : "atEquipment" ,
"description" : "The measurement is taken at the equipment level, typically representing the overall state or performance of the equipment."
} ,
{
"value" : "upstream" ,
"description" : "The measurement is taken upstream, meaning it is related to inputs or conditions that affect the equipment's operation, such as supply conditions or environmental factors."
} ,
{
"value" : "downstream" ,
"description" : "The measurement is taken downstream, indicating it relates to outputs or results of the equipment's operation, such as product quality or performance metrics."
}
] ,
"description" : "Defines the position of the measurement relative to its parent equipment or system."
}
2025-09-26 15:51:40 +02:00
} ,
"distance" : {
"default" : null ,
"rules" : {
"type" : "number" ,
2026-05-14 22:51:57 +02:00
"nullable" : true ,
2025-09-26 15:51:40 +02:00
"description" : "Defines the position of the measurement relative to its parent equipment or system."
}
2025-05-26 17:09:18 +02:00
}
} ,
2026-05-14 22:51:57 +02:00
"output" : {
"process" : {
"default" : "process" ,
"rules" : {
"type" : "enum" ,
"values" : [
{ "value" : "process" , "description" : "Delta-compressed process message (default)." } ,
{ "value" : "json" , "description" : "Raw JSON payload." } ,
{ "value" : "csv" , "description" : "CSV-formatted payload." }
] ,
"description" : "Format of the process payload emitted on output port 0."
}
} ,
"dbase" : {
"default" : "influxdb" ,
"rules" : {
"type" : "enum" ,
"values" : [
{ "value" : "influxdb" , "description" : "InfluxDB line-protocol payload (default)." } ,
2026-05-21 15:06:39 +02:00
{ "value" : "frost" , "description" : "FROST/SensorThings CoreSync payload." } ,
2026-05-14 22:51:57 +02:00
{ "value" : "json" , "description" : "Raw JSON payload." } ,
{ "value" : "csv" , "description" : "CSV-formatted payload." }
] ,
"description" : "Format of the telemetry payload emitted on output port 1."
}
}
} ,
2025-05-26 17:09:18 +02:00
"asset" : {
"uuid" : {
"default" : null ,
"rules" : {
"type" : "string" ,
"nullable" : true ,
"description" : "Asset tag number which is a universally unique identifier for this asset. May be null if not assigned."
}
} ,
2025-06-25 10:55:50 +02:00
"tagCode" : {
"default" : null ,
"rules" : {
"type" : "string" ,
"nullable" : true ,
"description" : "Asset tag code which is a unique identifier for this asset. May be null if not assigned."
}
} ,
2026-01-29 09:16:41 +01:00
"tagNumber" : {
"default" : null ,
"rules" : {
"type" : "string" ,
"nullable" : true ,
"description" : "Asset tag number assigned by the asset registry. May be null if not assigned."
}
} ,
2025-05-26 17:09:18 +02:00
"geoLocation" : {
"default" : {
"x" : 0 ,
"y" : 0 ,
"z" : 0
} ,
"rules" : {
"type" : "object" ,
"description" : "An object representing the asset's physical coordinates or location." ,
"schema" : {
"x" : {
"default" : 0 ,
"rules" : {
"type" : "number" ,
"description" : "X coordinate of the asset's location."
}
} ,
"y" : {
"default" : 0 ,
"rules" : {
"type" : "number" ,
"description" : "Y coordinate of the asset's location."
}
} ,
"z" : {
"default" : 0 ,
"rules" : {
"type" : "number" ,
"description" : "Z coordinate of the asset's location."
}
}
}
}
} ,
"supplier" : {
"default" : "Unknown" ,
"rules" : {
"type" : "string" ,
"description" : "The supplier or manufacturer of the asset."
}
} ,
2025-06-25 10:55:50 +02:00
"category" : {
2025-05-26 17:09:18 +02:00
"default" : "sensor" ,
"rules" : {
"type" : "enum" ,
"values" : [
{
"value" : "sensor" ,
"description" : "A device that detects or measures a physical property and responds to it (e.g. temperature sensor)."
2026-01-29 09:16:41 +01:00
} ,
{
"value" : "measurement" ,
"description" : "Measurement software category used by the asset menu for this node."
2025-05-26 17:09:18 +02:00
}
]
}
} ,
2025-06-25 10:55:50 +02:00
"type" : {
2025-05-26 17:09:18 +02:00
"default" : "pressure" ,
"rules" : {
"type" : "string" ,
"description" : "A more specific classification within 'type'. For example, 'pressure' for a pressure sensor."
}
} ,
"model" : {
"default" : "Unknown" ,
"rules" : {
"type" : "string" ,
"description" : "A user-defined or manufacturer-defined model identifier for the asset."
}
} ,
2025-06-25 10:55:50 +02:00
"unit" : {
"default" : "unitless" ,
"rules" : {
"type" : "string" ,
"description" : "The unit of measurement for this asset (e.g., 'meters', 'seconds', 'unitless')."
}
} ,
2025-05-26 17:09:18 +02:00
"accuracy" : {
"default" : null ,
"rules" : {
"type" : "number" ,
"nullable" : true ,
"description" : "The accuracy of the sensor, typically represented as a percentage or absolute value."
}
} ,
"repeatability" : {
"default" : null ,
"rules" : {
"type" : "number" ,
"nullable" : true ,
"description" : "The repeatability of the sensor, typically represented as a percentage or absolute value."
}
}
} ,
2026-01-29 09:16:41 +01:00
"assetRegistration" : {
2026-01-29 10:22:12 +01:00
"default" : {
"profileId" : 1 ,
"locationId" : 1 ,
"processId" : 1 ,
"status" : "actief" ,
"childAssets" : [ ]
} ,
"rules" : {
"type" : "object" ,
"schema" : {
"profileId" : {
"default" : 1 ,
"rules" : {
"type" : "number"
}
} ,
"locationId" : {
"default" : 1 ,
"rules" : {
"type" : "number"
}
} ,
"processId" : {
"default" : 1 ,
"rules" : {
"type" : "number"
}
} ,
"status" : {
"default" : "actief" ,
"rules" : {
"type" : "string"
}
} ,
"childAssets" : {
"default" : [ ] ,
"rules" : {
"type" : "array" ,
"itemType" : "string" ,
"minLength" : 0
}
}
}
}
2026-01-29 09:16:41 +01:00
} ,
2025-05-26 17:09:18 +02:00
"scaling" : {
"enabled" : {
"default" : false ,
"rules" : {
"type" : "boolean" ,
"description" : "Indicates whether input scaling is active. If true, input values will be scaled according to the parameters below."
}
} ,
"inputMin" : {
"default" : 0 ,
"rules" : {
"type" : "number" ,
"description" : "The minimum expected input value before scaling."
}
} ,
"inputMax" : {
"default" : 1 ,
"rules" : {
"type" : "number" ,
"description" : "The maximum expected input value before scaling."
}
} ,
"absMin" : {
"default" : 50 ,
"rules" : {
"type" : "number" ,
"description" : "The absolute minimum value that can be read or displayed after scaling."
}
} ,
"absMax" : {
"default" : 100 ,
"rules" : {
"type" : "number" ,
"description" : "The absolute maximum value that can be read or displayed after scaling."
}
} ,
"offset" : {
"default" : 0 ,
"rules" : {
"type" : "number" ,
"description" : "A constant offset to apply to the scaled output (e.g., to calibrate zero-points)."
}
}
} ,
"smoothing" : {
"smoothWindow" : {
"default" : 10 ,
"rules" : {
"type" : "number" ,
"min" : 1 ,
"description" : "Determines the size of the data window (number of samples) used for smoothing operations."
}
} ,
"smoothMethod" : {
"default" : "mean" ,
"rules" : {
"type" : "enum" ,
"values" : [
{
"value" : "none" ,
"description" : "No smoothing is applied; raw data is passed through."
} ,
{
"value" : "mean" ,
"description" : "Calculates the simple arithmetic mean (average) of the data points in a window."
} ,
{
"value" : "min" ,
"description" : "Selects the smallest (minimum) value among the data points in a window."
} ,
{
"value" : "max" ,
"description" : "Selects the largest (maximum) value among the data points in a window."
} ,
{
"value" : "sd" ,
"description" : "Computes the standard deviation to measure the variation or spread of the data."
} ,
{
"value" : "lowPass" ,
"description" : "Filters out high-frequency components, allowing only lower frequencies to pass."
} ,
{
"value" : "highPass" ,
"description" : "Filters out low-frequency components, allowing only higher frequencies to pass."
} ,
{
"value" : "weightedMovingAverage" ,
"description" : "Applies varying weights to each data point in a window before averaging."
} ,
{
"value" : "bandPass" ,
"description" : "Filters the signal to allow only frequencies within a specific range to pass."
} ,
{
"value" : "median" ,
"description" : "Selects the median (middle) value in a window, minimizing the effect of outliers."
} ,
{
"value" : "kalman" ,
"description" : "Applies a Kalman filter to combine noisy measurements over time for more accurate estimates."
} ,
{
"value" : "savitzkyGolay" ,
"description" : "Uses a polynomial smoothing filter on a moving window, which can also provide derivative estimates."
}
]
}
}
} ,
"simulation" : {
"enabled" : {
"default" : false ,
"rules" : {
"type" : "boolean" ,
"description" : "If true, the system operates in simulation mode, generating simulated values instead of using real inputs."
}
} ,
"safeCalibrationTime" : {
"default" : 100 ,
"rules" : {
"type" : "number" ,
"min" : 100 ,
"description" : "Time to wait before finalizing calibration in simulation mode (in milliseconds or appropriate unit)."
}
}
} ,
"interpolation" : {
"percentMin" : {
"default" : 0 ,
"rules" : {
"type" : "number" ,
"min" : 0 ,
"description" : "Minimum percentage for interpolation or data scaling operations."
}
} ,
"percentMax" : {
"default" : 100 ,
"rules" : {
"type" : "number" ,
"max" : 100 ,
"description" : "Maximum percentage for interpolation or data scaling operations."
}
}
} ,
2026-04-13 13:42:31 +02:00
"mode" : {
"current" : {
"default" : "analog" ,
"rules" : {
"type" : "enum" ,
"values" : [
{
"value" : "analog" ,
"description" : "Single-scalar input mode (classic 4-20mA / PLC style). msg.payload is a number; the node runs one offset/scaling/smoothing/outlier pipeline and emits one MeasurementContainer slot."
} ,
{
"value" : "digital" ,
"description" : "Multi-channel input mode (MQTT / IoT JSON style). msg.payload is an object keyed by channel names declared under config.channels; the node routes each key through its own pipeline and emits N slots from one input message."
}
] ,
"description" : "Selects how incoming msg.payload is interpreted."
}
}
} ,
"channels" : {
"default" : [ ] ,
"rules" : {
"type" : "array" ,
"itemType" : "object" ,
"minLength" : 0 ,
"description" : "Channel map used in digital mode. Each entry is a self-contained pipeline definition: {key, type, position, unit, scaling?, smoothing?, outlierDetection?, distance?}. Ignored in analog mode."
}
} ,
2026-05-11 17:29:14 +02:00
"calibration" : {
"stabilityThreshold" : {
"default" : 0.01 ,
"rules" : {
"type" : "number" ,
"min" : 0 ,
"description" : "Absolute standard-deviation ceiling (in scaling-units, i.e. the same range as absMin..absMax) below which the rolling window is considered stable enough to trust for calibration / repeatability. A buffer with stdDev <= threshold is treated as stable; anything above aborts calibrate() and evaluateRepeatability() with a warning. Default 0.01 fits the [50,100] absMin/absMax default range; tighten or relax to match your sensor's expected noise floor."
}
}
} ,
2025-05-26 17:09:18 +02:00
"outlierDetection" : {
"enabled" : {
"default" : false ,
"rules" : {
"type" : "boolean" ,
"description" : "Indicates whether outlier detection is enabled. If true, outliers will be identified and handled according to the method specified."
}
} ,
"method" : {
"default" : "zScore" ,
"rules" : {
"type" : "enum" ,
"values" : [
{
"value" : "zScore" ,
"description" : "Uses the Z-score method to identify outliers based on standard deviations from the mean."
} ,
{
"value" : "iqr" ,
"description" : "Uses the Interquartile Range (IQR) method to identify outliers based on the spread of the middle 50% of the data."
} ,
{
"value" : "modifiedZScore" ,
"description" : "Uses a modified Z-score method that is more robust to small sample sizes."
}
]
}
} ,
"threshold" : {
"default" : 3 ,
"rules" : {
"type" : "number" ,
"description" : "The threshold value used by the selected outlier detection method. For example, a Z-score threshold of 3.0."
}
}
}
2026-05-21 15:06:39 +02:00
}