Skip to content

Commit

Permalink
[SYS] Add connection fallback capability (#1950)
Browse files Browse the repository at this point in the history
This feature enable to rotate among the connection parameters index to find a valid one when the current MQTT connection is not working
  • Loading branch information
1technophile authored May 22, 2024
1 parent 819d3c2 commit 0db67f7
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 1 deletion.
4 changes: 4 additions & 0 deletions docs/use/gateway.md
Original file line number Diff line number Diff line change
Expand Up @@ -140,6 +140,10 @@ mosquitto_pub -t "home/OpenMQTTGateway/commands/MQTTtoSYS/config" -m
}'
```

::: tip
If the client can't connect to the MQTT broker corresponding to the current `cnt_index`, it will increment the index to the next valid connection set and restart with it.
:::

## Saving/Loading connection parameters/certificates at runtime
This chapter details the process for managing certificates/connections parameters used for secure MQTT communication with OpenMQTTGateway

Expand Down
3 changes: 2 additions & 1 deletion main/User_config.h
Original file line number Diff line number Diff line change
Expand Up @@ -284,8 +284,9 @@ struct ss_cnt_parameters {
// Index 0 is used for connection parameters provided in the build that can be overloaded by WiFi Manager/Onboarding/WebUI,MQTT
#define CNT_DEFAULT_INDEX 0
// Index 1 and more are used for connection parameters provided at runtime by MQTT
#define cnt_parameters_array_size 3

ss_cnt_parameters cnt_parameters_array[3] = {
ss_cnt_parameters cnt_parameters_array[cnt_parameters_array_size] = {
{ss_server_cert, ss_client_cert, ss_client_key, OTAserver_cert, MQTT_SERVER, MQTT_PORT, MQTT_USER, MQTT_PASS, MQTT_SECURE_DEFAULT, MQTT_CERT_VALIDATE_DEFAULT, true},
{"", "", "", "", MQTT_SERVER, MQTT_PORT, MQTT_USER, MQTT_PASS, MQTT_SECURE_DEFAULT, MQTT_CERT_VALIDATE_DEFAULT, false},
{"", "", "", "", MQTT_SERVER, MQTT_PORT, MQTT_USER, MQTT_PASS, MQTT_SECURE_DEFAULT, MQTT_CERT_VALIDATE_DEFAULT, false}};
Expand Down
19 changes: 19 additions & 0 deletions main/main.ino
Original file line number Diff line number Diff line change
Expand Up @@ -886,7 +886,26 @@ void connectMQTT() {
delayWithOTA(5000);
ErrorIndicatorOFF();
delayWithOTA(5000);

// If we have failed to connect to the MQTT broker, we will try to connect to the next set of connection parameters
if (failure_number_mqtt > maxRetryWatchDog) {
#ifndef ESPWifiManualSetup
// Look for the next valid connection
for (int i = 0; i < cnt_parameters_array_size; i++) {
cnt_index++;
if (cnt_index >= cnt_parameters_array_size) {
cnt_index = 0;
}
if (cnt_parameters_array[cnt_index].validConnection) {
Log.notice(F("Connection %d valid, switching" CR), cnt_index);
saveConfig();
break;
} else {
Log.notice(F("Connection %d not valid" CR), cnt_index);
}
}
#endif

unsigned long millis_since_last_ota;
while (
// When
Expand Down

0 comments on commit 0db67f7

Please sign in to comment.