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.

Reviewed 2026-07-15

Map protocol facts before inferring meaning

BACnet factHaystack field or tagTreatment
Object identifierStable point id inputKeep device instance plus object type and instance separate from the current IP route
Object_NamedisPreserve the operator-facing name as evidence for later rules
Analog object typekind NumberUse engineering units when available
Binary object typekind BoolKeep state text or enum context when available
Input or output object rolesensor or cmd proposalDo not force value objects into a role from object type alone
Unitsunit plus quantity tagsNormalize the symbol and propose tags such as temp, power, elec, flow, or air
Present_ValuecurValStore the typed current value separately from semantic tags
Status_Flags and reliabilitycurStatusKeep 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 source

Normalization 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.

References