Skip to content
Snippets Groups Projects
Commit 69e2fb96 authored by Zoe Pfister's avatar Zoe Pfister :speech_balloon:
Browse files

WIP: Move ErrorType into MeasurementData

parent 3f52a6ff
No related branches found
No related tags found
2 merge requests!39Merge Develop into Main,!27Move from json-string based transfer between client and host to C struct / class based transfer
...@@ -192,8 +192,8 @@ void LC709203F::setThermistorB(uint16_t beta) { ...@@ -192,8 +192,8 @@ void LC709203F::setThermistorB(uint16_t beta) {
std::list<Message> LC709203F::buildMessages() { std::list<Message> LC709203F::buildMessages() {
std::list<Message> messages; std::list<Message> messages;
float data = cellVoltage_mV() / 1000.0; float data = cellVoltage_mV() / 1000.0;
MeasurementData IncrementData{data, 0, NO_I2C_ADDRESS, MeasurementData IncrementData{data, 0, NO_I2C_ADDRESS, MeasurementType::BATTERY_VOLTAGE,
MeasurementType::BATTERY_VOLTAGE}; ErrorType::DATA_OK};
messages.emplace_back(IncrementData, messages.emplace_back(IncrementData,
sensorInformation, sensorInformation,
Time::getInstance().getEpochSeconds()); Time::getInstance().getEpochSeconds());
......
...@@ -71,7 +71,8 @@ std::list<Message> ForteDR26::buildMessages() { ...@@ -71,7 +71,8 @@ std::list<Message> ForteDR26::buildMessages() {
std::list <Message> messages; std::list <Message> messages;
float data = readData(); float data = readData();
MeasurementData IncrementData MeasurementData IncrementData
{data, channel, NO_I2C_ADDRESS, MeasurementType::CIRCUMFERENCE_INCREMENT}; {data, channel, NO_I2C_ADDRESS, MeasurementType::CIRCUMFERENCE_INCREMENT,
ErrorType::DATA_OK};
messages.emplace_back(IncrementData, messages.emplace_back(IncrementData,
sensorInformation, sensorInformation,
Time::getInstance().getEpochSeconds()); Time::getInstance().getEpochSeconds());
...@@ -82,7 +83,7 @@ std::list<Message> ForteDR26::buildMessages() { ...@@ -82,7 +83,7 @@ std::list<Message> ForteDR26::buildMessages() {
std::list<Message> ForteDR26::buildMessages(MeasurementType measurementType) { std::list<Message> ForteDR26::buildMessages(MeasurementType measurementType) {
std::list<Message> messages; std::list<Message> messages;
float data = readData(); float data = readData();
MeasurementData IncrementData{data, channel, NO_I2C_ADDRESS, measurementType}; MeasurementData IncrementData{data, channel, NO_I2C_ADDRESS, measurementType, ErrorType::DATA_OK};
messages.emplace_back(IncrementData, messages.emplace_back(IncrementData,
sensorInformation, sensorInformation,
Time::getInstance().getEpochSeconds()); Time::getInstance().getEpochSeconds());
......
...@@ -42,11 +42,12 @@ out_data_drs26 ForteDRS26::readData() { ...@@ -42,11 +42,12 @@ out_data_drs26 ForteDRS26::readData() {
std::list<Message> ForteDRS26::buildMessages() { std::list<Message> ForteDRS26::buildMessages() {
std::list<Message> messages; std::list<Message> messages;
MeasurementData circumferenceIncrementMeasurementData{ MeasurementData circumferenceIncrementMeasurementData{data.circumferenceIncrement, 0,
data.circumferenceIncrement, 0, NO_I2C_ADDRESS, NO_I2C_ADDRESS,
MeasurementType::CIRCUMFERENCE_INCREMENT}; MeasurementType::CIRCUMFERENCE_INCREMENT,
MeasurementData temperatureMeasurementData{ ErrorType::DATA_OK};
data.temperature, 0, NO_I2C_ADDRESS, MeasurementType::TEMPERATURE}; MeasurementData temperatureMeasurementData{data.temperature, 0, NO_I2C_ADDRESS,
MeasurementType::TEMPERATURE, ErrorType::DATA_OK};
messages.emplace_back(circumferenceIncrementMeasurementData, messages.emplace_back(circumferenceIncrementMeasurementData,
sensorInformation, sensorInformation,
......
...@@ -38,9 +38,7 @@ esp_err_t Message::sendMessages(const std::array<Message, 6> &messages) { ...@@ -38,9 +38,7 @@ esp_err_t Message::sendMessages(const std::array<Message, 6> &messages) {
break; break;
} }
clientDataPackages[i] = message.getClientDataPackage(); clientDataPackages[i] = message.getClientDataPackage();
if (message.clientDataPackage.getTimestamp() == NULL_TIMESTAMP) {
clientDataPackages[i].setErrorType(ErrorType::NULL_MESSAGE);
}
i++; i++;
} }
...@@ -81,7 +79,7 @@ Message::Message(ClientDataPackage data) : clientDataPackage(data) { ...@@ -81,7 +79,7 @@ Message::Message(ClientDataPackage data) : clientDataPackage(data) {
Message::Message(MeasurementData const &data, Message::Message(MeasurementData const &data,
const SensorInformation &information, const SensorInformation &information,
unsigned long timestamp) unsigned long timestamp)
: clientDataPackage(data, information, ErrorType::DATA_OK, timestamp) { : clientDataPackage(data, information, timestamp) {
// check for existing host mac address, use broadcast otherwise // check for existing host mac address, use broadcast otherwise
get_host_mac(recipient); get_host_mac(recipient);
} }
......
...@@ -27,7 +27,7 @@ class Message { ...@@ -27,7 +27,7 @@ class Message {
return Message{MeasurementData(ERROR_VALUE, return Message{MeasurementData(ERROR_VALUE,
NO_CHANNEL, NO_CHANNEL,
NO_I2C_ADDRESS, NO_I2C_ADDRESS,
MeasurementType::NULL_MEASUREMENT), MeasurementType::NULL_MEASUREMENT, ErrorType::DATA_OK),
SensorInformation(HardwareName::NONE, SensorInformation(HardwareName::NONE,
SensorProtocol::NULL_PROTOCOL), SensorProtocol::NULL_PROTOCOL),
NULL_TIMESTAMP}; NULL_TIMESTAMP};
......
...@@ -27,25 +27,18 @@ out_data_ina219 ForteINA219::readData() { ...@@ -27,25 +27,18 @@ out_data_ina219 ForteINA219::readData() {
std::list<Message> ForteINA219::buildMessages() { std::list<Message> ForteINA219::buildMessages() {
std::list<Message> messages; std::list<Message> messages;
out_data_ina219 data = readData(); out_data_ina219 data = readData();
MeasurementData shuntVoltageData{ MeasurementData shuntVoltageData{data.shuntVoltage_mV, 0, NO_I2C_ADDRESS,
data.shuntVoltage_mV, 0, NO_I2C_ADDRESS, MeasurementType::SHUNT_VOLTAGE MeasurementType::SHUNT_VOLTAGE, ErrorType::DATA_OK};
}; MeasurementData busVoltageData{data.busVoltage_V, 0, NO_I2C_ADDRESS, MeasurementType::BUS_VOLTAGE,
MeasurementData busVoltageData{ ErrorType::DATA_OK};
data.busVoltage_V, 0, NO_I2C_ADDRESS, MeasurementType::BUS_VOLTAGE MeasurementData currentMilliAmpData{data.current_mA, 0, NO_I2C_ADDRESS,
}; MeasurementType::CURRENT_mA, ErrorType::DATA_OK};
MeasurementData currentMilliAmpData{ MeasurementData powerMilliWattData{data.power_mW, 0, NO_I2C_ADDRESS, MeasurementType::POWER_mA,
data.current_mA, 0, NO_I2C_ADDRESS, MeasurementType::CURRENT_mA ErrorType::DATA_OK};
}; MeasurementData loadVoltageData{data.loadVoltage_V, 0, NO_I2C_ADDRESS,
MeasurementData powerMilliWattData{ MeasurementType::LOAD_VOLTAGE_V, ErrorType::DATA_OK};
data.power_mW, 0, NO_I2C_ADDRESS, MeasurementType::POWER_mA MeasurementData ina219OverflowData{static_cast<double>(data.ina219_overflow), 0, NO_I2C_ADDRESS,
}; MeasurementType::INA219_OVERFLOW, ErrorType::DATA_OK};
MeasurementData loadVoltageData{
data.loadVoltage_V, 0, NO_I2C_ADDRESS, MeasurementType::LOAD_VOLTAGE_V
};
MeasurementData ina219OverflowData{
static_cast<double>(data.ina219_overflow), 0, NO_I2C_ADDRESS,
MeasurementType::INA219_OVERFLOW
};
messages.emplace_back(shuntVoltageData, sensorInformation, 0); messages.emplace_back(shuntVoltageData, sensorInformation, 0);
messages.emplace_back(busVoltageData, sensorInformation, 0); messages.emplace_back(busVoltageData, sensorInformation, 0);
......
...@@ -26,7 +26,7 @@ std::list<Message> MockSensor::buildMessages() { ...@@ -26,7 +26,7 @@ std::list<Message> MockSensor::buildMessages() {
std::list <Message> messages; std::list <Message> messages;
float data = readData() + static_cast<float>(DeepSleep::bootCount); float data = readData() + static_cast<float>(DeepSleep::bootCount);
MeasurementData MeasurementData
MockData{data, channel, NO_I2C_ADDRESS, MeasurementType::MOCK}; MockData{data, channel, NO_I2C_ADDRESS, MeasurementType::MOCK, ErrorType::DATA_OK};
messages.emplace_back(MockData, messages.emplace_back(MockData,
sensorInformation, sensorInformation,
Time::getInstance().getEpochSeconds()); Time::getInstance().getEpochSeconds());
......
...@@ -25,10 +25,12 @@ std::list<Message> ForteSCD30::buildMessages() { ...@@ -25,10 +25,12 @@ std::list<Message> ForteSCD30::buildMessages() {
std::list<Message> messages; std::list<Message> messages;
data = readData(); // TODO: catch exception data = readData(); // TODO: catch exception
MeasurementData CO2Data{data.C02, 0, NO_I2C_ADDRESS, MeasurementType::CO2}; MeasurementData CO2Data{data.C02, 0, NO_I2C_ADDRESS, MeasurementType::CO2, ErrorType::DATA_OK};
MeasurementData MeasurementData
TempData{data.Temperature, 0, NO_I2C_ADDRESS, MeasurementType::TEMPERATURE}; TempData{data.Temperature, 0, NO_I2C_ADDRESS, MeasurementType::TEMPERATURE,
MeasurementData HumidData{data.Humidity, 0, NO_I2C_ADDRESS, MeasurementType::HUMIDITY}; ErrorType::DATA_OK};
MeasurementData HumidData{data.Humidity, 0, NO_I2C_ADDRESS, MeasurementType::HUMIDITY,
ErrorType::DATA_OK};
messages.emplace_back(CO2Data, messages.emplace_back(CO2Data,
sensorInformation, sensorInformation,
......
...@@ -50,10 +50,10 @@ out_data_sht85 Sht85::readData() { ...@@ -50,10 +50,10 @@ out_data_sht85 Sht85::readData() {
std::list<Message> Sht85::buildMessages() { std::list<Message> Sht85::buildMessages() {
std::list<Message> messages; std::list<Message> messages;
auto data = readData(); auto data = readData();
MeasurementData temperatureMeasurementData{ MeasurementData temperatureMeasurementData{data.temperature, NO_CHANNEL, 0x44,
data.temperature, NO_CHANNEL, 0x44, MeasurementType::TEMPERATURE}; MeasurementType::TEMPERATURE, ErrorType::DATA_OK};
MeasurementData humidityMeasurementData{ MeasurementData humidityMeasurementData{data.humidity, NO_CHANNEL, 0x44,
data.humidity, NO_CHANNEL, 0x44, MeasurementType::HUMIDITY}; MeasurementType::HUMIDITY, ErrorType::DATA_OK};
messages.emplace_back( messages.emplace_back(
temperatureMeasurementData, temperatureMeasurementData,
......
...@@ -95,7 +95,7 @@ void on_data_recv(const uint8_t *mac, const uint8_t *incomingData, int len) { ...@@ -95,7 +95,7 @@ void on_data_recv(const uint8_t *mac, const uint8_t *incomingData, int len) {
for (auto &data : compressedDataPackage) { for (auto &data : compressedDataPackage) {
// ignore padding messages // ignore padding messages
if (data.getTimestamp() == NULL_TIMESTAMP && data.getErrorType() == ErrorType::NULL_MESSAGE) { if (data.getTimestamp() == NULL_TIMESTAMP && data.getMeasurementData().getErrorType() == ErrorType::NULL_MESSAGE) {
continue; continue;
} }
......
...@@ -13,65 +13,56 @@ ...@@ -13,65 +13,56 @@
// having the data be a struct of basic types makes sending easier, // having the data be a struct of basic types makes sending easier,
// otherwise we would have to serialize the data before sending // otherwise we would have to serialize the data before sending
class ClientDataPackage { class ClientDataPackage {
private: private:
MeasurementData measurementData; MeasurementData measurementData;
SensorInformation sensorInformation; SensorInformation sensorInformation;
ErrorType errorType; unsigned long timestamp; // maybe make this array
unsigned long timestamp; // maybe make this array
public: public:
ClientDataPackage(MeasurementData value, ClientDataPackage(MeasurementData value,
SensorInformation sensorInformation, SensorInformation sensorInformation,
ErrorType errorType,
unsigned long timestamp)
: measurementData(value),
sensorInformation(sensorInformation),
timestamp(timestamp),
errorType(errorType) {
}
unsigned long timestamp)
: measurementData(value),
sensorInformation(sensorInformation),
timestamp(timestamp) {
}
[[nodiscard]] ErrorType getErrorType() const {
return errorType;
}
void setErrorType(ErrorType error) { [[nodiscard]] const MeasurementData &
ClientDataPackage::errorType = error; getMeasurementData() const { return measurementData; }
}
[[nodiscard]] const MeasurementData & [[nodiscard]] const SensorInformation &
getMeasurementData() const { return measurementData; } getSensorInformation() const { return sensorInformation; }
[[nodiscard]] const SensorInformation & [[nodiscard]] unsigned long getTimestamp() const { return timestamp; }
getSensorInformation() const { return sensorInformation; }
[[nodiscard]] unsigned long getTimestamp() const { return timestamp; } [[nodiscard]] std::string getDataPackageAsMinifiedJsonString() const {
StaticJsonDocument<250> document; // 250 byte is the max send size of espnow
[[nodiscard]] std::string getDataPackageAsMinifiedJsonString() const { document["hardwareName"] = sensorInformation.getHardwareNameString();
StaticJsonDocument<250> document; // 250 byte is the max send size of espnow document["timestamp"] = timestamp;
document["sensorProtocol"] = sensorInformation.getProtocolString();
document["value"] = measurementData.getValue();
document["hardwareName"] = sensorInformation.getHardwareNameString();
document["timestamp"] = timestamp;
document["sensorProtocol"] = sensorInformation.getProtocolString();
document["value"] = measurementData.getValue();
document["channel"] = measurementData.getChannel();
document["channel"] = measurementData.getChannel();
document["i2cAddress"] = measurementData.getI2CAddress();
document["i2cAddress"] = measurementData.getI2CAddress(); document["measurementType"] = measurementData.getMeasurementTypeString();
document["errorType"] = measurementData.getErrorTypeString();
document["measurementType"] = measurementData.getMeasurementTypeString(); std::string jsonString;
serializeJson(document, jsonString);
return jsonString;
}
std::string jsonString; ClientDataPackage() : measurementData(MeasurementData(ERROR_VALUE, NO_CHANNEL, NO_I2C_ADDRESS,
serializeJson(document, jsonString); MeasurementType::TEMPERATURE,
return jsonString; ErrorType::NULL_MESSAGE)),
} sensorInformation(SensorInformation(HardwareName::NONE,
SensorProtocol::NULL_PROTOCOL)),
ClientDataPackage() : measurementData(MeasurementData(ERROR_VALUE, timestamp(0) {}
MeasurementType::TEMPERATURE)),
sensorInformation(SensorInformation(HardwareName::NONE,
SensorProtocol::NULL_PROTOCOL)),
timestamp(0),
errorType(ErrorType::NO_DATA) {}
}; };
...@@ -14,43 +14,55 @@ ...@@ -14,43 +14,55 @@
#include <utility> #include <utility>
#include <MeasurementTypes.h> #include <MeasurementTypes.h>
#include <GlobalDefinitions.hpp> #include <GlobalDefinitions.hpp>
#include "ErrorTypes.h"
class MeasurementData { class MeasurementData {
public: public:
MeasurementData(double value, MeasurementData(double value, int channel, int i2cAddress, MeasurementType measurementType,
int channel, ErrorType errorType)
int i2cAddress, : value(value), measurementType(measurementType), channel(channel),
MeasurementType measurementType) i2cAddress(i2cAddress), errorType(errorType) {
: value(value), measurementType(measurementType), channel(channel), }
i2cAddress(i2cAddress) {
} MeasurementData(double value, MeasurementType measurementType)
: value(value), measurementType(measurementType) {
MeasurementData(double value, MeasurementType measurementType) channel = NO_CHANNEL;
: value(value), measurementType(measurementType) { i2cAddress = NO_I2C_ADDRESS;
channel = NO_CHANNEL; errorType = ErrorType::DATA_OK;
i2cAddress = NO_I2C_ADDRESS; }
}
[[nodiscard]] double getValue() const { return value; }
[[nodiscard]] double getValue() const { return value; }
[[nodiscard]] const MeasurementType &
[[nodiscard]] const MeasurementType & getMeasurementType() const { return measurementType; }
getMeasurementType() const { return measurementType; }
[[nodiscard]] std::string getMeasurementTypeString() const {
[[nodiscard]] std::string getMeasurementTypeString() const { return MeasurementTypes::measurementTypeToString(measurementType);
return MeasurementTypes::measurementTypeToString(measurementType); }
}
[[nodiscard]] const int &getChannel() const { return channel; }
[[nodiscard]] const int &getChannel() const { return channel; }
[[nodiscard]] const ErrorType &getErrorType() const { return errorType; }
[[nodiscard]] const int &
getI2CAddress() const { return i2cAddress; } [[nodiscard]] std::string getErrorTypeString() const {
return ErrorTypes::errorTypeToString(errorType);
private: }
double value;
MeasurementType measurementType; void setErrorType(ErrorType type) {
// TODO: is it possible for a sensor to have both a channel and an i2cAddress? errorType = type;
int channel = NO_CHANNEL; }
int i2cAddress = NO_I2C_ADDRESS;
[[nodiscard]] const int &
getI2CAddress() const { return i2cAddress; }
private:
double value;
MeasurementType measurementType;
ErrorType errorType;
// TODO: is it possible for a sensor to have both a channel and an i2cAddress?
int channel = NO_CHANNEL;
int i2cAddress = NO_I2C_ADDRESS;
}; };
#endif // CLIENT_MEASUREMENTDATA_HPP #endif // CLIENT_MEASUREMENTDATA_HPP
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment