diff --git a/client/client_mock/platformio.ini b/client/client_mock/platformio.ini
index 1a9a18984b3f34f3cba2b6d992ddf9eb49f61e74..817104fcf3a217a02f4eb028b7387da79fd71548 100644
--- a/client/client_mock/platformio.ini
+++ b/client/client_mock/platformio.ini
@@ -4,6 +4,7 @@ board = esp32dev
 framework = arduino
 monitor_speed = 115200
 lib_ldf_mode = deep
+upload_port = /dev/ttyUSB0
 lib_extra_dirs =
     ../libs
     ../../shared-libs
diff --git a/client/client_mock/src/main.cpp b/client/client_mock/src/main.cpp
index b76d3e6fd67b510110902d67d89fe00a81c065ae..4d3b9d7fb4c3f4e83dedbf11dc026b0d121551a0 100644
--- a/client/client_mock/src/main.cpp
+++ b/client/client_mock/src/main.cpp
@@ -85,6 +85,8 @@ void setup() {
     ESP_LOGD(TAG, "Size of optional int: %d", sizeof(std::optional<int>));
     // sizeof int
     ESP_LOGD(TAG, "Size of int: %d", sizeof(int));
+    // sizeof short
+    ESP_LOGD(TAG, "Size of short: %d", sizeof(short));
     // sizeof double
     ESP_LOGD(TAG, "Size of double: %d", sizeof(double));
     // sizeof float
diff --git a/client/libs/LC7090203F/LC709203F.cpp b/client/libs/LC7090203F/LC709203F.cpp
index 037130060b547c019b1ba30e8769f9d52c3f51e0..b70316c71ce19ec7b8367a50bdd7917f0cc1520f 100644
--- a/client/libs/LC7090203F/LC709203F.cpp
+++ b/client/libs/LC7090203F/LC709203F.cpp
@@ -39,13 +39,13 @@ uint8_t i2c_address = LC709203F_I2C_ADDR;
  *    @return True if initialization was successful, otherwise false.
  */
 bool LC709203F::begin(void) {
-    Wire.begin();
-    setPowerMode(LC709203F_POWER_OPERATE);
-    setCellCapacity(LC709203F_APA_1000MAH);
-    setTemperatureMode(LC709203F_TEMPERATURE_I2C);
-    setCellProfile(LC709203_NOM3p7_Charge4p2);
+  Wire.begin();
+  setPowerMode(LC709203F_POWER_OPERATE);
+  setCellCapacity(LC709203F_APA_1000MAH);
+  setTemperatureMode(LC709203F_TEMPERATURE_I2C);
+  setCellProfile(LC709203_NOM3p7_Charge4p2);
 
-    return true;
+  return true;
 }
 
 
@@ -54,9 +54,9 @@ bool LC709203F::begin(void) {
  *    @return 16-bit value read from LC709203F_RO_ICVERSION registers
  */
 uint16_t LC709203F::getICversion(void) {
-    uint16_t vers = 0;
-    vers = read16(LC709203F_RO_ICVERSION);
-    return vers;
+  uint16_t vers = 0;
+  vers = read16(LC709203F_RO_ICVERSION);
+  return vers;
 }
 
 
@@ -65,7 +65,7 @@ uint16_t LC709203F::getICversion(void) {
  *    @return
  */
 void LC709203F::initRSOC(void) {
-    write16(LC709203F_WO_INITRSOC, 0xAA55);
+  write16(LC709203F_WO_INITRSOC, 0xAA55);
 }
 
 
@@ -74,9 +74,9 @@ void LC709203F::initRSOC(void) {
  *    @return Cell voltage in milliVolt
  */
 uint16_t LC709203F::cellVoltage_mV(void) {
-    uint16_t mV = 0;
-    mV = read16(LC709203F_RO_CELLVOLTAGE);
-    return 1000 * (mV / 1000.0);
+  uint16_t mV = 0;
+  mV = read16(LC709203F_RO_CELLVOLTAGE);
+  return 1000 * (mV / 1000.0);
 }
 
 
@@ -85,9 +85,9 @@ uint16_t LC709203F::cellVoltage_mV(void) {
  *    @return point value from 0 to 1000
  */
 uint16_t LC709203F::cellRemainingPercent10(void) {
-    uint16_t percent = 0;
-    percent = read16(LC709203F_RO_ITE);
-    return percent;
+  uint16_t percent = 0;
+  percent = read16(LC709203F_RO_ITE);
+  return percent;
 }
 
 /*!
@@ -95,9 +95,9 @@ uint16_t LC709203F::cellRemainingPercent10(void) {
  *    @return point value from 0 to 100
  */
 uint16_t LC709203F::cellStateOfCharge(void) {
-    uint16_t percent = 0;
-    percent = read16(LC709203F_RW_RSOC);
-    return percent;
+  uint16_t percent = 0;
+  percent = read16(LC709203F_RW_RSOC);
+  return percent;
 }
 
 
@@ -106,9 +106,9 @@ uint16_t LC709203F::cellStateOfCharge(void) {
  *    @return value from -20 to 60 *C  // CdB Needs testing, no thermistor on ESP32_Bat_R2 board
  */
 uint16_t LC709203F::getCellTemperature(void) {
-    uint16_t temp = 0;
-    temp = read16(LC709203F_RW_CELLTEMPERATURE);
-    return temp;
+  uint16_t temp = 0;
+  temp = read16(LC709203F_RW_CELLTEMPERATURE);
+  return temp;
 }
 
 
@@ -118,7 +118,7 @@ uint16_t LC709203F::getCellTemperature(void) {
  * LC709203F_TEMPERATURE_THERMISTOR
  */
 void LC709203F::setTemperatureMode(lc709203_tempmode_t t) {
-    return write16(LC709203F_RW_STATUSBIT, (uint16_t) t);
+  return write16(LC709203F_RW_STATUSBIT, (uint16_t) t);
 }
 
 
@@ -127,7 +127,7 @@ void LC709203F::setTemperatureMode(lc709203_tempmode_t t) {
  *    @param apa The lc709203_adjustment_t enumerated approximate cell capacity
  */
 void LC709203F::setCellCapacity(lc709203_adjustment_t apa) {
-    write16(LC709203F_RW_APA, (uint16_t) apa);
+  write16(LC709203F_RW_APA, (uint16_t) apa);
 }
 
 
@@ -136,7 +136,7 @@ void LC709203F::setCellCapacity(lc709203_adjustment_t apa) {
  *    @param percent The threshold value, set to 0 to disable alarm
  */
 void LC709203F::setAlarmRSOC(uint8_t percent) {
-    write16(LC709203F_RW_ALARMRSOC, percent);
+  write16(LC709203F_RW_ALARMRSOC, percent);
 }
 
 
@@ -145,7 +145,7 @@ void LC709203F::setAlarmRSOC(uint8_t percent) {
  *    @param voltage The threshold value, set to 0 to disable alarm
  */
 void LC709203F::setAlarmVoltage(float voltage) {
-    write16(LC709203F_RW_ALARMVOLT, voltage * 1000);
+  write16(LC709203F_RW_ALARMVOLT, voltage * 1000);
 }
 
 
@@ -156,7 +156,7 @@ void LC709203F::setAlarmVoltage(float voltage) {
  *    @return 
  */
 void LC709203F::setPowerMode(lc709203_powermode_t t) {
-    write16(LC709203F_RW_POWERMODE, (uint16_t) t);
+  write16(LC709203F_RW_POWERMODE, (uint16_t) t);
 }
 
 /*!
@@ -165,7 +165,7 @@ void LC709203F::setPowerMode(lc709203_powermode_t t) {
  *    @return
  */
 void LC709203F::setCellProfile(lc709203_cell_profile_t t) {
-    write16(LC709203F_RW_PROFILE, (uint16_t) t);
+  write16(LC709203F_RW_PROFILE, (uint16_t) t);
 }
 
 /*!
@@ -173,9 +173,9 @@ void LC709203F::setCellProfile(lc709203_cell_profile_t t) {
  *    @return The uint16_t Beta value
  */
 uint16_t LC709203F::getThermistorBeta(void) {
-    uint16_t val = 0;
-    val = read16(LC709203F_RW_THERMISTORB);
-    return val;
+  uint16_t val = 0;
+  val = read16(LC709203F_RW_THERMISTORB);
+  return val;
 }
 
 
@@ -185,17 +185,19 @@ uint16_t LC709203F::getThermistorBeta(void) {
  *    @return 
  */
 void LC709203F::setThermistorB(uint16_t beta) {
-    write16(LC709203F_RW_THERMISTORB, beta);
+  write16(LC709203F_RW_THERMISTORB, beta);
 }
 
 
 std::list<Message> LC709203F::buildMessages() {
-    std::list<Message> messages;
-    float data = cellVoltage_mV() / 1000.0;
-    MeasurementData IncrementData{data, 0, {},
-                                  measurementTypeToString.at(MeasurementType::BATTERY_VOLTAGE)};
-    messages.emplace_back(IncrementData, sensorInformation, Time::getInstance().getEpochSeconds());
-    return messages;
+  std::list<Message> messages;
+  float data = cellVoltage_mV() / 1000.0;
+  MeasurementData IncrementData{data, 0, {},
+                                MeasurementType::BATTERY_VOLTAGE};
+  messages.emplace_back(IncrementData,
+                        sensorInformation,
+                        Time::getInstance().getEpochSeconds());
+  return messages;
 }
 
 
@@ -216,52 +218,52 @@ std::list<Message> LC709203F::buildMessages() {
  * @return The computed CRC8 value.
  */
 static uint8_t crc8(uint8_t *data, int len) {
-    const uint8_t POLYNOMIAL(0x07);
-    uint8_t crc(0x00);
+  const uint8_t POLYNOMIAL(0x07);
+  uint8_t crc(0x00);
 
-    for (int j = len; j; --j) {
-        crc ^= *data++;
+  for (int j = len; j; --j) {
+    crc ^= *data++;
 
-        for (int i = 8; i; --i) {
-            crc = (crc & 0x80) ? (crc << 1) ^ POLYNOMIAL : (crc << 1);
-        }
+    for (int i = 8; i; --i) {
+      crc = (crc & 0x80) ? (crc << 1) ^ POLYNOMIAL : (crc << 1);
     }
-    return crc;
+  }
+  return crc;
 }
 
 
 // writes a 16-bit word (d) to register pointer regAddress
 // when selecting a register pointer to read from, data = 0
 void LC709203F::write16(uint8_t regAddress, uint16_t data) {
-    // Setup array to hold bytes to send including CRC-8
-    uint8_t crcArray[5];
-    crcArray[0] = 0x16;
-    crcArray[1] = regAddress;
-    crcArray[2] = lowByte(data);
-    crcArray[3] = highByte(data);
-    // Calculate crc of preceding four bytes and place in crcArray[4]
-    crcArray[4] = crc8(crcArray, 4);
-    // Device address
-    Wire.beginTransmission(i2c_address);
-    // Register address
-    Wire.write(regAddress);
-    // low byte
-    Wire.write(crcArray[2]);
-    // high byte
-    Wire.write(crcArray[3]);
-    // Send crc8
-    Wire.write(crcArray[4]);
-    Wire.endTransmission();
+  // Setup array to hold bytes to send including CRC-8
+  uint8_t crcArray[5];
+  crcArray[0] = 0x16;
+  crcArray[1] = regAddress;
+  crcArray[2] = lowByte(data);
+  crcArray[3] = highByte(data);
+  // Calculate crc of preceding four bytes and place in crcArray[4]
+  crcArray[4] = crc8(crcArray, 4);
+  // Device address
+  Wire.beginTransmission(i2c_address);
+  // Register address
+  Wire.write(regAddress);
+  // low byte
+  Wire.write(crcArray[2]);
+  // high byte
+  Wire.write(crcArray[3]);
+  // Send crc8
+  Wire.write(crcArray[4]);
+  Wire.endTransmission();
 }
 
 int16_t LC709203F::read16(uint8_t regAddress) {
-    int16_t data = 0;
-    Wire.beginTransmission(i2c_address);
-    Wire.write(regAddress);
-    Wire.endTransmission(false);
-    Wire.requestFrom(i2c_address, static_cast<uint8_t>(2));
-    uint8_t lowByteData = Wire.read();
-    uint8_t highByteData = Wire.read();
-    data = word(highByteData, lowByteData);
-    return (data);
+  int16_t data = 0;
+  Wire.beginTransmission(i2c_address);
+  Wire.write(regAddress);
+  Wire.endTransmission(false);
+  Wire.requestFrom(i2c_address, static_cast<uint8_t>(2));
+  uint8_t lowByteData = Wire.read();
+  uint8_t highByteData = Wire.read();
+  data = word(highByteData, lowByteData);
+  return (data);
 }
diff --git a/client/libs/LC7090203F/LC709203F.h b/client/libs/LC7090203F/LC709203F.h
index b5902d8cf0fb92f425c3690d702ba7c276c1ea72..8759ec9c580834f3e183132d18f58c224b105a74 100644
--- a/client/libs/LC7090203F/LC709203F.h
+++ b/client/libs/LC7090203F/LC709203F.h
@@ -40,33 +40,33 @@ static uint8_t crc8(uint8_t *data, int len);
 
 /*!  Approx cell capacity Table 7 */
 typedef enum {
-    LC709203F_APA_100MAH = 0x08,
-    LC709203F_APA_200MAH = 0x0B,
-    LC709203F_APA_500MAH = 0x10,
-    LC709203F_APA_1000MAH = 0x19,
-    LC709203F_APA_2000MAH = 0x2D,
-    LC709203F_APA_3000MAH = 0x36,
+  LC709203F_APA_100MAH = 0x08,
+  LC709203F_APA_200MAH = 0x0B,
+  LC709203F_APA_500MAH = 0x10,
+  LC709203F_APA_1000MAH = 0x19,
+  LC709203F_APA_2000MAH = 0x2D,
+  LC709203F_APA_3000MAH = 0x36,
 } lc709203_adjustment_t;
 
 /*!  Cell profile */
 typedef enum {
-    LC709203_NOM3p7_Charge4p2 = 1,
-    LC709203_NOM3p8_Charge4p35 = 3,
-    LC709203_NOM3p8_Charge4p35_Less500mAh = 6,
-    LC709203_ICR18650_SAMSUNG = 5,
-    LC709203_ICR18650_PANASONIC = 4
+  LC709203_NOM3p7_Charge4p2 = 1,
+  LC709203_NOM3p8_Charge4p35 = 3,
+  LC709203_NOM3p8_Charge4p35_Less500mAh = 6,
+  LC709203_ICR18650_SAMSUNG = 5,
+  LC709203_ICR18650_PANASONIC = 4
 } lc709203_cell_profile_t;
 
 /*!  Cell temperature source */
 typedef enum {
-    LC709203F_TEMPERATURE_I2C = 0x0000,
-    LC709203F_TEMPERATURE_THERMISTOR = 0x0001,
+  LC709203F_TEMPERATURE_I2C = 0x0000,
+  LC709203F_TEMPERATURE_THERMISTOR = 0x0001,
 } lc709203_tempmode_t;
 
 /*!  Chip power state */
 typedef enum {
-    LC709203F_POWER_OPERATE = 0x0001,
-    LC709203F_POWER_SLEEP = 0x0002,
+  LC709203F_POWER_OPERATE = 0x0001,
+  LC709203F_POWER_SLEEP = 0x0002,
 } lc709203_powermode_t;
 
 /*!
@@ -74,57 +74,53 @@ typedef enum {
  *            the LC709203F I2C LiPo monitor
  */
 class LC709203F {
-public:
-    LC709203F();
+ public:
+  LC709203F();
 
-    ~LC709203F();
+  ~LC709203F();
 
-    bool begin(void);
+  bool begin(void);
 
-    void initRSOC(void);
+  void initRSOC(void);
 
-    void setPowerMode(lc709203_powermode_t t);
+  void setPowerMode(lc709203_powermode_t t);
 
-    void setCellCapacity(lc709203_adjustment_t apa);
+  void setCellCapacity(lc709203_adjustment_t apa);
 
-    void setCellProfile(lc709203_cell_profile_t t);
+  void setCellProfile(lc709203_cell_profile_t t);
 
-    uint16_t getICversion(void);
+  uint16_t getICversion(void);
 
-    uint16_t cellVoltage_mV(void);
+  uint16_t cellVoltage_mV(void);
 
-    uint16_t cellRemainingPercent10(void);    // Remaining capacity in increments of 0.1% as integer
-    uint16_t cellStateOfCharge(void);                // In increments of 1% as integer
+  uint16_t
+  cellRemainingPercent10(void);    // Remaining capacity in increments of 0.1% as integer
+  uint16_t
+  cellStateOfCharge(void);                // In increments of 1% as integer
 
 
-    uint16_t getThermistorBeta(void);
+  uint16_t getThermistorBeta(void);
 
-    void setThermistorB(uint16_t beta);
+  void setThermistorB(uint16_t beta);
 
-    void setTemperatureMode(lc709203_tempmode_t t);
+  void setTemperatureMode(lc709203_tempmode_t t);
 
-    uint16_t getCellTemperature(void);
+  uint16_t getCellTemperature(void);
 
-    void setAlarmRSOC(uint8_t percent);
+  void setAlarmRSOC(uint8_t percent);
 
-    void setAlarmVoltage(float voltage);
+  void setAlarmVoltage(float voltage);
 
-    std::list<Message> buildMessages();
+  std::list<Message> buildMessages();
 
-protected:
-    void write16(uint8_t regAddress, uint16_t data);
+ protected:
+  void write16(uint8_t regAddress, uint16_t data);
 
-    int16_t read16(uint8_t regAddress);
+  int16_t read16(uint8_t regAddress);
 
-private:
-    const SensorInformation sensorInformation{"LC709203", SensorProtocol::I2C};
-
-    enum class MeasurementType {
-        BATTERY_VOLTAGE,
-    };
-
-    std::map<MeasurementType, const char *> measurementTypeToString = {
-            {MeasurementType::BATTERY_VOLTAGE, "BATTERY_VOLTAGE"}};
+ private:
+  const SensorInformation
+      sensorInformation{HardwareName::LC709203, SensorProtocol::I2C};
 };
 
 #endif
diff --git a/client/libs/dr26_analogue/dr26.cpp b/client/libs/dr26_analogue/dr26.cpp
index 1f01f0820e05d25db819606361626869352e3851..887aa04d595ec4e29384bd28c4c6afda6de6740b 100644
--- a/client/libs/dr26_analogue/dr26.cpp
+++ b/client/libs/dr26_analogue/dr26.cpp
@@ -2,45 +2,46 @@
 
 static const char *TAG = "DR26";
 void ForteDR26::setup() {
-    Wire.begin();
+  Wire.begin();
 
-    ads1.setGain(GAIN_ONE);
-    ads1.setDataRate(RATE_ADS1115_8SPS);
-    ads1.begin() ? ESP_LOGD(TAG, "ADS initialized") : ESP_LOGE(TAG, "failed to initialize ADS");
-    delay(100);
-    channel = 0;
+  ads1.setGain(GAIN_ONE);
+  ads1.setDataRate(RATE_ADS1115_8SPS);
+  ads1.begin() ? ESP_LOGD(TAG, "ADS initialized") : ESP_LOGE(TAG,
+                                                             "failed to initialize ADS");
+  delay(100);
+  channel = 0;
 }
 
 float ForteDR26::readData() {
-    float volts = 0;
+  float volts = 0;
 
-    // adjust data rate instead of yourself. ADC averages on its on with low data rate
-    // FIXME: Test which datarate gets most stable result. If it still is not good enough consider adding a small capacitor or averaging again
-    // for (int i = 0; i < 10; i++) {
-    //     int16_t adc = 0;
-    //     float volt = 0;
-    //     try {
-    //         adc = ads1.readADC_SingleEnded(channel);
-    //         volt = ads1.computeVolts(adc);
-    //     }
-    //     catch (NoDataAvailableException &e) {
-    //         throw NoDataAvailableException();  //propagate exception
-    //     }
-    //     volts += volt;
-    // }
+  // adjust data rate instead of yourself. ADC averages on its on with low data rate
+  // FIXME: Test which datarate gets most stable result. If it still is not good enough consider adding a small capacitor or averaging again
+  // for (int i = 0; i < 10; i++) {
+  //     int16_t adc = 0;
+  //     float volt = 0;
+  //     try {
+  //         adc = ads1.readADC_SingleEnded(channel);
+  //         volt = ads1.computeVolts(adc);
+  //     }
+  //     catch (NoDataAvailableException &e) {
+  //         throw NoDataAvailableException();  //propagate exception
+  //     }
+  //     volts += volt;
+  // }
 
-    // volts /= 10;
+  // volts /= 10;
 
-    
-    int16_t adc = 0;
-    try {
-        adc = ads1.readADC_SingleEnded(channel);
-        volts = ads1.computeVolts(adc);
-    }
-    catch (NoDataAvailableException &e) {
-        throw NoDataAvailableException();  //propagate exception
-    }
-    return volts;
+
+  int16_t adc = 0;
+  try {
+    adc = ads1.readADC_SingleEnded(channel);
+    volts = ads1.computeVolts(adc);
+  }
+  catch (NoDataAvailableException &e) {
+    throw NoDataAvailableException();  //propagate exception
+  }
+  return volts;
 }
 
 // The following functions change the ADC input range: be careful
@@ -59,33 +60,40 @@ float ForteDR26::readData() {
 // GAIN_EIGHT      // 8x gain   +/- 0.512V  1 bit = 0.015625mV
 // GAIN_SIXTEEN    // 16x gain  +/- 0.256V  1 bit = 0.0078125mV
 void ForteDR26::changeGain(adsGain_t gain) {
-    ads1.setGain(gain);
+  ads1.setGain(gain);
 }
 
 void ForteDR26::setChannel(int c) {
-    channel = c;
+  channel = c;
 }
 
 std::list<Message> ForteDR26::buildMessages() {
-    std::list<Message> messages;
-    float data = readData();
-    MeasurementData IncrementData{data, channel, {}, "CIRCUMFERENCE_INCREMENT"};
-    messages.emplace_back(IncrementData, sensorInformation, Time::getInstance().getEpochSeconds());
-    return messages;
+  std::list<Message> messages;
+  float data = readData();
+  MeasurementData IncrementData
+      {data, channel, {}, MeasurementType::CIRCUMFERENCE_INCREMENT};
+  messages.emplace_back(IncrementData,
+                        sensorInformation,
+                        Time::getInstance().getEpochSeconds());
+  return messages;
 }
 
 // FIXME: passing the measurementType as a string is not a good idea, we should use an enum like we do for other sensors
-std::list<Message> ForteDR26::buildMessages(std::string measurementType) {
-    std::list<Message> messages;
-    float data = readData();
-    MeasurementData IncrementData{data, channel, {}, measurementType};
-    messages.emplace_back(IncrementData, sensorInformation, Time::getInstance().getEpochSeconds());
-    return messages;
+std::list<Message> ForteDR26::buildMessages(MeasurementType measurementType) {
+  std::list<Message> messages;
+  float data = readData();
+  MeasurementData IncrementData{data, channel, {}, measurementType};
+  messages.emplace_back(IncrementData,
+                        sensorInformation,
+                        Time::getInstance().getEpochSeconds());
+  return messages;
 }
 
 SensorInformation ForteDR26::getSensorInformation() const {
-    return sensorInformation;
+  return sensorInformation;
 }
 
 
-Adafruit_ADS1115 ForteDR26::ads1 = ads1; // TODO: What is this?
\ No newline at end of file
+Adafruit_ADS1115 ForteDR26::ads1 = ads1;
+
+// TODO: What is this?
\ No newline at end of file
diff --git a/client/libs/dr26_analogue/dr26.hpp b/client/libs/dr26_analogue/dr26.hpp
index 5e7a4c956a11d621290b611c7fc62dad2b9da505..d38b01a54d90a9f32e7a7561f89cd47f3d71d53f 100644
--- a/client/libs/dr26_analogue/dr26.hpp
+++ b/client/libs/dr26_analogue/dr26.hpp
@@ -9,21 +9,22 @@
 #include <Wire.h>
 #include "NoDataAvailableException.hpp"
 
-class ForteDR26 : public ForteSensor<float> {
-  public:
-	void setup() override;
-	float readData() override;
-	void changeGain(adsGain_t gain);
-	void setChannel(int channel);
-	std::list<Message> buildMessages() override;
-	std::list<Message> buildMessages(std::string mesurment_type);
-	[[nodiscard]] SensorInformation getSensorInformation() const override;
-	static Adafruit_ADS1115 ads1;
+class ForteDR26: public ForteSensor<float> {
+ public:
+  void setup() override;
+  float readData() override;
+  void changeGain(adsGain_t gain);
+  void setChannel(int channel);
+  std::list<Message> buildMessages() override;
+  std::list<Message> buildMessages(MeasurementType measurementType);
+  [[nodiscard]] SensorInformation getSensorInformation() const override;
+  static Adafruit_ADS1115 ads1;
 
-  private:
-	Adafruit_ADS1115 ads;
-	const SensorInformation sensorInformation{"DR26", SensorProtocol::Analog};
-	int channel;
+ private:
+  Adafruit_ADS1115 ads;
+  const SensorInformation
+      sensorInformation{HardwareName::DRS26, SensorProtocol::Analog};
+  int channel;
 };
 
 #endif
\ No newline at end of file
diff --git a/client/libs/drs26_digital/drs26.cpp b/client/libs/drs26_digital/drs26.cpp
index 84066008a3acc312deda88b5ef13e56d844da101..8c6dc852188cf863d7ea95e2ecc85df075bda2b0 100644
--- a/client/libs/drs26_digital/drs26.cpp
+++ b/client/libs/drs26_digital/drs26.cpp
@@ -6,56 +6,55 @@ Because the sensor use sdi12 protocoll we have to wait aproxemettly 1 secound be
 It is not known how lond the response takes so we use a while loop which can be a risk wehre the programm can get stuck
 */
 
-void ForteDRS26 ::setup()
-{
-	drs26.begin(4);
+void ForteDRS26::setup() {
+  drs26.begin(4);
 }
 
-out_data_drs26 ForteDRS26 ::readData()
-{
-	String sdiResponse = "";
-	String measurement_command =
-	    "1M!"; // The drs26 sensor uses the sdi12 protocoll , in the sdi12 protocoll is the measurement command is
-	           // specified as 1M!=Sebsir measurement request at adress 1
-	String data_command = "1D0!"; // and the followed data command 1D0! = Sensor data request at adress 1
-
-	drs26.sendCommand(measurement_command);
-	delay(1000);
-	drs26.sendCommand(data_command);
-
-	data = {-1, -1, -1};
-
-	while (drs26.available()) {
-		char next_character = drs26.read();
-		if ((next_character != '\n') && (next_character != '\r')) {
-			sdiResponse += next_character;
-			delay(10); // 1 character ~ 7.5ms
-		}
-	}
-
-	if (sdiResponse.length() > 1) {
-		data.id = sdiResponse.substring(0, 8).toInt();
-		data.circumferenceIncrement = sdiResponse.substring(9, 15).toFloat();
-		data.temperature = sdiResponse.substring(16, 22).toFloat();
-	}
-	return data;
+out_data_drs26 ForteDRS26::readData() {
+  String sdiResponse = "";
+  String measurement_command =
+      "1M!"; // The drs26 sensor uses the sdi12 protocoll , in the sdi12 protocoll is the measurement command is
+  // specified as 1M!=Sebsir measurement request at adress 1
+  String data_command =
+      "1D0!"; // and the followed data command 1D0! = Sensor data request at adress 1
+
+  drs26.sendCommand(measurement_command);
+  delay(1000);
+  drs26.sendCommand(data_command);
+
+  data = {-1, -1, -1};
+
+  while (drs26.available()) {
+    char next_character = drs26.read();
+    if ((next_character != '\n') && (next_character != '\r')) {
+      sdiResponse += next_character;
+      delay(10); // 1 character ~ 7.5ms
+    }
+  }
+
+  if (sdiResponse.length() > 1) {
+    data.id = sdiResponse.substring(0, 8).toInt();
+    data.circumferenceIncrement = sdiResponse.substring(9, 15).toFloat();
+    data.temperature = sdiResponse.substring(16, 22).toFloat();
+  }
+  return data;
 }
 
-std::list<Message> ForteDRS26 ::buildMessages()
-{
-	std::list<Message> messages;
-	MeasurementData circumferenceIncrementMeasurementData{
-	    data.circumferenceIncrement, 0, {}, measurementTypeToString.at(MeasurementType::CIRCUMFERENCE_INCREMENT)};
-	MeasurementData temperatureMeasurementData{
-	    data.temperature, 0, {}, measurementTypeToString.at(MeasurementType::TEMPERATURE)};
+std::list<Message> ForteDRS26::buildMessages() {
+  std::list<Message> messages;
+  MeasurementData circumferenceIncrementMeasurementData{
+      data.circumferenceIncrement, 0, {},
+      MeasurementType::CIRCUMFERENCE_INCREMENT};
+  MeasurementData temperatureMeasurementData{
+      data.temperature, 0, {}, MeasurementType::TEMPERATURE};
 
-	messages.emplace_back(Message{circumferenceIncrementMeasurementData, sensorInformation, 0});
-	messages.emplace_back(Message{temperatureMeasurementData, sensorInformation, 0});
+  messages.emplace_back(circumferenceIncrementMeasurementData,
+                        sensorInformation,
+                        0);
+  messages.emplace_back(temperatureMeasurementData, sensorInformation, 0);
 
-	ESP_LOGE(sensorInformation.getHardwareName().c_str(), "test");
-	return messages;
+  return messages;
 }
-SensorInformation ForteDRS26::getSensorInformation() const
-{
-	return sensorInformation;
+SensorInformation ForteDRS26::getSensorInformation() const {
+  return sensorInformation;
 }
diff --git a/client/libs/drs26_digital/drs26.hpp b/client/libs/drs26_digital/drs26.hpp
index e0f7de0a36f4f61454522f5f37d4e343e10f868d..c02f0d23ebd4ae8e6e89dac952015f6f146c1415 100644
--- a/client/libs/drs26_digital/drs26.hpp
+++ b/client/libs/drs26_digital/drs26.hpp
@@ -10,28 +10,24 @@
 #include <map>
 
 struct out_data_drs26 {
-	int id;
-	float circumferenceIncrement;
-	float temperature;
+  int id;
+  float circumferenceIncrement;
+  float temperature;
 };
 
-class ForteDRS26 : public ForteSensor<out_data_drs26> {
-  public:
-	void setup() override;
-	out_data_drs26 readData() override;
-	std::list<Message> buildMessages() override;
-	[[nodiscard]] SensorInformation getSensorInformation() const override;
+class ForteDRS26: public ForteSensor<out_data_drs26> {
+ public:
+  void setup() override;
+  out_data_drs26 readData() override;
+  std::list<Message> buildMessages() override;
+  [[nodiscard]] SensorInformation getSensorInformation() const override;
 
-  private:
-	SDI12 drs26;
-	out_data_drs26 data;
-	const SensorInformation sensorInformation{"DRS26", SensorProtocol::I2C};
-	enum class MeasurementType { TEMPERATURE, CIRCUMFERENCE_INCREMENT };
+ private:
+  SDI12 drs26;
+  out_data_drs26 data;
+  const SensorInformation
+      sensorInformation{HardwareName::DRS26, SensorProtocol::I2C};
 
-	// enum to string
-	std::map<MeasurementType, const char *> measurementTypeToString = {
-	    {MeasurementType::TEMPERATURE, "TEMPERATURE"},
-	    {MeasurementType::CIRCUMFERENCE_INCREMENT, "CIRCUMFERENCE_INCREMENT"}};
 };
 
 #endif
\ No newline at end of file
diff --git a/client/libs/espnow/src/ClientDataPackage.hpp b/client/libs/espnow/src/ClientDataPackage.hpp
index 58833fa3f5eb563ea721754154e61971737dd727..77c81e3244f1e2e90e6c398db79577049b6a7947 100644
--- a/client/libs/espnow/src/ClientDataPackage.hpp
+++ b/client/libs/espnow/src/ClientDataPackage.hpp
@@ -13,62 +13,64 @@
 // having the data be a struct of basic types makes sending easier,
 // otherwise we would have to serialize the data before sending
 class ClientDataPackage {
-private:
-    MeasurementData measurementData;
-    SensorInformation sensorInformation;
-    unsigned long timestamp; // maybe make this array
+ private:
+  MeasurementData measurementData;
+  SensorInformation sensorInformation;
+  unsigned long timestamp; // maybe make this array
 
-public:
-    ClientDataPackage(MeasurementData value, SensorInformation sensorInformation,
-                      unsigned long timestamp)
-            : measurementData(std::move(value)), sensorInformation(std::move(sensorInformation)),
-              timestamp(timestamp) {
-    }
+ public:
+  ClientDataPackage(MeasurementData value, SensorInformation sensorInformation,
+                    unsigned long timestamp)
+      : measurementData(value),
+        sensorInformation(sensorInformation),
+        timestamp(timestamp) {
+  }
 
-    [[nodiscard]] const MeasurementData &getMeasurementData() const { return measurementData; }
+  [[nodiscard]] const MeasurementData &
+  getMeasurementData() const { return measurementData; }
 
-    [[nodiscard]] const SensorInformation &
-    getSensorInformation() const { return sensorInformation; }
+  [[nodiscard]] const SensorInformation &
+  getSensorInformation() const { return sensorInformation; }
 
-    [[nodiscard]] unsigned long getTimestamp() const { return timestamp; }
+  [[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 {
+    StaticJsonDocument<250> document; // 250 byte is the max send size of espnow
 
-        document["hardwareName"] = sensorInformation.getHardwareName();
-        document["timestamp"] = timestamp;
-        document["sensorProtocol"] = protocolToString.at(sensorInformation.getProtocol());
-        document["value"] = measurementData.getValue();
+    document["hardwareName"] = sensorInformation.getHardwareNameString();
+    document["timestamp"] = timestamp;
+    document["sensorProtocol"] = sensorInformation.getProtocolString();
+    document["value"] = measurementData.getValue();
 
-        if (measurementData.getChannel().has_value()) {
-            document["channel"] = measurementData.getChannel().value();
-        }
+    if (measurementData.getChannel().has_value()) {
+      document["channel"] = measurementData.getChannel().value();
+    }
 
-        if (measurementData.getI2CAddress().has_value()) {
-            document["i2cAddress"] = measurementData.getI2CAddress().value();
-        }
+    if (measurementData.getI2CAddress().has_value()) {
+      document["i2cAddress"] = measurementData.getI2CAddress().value();
+    }
 
-        document["measurementType"] = measurementData.getMeasurementType();
+    document["measurementType"] = measurementData.getMeasurementTypeString();
 
-        std::string jsonString;
-        serializeJson(document, jsonString);
-        return jsonString;
-    }
+    std::string jsonString;
+    serializeJson(document, jsonString);
+    return jsonString;
+  }
 
-    [[nodiscard]] CompressedDataPackage getCompressedDataPackage() const {
-        CompressedDataPackage compressedDataPackage{};
-        compressedDataPackage.channel = measurementData.getChannel().value_or(-1);
-        compressedDataPackage.i2cAddress = measurementData.getI2CAddress().value_or(-1);
-        compressedDataPackage.value = measurementData.getValue();
-        compressedDataPackage.timestamp = timestamp;
-        compressedDataPackage.errorType = ErrorTypes::DATA_OK;
-        strcpy(compressedDataPackage.hardwareName, sensorInformation.getHardwareName().c_str());
-        strcpy(compressedDataPackage.sensorProtocol,
-               protocolToString.at(sensorInformation.getProtocol()));
-        strcpy(compressedDataPackage.measurementType,
-               measurementData.getMeasurementType().c_str());
-        return compressedDataPackage;
-    }
+  [[nodiscard]] CompressedDataPackage getCompressedDataPackage() const {
+    CompressedDataPackage compressedDataPackage{};
+    compressedDataPackage.channel = measurementData.getChannel().value_or(-1);
+    compressedDataPackage.i2cAddress =
+        measurementData.getI2CAddress().value_or(-1);
+    compressedDataPackage.value = measurementData.getValue();
+    compressedDataPackage.timestamp = timestamp;
+    compressedDataPackage.errorType = ErrorTypes::DATA_OK;
+    compressedDataPackage.hardwareName = sensorInformation.getHardwareName();
+    compressedDataPackage.sensorProtocol = sensorInformation.getProtocol();
+    compressedDataPackage.measurementType =
+        measurementData.getMeasurementType();
+    return compressedDataPackage;
 
+  }
 
 };
diff --git a/client/libs/espnow/src/Message.cpp b/client/libs/espnow/src/Message.cpp
index 0c159b3d9bacd582bbb9867116270ce6ad7efecb..8f6a9e5a8585b7db22a0a484b3d5dd99688c490b 100644
--- a/client/libs/espnow/src/Message.cpp
+++ b/client/libs/espnow/src/Message.cpp
@@ -32,6 +32,7 @@ esp_err_t Message::sendMessages(const std::array<Message, 4> &messages) {
   esp_err_t success;
   // list of compressed data. Sending 4 at a time
   std::array<CompressedDataPackage, 4> compressedDataPackages{};
+//  std::array<std::optional<CompressedDataPackage>, 4> cpd{};
   // max 4 messages
   for (int i = 0; i < 4; i++) {
     compressedDataPackages[i] = messages[i].getCompressedDataPackage();
diff --git a/client/libs/espnow/src/Message.hpp b/client/libs/espnow/src/Message.hpp
index 3fb4de40ed928c0f1a9892079f34e156bca6efd2..d433dfac6b6cf03725c7a07736af37cf0552ccdb 100644
--- a/client/libs/espnow/src/Message.hpp
+++ b/client/libs/espnow/src/Message.hpp
@@ -27,8 +27,8 @@ class Message {
     return Message{MeasurementData(ERROR_VALUE,
                                    std::nullopt,
                                    std::nullopt,
-                                   "null"),
-                   SensorInformation("null", SensorProtocol::NULL_PROTOCOL),
+                                   MeasurementType::NULL_MEASUREMENT),
+                   SensorInformation(HardwareName::NONE, SensorProtocol::NULL_PROTOCOL),
                    NULL_TIMESTAMP};
   }
 
diff --git a/client/libs/ina219/ina219.cpp b/client/libs/ina219/ina219.cpp
index ac287e8b17d07b67ef72cb28c92f998d62a793ff..f4493272cae574a6f59eb4cd7b6bb1dfd53ed120 100644
--- a/client/libs/ina219/ina219.cpp
+++ b/client/libs/ina219/ina219.cpp
@@ -1,63 +1,61 @@
 #include "ina219.hpp"
 
-void ForteINA219 ::setup()
-{
-	Wire.begin(I2C_SDA, I2C_SCL);
-	if (!ina219.init()) {
-		// Sensor init went wrong
-		ESP_LOGW(sensorInformation.getHardwareName().c_str(), "Initialization failed");
-		return;
-	}
+void ForteINA219::setup() {
+  Wire.begin(I2C_SDA, I2C_SCL);
+  if (!ina219.init()) {
+    // Sensor init went wrong
+    ESP_LOGW(sensorInformation.getHardwareNameString().c_str(),
+             "Initialization failed");
+    return;
+  }
 }
 
-out_data_ina219 ForteINA219 ::readData()
-{
-	if (!ina219.getOverflow()) {
-		data.shuntVoltage_mV = ina219.getShuntVoltage_mV();
-		data.busVoltage_V = ina219.getBusVoltage_V();
-		data.current_mA = ina219.getCurrent_mA();
-		data.power_mW = ina219.getBusPower();
-		data.loadVoltage_V = data.busVoltage_V + (data.shuntVoltage_mV / 1000);
-		data.ina219_overflow = ina219.getOverflow();
+out_data_ina219 ForteINA219::readData() {
+  if (!ina219.getOverflow()) {
+    data.shuntVoltage_mV = ina219.getShuntVoltage_mV();
+    data.busVoltage_V = ina219.getBusVoltage_V();
+    data.current_mA = ina219.getCurrent_mA();
+    data.power_mW = ina219.getBusPower();
+    data.loadVoltage_V = data.busVoltage_V + (data.shuntVoltage_mV / 1000);
+    data.ina219_overflow = ina219.getOverflow();
 
-		return data;
-	} else
-		return data;
+    return data;
+  } else
+    return data;
 }
 
-std::list<Message> ForteINA219::buildMessages()
-{
-	std::list<Message> messages;
-	out_data_ina219 data = readData();
-	MeasurementData shuntVoltageData{
-		data.shuntVoltage_mV, 0, {}, measurementTypeToString.at(MeasurementType::SHUNT_VOLTAGE)
-	};
-	MeasurementData busVoltageData{
-		data.busVoltage_V, 0, {}, measurementTypeToString.at(MeasurementType::BUS_VOLTAGE)
-	};
-	MeasurementData currentMilliAmpData{
-		data.current_mA, 0, {}, measurementTypeToString.at(MeasurementType::CURRENT_mA)
-	};
-	MeasurementData powerMilliWattData{
-		data.power_mW, 0, {}, measurementTypeToString.at(MeasurementType::POWER_mA)
-	};
-	MeasurementData loadVoltageData{
-		data.loadVoltage_V, 0, {}, measurementTypeToString.at(MeasurementType::LOAD_VOLTAGE_V)
-	};
-	MeasurementData ina219OverflowData{
-		data.ina219_overflow, 0, {}, measurementTypeToString.at(MeasurementType::INA219_OVERFLOW)
-	};
+std::list<Message> ForteINA219::buildMessages() {
+  std::list<Message> messages;
+  out_data_ina219 data = readData();
+  MeasurementData shuntVoltageData{
+      data.shuntVoltage_mV, 0, {}, MeasurementType::SHUNT_VOLTAGE
+  };
+  MeasurementData busVoltageData{
+      data.busVoltage_V, 0, {}, MeasurementType::BUS_VOLTAGE
+  };
+  MeasurementData currentMilliAmpData{
+      data.current_mA, 0, {}, MeasurementType::CURRENT_mA
+  };
+  MeasurementData powerMilliWattData{
+      data.power_mW, 0, {}, MeasurementType::POWER_mA
+  };
+  MeasurementData loadVoltageData{
+      data.loadVoltage_V, 0, {}, MeasurementType::LOAD_VOLTAGE_V
+  };
+  MeasurementData ina219OverflowData{
+      static_cast<double>(data.ina219_overflow), 0, {},
+      MeasurementType::INA219_OVERFLOW
+  };
 
-	messages.emplace_back(Message(shuntVoltageData, sensorInformation, 0));
-	messages.emplace_back(Message(busVoltageData, sensorInformation,0));
-	messages.emplace_back(Message(currentMilliAmpData, sensorInformation, 0));
-	messages.emplace_back(Message(powerMilliWattData, sensorInformation, 0));
-	messages.emplace_back(Message(loadVoltageData, sensorInformation, 0));
-	messages.emplace_back(Message(ina219OverflowData, sensorInformation, 0));
+  messages.emplace_back(shuntVoltageData, sensorInformation, 0);
+  messages.emplace_back(busVoltageData, sensorInformation, 0);
+  messages.emplace_back(currentMilliAmpData, sensorInformation, 0);
+  messages.emplace_back(powerMilliWattData, sensorInformation, 0);
+  messages.emplace_back(loadVoltageData, sensorInformation, 0);
+  messages.emplace_back(ina219OverflowData, sensorInformation, 0);
 
-	return messages;
+  return messages;
 }
-SensorInformation ForteINA219::getSensorInformation() const
-{
-	return sensorInformation;
+SensorInformation ForteINA219::getSensorInformation() const {
+  return sensorInformation;
 }
diff --git a/client/libs/ina219/ina219.hpp b/client/libs/ina219/ina219.hpp
index 6172f6d7f1bdb0c4d34863fb0f6b44d7dd241d5b..fc4347e255ed4d0555fb27c9b0a99b97c3ea4b90 100644
--- a/client/libs/ina219/ina219.hpp
+++ b/client/libs/ina219/ina219.hpp
@@ -7,36 +7,31 @@
 #include "Wire.h"
 #include "esp_log.h"
 #include <INA219_WE.h>
+#include <MeasurementTypes.h>
+
 
 struct out_data_ina219 {
-	float shuntVoltage_mV = 0.0;
-	float loadVoltage_V = 0.0;
-	float busVoltage_V = 0.0;
-	float current_mA = 0.0;
-	float power_mW = 0.0;
-	bool ina219_overflow = false;
+  float shuntVoltage_mV = 0.0;
+  float loadVoltage_V = 0.0;
+  float busVoltage_V = 0.0;
+  float current_mA = 0.0;
+  float power_mW = 0.0;
+  bool ina219_overflow = false;
 };
 
-class ForteINA219 : public ForteSensor<out_data_ina219> {
-  public:
-	void setup() override;
-	out_data_ina219 readData() override;
-	std::list<Message> buildMessages() override;
-	[[nodiscard]] SensorInformation getSensorInformation() const override;
+class ForteINA219: public ForteSensor<out_data_ina219> {
+ public:
+  void setup() override;
+  out_data_ina219 readData() override;
+  std::list<Message> buildMessages() override;
+  [[nodiscard]] SensorInformation getSensorInformation() const override;
 
-  private:
-	INA219_WE ina219;
-	out_data_ina219 data;
-	const SensorInformation sensorInformation{"INA219", SensorProtocol::I2C};
-	enum class MeasurementType {SHUNT_VOLTAGE, BUS_VOLTAGE, CURRENT_mA, POWER_mA, LOAD_VOLTAGE_V, INA219_OVERFLOW};
+ private:
+  INA219_WE ina219;
+  out_data_ina219 data;
+  const SensorInformation
+      sensorInformation{HardwareName::INA219, SensorProtocol::I2C};
 
-	std::map<MeasurementType, const char*> measurementTypeToString = {
-		{MeasurementType::SHUNT_VOLTAGE, "SHUNT_VOLTAGE"},
-		{MeasurementType::BUS_VOLTAGE, "BUS_VOLTAGE"},
-		{MeasurementType::CURRENT_mA, "CURRENT_mA"},
-		{MeasurementType::POWER_mA, "POWER_mA"},
-		{MeasurementType::LOAD_VOLTAGE_V, "LOAD_VOLTAGE_V"},
-		{MeasurementType::INA219_OVERFLOW, "INA219_OVERFLOW"}};
 };
 
 #endif
\ No newline at end of file
diff --git a/client/libs/includes/MeasurementData.hpp b/client/libs/includes/MeasurementData.hpp
index ce0c859e194ac11bf93d811559a465f9d468a269..49b9af8ac6a222c29499d53e77dc7504c8b9b4f0 100644
--- a/client/libs/includes/MeasurementData.hpp
+++ b/client/libs/includes/MeasurementData.hpp
@@ -12,33 +12,42 @@
 #include <optional>
 #include <string>
 #include <utility>
+#include <MeasurementTypes.h>
 
 class MeasurementData {
-public:
-    MeasurementData(double value, std::optional<int> channel, std::optional<int> i2cAddress,
-                    std::string measurementType)
-            : value(value), measurementType(std::move(measurementType)), channel(channel),
-              i2cAddress(i2cAddress) {
-    }
-
-    MeasurementData(double value, std::string measurementType)
-            : value(value), measurementType(std::move(measurementType)) {
-    }
-
-    [[nodiscard]] double getValue() const { return value; }
-
-    [[nodiscard]] const std::string &getMeasurementType() const { return measurementType; }
-
-    [[nodiscard]] const std::optional<int> &getChannel() const { return channel; }
-
-    [[nodiscard]] const std::optional<int> &getI2CAddress() const { return i2cAddress; }
-
-private:
-    double value;
-    std::string measurementType; // TODO: consider using an enum
-    // TODO: is it possible for a sensor to have both a channel and an i2cAddress?
-    std::optional<int> channel;
-    std::optional<int> i2cAddress;
+ public:
+  MeasurementData(double value,
+                  std::optional<int> channel,
+                  std::optional<int> i2cAddress,
+                  MeasurementType measurementType)
+      : value(value), measurementType(measurementType), channel(channel),
+        i2cAddress(i2cAddress) {
+  }
+
+  MeasurementData(double value, MeasurementType measurementType)
+      : value(value), measurementType(measurementType) {
+  }
+
+  [[nodiscard]] double getValue() const { return value; }
+
+  [[nodiscard]] const MeasurementType &
+  getMeasurementType() const { return measurementType; }
+
+  [[nodiscard]] std::string getMeasurementTypeString() const {
+    return MeasurementTypes::measurementTypeToString(measurementType);
+  }
+
+  [[nodiscard]] const std::optional<int> &getChannel() const { return channel; }
+
+  [[nodiscard]] const std::optional<int> &
+  getI2CAddress() const { return i2cAddress; }
+
+ private:
+  double value;
+  MeasurementType measurementType; // TODO: consider using an enum
+  // TODO: is it possible for a sensor to have both a channel and an i2cAddress?
+  std::optional<int> channel;
+  std::optional<int> i2cAddress;
 };
 
 #endif // CLIENT_MEASUREMENTDATA_HPP
diff --git a/client/libs/includes/SensorInformation.hpp b/client/libs/includes/SensorInformation.hpp
index 0b392f04b263cfa0f93024f13d850fef89bcdc23..c95d99107fb54b138c77990a92ad2dba1ad37021 100644
--- a/client/libs/includes/SensorInformation.hpp
+++ b/client/libs/includes/SensorInformation.hpp
@@ -7,19 +7,27 @@
 
 #include "SensorProtocol.hpp"
 #include <string>
+#include <HardwareNames.h>
 
 class SensorInformation {
-  public:
-	SensorInformation(std::string hardwareName, SensorProtocol sensorProtocol) : hardwareName(std::move(hardwareName)), sensorProtocol(sensorProtocol)
-	{
-	}
+ public:
+  SensorInformation(HardwareName hardwareName, SensorProtocol sensorProtocol)
+      : hardwareName(hardwareName), sensorProtocol(sensorProtocol) {
+  }
 
-	[[nodiscard]] const std::string &getHardwareName() const { return hardwareName; }
-	[[nodiscard]] SensorProtocol getProtocol() const { return sensorProtocol; }
+  [[nodiscard]] const HardwareName &
+  getHardwareName() const { return hardwareName; }
+  [[nodiscard]] std::string getHardwareNameString() const {
+    return HardwareNames::hardwareNameToString(hardwareName);
+  }
+  [[nodiscard]] SensorProtocol getProtocol() const { return sensorProtocol; }
+  [[nodiscard]] std::string getProtocolString() const {
+    return SensorProtocols::sensorProtocolToString(sensorProtocol);
+  }
 
-  private:
-	std::string hardwareName;
-	SensorProtocol sensorProtocol;
+ private:
+  HardwareName hardwareName;
+  SensorProtocol sensorProtocol;
 };
 
 #endif // CLIENT_SENSORINFORMATION_HPP
diff --git a/client/libs/includes/SensorProtocol.hpp b/client/libs/includes/SensorProtocol.hpp
deleted file mode 100644
index 17e6702e0fff4149247fe1b732cb4f7b19bd73d6..0000000000000000000000000000000000000000
--- a/client/libs/includes/SensorProtocol.hpp
+++ /dev/null
@@ -1,17 +0,0 @@
-//
-// Created by zoe on 10/5/22.
-//
-
-#ifndef CLIENT_PROTOCOL_HPP
-#define CLIENT_PROTOCOL_HPP
-
-#include <map>
-enum class SensorProtocol { I2C, RS485, Analog, Mock, NULL_PROTOCOL };
-
-// sensorProtocol to string
-const static std::map<SensorProtocol, const char *> protocolToString = {
-    {SensorProtocol::I2C, "I2C"}, {SensorProtocol::RS485, "RS485"},
-    {SensorProtocol::Analog, "ANALOG"}, {SensorProtocol::Mock, "MOCK"},
-    {SensorProtocol::NULL_PROTOCOL, "NULL"}};
-
-#endif // CLIENT_PROTOCOL_HPP
diff --git a/client/libs/mock_sensor/MockSensor.cpp b/client/libs/mock_sensor/MockSensor.cpp
index 5273a20b7391b885ca12bd0e50fbd18d6d0e3c47..b093ce3192beeece10cf999ef94bb486ce61af85 100644
--- a/client/libs/mock_sensor/MockSensor.cpp
+++ b/client/libs/mock_sensor/MockSensor.cpp
@@ -1,4 +1,5 @@
 #include "MockSensor.hpp"
+#include "MeasurementTypes.h"
 
 static const char *TAG = "MOCK";
 
@@ -24,7 +25,7 @@ void MockSensor::setChannel(int c) {
 std::list<Message> MockSensor::buildMessages() {
   std::list<Message> messages;
   float data = readData() + static_cast<float>(DeepSleep::bootCount);
-  MeasurementData MockData{data, channel, {}, "MOCK"};
+  MeasurementData MockData{data, channel, {}, MeasurementType::MOCK};
   messages.emplace_back(MockData,
                         sensorInformation,
                         Time::getInstance().getEpochSeconds());
diff --git a/client/libs/mock_sensor/MockSensor.hpp b/client/libs/mock_sensor/MockSensor.hpp
index d92a40db47d8c70b3d322599a3c7c6a58eb73b08..b30c83ca7f8f2b79b08505a570922d995c7aaa18 100644
--- a/client/libs/mock_sensor/MockSensor.hpp
+++ b/client/libs/mock_sensor/MockSensor.hpp
@@ -19,7 +19,7 @@ class MockSensor: public ForteSensor<float> {
   [[nodiscard]] SensorInformation getSensorInformation() const override;
 
  private:
-  const SensorInformation sensorInformation{"MOCK", SensorProtocol::Mock};
+  const SensorInformation sensorInformation{HardwareName::MOCK, SensorProtocol::Mock};
   int channel;
 };
 
diff --git a/client/libs/rs485/rs485.cpp b/client/libs/rs485/rs485.cpp
index 269c7f37a0c6cb685adda7dc599edbea185d5f8e..1fa5cb8a28bcdbb014801d111381027c804bc2c2 100644
--- a/client/libs/rs485/rs485.cpp
+++ b/client/libs/rs485/rs485.cpp
@@ -13,72 +13,88 @@ static const char *TAG = "RS485";
 
 // Configure sensors
 SolarRadiationSensor solarSensor(&RS485Serial, 1, RE_DE_PIN);
-RainGaugeSensor rainGauge = RainGaugeSensor(&RS485Serial, 2, RE_DE_PIN);         // Give 2 Sensor Adress 2
-SoilMoistureSensor soilSensor3 = SoilMoistureSensor(&RS485Serial, 3, RE_DE_PIN); //.....
+RainGaugeSensor rainGauge = RainGaugeSensor(&RS485Serial,
+                                            2,
+                                            RE_DE_PIN);         // Give 2 Sensor Adress 2
+SoilMoistureSensor
+    soilSensor3 = SoilMoistureSensor(&RS485Serial, 3, RE_DE_PIN); //.....
 SoilMoistureSensor soilSensor4 = SoilMoistureSensor(&RS485Serial, 4, RE_DE_PIN);
 SoilMoistureSensor soilSensor5 = SoilMoistureSensor(&RS485Serial, 5, RE_DE_PIN);
 
-void Forte_RS485::setup()
-{
-	// configure the pins to be output only
-	pinMode(RE_DE_PIN, OUTPUT);
-	pinMode(POWER_SWITCH_PIN_12V, OUTPUT);
-	pinMode(POWER_SWITCH_PIN_5V, OUTPUT);
-	RS485Serial.begin(4800, SERIAL_8N1, TXPin, RXPin);
+void Forte_RS485::setup() {
+  // configure the pins to be output only
+  pinMode(RE_DE_PIN, OUTPUT);
+  pinMode(POWER_SWITCH_PIN_12V, OUTPUT);
+  pinMode(POWER_SWITCH_PIN_5V, OUTPUT);
+  RS485Serial.begin(4800, SERIAL_8N1, TXPin, RXPin);
 }
 
-out_data_rs485 Forte_RS485::readData()
-{
-	// Power on sensor
-	digitalWrite(POWER_SWITCH_PIN_12V, HIGH);
-	digitalWrite(POWER_SWITCH_PIN_5V, HIGH);
-	// Wait for sensors to power up
-	// TODO minimize delay
-	delay(300);
-	out_data_rs485 output;
-	unsigned long ts = millis();
-	output.solarRadiation = solarSensor.getSolarRadiation();
-	output.soilTemperature3 = soilSensor3.getMoistureTemp();
-	output.soilTemperature4 = soilSensor4.getMoistureTemp();
-	output.soilTemperature5 = soilSensor5.getMoistureTemp();
-	output.soilMoisture3 = soilSensor3.getMoisture();
-	output.soilMoisture4 = soilSensor4.getMoisture();
-	output.soilMoisture5 = soilSensor5.getMoisture();
-	output.precipitation = rainGauge.getInstantaneousPrecipitation();
-	digitalWrite(POWER_SWITCH_PIN_12V, LOW);
-	digitalWrite(POWER_SWITCH_PIN_5V, LOW);
+out_data_rs485 Forte_RS485::readData() {
+  // Power on sensor
+  digitalWrite(POWER_SWITCH_PIN_12V, HIGH);
+  digitalWrite(POWER_SWITCH_PIN_5V, HIGH);
+  // Wait for sensors to power up
+  // TODO minimize delay
+  delay(300);
+  out_data_rs485 output;
+  unsigned long ts = millis();
+  output.solarRadiation = solarSensor.getSolarRadiation();
+  output.soilTemperature3 = soilSensor3.getMoistureTemp();
+  output.soilTemperature4 = soilSensor4.getMoistureTemp();
+  output.soilTemperature5 = soilSensor5.getMoistureTemp();
+  output.soilMoisture3 = soilSensor3.getMoisture();
+  output.soilMoisture4 = soilSensor4.getMoisture();
+  output.soilMoisture5 = soilSensor5.getMoisture();
+  output.precipitation = rainGauge.getInstantaneousPrecipitation();
+  digitalWrite(POWER_SWITCH_PIN_12V, LOW);
+  digitalWrite(POWER_SWITCH_PIN_5V, LOW);
 
-	gpio_hold_en((gpio_num_t)POWER_SWITCH_PIN_12V);
-	gpio_hold_en((gpio_num_t)POWER_SWITCH_PIN_5V);
-	return output;
+  gpio_hold_en((gpio_num_t) POWER_SWITCH_PIN_12V);
+  gpio_hold_en((gpio_num_t) POWER_SWITCH_PIN_5V);
+  return output;
 }
 
-std::list<Message> Forte_RS485::buildMessages()
-{
-	std::list<Message> messages;
-	out_data_rs485 output = readData();
-	MeasurementData solarRadiation {output.solarRadiation, measurementTypeToString.at(MeasurementType::SOLAR_RADIATION)};
-	MeasurementData soilTemp3{output.soilTemperature3, measurementTypeToString.at(MeasurementType::SOIL_TEMPERATURE_3)};
-	MeasurementData soilTemp4 {output.soilTemperature4, measurementTypeToString.at(MeasurementType::SOIL_TEMPERATURE_4)};
-	MeasurementData soilTemp5 {output.soilTemperature5, measurementTypeToString.at(MeasurementType::SOIL_TEMPERATURE_5)};
-	MeasurementData soilMoisture3 {output.soilMoisture3, measurementTypeToString.at(MeasurementType::SOIL_MOISTURE_3)};
-	MeasurementData soilMoisture4 {output.soilMoisture4, measurementTypeToString.at(MeasurementType::SOIL_MOISTURE_4)};
-	MeasurementData soilMoisture5 {output.soilMoisture5, measurementTypeToString.at(MeasurementType::SOIL_MOISTURE_5)};
-	MeasurementData precipitation {output.precipitation, measurementTypeToString.at(MeasurementType::PRECIPITATION)};
+std::list<Message> Forte_RS485::buildMessages() {
+  std::list<Message> messages;
+  out_data_rs485 output = readData();
+  MeasurementData
+      solarRadiation{output.solarRadiation, MeasurementType::SOLAR_RADIATION};
+  MeasurementData
+      soilTemp3{output.soilTemperature3, MeasurementType::SOIL_TEMPERATURE_3};
+  MeasurementData
+      soilTemp4{output.soilTemperature4, MeasurementType::SOIL_TEMPERATURE_4};
+  MeasurementData
+      soilTemp5{output.soilTemperature5, MeasurementType::SOIL_TEMPERATURE_5};
+  MeasurementData
+      soilMoisture3{output.soilMoisture3, MeasurementType::SOIL_MOISTURE_3};
+  MeasurementData
+      soilMoisture4{output.soilMoisture4, MeasurementType::SOIL_MOISTURE_4};
+  MeasurementData
+      soilMoisture5{output.soilMoisture5, MeasurementType::SOIL_MOISTURE_5};
+  MeasurementData
+      precipitation{output.precipitation, MeasurementType::PRECIPITATION};
 
-	messages.emplace_back(Message{solarRadiation,sensorInformation, Time::getInstance().getEpochSeconds()});
-	messages.emplace_back(Message{soilTemp3,sensorInformation, Time::getInstance().getEpochSeconds()});
-	messages.emplace_back(Message{soilTemp4,sensorInformation, Time::getInstance().getEpochSeconds()});
-	messages.emplace_back(Message{soilTemp5,sensorInformation, Time::getInstance().getEpochSeconds()});
-	messages.emplace_back(Message{soilMoisture3,sensorInformation, Time::getInstance().getEpochSeconds()});
-	messages.emplace_back(Message{soilMoisture4,sensorInformation, Time::getInstance().getEpochSeconds()});
-	messages.emplace_back(Message{soilMoisture5,sensorInformation, Time::getInstance().getEpochSeconds()});
-	messages.emplace_back(Message(precipitation, sensorInformation, Time::getInstance().getEpochSeconds()));
+  messages.emplace_back(solarRadiation, sensorInformation,
+                        Time::getInstance().getEpochSeconds());
+  messages.emplace_back(soilTemp3, sensorInformation,
+                        Time::getInstance().getEpochSeconds());
+  messages.emplace_back(soilTemp4, sensorInformation,
+                        Time::getInstance().getEpochSeconds());
+  messages.emplace_back(soilTemp5, sensorInformation,
+                        Time::getInstance().getEpochSeconds());
+  messages.emplace_back(soilMoisture3, sensorInformation,
+                        Time::getInstance().getEpochSeconds());
+  messages.emplace_back(soilMoisture4, sensorInformation,
+                        Time::getInstance().getEpochSeconds());
+  messages.emplace_back(soilMoisture5, sensorInformation,
+                        Time::getInstance().getEpochSeconds());
+  messages.emplace_back(precipitation,
+                        sensorInformation,
+                        Time::getInstance().getEpochSeconds());
 
-	return messages;
+  return messages;
 }
 
-SensorInformation Forte_RS485::getSensorInformation() const
-{
-	return sensorInformation;
+SensorInformation Forte_RS485::getSensorInformation() const {
+  return sensorInformation;
 }
\ No newline at end of file
diff --git a/client/libs/rs485/rs485.hpp b/client/libs/rs485/rs485.hpp
index a379b89711d0e7887b09fd75020b6364496b0c74..7ae7c9287f12f4af6370398495bfa083e9a88a5a 100644
--- a/client/libs/rs485/rs485.hpp
+++ b/client/libs/rs485/rs485.hpp
@@ -1,51 +1,32 @@
 #ifndef _RS485
 #define _RS485
 
+#include <MeasurementTypes.h>
 #include "Message.hpp"
 #include "ForteSensor.hpp"
 #include "SentecSensors.h"
 
-struct out_data_rs485{
-    float solarRadiation;
-    float soilMoisture3;
-    float soilTemperature3;
-    float soilMoisture4;
-    float soilTemperature4;
-    float soilMoisture5;
-    float soilTemperature5;
-    float precipitation;
+struct out_data_rs485 {
+  float solarRadiation;
+  float soilMoisture3;
+  float soilTemperature3;
+  float soilMoisture4;
+  float soilTemperature4;
+  float soilMoisture5;
+  float soilTemperature5;
+  float precipitation;
 };
 
-class Forte_RS485 : public ForteSensor <out_data_rs485> {
-  public:
-	void setup() override;
-	out_data_rs485 readData() override;
-	std::list<Message> buildMessages() override;
-	[[nodiscard]] SensorInformation getSensorInformation() const override;
+class Forte_RS485: public ForteSensor<out_data_rs485> {
+ public:
+  void setup() override;
+  out_data_rs485 readData() override;
+  std::list<Message> buildMessages() override;
+  [[nodiscard]] SensorInformation getSensorInformation() const override;
 
-  private:
-    const SensorInformation sensorInformation{"RS485", SensorProtocol::RS485};
+ private:
+  const SensorInformation
+      sensorInformation{HardwareName::RS485, SensorProtocol::RS485};
 
-    enum class MeasurementType { 
-        SOLAR_RADIATION,
-        SOIL_MOISTURE_3,
-        SOIL_TEMPERATURE_3,
-        SOIL_MOISTURE_4,
-        SOIL_TEMPERATURE_4,
-        SOIL_MOISTURE_5,
-        SOIL_TEMPERATURE_5,
-        PRECIPITATION
-      };
-
-    std::map<MeasurementType, const char *> measurementTypeToString = {
-	    {MeasurementType::SOLAR_RADIATION, "SOLAR_RADIATION"},
-	    {MeasurementType::SOIL_MOISTURE_3, "SOIL_MOISTURE_3"},
-      {MeasurementType::SOIL_TEMPERATURE_3, "SOIL_TEMPERATURE_3"},
-      {MeasurementType::SOIL_MOISTURE_4, "SOIL_MOISTURE_4"},
-      {MeasurementType::SOIL_TEMPERATURE_4, "SOIL_TEMPERATURE_4"},
-	    {MeasurementType::SOIL_MOISTURE_5, "SOIL_MOISTURE_5"},
-      {MeasurementType::SOIL_TEMPERATURE_5, "SOIL_TEMPERATURE_5"},
-      {MeasurementType::PRECIPITATION, "PRECIPATION"}
-        };
 };
 #endif 
\ No newline at end of file
diff --git a/client/libs/scd30/scd30.cpp b/client/libs/scd30/scd30.cpp
index a0bd13f86f71fea2063509701d62b311b0ac7371..322322dd490a83b6ac70b1cd1c632109debc1953 100644
--- a/client/libs/scd30/scd30.cpp
+++ b/client/libs/scd30/scd30.cpp
@@ -1,44 +1,48 @@
 #include "scd30.hpp"
 
-void ForteSCD30 ::setup()
-{
-	Wire.begin(I2C_SDA, I2C_SCL);
-	if (!airSensor.begin()) {
-		// Sensor init went wrong
-		ESP_LOGW(sensorInformation.getHardwareName().c_str(), "Initialization failed.");
-		return;
-	}
+void ForteSCD30::setup() {
+  Wire.begin(I2C_SDA, I2C_SCL);
+  if (!airSensor.begin()) {
+    // Sensor init went wrong
+    ESP_LOGW(sensorInformation.getHardwareNameString().c_str(),
+             "Initialization failed.");
+    return;
+  }
 }
 
-out_data_scd30 ForteSCD30 ::readData()
-{
-	if (airSensor.dataAvailable()) {
-		data.C02 = airSensor.getCO2();
-		data.Temperature = airSensor.getTemperature();
-		data.Humidity = airSensor.getHumidity();
+out_data_scd30 ForteSCD30::readData() {
+  if (airSensor.dataAvailable()) {
+    data.C02 = airSensor.getCO2();
+    data.Temperature = airSensor.getTemperature();
+    data.Humidity = airSensor.getHumidity();
 
-		return data;
-	}
-	throw NoDataAvailableException();
+    return data;
+  }
+  throw NoDataAvailableException();
 }
 
-std::list<Message> ForteSCD30::buildMessages()
-{
-	std::list<Message> messages;
+std::list<Message> ForteSCD30::buildMessages() {
+  std::list<Message> messages;
 
-	out_data_scd30 data = readData();
-	MeasurementData CO2Data{data.C02, 0, {}, "CO2"};
-	MeasurementData TempData{data.Temperature, 0, {}, "Temperature"};
-	MeasurementData HumidData{data.Humidity, 0, {}, "Humidity"};
+  data = readData(); // TODO: catch exception
+  MeasurementData CO2Data{data.C02, 0, {}, MeasurementType::CO2};
+  MeasurementData
+      TempData{data.Temperature, 0, {}, MeasurementType::TEMPERATURE};
+  MeasurementData HumidData{data.Humidity, 0, {}, MeasurementType::HUMIDITY};
 
-	messages.emplace_back(Message(CO2Data, sensorInformation, Time::getInstance().getEpochSeconds()));
-	messages.emplace_back(Message(TempData, sensorInformation, Time::getInstance().getEpochSeconds()));
-	messages.emplace_back(Message(HumidData, sensorInformation, Time::getInstance().getEpochSeconds()));
-	
-	return messages;
+  messages.emplace_back(CO2Data,
+                        sensorInformation,
+                        Time::getInstance().getEpochSeconds());
+  messages.emplace_back(TempData,
+                        sensorInformation,
+                        Time::getInstance().getEpochSeconds());
+  messages.emplace_back(HumidData,
+                        sensorInformation,
+                        Time::getInstance().getEpochSeconds());
+
+  return messages;
 }
 
-SensorInformation ForteSCD30::getSensorInformation() const
-{
-	return sensorInformation;
+SensorInformation ForteSCD30::getSensorInformation() const {
+  return sensorInformation;
 }
diff --git a/client/libs/scd30/scd30.hpp b/client/libs/scd30/scd30.hpp
index 253414a59399a43b089f8938070375bae3f85c6b..ce819af0917f7159ac4d79fb02579f5fa5c0f886 100644
--- a/client/libs/scd30/scd30.hpp
+++ b/client/libs/scd30/scd30.hpp
@@ -10,22 +10,23 @@
 #include <Wire.h>
 
 struct out_data_scd30 {
-	float C02;
-	float Temperature;
-	float Humidity;
+  float C02;
+  float Temperature;
+  float Humidity;
 };
 
-class ForteSCD30 : public ForteSensor<out_data_scd30> {
-  public:
-	void setup() override;
-	out_data_scd30 readData() override;
-	std::list<Message> buildMessages() override;
-	[[nodiscard]] SensorInformation getSensorInformation() const override;
+class ForteSCD30: public ForteSensor<out_data_scd30> {
+ public:
+  void setup() override;
+  out_data_scd30 readData() override;
+  std::list<Message> buildMessages() override;
+  [[nodiscard]] SensorInformation getSensorInformation() const override;
 
-  private:
-	SCD30 airSensor;
-	out_data_scd30 data;
-	const SensorInformation sensorInformation{"SCD30", SensorProtocol::I2C};
+ private:
+  SCD30 airSensor;
+  out_data_scd30 data;
+  const SensorInformation
+      sensorInformation{HardwareName::SCD30, SensorProtocol::I2C};
 };
 
 #endif
\ No newline at end of file
diff --git a/client/libs/sht85/Sht85.cpp b/client/libs/sht85/Sht85.cpp
index f9c1ee0e1089b6c2cc63abe9430cc0ec7ca002d9..0640129f2ca12436d7a5b19de37f43a47908b9a2 100644
--- a/client/libs/sht85/Sht85.cpp
+++ b/client/libs/sht85/Sht85.cpp
@@ -3,70 +3,68 @@
 //
 
 #include "Sht85.hpp"
-void Sht85::setup()
-{
-
-	this->sht = SHTSensor(SHTSensor::SHT85);
-	readData();
+void Sht85::setup() {
+  this->sht = SHTSensor(SHTSensor::SHT85);
+  readData();
 }
 
-void Sht85::readSHT()
-{
-	// Read data from the initialized SHT85
-	// TODO send via esp now instead of printing
-	if (sht.readSample()) {
-		Serial.print("T:  ");
-		Serial.println(sht.getTemperature(), 2);
-		Serial.print("RH: ");
-		Serial.println(sht.getHumidity(), 2);
-	} else {
-		Serial.print("Error in readSample()\n");
-	}
+void Sht85::readSHT() {
+  // Read data from the initialized SHT85
+  // TODO send via esp now instead of printing
+  if (sht.readSample()) {
+    Serial.print("T:  ");
+    Serial.println(sht.getTemperature(), 2);
+    Serial.print("RH: ");
+    Serial.println(sht.getHumidity(), 2);
+  } else {
+    Serial.print("Error in readSample()\n");
+  }
 }
 
-out_data_sht85 Sht85::readData()
-{
-	// Start the I2C bus
-	Wire.begin(SDA, SCL);
-	delay(100); // let serial console settle
+out_data_sht85 Sht85::readData() {
+  // Start the I2C bus
+  Wire.begin(SDA, SCL);
+  delay(100); // let serial console settle
 
-	// initiate the SHT85 sensor
-	Serial.println("");
-	if (sht.init(Wire)) {
-		Serial.println("SHT initialization successful");
-	} else {
-		Serial.println("SHT initialization failed");
-	}
+  // initiate the SHT85 sensor
+  Serial.println("");
+  if (sht.init(Wire)) {
+    Serial.println("SHT initialization successful");
+  } else {
+    Serial.println("SHT initialization failed");
+  }
 
-	// T + RH reading
-	readSHT();
+  // T + RH reading
+  readSHT();
 
-	delay(100);
+  delay(100);
 
-	// end I2C to free the pins to be used by the SD card
-	Wire.end();
+  // end I2C to free the pins to be used by the SD card
+  Wire.end();
 
-	out_data_sht85 sht85Data;
-	sht85Data.temperature = sht.getTemperature();
-	sht85Data.humidity = sht.getHumidity();
-	return sht85Data;
+  out_data_sht85 sht85Data;
+  sht85Data.temperature = sht.getTemperature();
+  sht85Data.humidity = sht.getHumidity();
+  return sht85Data;
 }
-std::list<Message> Sht85::buildMessages()
-{
-	std::list<Message> messages;
-	auto data = readData();
-	MeasurementData temperatureMeasurementData{
-	    data.temperature, {}, 0x44, measurementTypeToString.at(MeasurementType::TEMPERATURE)};
-	MeasurementData humidityMeasurementData{
-	    data.humidity, {}, 0x44, measurementTypeToString.at(MeasurementType::HUMIDITY)};
+std::list<Message> Sht85::buildMessages() {
+  std::list<Message> messages;
+  auto data = readData();
+  MeasurementData temperatureMeasurementData{
+      data.temperature, {}, 0x44, MeasurementType::TEMPERATURE};
+  MeasurementData humidityMeasurementData{
+      data.humidity, {}, 0x44, MeasurementType::HUMIDITY};
 
-	messages.emplace_back(
-	    Message{temperatureMeasurementData, sensorInformation, Time::getInstance().getEpochSeconds()});
-	messages.emplace_back(Message{humidityMeasurementData, sensorInformation, Time::getInstance().getEpochSeconds()});
+  messages.emplace_back(
+      temperatureMeasurementData,
+      sensorInformation,
+      Time::getInstance().getEpochSeconds());
+  messages.emplace_back(humidityMeasurementData,
+                        sensorInformation,
+                        Time::getInstance().getEpochSeconds());
 
-	return messages;
+  return messages;
 }
-SensorInformation Sht85::getSensorInformation() const
-{
-	return sensorInformation;
+SensorInformation Sht85::getSensorInformation() const {
+  return sensorInformation;
 }
diff --git a/client/libs/sht85/Sht85.hpp b/client/libs/sht85/Sht85.hpp
index 02e978c7e254ceb38002033b80959f8001e9c0c0..d697380b4a137dad8f3842e2966c2bea9312205b 100644
--- a/client/libs/sht85/Sht85.hpp
+++ b/client/libs/sht85/Sht85.hpp
@@ -23,28 +23,24 @@
 #define SCL 12
 
 struct out_data_sht85 {
-	float temperature = 0.0;
-	float humidity = 0.0;
+  float temperature = 0.0;
+  float humidity = 0.0;
 };
 
-class Sht85 : public ForteSensor<out_data_sht85> {
-  public:
-	void setup() override;
-	out_data_sht85 readData() override;
-	std::list<Message> buildMessages() override;
-	[[nodiscard]] SensorInformation getSensorInformation() const override;
+class Sht85: public ForteSensor<out_data_sht85> {
+ public:
+  void setup() override;
+  out_data_sht85 readData() override;
+  std::list<Message> buildMessages() override;
+  [[nodiscard]] SensorInformation getSensorInformation() const override;
 
-  private:
-	SHTSensor sht; // I2C address: 0x44
-	out_data_sht85 data;
-	const SensorInformation sensorInformation{"SHT85", SensorProtocol::I2C};
-	void readSHT();
+ private:
+  SHTSensor sht; // I2C address: 0x44
+  out_data_sht85 data;
+  const SensorInformation
+      sensorInformation{HardwareName::SHT85, SensorProtocol::I2C};
+  void readSHT();
 
-	enum class MeasurementType { TEMPERATURE, HUMIDITY };
-
-	// enum to string
-	std::map<MeasurementType, const char *> measurementTypeToString = {{MeasurementType::TEMPERATURE, "TEMPERATURE"},
-	                                                                   {MeasurementType::HUMIDITY, "HUMIDITY"}};
 };
 
 #endif // ESPCAM_SHT85_HPP
diff --git a/shared-libs/DataTransfer/CompressedDataPackage.hpp b/shared-libs/DataTransfer/CompressedDataPackage.hpp
index 00774f44555aacf652e031e59af99ceed094669b..d9191ee9e2bee78446f77167b0a05d59219f9bed 100644
--- a/shared-libs/DataTransfer/CompressedDataPackage.hpp
+++ b/shared-libs/DataTransfer/CompressedDataPackage.hpp
@@ -13,47 +13,51 @@
 constexpr double ERROR_VALUE = -999.99;
 constexpr unsigned long NULL_TIMESTAMP = 0; // null timestamp
 
-enum ErrorTypes : short {
-    SENSOR_NOT_FOUND,
-    SENSOR_NOT_CONNECTED,
-    NO_DATA,
-    DATA_OK,
-    NULL_MESSAGE, // message that is sent as padding, should be thrown away
+enum ErrorTypes: char {
+  SENSOR_NOT_FOUND,
+  SENSOR_NOT_CONNECTED,
+  NO_DATA,
+  DATA_OK,
+  NULL_MESSAGE, // message that is sent as padding, should be thrown away
 };
 
 struct CompressedDataPackage {
-    int channel;
-    int i2cAddress;
-    double value;
-    unsigned long timestamp;
-    ErrorTypes errorType;
-    char hardwareName[6];
-    char sensorProtocol[6];
-    char measurementType[18];
-
-    // tostring
-    [[nodiscard]] std::string toString() const {
-        StaticJsonDocument<250> document; // 250 byte is the max send size of espnow
-
-        document["hardwareName"] = hardwareName;
-        document["timestamp"] = timestamp;
-        document["sensorProtocol"] = sensorProtocol;
-        document["value"] = value;
-
-        if (channel != -1) {
-            document["channel"] = channel;
-        }
-
-        if (i2cAddress != -1) {
-            document["i2cAddress"] = i2cAddress;
-        }
-
-        document["measurementType"] = measurementType;
-
-        std::string jsonString;
-        serializeJson(document, jsonString);
-        return jsonString;
+  int channel;    // can this be short?
+  int i2cAddress; // can this be short?
+  double value;
+  unsigned long timestamp;
+  ErrorTypes errorType;
+  HardwareName hardwareName;
+  SensorProtocol sensorProtocol;
+  MeasurementType measurementType;
+  // same could be done for hardwarename and sensorprotocol
+
+  // tostring
+  [[nodiscard]] std::string toString() const {
+    StaticJsonDocument<250> document; // 250 byte is the max send size of espnow
+
+    document["hardwareName"] =
+        HardwareNames::hardwareNameToString(hardwareName);
+    document["timestamp"] = timestamp;
+    document["sensorProtocol"] =
+        SensorProtocols::sensorProtocolToString(sensorProtocol);
+    document["value"] = value;
+
+    if (channel != -1) {
+      document["channel"] = channel;
     }
+
+    if (i2cAddress != -1) {
+      document["i2cAddress"] = i2cAddress;
+    }
+
+    document["measurementType"] =
+        MeasurementTypes::measurementTypeToString(measurementType);
+
+    std::string jsonString;
+    serializeJson(document, jsonString);
+    return jsonString;
+  }
 };
 
 #endif // CLIENT_MOCK_COMPRESSEDDATAPACKAGE_HPP
diff --git a/shared-libs/DataTransfer/HardwareNames.cpp b/shared-libs/DataTransfer/HardwareNames.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..0150aaf61a6286ff03a93844d7124058c2aac741
--- /dev/null
+++ b/shared-libs/DataTransfer/HardwareNames.cpp
@@ -0,0 +1,39 @@
+//
+// Created by zoe on 2/2/23.
+//
+
+#include "HardwareNames.h"
+namespace HardwareNames {
+std::string hardwareNameToString(HardwareName hardwareName) {
+  // switch
+  switch (hardwareName) {
+    case HardwareName::RS485:
+      return "RS485";
+    case HardwareName::INA219:
+      return "INA219";
+    case HardwareName::SCD30:
+      return "SCD30";
+    case HardwareName::RAIN_GAUGE:
+      return "RAIN_GAUGE";
+    case HardwareName::SOIL_MOISTURE_SENSOR:
+      return "SOIL_MOISTURE_SENSOR";
+    case HardwareName::SOIL_TEMPERATURE_SENSOR:
+      return "SOIL_TEMPERATURE_SENSOR";
+    case HardwareName::SOLAR_RADIATION_SENSOR:
+      return "SOLAR_RADIATION_SENSOR";
+    case HardwareName::SHT85:
+      return "SHT85";
+    case HardwareName::DRS26:
+      return "DRS26";
+    case HardwareName::DR26:
+      return "DR26";
+    case HardwareName::MOCK:
+      return "MOCK";
+    case HardwareName::NONE:
+      return "NONE";
+    case HardwareName::LC709203:
+      break;
+  }
+  return "UNKNOWN HARDWARE NAME";
+}
+}
\ No newline at end of file
diff --git a/shared-libs/DataTransfer/HardwareNames.h b/shared-libs/DataTransfer/HardwareNames.h
new file mode 100644
index 0000000000000000000000000000000000000000..5bf6930379ab6069940cd6763eb022db8d511287
--- /dev/null
+++ b/shared-libs/DataTransfer/HardwareNames.h
@@ -0,0 +1,34 @@
+//
+// Created by zoe on 2/2/23.
+//
+
+#ifndef CLIENT_MOCK_HARDWARENAMES_H
+#define CLIENT_MOCK_HARDWARENAMES_H
+
+#include <map>
+
+// 32,767 possible values
+enum class HardwareName : short {
+  RS485, // TODO: THIS IS THE PROTOCOL NAME NOT THE HARDWARE NAME
+  INA219,
+  SCD30,
+  RAIN_GAUGE,
+  SOIL_MOISTURE_SENSOR,
+  SOIL_TEMPERATURE_SENSOR,
+  SOLAR_RADIATION_SENSOR,
+  SHT85,
+  DRS26,
+  DR26,
+  MOCK,
+  NONE,
+  LC709203,
+};
+
+// hardware name to string function
+
+namespace HardwareNames {
+std::string hardwareNameToString(HardwareName hardwareName);
+}
+
+
+#endif //CLIENT_MOCK_HARDWARENAMES_H
diff --git a/shared-libs/DataTransfer/MeasurementTypes.cpp b/shared-libs/DataTransfer/MeasurementTypes.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..012c31d45f9e9445e5617bdb4766be84af1cd271
--- /dev/null
+++ b/shared-libs/DataTransfer/MeasurementTypes.cpp
@@ -0,0 +1,54 @@
+//
+// Created by zoe on 2/2/23.
+//
+# include "MeasurementTypes.h"
+namespace MeasurementTypes {
+std::string measurementTypeToString(MeasurementType measurementType) {
+  switch (measurementType) {
+    case MeasurementType::CIRCUMFERENCE_INCREMENT:
+      return "CIRCUMFERENCE_INCREMENT";
+    case MeasurementType::TEMPERATURE:
+      return "TEMPERATURE";
+    case MeasurementType::HUMIDITY:
+      return "HUMIDITY";
+    case MeasurementType::SHUNT_VOLTAGE:
+      return "SHUNT_VOLTAGE";
+    case MeasurementType::BUS_VOLTAGE:
+      return "BUS_VOLTAGE";
+    case MeasurementType::CURRENT_mA:
+      return "CURRENT_mA";
+    case MeasurementType::POWER_mA:
+      return "POWER_mA";
+    case MeasurementType::LOAD_VOLTAGE_V:
+      return "LOAD_VOLTAGE_V";
+    case MeasurementType::INA219_OVERFLOW:
+      return "INA219_OVERFLOW";
+    case MeasurementType::BATTERY_VOLTAGE:
+      return "BATTERY_VOLTAGE";
+    case MeasurementType::MOCK:
+      return "MOCK";
+    case MeasurementType::SOLAR_RADIATION:
+      return "SOLAR_RADIATION";
+    case MeasurementType::SOIL_MOISTURE_3:
+      return "SOIL_MOISTURE_3";
+    case MeasurementType::SOIL_TEMPERATURE_3:
+      return "SOIL_TEMPERATURE_3";
+    case MeasurementType::SOIL_MOISTURE_4:
+      return "SOIL_MOISTURE_4";
+    case MeasurementType::SOIL_TEMPERATURE_4:
+      return "SOIL_TEMPERATURE_4";
+    case MeasurementType::SOIL_MOISTURE_5:
+      return "SOIL_MOISTURE_5";
+    case MeasurementType::SOIL_TEMPERATURE_5:
+      return "SOIL_TEMPERATURE_5";
+    case MeasurementType::PRECIPITATION:
+      return "PRECIPITATION";
+    case MeasurementType::CO2:
+      return "CO2";
+    case MeasurementType::NULL_MEASUREMENT:
+      return "NULL_MEASUREMENT";
+  }
+  return "UNKNOWN";
+}
+
+}
\ No newline at end of file
diff --git a/shared-libs/DataTransfer/MeasurementTypes.h b/shared-libs/DataTransfer/MeasurementTypes.h
new file mode 100644
index 0000000000000000000000000000000000000000..95907692ab744e17c1c58a5eb30f3469e9c5de41
--- /dev/null
+++ b/shared-libs/DataTransfer/MeasurementTypes.h
@@ -0,0 +1,40 @@
+//
+// Created by zoe on 2/2/23.
+//
+
+#ifndef CLIENT_MOCK_MEASUREMENTTYPES_H
+#define CLIENT_MOCK_MEASUREMENTTYPES_H
+
+#include <map>
+
+enum class MeasurementType {
+  CIRCUMFERENCE_INCREMENT,
+  TEMPERATURE,
+  HUMIDITY,
+  SHUNT_VOLTAGE,
+  BUS_VOLTAGE,
+  CURRENT_mA,
+  POWER_mA,
+  LOAD_VOLTAGE_V,
+  INA219_OVERFLOW,
+  BATTERY_VOLTAGE,
+  MOCK,
+  SOLAR_RADIATION,
+  SOIL_MOISTURE_3,
+  SOIL_TEMPERATURE_3,
+  SOIL_MOISTURE_4,
+  SOIL_TEMPERATURE_4,
+  SOIL_MOISTURE_5,
+  SOIL_TEMPERATURE_5,
+  PRECIPITATION,
+  CO2,
+  NULL_MEASUREMENT,
+};
+
+// convert below to a function
+// measurement type to string function
+namespace MeasurementTypes {
+std::string measurementTypeToString(MeasurementType measurementType);
+}
+
+#endif //CLIENT_MOCK_MEASUREMENTTYPES_H
diff --git a/shared-libs/DataTransfer/SensorProtocol.cpp b/shared-libs/DataTransfer/SensorProtocol.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..f2aa02da070bf93f3cdee9ca2682b792a6ee62cf
--- /dev/null
+++ b/shared-libs/DataTransfer/SensorProtocol.cpp
@@ -0,0 +1,22 @@
+//
+// Created by zoe on 2/2/23.
+//
+
+#include "SensorProtocol.hpp"
+namespace SensorProtocols {
+std::string sensorProtocolToString(SensorProtocol sensorProtocol) {
+  switch (sensorProtocol) {
+    case SensorProtocol::I2C:
+      return "I2C";
+    case SensorProtocol::RS485:
+      return "RS485";
+    case SensorProtocol::Analog:
+      return "Analog";
+    case SensorProtocol::Mock:
+      return "Mock";
+    case SensorProtocol::NULL_PROTOCOL:
+      return "NULL_PROTOCOL";
+  }
+  return "UNKNOWN";
+}
+}
\ No newline at end of file
diff --git a/shared-libs/DataTransfer/SensorProtocol.hpp b/shared-libs/DataTransfer/SensorProtocol.hpp
new file mode 100644
index 0000000000000000000000000000000000000000..fb4d0b0f114cb2e10decb6a263044bc05ade7c3d
--- /dev/null
+++ b/shared-libs/DataTransfer/SensorProtocol.hpp
@@ -0,0 +1,15 @@
+//
+// Created by zoe on 10/5/22.
+//
+
+#ifndef CLIENT_PROTOCOL_HPP
+#define CLIENT_PROTOCOL_HPP
+
+#include <map>
+enum class SensorProtocol : short { I2C, RS485, Analog, Mock, NULL_PROTOCOL };
+
+namespace SensorProtocols {
+std::string sensorProtocolToString(SensorProtocol sensorProtocol);
+}
+
+#endif // CLIENT_PROTOCOL_HPP