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

WIP: Trying out message compression

parent ce2210f3
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
......@@ -288,16 +288,43 @@ String documentToServerReadableString(const DynamicJsonDocument &doc) {
serverDoc["host"] = hostMacAddressString;
serverDoc["client"] = doc["clientMac"].as<String>();
serverDoc["sensorProtocol"] = doc["protocol"].as<String>();
serverDoc["sensorProtocol"] = doc["sensorProtocol"].as<String>();
serverDoc["protocolAddress"] = doc["channel"].as<String>();
serverDoc["hardwareName"] = doc["sensorName"].as<String>();
serverDoc["i2cAddress"] = doc["i2cAddress"].as<String>();
serverDoc["hardwareName"] = doc["hardwareName"].as<String>();
// each value is a element in the readigs array
JsonArray readings = serverDoc.createNestedArray("readings");
JsonObject reading = readings.createNestedObject();
reading["name"] = doc["measurementType"].as<String>();
reading["value"] = doc["value"].as<float>();
reading["value"] = doc["value"].as<double>();
serverDoc["time"] = doc["timestamp"].as<uint32_t>();
String serverString;
serializeJson(serverDoc, serverString);
esp_log_write(ESP_LOG_DEBUG, TAG_ESPNOW, "Server readable data: %s\n", serverString.c_str());
return serverString;
}
String compressedDataPackageToServerReadableString(CompressedDataPackage compressedDataPackage,
const String &clientMacAddress) {
StaticJsonDocument<300> serverDoc;
String hostMacAddressString = WiFi.macAddress();
hostMacAddressString.replace(":", "");
hostMacAddressString.toLowerCase();
serverDoc["host"] = hostMacAddressString;
serverDoc["client"] = clientMacAddress;
serverDoc["sensorProtocol"] = compressedDataPackage.sensorProtocol;
serverDoc["protocolAddress"] = compressedDataPackage.channel;
serverDoc["i2cAddress"] = compressedDataPackage.i2cAddress;
serverDoc["hardwareName"] = compressedDataPackage.hardwareName;
// each value is a element in the readigs array
JsonArray readings = serverDoc.createNestedArray("readings");
JsonObject reading = readings.createNestedObject();
reading["name"] = compressedDataPackage.measurementType;
reading["value"] = compressedDataPackage.value;
serverDoc["time"] = compressedDataPackage.timestamp;
String serverString;
serializeJson(serverDoc, serverString);
esp_log_write(ESP_LOG_DEBUG, TAG_ESPNOW, "Server readable data: %s\n", serverString.c_str());
......
......@@ -5,6 +5,7 @@
#ifndef HOST_CENTRAL_MAST_UTILITIES_H
#define HOST_CENTRAL_MAST_UTILITIES_H
#include "../../../client/libs/espnow/src/CompressedDataPackage.hpp"
#include "ArduinoJson.h"
#include "SD.h"
#include "SDCardException.h"
......@@ -34,5 +35,6 @@ String getMacAddressAsString(const uint8_t *mac);
String documentToLineProtocolString(const DynamicJsonDocument &doc);
DynamicJsonDocument parseReceivedJsonData(char *data);
String documentToServerReadableString(const DynamicJsonDocument &doc);
String compressedDataPackageToServerReadableString(CompressedDataPackage compressedDataPackage, const String& clientMacAddress);
#endif // HOST_CENTRAL_MAST_UTILITIES_H
......@@ -5,6 +5,7 @@
#define TINY_GSM_MODEM_SIM7000
#include "../../../client/libs/espnow/src/CompressedDataPackage.hpp"
#include "ConnectionManager.h"
#include "MessageType.h"
#include "SDCardLogger.h"
......@@ -58,9 +59,12 @@ void on_data_sent(const uint8_t *mac_addr, esp_now_send_status_t status) {
void on_data_recv(const uint8_t *mac, const uint8_t *incomingData, int len) {
esp_log_write(ESP_LOG_INFO, TAG_ESPNOW, "Message recieved\n");
// copy received data to a char array
char data[len];
memcpy(data, incomingData, len);
esp_log_write(ESP_LOG_DEBUG, TAG_ESPNOW, "Raw received Data: %s\n", data);
CompressedDataPackage compressedDataPackage{};
memcpy(&compressedDataPackage, incomingData, sizeof(CompressedDataPackage));
// esp_log_write(ESP_LOG_DEBUG, TAG_ESPNOW, "Raw received Data: %s\n", data);
// log received data
esp_log_write(ESP_LOG_DEBUG, TAG_ESPNOW, "Received Data: %s\n", compressedDataPackage.toString().c_str());
if (!esp_now_is_peer_exist(mac)) {
esp_now_peer_info_t client = {};
......@@ -74,8 +78,6 @@ void on_data_recv(const uint8_t *mac, const uint8_t *incomingData, int len) {
}
}
DynamicJsonDocument doc = parseReceivedJsonData(data);
// TODO: Respond to the client. Maybe do that before parsing anything
response response = {};
response.type = dataAck;
......@@ -86,15 +88,10 @@ void on_data_recv(const uint8_t *mac, const uint8_t *incomingData, int len) {
String macAddress = getMacAddressAsString(mac);
// add timestamp and mac address
// doc["timestamp"] = rtc.getEpoch();
doc["clientMac"] = macAddress;
documentToServerReadableString(doc);
auto doc = compressedDataPackageToServerReadableString(compressedDataPackage, macAddress);
// serialize json document again
std::string dataString{};
serializeJson(doc, dataString);
try {
SDUtilities::saveStringToSDCard(dataString);
......@@ -102,12 +99,8 @@ void on_data_recv(const uint8_t *mac, const uint8_t *incomingData, int len) {
esp_log_write(ESP_LOG_ERROR, TAG_ESPNOW, "Failed to save data to SD card: %s", e.what());
}
String lineData = documentToLineProtocolString(doc);
esp_log_write(ESP_LOG_DEBUG, TAG_ESPNOW, "Line protocol data: %s\n", lineData.c_str());
xSemaphoreTake(xMutex, portMAX_DELAY);
queue.push(lineData);
queue.emplace(dataString.c_str());
xSemaphoreGive(xMutex);
}
......
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