Points
Points are time-series references in the Open-FDD data model. They link raw telemetry (BACnet objects, weather sensors) to equipment and Brick semantics.
Structure
Each point has:
| Field | Description |
|---|---|
id | UUID primary key |
site_id | FK to sites |
equipment_id | FK to equipment (nullable) |
external_id | Raw identifier from source (e.g. BACnet object name); unique per site |
fdd_input | Column name used by FDD rules (e.g. oat, sat); data-model API uses rule_input |
brick_type | Optional Brick class (e.g. Outside_Air_Temperature_Sensor) |
unit | Optional unit of measure |
description | Optional |
| BACnet addressing | |
bacnet_device_id | Optional. BACnet device instance (e.g. 3456789). With object_identifier, used by the BACnet scraper to poll this point. |
object_identifier | Optional. BACnet object ID (e.g. analog-input,1). |
object_name | Optional. BACnet object name (often same as external_id). |
Time-series data
Readings are stored in timeseries_readings:
| Column | Type | Description |
|---|---|---|
point_id | UUID | FK to points |
ts | timestamp | Timestamp (UTC) |
value | float | Numeric value |
TimescaleDB hypertable, optimized for range scans and downsampling.
Layers and mapping
- BACnet layer: Points that have
bacnet_device_idandobject_identifierare scraped by the BACnet driver (data-model path). Add them via CRUD or after POST /bacnet/point_discovery_to_graph and data-model export/import.external_idis typically the BACnet object name. - Weather layer: Points with
external_id=temp_f,rh_pct,dewpoint_f, etc. come from the Open-Meteo weather fetch. They are linked to a synthetic equipment Open-Meteo (type Weather_Service) per site so they appear under “Open-Meteo” (web weather) in the Data model and Points tree. In the RDF graph that equipment is tagged withofdd:dataSource "open_meteo"so you can query it via SPARQL. - Rule layer:
fdd_input/rule_inputmaps to DataFrame column names used by YAML rules.
The data-model API and Brick TTL coordinate external_id ↔ rule_input ↔ brick_type. Open-FDD also emits Brick v1.3 external references (ref:hasExternalReference) so points can be resolved to BACnet and timeseries systems. See External representations.
BACnet addressing
Points with bacnet_device_id and object_identifier set are used by the BACnet scraper (data-model path). Add them via CRUD or after point_discovery_to_graph and data-model export/import. See BACnet overview.
API
GET /points— List points (filter by site or equipment)GET /points/{id}— Get onePOST /points— CreatePATCH /points/{id}— UpdateDELETE /points/{id}— Delete (cascades to timeseries_readings; see Danger zone)
Queries
SELECT ts, p.external_id, tr.value
FROM timeseries_readings tr
JOIN points p ON p.id = tr.point_id
WHERE p.external_id = 'temp_f'
AND ts > NOW() - INTERVAL '1 day'
ORDER BY ts DESC;