Skip to content

Commit 663308b

Browse files
committed
weather data grafana runner running and log limits added and database retention settings
1 parent f9b9be5 commit 663308b

18 files changed

Lines changed: 895 additions & 117 deletions

‎README.md‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
![MIT License](https://img.shields.io/badge/license-MIT-green.svg)
55
![Black](https://img.shields.io/badge/code%20style-black-000000.svg)
66
![PyPI](https://img.shields.io/pypi/v/open-fdd?color=blue&label=pypi%20version)
7+
[![Discord](https://img.shields.io/badge/Discord-Join%20Server-5865F2.svg?style=for-the-badge&logo=discord&logoColor=white)](https://discord.gg/2ZYXJN6p)
78

89
![open-fdd logo](https://raw.githubusercontent.com/bbartling/open-fdd/master/image.png)
910

‎analyst/rules/sensor_bounds.yaml‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,13 @@ params:
1010
inputs:
1111
Supply_Air_Temperature_Sensor:
1212
brick: Supply_Air_Temperature_Sensor
13-
column: sat
13+
column: SA-T
1414
bounds:
1515
imperial: [40, 150]
1616
metric: [4, 66]
1717
Zone_Temperature_Sensor:
1818
brick: Zone_Temperature_Sensor
19-
column: zt
19+
column: ZoneTemp
2020
bounds:
2121
imperial: [40, 100]
2222
metric: [4, 38]

‎analyst/rules/sensor_flatline.yaml‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,10 @@ flag: flatline_flag
77
inputs:
88
Supply_Air_Temperature_Sensor:
99
brick: Supply_Air_Temperature_Sensor
10-
column: sat
10+
column: SA-T
1111
Zone_Temperature_Sensor:
1212
brick: Zone_Temperature_Sensor
13-
column: zt
13+
column: ZoneTemp
1414

1515
params:
1616
tolerance: 0.000001

‎config/brick_model.ttl‎

Lines changed: 64 additions & 94 deletions
Original file line numberDiff line numberDiff line change
@@ -4,161 +4,131 @@
44
@prefix : <http://openfdd.local/site#> .
55

66

7-
:site_86d32457_fe01_4d1a_b54a_2a4fdb6aaef5 a brick:Site ;
8-
rdfs:label "bens_office" .
7+
:site_5e69ecae_0f25_40d2_bf87_f137e03ddf8e a brick:Site ;
8+
rdfs:label "default" .
99

10-
:site_86d32457_fe01_4d1a_b54a_2a4fdb6aaef5_points a brick:Equipment ;
10+
:site_5e69ecae_0f25_40d2_bf87_f137e03ddf8e_points a brick:Equipment ;
1111
rdfs:label "Points" ;
12-
brick:isPartOf :site_86d32457_fe01_4d1a_b54a_2a4fdb6aaef5 ;
12+
brick:isPartOf :site_5e69ecae_0f25_40d2_bf87_f137e03ddf8e ;
1313
ofdd:equipmentType "Unknown" .
1414

15-
:pt_4883ad9e_a9cb_44df_b989_89ad00b95206 a brick:Cooling_Valve_Command ;
15+
:pt_9f46e9b5_fa06_4163_972a_11c2644db7d7 a brick:Point ;
1616
rdfs:label "CLG-O" ;
17-
brick:isPointOf :site_86d32457_fe01_4d1a_b54a_2a4fdb6aaef5_points ;
18-
ofdd:mapsToRuleInput "CLG-O" .
17+
brick:isPointOf :site_5e69ecae_0f25_40d2_bf87_f137e03ddf8e_points .
1918

20-
:pt_9dfc6b8e_9ee0_40f9_8706_296a08d01b38 a brick:Supply_Air_Static_Pressure_Sensor ;
19+
:pt_d8563eaa_62a3_4215_99de_fa11fac715b5 a brick:Point ;
2120
rdfs:label "DAP-P" ;
22-
brick:isPointOf :site_86d32457_fe01_4d1a_b54a_2a4fdb6aaef5_points ;
23-
ofdd:mapsToRuleInput "DAP-P" .
21+
brick:isPointOf :site_5e69ecae_0f25_40d2_bf87_f137e03ddf8e_points .
2422

25-
:pt_0ee674dc_ef7e_4507_af5c_9aa7b12a61cd a brick:Supply_Air_Static_Pressure_Setpoint ;
23+
:pt_83b3bbe0_8f2e_4acd_ae91_f4a79aac128d a brick:Point ;
2624
rdfs:label "DAP-SP" ;
27-
brick:isPointOf :site_86d32457_fe01_4d1a_b54a_2a4fdb6aaef5_points ;
28-
ofdd:mapsToRuleInput "DAP-SP" .
25+
brick:isPointOf :site_5e69ecae_0f25_40d2_bf87_f137e03ddf8e_points .
2926

30-
:pt_8d8d55c4_abc2_4624_b7ec_037b6b8b7f6e a brick:Outside_Air_Damper_Position_Command ;
27+
:pt_4b88895f_af6e_41bb_8d16_51e3ef8843d0 a brick:Point ;
3128
rdfs:label "DPR-O" ;
32-
brick:isPointOf :site_86d32457_fe01_4d1a_b54a_2a4fdb6aaef5_points ;
33-
ofdd:mapsToRuleInput "DPR-O" .
29+
brick:isPointOf :site_5e69ecae_0f25_40d2_bf87_f137e03ddf8e_points .
3430

35-
:pt_d7bd38e8_f654_4a72_8b4a_e061b40ee50d a brick:Electrical_Power_Sensor ;
31+
:pt_d5bf6e6a_f03b_44ed_ac9e_18cb04f9d175 a brick:Point ;
3632
rdfs:label "ELEC-PWR" ;
37-
brick:isPointOf :site_86d32457_fe01_4d1a_b54a_2a4fdb6aaef5_points ;
38-
ofdd:mapsToRuleInput "ELEC-PWR" .
33+
brick:isPointOf :site_5e69ecae_0f25_40d2_bf87_f137e03ddf8e_points .
3934

40-
:pt_53ce9793_fa08_4db5_9cce_b6ce34f94afc a brick:Heating_Valve_Command ;
35+
:pt_a4232848_3e85_4f49_9348_a9b81b7885b5 a brick:Point ;
4136
rdfs:label "HTG-O" ;
42-
brick:isPointOf :site_86d32457_fe01_4d1a_b54a_2a4fdb6aaef5_points ;
43-
ofdd:mapsToRuleInput "HTG-O" .
37+
brick:isPointOf :site_5e69ecae_0f25_40d2_bf87_f137e03ddf8e_points .
4438

45-
:pt_a67e3495_ab86_4d2a_89ae_8c4d831e3cda a brick:Mixed_Air_Temperature_Sensor ;
39+
:pt_a5a6733d_c2c6_4778_ad8d_33107d3b19ff a brick:Point ;
4640
rdfs:label "MA-T" ;
47-
brick:isPointOf :site_86d32457_fe01_4d1a_b54a_2a4fdb6aaef5_points ;
48-
ofdd:mapsToRuleInput "MA-T" .
41+
brick:isPointOf :site_5e69ecae_0f25_40d2_bf87_f137e03ddf8e_points .
4942

50-
:pt_c7c1b84b_d1bc_47b5_922e_198a173378df a brick:Outside_Air_Temperature_Sensor ;
43+
:pt_d356222b_7ab8_48bf_8b0f_56d55167ec04 a brick:Point ;
5144
rdfs:label "OA-T" ;
52-
brick:isPointOf :site_86d32457_fe01_4d1a_b54a_2a4fdb6aaef5_points ;
53-
ofdd:mapsToRuleInput "OA-T" .
45+
brick:isPointOf :site_5e69ecae_0f25_40d2_bf87_f137e03ddf8e_points .
5446

55-
:pt_18be468e_f5ed_4d56_8df0_061c4d265474 a brick:Outside_Air_Temperature_Sensor ;
47+
:pt_235b092f_77a9_4ee4_a2f9_1e251f7f55f1 a brick:Point ;
5648
rdfs:label "OAT-NETWORK" ;
57-
brick:isPointOf :site_86d32457_fe01_4d1a_b54a_2a4fdb6aaef5_points ;
58-
ofdd:mapsToRuleInput "OAT-NETWORK" .
49+
brick:isPointOf :site_5e69ecae_0f25_40d2_bf87_f137e03ddf8e_points .
5950

60-
:pt_8ec839fe_f5ed_48f8_aa74_7f28c36af542 a brick:Schedule ;
51+
:pt_e23ec034_91b3_4bec_9e36_33adb610a8f4 a brick:Point ;
6152
rdfs:label "Occ-Schedule" ;
62-
brick:isPointOf :site_86d32457_fe01_4d1a_b54a_2a4fdb6aaef5_points ;
63-
ofdd:mapsToRuleInput "Occ-Schedule" .
53+
brick:isPointOf :site_5e69ecae_0f25_40d2_bf87_f137e03ddf8e_points .
6454

65-
:pt_5fe50677_7632_4774_9de3_099e869c7d1f a brick:Schedule ;
55+
:pt_5d8901d3_3731_44f1_8362_a5d25be8e124 a brick:Point ;
6656
rdfs:label "Office-Hours-Schedule" ;
67-
brick:isPointOf :site_86d32457_fe01_4d1a_b54a_2a4fdb6aaef5_points ;
68-
ofdd:mapsToRuleInput "Office-Hours-Schedule" .
57+
brick:isPointOf :site_5e69ecae_0f25_40d2_bf87_f137e03ddf8e_points .
6958

70-
:pt_4e39ca80_9793_44db_8468_985af5aef1da a brick:Return_Air_Temperature_Sensor ;
59+
:pt_b84de8b3_4508_4cf3_86ea_b5b3c55aa4d9 a brick:Point ;
7160
rdfs:label "RA-T" ;
72-
brick:isPointOf :site_86d32457_fe01_4d1a_b54a_2a4fdb6aaef5_points ;
73-
ofdd:mapsToRuleInput "RA-T" .
61+
brick:isPointOf :site_5e69ecae_0f25_40d2_bf87_f137e03ddf8e_points .
7462

75-
:pt_8e223eed_2c85_4c03_9e96_19f6efe829a1 a brick:Supply_Air_Flow_Sensor ;
63+
:pt_3af9bbf1_a2cc_4e8d_bdd2_09e30db6bcc0 a brick:Point ;
7664
rdfs:label "SA-FLOW" ;
77-
brick:isPointOf :site_86d32457_fe01_4d1a_b54a_2a4fdb6aaef5_points ;
78-
ofdd:mapsToRuleInput "SA-FLOW" .
65+
brick:isPointOf :site_5e69ecae_0f25_40d2_bf87_f137e03ddf8e_points .
7966

80-
:pt_7da9a509_a64b_4c8b_974c_2f7a48834ff4 a brick:Supply_Air_Temperature_Sensor ;
67+
:pt_72a08c09_bc55_40fa_adf6_69e9f883de9b a brick:Point ;
8168
rdfs:label "SA-T" ;
82-
brick:isPointOf :site_86d32457_fe01_4d1a_b54a_2a4fdb6aaef5_points ;
83-
ofdd:mapsToRuleInput "SA-T" .
69+
brick:isPointOf :site_5e69ecae_0f25_40d2_bf87_f137e03ddf8e_points .
8470

85-
:pt_ff131d8d_0b80_4a37_ab3a_c41a4f386add a brick:Supply_Air_Temperature_Setpoint ;
71+
:pt_a04ea53e_aaac_41e0_90c0_c3237c94c113 a brick:Point ;
8672
rdfs:label "SAT-SP" ;
87-
brick:isPointOf :site_86d32457_fe01_4d1a_b54a_2a4fdb6aaef5_points ;
88-
ofdd:mapsToRuleInput "SAT-SP" .
73+
brick:isPointOf :site_5e69ecae_0f25_40d2_bf87_f137e03ddf8e_points .
8974

90-
:pt_3411ad6e_1887_4665_affa_aafae19fc858 a brick:Supply_Fan_Command ;
75+
:pt_6a671c9c_bd61_4245_a62c_6ada7636cbc1 a brick:Point ;
9176
rdfs:label "SF-C" ;
92-
brick:isPointOf :site_86d32457_fe01_4d1a_b54a_2a4fdb6aaef5_points ;
93-
ofdd:mapsToRuleInput "SF-C" .
77+
brick:isPointOf :site_5e69ecae_0f25_40d2_bf87_f137e03ddf8e_points .
9478

95-
:pt_50ba5823_0d3a_457d_b66c_c55486179a3b a brick:Supply_Fan_Speed_Command ;
79+
:pt_439b6179_37f7_4c59_9962_a8cf2e3e6f67 a brick:Point ;
9680
rdfs:label "SF-O" ;
97-
brick:isPointOf :site_86d32457_fe01_4d1a_b54a_2a4fdb6aaef5_points ;
98-
ofdd:mapsToRuleInput "SF-O" .
81+
brick:isPointOf :site_5e69ecae_0f25_40d2_bf87_f137e03ddf8e_points .
9982

100-
:pt_740fb4b7_74d8_46cf_b27e_e8f411451428 a brick:Supply_Fan_Status ;
83+
:pt_e681fc96_c8c1_4971_abd8_56f633ef2e94 a brick:Point ;
10184
rdfs:label "SF-S" ;
102-
brick:isPointOf :site_86d32457_fe01_4d1a_b54a_2a4fdb6aaef5_points ;
103-
ofdd:mapsToRuleInput "SF-S" .
85+
brick:isPointOf :site_5e69ecae_0f25_40d2_bf87_f137e03ddf8e_points .
10486

105-
:pt_696003b2_3b05_46e8_a882_243abe51387a a brick:Damper_Position_Command ;
87+
:pt_854ba784_94a7_4bd4_961f_b7a646c09231 a brick:Point ;
10688
rdfs:label "VAVDamperCmd" ;
107-
brick:isPointOf :site_86d32457_fe01_4d1a_b54a_2a4fdb6aaef5_points ;
108-
ofdd:mapsToRuleInput "VAVDamperCmd" .
89+
brick:isPointOf :site_5e69ecae_0f25_40d2_bf87_f137e03ddf8e_points .
10990

110-
:pt_1875b30e_e179_4ef2_b4ba_307ff815ff94 a brick:VAV_Air_Flow_Sensor ;
91+
:pt_32002699_a039_4b45_9145_578f6008dc11 a brick:Point ;
11192
rdfs:label "VAVFlow" ;
112-
brick:isPointOf :site_86d32457_fe01_4d1a_b54a_2a4fdb6aaef5_points ;
113-
ofdd:mapsToRuleInput "VAVFlow" .
93+
brick:isPointOf :site_5e69ecae_0f25_40d2_bf87_f137e03ddf8e_points .
11494

115-
:pt_1e9f4ede_5d0c_4236_a181_df209e497727 a brick:VAV_Air_Flow_Setpoint ;
95+
:pt_4c7ee976_7c4b_480c_b94d_e1ff0a149e21 a brick:Point ;
11696
rdfs:label "VAVFlowSpt" ;
117-
brick:isPointOf :site_86d32457_fe01_4d1a_b54a_2a4fdb6aaef5_points ;
118-
ofdd:mapsToRuleInput "VAVFlowSpt" .
97+
brick:isPointOf :site_5e69ecae_0f25_40d2_bf87_f137e03ddf8e_points .
11998

120-
:pt_c7798299_7a18_43c7_8ae6_e674440b30f9 a brick:Zone_Cooling_Temperature_Setpoint ;
99+
:pt_1335e3ee_852f_4e0e_a492_7b8e19ef4bf2 a brick:Point ;
121100
rdfs:label "ZoneCoolingSpt" ;
122-
brick:isPointOf :site_86d32457_fe01_4d1a_b54a_2a4fdb6aaef5_points ;
123-
ofdd:mapsToRuleInput "ZoneCoolingSpt" .
101+
brick:isPointOf :site_5e69ecae_0f25_40d2_bf87_f137e03ddf8e_points .
124102

125-
:pt_9079d84f_0be0_4613_a468_1daa119b31f1 a brick:Cooling_Demand_Sensor ;
103+
:pt_a3d84313_8b98_49db_8e9f_00e815b66ecd a brick:Point ;
126104
rdfs:label "ZoneDemand" ;
127-
brick:isPointOf :site_86d32457_fe01_4d1a_b54a_2a4fdb6aaef5_points ;
128-
ofdd:mapsToRuleInput "ZoneDemand" .
105+
brick:isPointOf :site_5e69ecae_0f25_40d2_bf87_f137e03ddf8e_points .
129106

130-
:pt_757d5e18_3b80_4b20_8a8b_e7fd98b16fca a brick:Zone_Air_Temperature_Sensor ;
107+
:pt_cd117cb9_9e33_4d39_8847_4f5f435f3842 a brick:Point ;
131108
rdfs:label "ZoneTemp" ;
132-
brick:isPointOf :site_86d32457_fe01_4d1a_b54a_2a4fdb6aaef5_points ;
133-
ofdd:mapsToRuleInput "ZoneTemp" .
109+
brick:isPointOf :site_5e69ecae_0f25_40d2_bf87_f137e03ddf8e_points .
134110

135-
:pt_5ac4dc3b_4ea9_42d5_a0d7_87b40cb47a41 a brick:Dew_Point_Temperature_Sensor ;
111+
:pt_eb876613_f95a_4bea_bc0e_10be8d606a12 a brick:Point ;
136112
rdfs:label "dewpoint_f" ;
137-
brick:isPointOf :site_86d32457_fe01_4d1a_b54a_2a4fdb6aaef5_points ;
138-
ofdd:mapsToRuleInput "dewpoint_f" .
113+
brick:isPointOf :site_5e69ecae_0f25_40d2_bf87_f137e03ddf8e_points .
139114

140-
:pt_92989ffc_051d_49fe_a2f2_fb71d4e18d70 a brick:Wind_Gust_Speed_Sensor ;
115+
:pt_0b2f7868_bcde_4332_8cc9_de5b12e11706 a brick:Point ;
141116
rdfs:label "gust_mph" ;
142-
brick:isPointOf :site_86d32457_fe01_4d1a_b54a_2a4fdb6aaef5_points ;
143-
ofdd:mapsToRuleInput "gust_mph" .
117+
brick:isPointOf :site_5e69ecae_0f25_40d2_bf87_f137e03ddf8e_points .
144118

145-
:pt_7a2d5c34_a1ff_4faf_a7cf_a0c9f422c2cb a brick:Occupancy_Status ;
119+
:pt_c7be5c81_1e31_4f42_a12e_1c8467091c82 a brick:Point ;
146120
rdfs:label "occupied-bv" ;
147-
brick:isPointOf :site_86d32457_fe01_4d1a_b54a_2a4fdb6aaef5_points ;
148-
ofdd:mapsToRuleInput "occupied-bv" .
121+
brick:isPointOf :site_5e69ecae_0f25_40d2_bf87_f137e03ddf8e_points .
149122

150-
:pt_15bac85d_6b20_4715_9414_d5439b28ef03 a brick:Outside_Air_Humidity_Sensor ;
123+
:pt_577a275c_52bd_4fd9_bf29_fd8b89a4d6b9 a brick:Point ;
151124
rdfs:label "rh_pct" ;
152-
brick:isPointOf :site_86d32457_fe01_4d1a_b54a_2a4fdb6aaef5_points ;
153-
ofdd:mapsToRuleInput "rh_pct" .
125+
brick:isPointOf :site_5e69ecae_0f25_40d2_bf87_f137e03ddf8e_points .
154126

155-
:pt_7e8b6d97_ee8e_436a_a7ce_dd524e0d5f38 a brick:Outside_Air_Temperature_Sensor ;
127+
:pt_722848b4_48cc_4c84_a0ad_589b365b217a a brick:Point ;
156128
rdfs:label "temp_f" ;
157-
brick:isPointOf :site_86d32457_fe01_4d1a_b54a_2a4fdb6aaef5_points ;
158-
ofdd:mapsToRuleInput "temp_f" .
129+
brick:isPointOf :site_5e69ecae_0f25_40d2_bf87_f137e03ddf8e_points .
159130

160-
:pt_47757e83_cb78_4a90_8bfa_b2e6228e489d a brick:Wind_Speed_Sensor ;
131+
:pt_75418f27_26af_45bc_b1e8_733b898236b0 a brick:Point ;
161132
rdfs:label "wind_mph" ;
162-
brick:isPointOf :site_86d32457_fe01_4d1a_b54a_2a4fdb6aaef5_points ;
163-
ofdd:mapsToRuleInput "wind_mph" .
133+
brick:isPointOf :site_5e69ecae_0f25_40d2_bf87_f137e03ddf8e_points .
164134

‎config/platform.example.yaml‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
# Platform config example — copy to platform.yaml and edit
22
# OFDD_ env vars override these
3+
#
4+
# Edge / resource limits (bootstrap applies these):
5+
# - Docker logs: 100 MB per file, 3 files max (300 MB per container) — in docker-compose
6+
# - Data retention: 1 year (TimescaleDB 007_retention.sql); edit interval for 200 GB target
37

48
# FDD rule loop: periodic runs (sensor + weather rules)
59
# Every run loads rules from YAML (analyst edits apply immediately), pulls last N days into pandas

‎docs/configuration.md‎

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,41 @@ Copy `config/platform.example.yaml` to `platform/platform.yaml` (or set via envi
2929
| `open_meteo_days_back` | 3 | Days of archive to fetch |
3030
| `open_meteo_site_id` | default | Site ID for weather points |
3131

32+
**Open-Meteo weather points** (stored in `timeseries_readings`, `external_id`):
33+
34+
| Point | Description |
35+
|-------|-------------|
36+
| `temp_f` | Temperature (°F) |
37+
| `rh_pct` | Relative humidity (%) |
38+
| `dewpoint_f` | Dew point (°F) |
39+
| `wind_mph` | Wind speed (mph) |
40+
| `gust_mph` | Wind gusts (mph) |
41+
| `wind_dir_deg` | Wind direction (degrees) |
42+
| `shortwave_wm2` | Shortwave radiation (W/m²) |
43+
| `direct_wm2` | Direct radiation (W/m²) |
44+
| `diffuse_wm2` | Diffuse radiation (W/m²) |
45+
| `gti_wm2` | Global tilted irradiance (W/m²) |
46+
| `cloud_pct` | Cloud cover (%) |
47+
48+
---
49+
50+
## Edge / resource limits
51+
52+
For edge deployments with limited disk, bootstrap applies:
53+
54+
| Limit | Value | Where |
55+
|-------|-------|-------|
56+
| **Docker logs** | 100 MB × 3 files (~300 MB per container) | `platform/docker-compose.yml` — `x-log-opts` |
57+
| **Data retention** | 1 year (365 days) | `platform/sql/007_retention.sql` — TimescaleDB `add_retention_policy` |
58+
59+
**Log rotation:** Containers use `json-file` driver with `max-size: 100m`, `max-file: 3`. Prevents logs from filling disk.
60+
61+
**Data retention:** Drops chunks older than 1 year from `timeseries_readings`, `fault_results`, `host_metrics`, `container_metrics`. Typical edge (BACnet + weather, ~hourly) stays under ~200 GB. To change: edit `INTERVAL '365 days'` in `007_retention.sql` (e.g. `'180 days'`, `'2 years'`).
62+
63+
**200 GB hard cap:** Not enforced automatically. If you need a strict limit, add cron or systemd to run `SELECT drop_chunks(...)` when disk usage exceeds a threshold, or use LVM/disk quotas at the host.
64+
65+
**Accessing logs:** `docker logs <container> --tail 50` (e.g. `openfdd_weather_scraper`, `openfdd_bacnet_scraper`). See [Verification](howto/verification#logs).
66+
3267
---
3368

3469
## Environment

‎docs/getting_started.md‎

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ Lists containers and tests DB reachability.
5151

5252
Default Grafana login: admin / admin.
5353

54-
**Grafana provisioning:** TimescaleDB datasource and Open-FDD dashboards are provisioned from config. No manual setup needed. Dashboards appear under **Open-FDD**: BACnet Timeseries, Fault Results, System Resources (host + Docker container metrics). If dashboards show "no datasource" or wrong DB, run:
54+
**Grafana provisioning:** TimescaleDB datasource and Open-FDD dashboards are provisioned from config. No manual setup needed. Dashboards appear under **Open-FDD**: BACnet Timeseries, Fault Results, System Resources (host + container metrics), **Weather (Open-Meteo)** (temp, solar, wind, cloud). If dashboards show "no datasource" or wrong DB, run:
5555

5656
```bash
5757
./scripts/bootstrap.sh --reset-grafana
@@ -96,6 +96,8 @@ cd open-fdd
9696

9797
## Next steps
9898

99+
- [Verification](howto/verification) — Access logs, check data flow, Grafana dashboards
100+
- [Configuration](configuration) — Log limits, data retention (~200 GB / 1 year)
99101
- [BACnet setup](bacnet/overview) — Discover devices, configure scrape
100102
- [Data modeling](modeling/overview) — Export points, map Brick types, validate
101103
- [Rules](rules/overview) — Rule types and expression cookbook

‎docs/howto/operations.md‎

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,17 @@ Reboot: containers stop unless Docker or systemd is configured to start them on
2020

2121
---
2222

23+
## When to rebuild
24+
25+
| Change | Action |
26+
|--------|--------|
27+
| **Log limits, retention SQL, Grafana dashboards** | `docker compose up -d` (restart). Log limits and new dashboards apply after restart. |
28+
| **Open-Meteo driver** (new weather points: solar, cloud, wind_dir) | Rebuild weather-scraper: `docker compose build weather-scraper && docker compose up -d weather-scraper` |
29+
| **API, FDD loop, BACnet scraper code** | `docker compose up -d --build` (rebuild affected services) |
30+
| **Grafana dashboards missing** | `./scripts/bootstrap.sh --reset-grafana` |
31+
32+
---
33+
2334
## Resource check
2435

2536
```bash

0 commit comments

Comments
 (0)