Load prefs in sensor from queue

This commit is contained in:
2026-05-24 16:43:52 +02:00
parent 31acd5d5ec
commit bc5986507a
3 changed files with 81 additions and 21 deletions
+35 -8
View File
@@ -59,6 +59,9 @@ QueueHandle_t stateForWebserverQueue = xQueueCreate(2, sizeof(CurrentState));
// Queue for sending preferences from main to webserver
QueueHandle_t prefsForWebserverQueue = xQueueCreate(2, sizeof(DataMessage));
// Queue for sending preferences from main to sensor task
QueueHandle_t prefsForSensorQueue = xQueueCreate(2, sizeof(DataMessage));
void setup()
{
Logger.registerSerial(MYLOG, ELOG_LEVEL_DEBUG, "Serial");
@@ -66,8 +69,8 @@ void setup()
prefs.begin("waterlevel", false);
Serial.begin(115200);
// Read initial preferences and send to webserver
if (prefsForWebserverQueue != NULL) {
// Read initial preferences and send to webserver and sensor
if (prefsForWebserverQueue != NULL || prefsForSensorQueue != NULL) {
DataMessage prefsMessage;
prefsMessage.type = DATA_TYPE_PREFERENCES;
prefsMessage.data.preferencesData.level_sensor_range = prefs.getFloat(level_sensor_range_key, 200);
@@ -79,10 +82,22 @@ void setup()
strncpy(prefsMessage.data.preferencesData.wifi_password, prefs.getString(wifi_password_key, "").c_str(), sizeof(prefsMessage.data.preferencesData.wifi_password) - 1);
prefsMessage.data.preferencesData.wifi_password[sizeof(prefsMessage.data.preferencesData.wifi_password) - 1] = '\0';
if (xQueueSend(prefsForWebserverQueue, &prefsMessage, 100 / portTICK_PERIOD_MS) != pdTRUE) {
LOG(ELOG_LEVEL_ERROR, "Failed to send initial preferences to webserver queue");
} else {
LOG(ELOG_LEVEL_DEBUG, "Sent initial preferences to webserver");
// Send to webserver
if (prefsForWebserverQueue != NULL) {
if (xQueueSend(prefsForWebserverQueue, &prefsMessage, 100 / portTICK_PERIOD_MS) != pdTRUE) {
LOG(ELOG_LEVEL_ERROR, "Failed to send initial preferences to webserver queue");
} else {
LOG(ELOG_LEVEL_DEBUG, "Sent initial preferences to webserver");
}
}
// Send to sensor task
if (prefsForSensorQueue != NULL) {
if (xQueueSend(prefsForSensorQueue, &prefsMessage, 100 / portTICK_PERIOD_MS) != pdTRUE) {
LOG(ELOG_LEVEL_ERROR, "Failed to send initial preferences to sensor queue");
} else {
LOG(ELOG_LEVEL_DEBUG, "Sent initial preferences to sensor");
}
}
}
@@ -108,7 +123,12 @@ void setup()
} else {
xTaskCreate(ethernet_task, "EthernetTask", 1024 * 4, dataQueue, 1, NULL);
xTaskCreate(wifi_task, "WiFiTask", 1024 * 4, dataQueue, 1, NULL);
xTaskCreate(read_sensor_task, "ReadSensorTask", 1024 * 4, dataQueue, 1, NULL);
// Create sensor queues struct
SensorQueues sensorQueues = {
.dataQueue = dataQueue,
.prefsQueue = prefsForSensorQueue
};
xTaskCreate(read_sensor_task, "ReadSensorTask", 1024 * 4, &sensorQueues, 1, NULL);
xTaskCreate(collect_internal_telemetry_task, "InternalTelemetryTask", 1024 * 2, dataQueue, 1, NULL);
xTaskCreate(display_task, "DisplayTask", 1024 * 2, NULL, 1, NULL);
xTaskCreate(get_time_task, "GetTimeTask", 1024 * 2, NULL, 1, NULL);
@@ -187,7 +207,14 @@ void loop()
LOG(ELOG_LEVEL_ERROR, "Failed to forward preferences to webserver queue");
}
}
LOG(ELOG_LEVEL_DEBUG, "Stored preferences and forwarded to webserver");
// Forward to sensor task so it can update its local copy
if (prefsForSensorQueue != NULL) {
if (xQueueSend(prefsForSensorQueue, &dataMessage, 100 / portTICK_PERIOD_MS) != pdTRUE) {
LOG(ELOG_LEVEL_ERROR, "Failed to forward preferences to sensor queue");
}
}
LOG(ELOG_LEVEL_DEBUG, "Stored preferences and forwarded to tasks");
break;
default:
LOG(ELOG_LEVEL_ERROR, "Unknown data type received");