Semantic normalization
BACnet points to Project Haystack
Start with BACnet facts that are stable and observable: device instance, object type and instance, object name, engineering units, present value, and status. Map those facts into Haystack point fields, then infer role, quantity, air or water context, and equipment grouping with visible confidence and source. Keep uncertain tags reviewable.
Map protocol facts before inferring meaning
| BACnet fact | Haystack field or tag | Treatment |
|---|---|---|
| Object identifier | Stable point id input | Keep device instance plus object type and instance separate from the current IP route |
| Object_Name | dis | Preserve the operator-facing name as evidence for later rules |
| Analog object type | kind Number | Use engineering units when available |
| Binary object type | kind Bool | Keep state text or enum context when available |
| Input or output object role | sensor or cmd proposal | Do not force value objects into a role from object type alone |
| Units | unit plus quantity tags | Normalize the symbol and propose tags such as temp, power, elec, flow, or air |
| Present_Value | curVal | Store the typed current value separately from semantic tags |
| Status_Flags and reliability | curStatus | Keep unread, ok, fault, down, and stale distinct |
Worked example
BACnet input
device instance: 10000
object: analog-input:7
object name: AHU1_SAT
units: °F
present value: 55.2
Haystack-oriented result
dis: AHU1_SAT
kind: Number
unit: °F
tags: point, sensor, temp, air, discharge
equipRef: inferred AHU1 group
curVal: 55.2°F
proposals: each tag keeps confidence and sourceNormalization review checklist
- Keep the raw object name and protocol identity available after normalization.
- Require every point to carry the point marker and one clear value kind.
- Use object type for strong protocol facts, but do not treat every analog value as a sensor.
- Normalize units before applying quantity tags.
- Separate point tags from equipment-type hints such as AHU, VAV, and meter.
- Group equipment only with structural evidence such as controller identity and a stable name prefix.
- Keep proposal confidence and source so a rule result is not presented as a field fact.
- Reject tags outside the selected Project Haystack vocabulary.
- Leave siteRef empty when the scan has no reliable site identity.
How Sondwave normalizes points
Sondwave maps BACnet object types and units into point kinds, roles, normalized units, and quantity markers. Name rules tokenize common BAS abbreviations. Equipment rules group points by device and identifier, infer equipment type when the evidence is strong enough, and refine point tags with equipment context. Proposals keep confidence and source and pass an embedded Haystack 4.0.0 vocabulary gate.
Point and equipment grids can be rendered as Zinc, classic Haystack JSON, Haystack v4 JSON, or CSV. Inference is heuristic and correctable. A group that cannot be typed still receives the bare equip marker.
The point list includes an inline tag editor. It sends the complete edited tag set through the correction API, applies the Haystack vocabulary gate, records the human correction, and keeps that correction authoritative during later refinement.
The deterministic normalization path runs locally. When a scan does not establish a reliable site identity, siteRef stays empty rather than being guessed.
Haystack requirements still matter
Project Haystack models points as sensors, commands, setpoints, or synthetic points and associates them with equipment and a site. A BACnet scan alone may not provide reliable site identity or enough naming structure to infer every equipment relationship. Mark those gaps instead of fabricating context.