added telemetry API endpoint
All checks were successful
Test compiling project / test (push) Successful in 1m44s

This commit is contained in:
2023-10-07 20:43:16 +02:00
parent 5bd085ba63
commit dd136784e6

View File

@@ -56,8 +56,14 @@ struct NetworkData {
String network_name; String network_name;
}; };
struct DeviceTelemetry {
float heap_used_percent;
int uptime_seconds;
};
NetworkData wifi_data; NetworkData wifi_data;
NetworkData ethernet_data; NetworkData ethernet_data;
DeviceTelemetry telemetry;
SensorData current_data = SensorData { -1, -1, -1, -1 }; SensorData current_data = SensorData { -1, -1, -1, -1 };
@@ -74,7 +80,7 @@ void display_percentage(int percentage)
{ {
digitalWrite(LED_RED, 0); digitalWrite(LED_RED, 0);
if (percentage > 1) { if (percentage > 0) {
digitalWrite(LED_1, 1); digitalWrite(LED_1, 1);
} else { } else {
digitalWrite(LED_1, 0); digitalWrite(LED_1, 0);
@@ -99,7 +105,17 @@ void display_percentage(int percentage)
} else { } else {
digitalWrite(LED_5, 0); digitalWrite(LED_5, 0);
} }
delay(3000);
if (percentage > 10) {
delay(3000);
} else if (percentage > 0) {
for (int i = 0; i < 3; i++) {
delay(500);
digitalWrite(LED_1, 0);
delay(500);
digitalWrite(LED_1, 1);
}
}
} }
void display_error_code(byte err_code) void display_error_code(byte err_code)
@@ -137,7 +153,6 @@ void display_task(void* parameter)
if (!is_error()) { if (!is_error()) {
// We have no error, refresh status display and wait half a second // We have no error, refresh status display and wait half a second
display_percentage(current_data.percentage); display_percentage(current_data.percentage);
delay(1000);
} else { } else {
Log.verbose("Error detected"); Log.verbose("Error detected");
// We have an error, display error code for 3 seconds and then water level for 3 seconds // We have an error, display error code for 3 seconds and then water level for 3 seconds
@@ -215,14 +230,12 @@ void ethernet_task(void* parameter)
void collect_internal_telemetry_task(void* parameter) void collect_internal_telemetry_task(void* parameter)
{ {
while (true) { while (true) {
float heap_usage = (float(ESP.getFreeHeap()) / float(ESP.getHeapSize())) * 100; float heap_usage = (float(ESP.getFreeHeap()) / float(ESP.getHeapSize())) * 100;
uint64_t uptime_seconds = millis() / 1000; uint64_t uptime_seconds = millis() / 1000;
Log.verbose("Current heap usage: %F", heap_usage); telemetry.heap_used_percent = heap_usage;
Log.verbose("Current uptime: %d", uptime_seconds); telemetry.uptime_seconds = uptime_seconds;
delay(60000); delay(60000);
} }
} }
@@ -332,31 +345,40 @@ void setup()
}); });
server.on("/sensor_data", HTTP_GET, [](AsyncWebServerRequest* request) { server.on("/sensor_data", HTTP_GET, [](AsyncWebServerRequest* request) {
StaticJsonDocument<128> doc; StaticJsonDocument<128> doc;
doc["percentage"] = current_data.percentage; doc["percentage"] = current_data.percentage;
doc["voltage"] = current_data.voltage; doc["voltage"] = current_data.voltage;
doc["current"] = current_data.current; doc["current"] = current_data.current;
doc["water_height"] = current_data.water_height; doc["water_height"] = current_data.water_height;
String output; String output;
serializeJson(doc, output); serializeJson(doc, output);
request->send(200, "application/json", output); }); request->send(200, "application/json", output); });
server.on("/telemetry", HTTP_GET, [](AsyncWebServerRequest* request) {
StaticJsonDocument<128> doc;
doc["uptime_seconds"] = telemetry.uptime_seconds;
doc["heap_percent"] = telemetry.heap_used_percent;
String output;
serializeJson(doc, output);
request->send(200, "application/json", output); });
server.on("/network_info", HTTP_GET, [](AsyncWebServerRequest* request) { server.on("/network_info", HTTP_GET, [](AsyncWebServerRequest* request) {
StaticJsonDocument<256> doc; StaticJsonDocument<256> doc;
doc["wifi"]["ip"] = wifi_data.ip_address; doc["wifi"]["ip"] = wifi_data.ip_address;
doc["wifi"]["rssi"] = wifi_data.rssi; doc["wifi"]["rssi"] = wifi_data.rssi;
doc["wifi"]["link"] = wifi_data.link; doc["wifi"]["link"] = wifi_data.link;
doc["wifi"]["ssid"] = wifi_data.network_name; doc["wifi"]["ssid"] = wifi_data.network_name;
doc["ethernet"]["ip"] = ethernet_data.ip_address; doc["ethernet"]["ip"] = ethernet_data.ip_address;
doc["ethernet"]["rssi"] = ethernet_data.rssi; doc["ethernet"]["rssi"] = ethernet_data.rssi;
doc["ethernet"]["link"] = ethernet_data.link; doc["ethernet"]["link"] = ethernet_data.link;
String output; String output;
serializeJson(doc, output); serializeJson(doc, output);
request->send(200, "application/json", output); }); request->send(200, "application/json", output);
});
server.on("/chota.css", HTTP_GET, [](AsyncWebServerRequest* request) { request->send(SPIFFS, "/chota.css", "text/css", false); }); server.on("/chota.css", HTTP_GET, [](AsyncWebServerRequest* request) { request->send(SPIFFS, "/chota.css", "text/css", false); });