Data Logger: CSV Sink¶
Requirements¶
A CSV implementation of the
SinkLogger
interfaceConfigurable columns: mapping sensor names (from
SensorValues
onto column names). Like so,sink = CSVSink( "/path/to/logfile.csv", { { "LinksOben", "links-oben" }, { "RechtsUnten", "rechts-unten" }, }); SensorValues values; values.addMeasurement("links-oben", 37.5); values.addMeasurement("rechts-unten", 42.666); sink.output(values);
This results in a CSV format similar to the following:
LinksOben;RechtsUnten 37.5;42.666
Implementation¶
Column name configuration¶
class CSVSink
takes a std::vector<std::pair<std::string,
std::string>>
as column configuration. It remembers that object
internally, as it will be used on every call to output()
.
output()
¶
To bring the SensorValues
into a CSV line, you iterate over the
config, and lookup each entry in the SensorValues
,
for (auto [csvname, valuename]: _config) {
double value = sensor_values.getMeasurement(valuename);
... write value into "csvname" column ...
}
Testing¶
Basic (ok) case
Error: bad config: referred name not found in
SensorValues
Whatever error cases might come to mind
Future (Not Part Of This Development Cycle)¶
Log rotation. Users might want to backup what was logged, remove old data, and start a new file. The class must somehow support this.