{ "general": { "name": { "default": "Diffuser", "rules": { "type": "string", "description": "A human-readable name for this diffuser zone." } }, "id": { "default": null, "rules": { "type": "string", "nullable": true, "description": "Unique identifier for this diffuser node." } }, "unit": { "default": "Nm3/h", "rules": { "type": "string", "description": "Default airflow unit for this diffuser." } }, "logging": { "logLevel": { "default": "info", "rules": { "type": "enum", "values": [ { "value": "debug", "description": "Verbose diagnostic messages." }, { "value": "info", "description": "General informational messages." }, { "value": "warn", "description": "Warning messages." }, { "value": "error", "description": "Error level messages only." } ] } }, "enabled": { "default": true, "rules": { "type": "boolean", "description": "Enable or disable logging." } } } }, "asset": { "model": { "default": "gva-elastox-r", "rules": { "type": "string", "description": "Asset model id resolved via assetResolver.resolve('curves', model). Selected from the asset-menu cascade in the editor; defaults to GVA ELASTOX-R for backward compatibility with the legacy hardcoded curve." } }, "assetTagNumber": { "default": "", "rules": { "type": "string", "description": "External asset registry tag number (e.g. Bedrijfsmiddelenregister), assigned by the asset-menu sync to the WBD asset API." } } }, "functionality": { "softwareType": { "default": "diffuser", "rules": { "type": "string", "description": "Software type identifier for parent-child registration." } }, "role": { "default": "Aeration diffuser", "rules": { "type": "string", "description": "Describes the functional role of this node." } }, "positionVsParent": { "default": "atEquipment", "rules": { "type": "enum", "values": [ { "value": "upstream", "description": "Upstream of parent equipment." }, { "value": "atEquipment", "description": "At equipment level." }, { "value": "downstream", "description": "Downstream of parent equipment." } ] } } }, "diffuser": { "number": { "default": 1, "rules": { "type": "number", "description": "Sequential diffuser zone number." } }, "elements": { "default": 1, "rules": { "type": "number", "description": "Number of diffuser elements in the zone." } }, "membraneAreaPerElement": { "default": null, "rules": { "type": "number", "nullable": true, "description": "Membrane area per element [m²] used to convert total airflow to canonical specific flux Nm³/(h·m² membrane) before curve lookup. Defaults to the selected curve's _meta.membraneArea_m2_per_element (Jäger 0.18, Sulzer 0.07, Aerostrip 1.0 normalisation). Set explicitly only to override the curve metadata." } }, "density": { "default": 15, "rules": { "type": "number", "description": "Bottom coverage [%] — fraction of the tank floor area occupied by diffuser membrane. Typical fine-bubble installs run 10–25 %. Used as the curve-family key in the supplier curve files (multi-coverage curves are interpolated; single-coverage curves are clamped). Replaces the legacy 'elements per m²' semantics, which was an incorrect re-tagging by an earlier refactor." } }, "waterHeight": { "default": 0, "rules": { "type": "number", "description": "Water column height above the diffuser." } }, "alfaFactor": { "default": 0.7, "rules": { "type": "number", "description": "Alpha factor used for oxygen transfer correction." } }, "headerPressure": { "default": 0, "rules": { "type": "number", "description": "Header gauge pressure above atmospheric (mbar)." } }, "localAtmPressure": { "default": 1013.25, "rules": { "type": "number", "description": "Local atmospheric pressure (mbar)." } }, "waterDensity": { "default": 997, "rules": { "type": "number", "description": "Water density used in head-pressure calculation (kg/m3)." } }, "zoneVolume": { "default": 0, "rules": { "type": "number", "description": "Aeration zone volume used to convert oxygen output to reactor OTR (m3)." } } } }