Waterschap Brabantse Delta · R&D lab · research artifact
How the compression works, step by step:[2]
Where a segment is closed is determined by whether the knots before it can still change.
Each requirement is a user story with a description and acceptance criteria. The stakeholder in every story is the R&D lab. Changed in version 1.5: US-1, US-2, US-3, US-12 and US-13; US-16 raised from Could to Must. New: US-19 and US-20.
| ID | User story | Priority | Description | Acceptance criteria |
|---|---|---|---|---|
| US-1 | As the R&D lab I want measurement data to be stored compactly, so that less storage and data traffic is needed. | MUST | The system stores only the important measured points (knots). The course between them is reconstructed later. |
|
| US-2 | As the R&D lab I want the reconstructed series never to deviate more than the repeatability of the sensor, so that the deviation stays within the measurement uncertainty. | MUST | The compression is lossy with a fixed bound: a point is only dropped when the reconstruction stays within ε of it. |
|
| US-3 | As the R&D lab I want to retrieve a sensor's series over any period, so that I can work with it as with the measured series. | MUST | A continuous line is reconstructed from the stored knots. |
|
| US-4 | As the R&D lab I want the reconstructed series to contain no peaks or dips that were not measured, so that I don't analyse fake data. | MUST | The series is reconstructed with a monotone method (PCHIP) that does not overshoot between two knots. |
|
| US-5 | As the R&D lab I want no knots to be lost when the edge device restarts or the connection to storage drops, so that the series is always complete. | MUST | The system holds on to knots during an outage and sends them as soon as it can. The existing FROST writer buffers in memory; a restart empties that buffer. |
|
| US-6 | As the R&D lab I want the compression to work with a limited amount of memory, so that it can run on the edge device between sensor and storage. | MUST | The system works with a small active window per series and writes out segments that no longer change immediately. |
|
| US-7 | As the R&D lab I want consecutive stored blocks to join seamlessly, so that no jumps appear in the series. | MUST | Where one stored block ends, the next one begins without interruption. |
|
| US-8 | As the R&D lab I want to see when a sensor did not measure, so that I don't mistake missing data for real measurements. | MUST | A period without measurements is not filled with invented values. |
|
| US-19 | As the R&D lab I want the compression to work on a copy of the data, so that the control in the nodes (for example pumps) keeps using the full, original data. | MUST | New in 1.5. The compression only sees the points of the FROST writer, never the node's MeasurementContainer. |
|
| US-16 | As the R&D lab I want to retrieve values at a time step of my choice, so that I can analyse the series and easily compare series from different sensors. | MUST | Raised from Could to Must in 1.5: because only knots are stored, the reconstructed series has to be evaluated at any desired timestamp to be usable for analysis. |
|
| US-9 | As the R&D lab I want the highest and lowest values to be kept exactly, so that I can check afterwards whether a limit was exceeded. | SHOULD | Extreme values, such as a peak water level, are always stored as a knot. |
|
| US-10 | As the R&D lab I want recent measurements to be available in storage quickly, so that I can follow the current situation. | SHOULD | The system sometimes waits briefly to decide which points matter, but a maximum delay applies. |
|
| US-11 | As the R&D lab I want missing or faulty values to be handled by fixed rules, so that the compression doesn't derail on bad data. | SHOULD | Values such as NaN or sensor error codes are recognised and processed predictably. |
|
| US-12 | As the R&D lab I want to see per series how much storage is saved and how large the deviation is, so that I know whether the settings are well chosen. | SHOULD | During the test phase the system tracks the saving and the largest measured deviation per series. |
|
| US-13 | As the R&D lab I want each stored block to record how it was compressed, so that the data can always be reconstructed correctly later. | SHOULD | Each block or Datastream contains a small piece of descriptive information (metadata). |
|
| US-20 | As the R&D lab I want the compression as a general function in generalFunctions, so that every node with a FROST writer can use it. | SHOULD | New in 1.5. The compression is a reducer in the plug-in point of the FROST writer. |
|
| US-14 | As the R&D lab I want to store timestamps as the difference from the previous knot, so that storage becomes even smaller. | COULD | Instead of a full timestamp only the time difference is stored. |
|
| US-15 | As the R&D lab I want to temporarily keep the raw data next to the compressed data in the initial phase, so that I can verify how it works. | COULD | Raw data is kept for a configurable period for validation. |
|
| US-17 | As the R&D lab I want to compress multiple series together. | WON'T | Out of scope: too complex for this phase; each series is compressed separately. |
|
| US-18 | As the R&D lab I want to receive an alarm from the edge device when a threshold is exceeded. | WON'T | Out of scope: alarming belongs to a different system. |
|