updated mqtt client certificate, added counter to mqtt connect fail and reset after 100 consecutive failed attempts, provision wifi connect check also uses retry

This commit is contained in:
Miro Zmrzli 2024-08-18 14:03:38 -07:00
parent cbe99e6f79
commit 060a831abd
6 changed files with 62 additions and 49 deletions

View File

@ -24,12 +24,12 @@ openssl s_client -showcerts -connect mqtt-dev-server.westus2-1.ts.eventgrid.azur
openssl s_client -showcerts -verify 5 -connect mqtt-dev-server.westus2-1.ts.eventgrid.azure.net:8883 < /dev/null
openssl s_client -showcerts -verify 5 -connect mqtt-dev-server.westus2-1.ts.eventgrid.azure.net:8883 < /dev/null |
awk '/BEGIN CERTIFICATE/,/END CERTIFICATE/{ if(/BEGIN CERTIFICATE/){a++}; out="cert"a".pem"; print >out}'
for cert in *.pem; do
openssl s_client -showcerts -verify 5 -connect mqtt-dev-server.westus2-1.ts.eventgrid.azure.net:8883 < /dev/null | awk '/BEGIN CERTIFICATE/,/END CERTIFICATE/{ if(/BEGIN CERTIFICATE/){a++}; out="cert"a".pem"; print >out}'
for cert in *.pem; do
newname=$(openssl x509 -noout -subject -in $cert | sed -nE 's/.*CN ?= ?(.*)/\1/; s/[ ,.*]/_/g; s/__/_/g; s/_-_/-/; s/^_//g;p' | tr '[:upper:]' '[:lower:]').pem
echo "${newname}"; mv "${cert}" "${newname}"
done
done
convert crl to pem
openssl crl -in "Microsoft Azure ECC TLS Issuing CA 08 - xsign.crt" -inform PEM -out "Microsoft Azure ECC TLS Issuing CA 08 - xsign.pem"

View File

@ -1,13 +1,12 @@
-----BEGIN CERTIFICATE-----
MIIB8DCCAZagAwIBAgIRAOkYhrcCE+j1PLQ9BDCRPEcwCgYIKoZIzj0EAwIwRjEZ
MBcGA1UEChMQTXF0dEFwcFNhbXBsZXNDQTEpMCcGA1UEAxMgTXF0dEFwcFNhbXBs
ZXNDQSBJbnRlcm1lZGlhdGUgQ0EwHhcNMjQwNTAyMTAxNzU0WhcNMjQwODEwMTAx
NzQ5WjAbMRkwFwYDVQQDExBjbGllbnQxLWF1dGhuLUlEMFkwEwYHKoZIzj0CAQYI
KoZIzj0DAQcDQgAE8/zOkgtPi53H+J4TEt7WLam+HpzBpwPPIGnXe1j0aw8AW0IX
f3C59dNjXblYkMnfJetfGC+F1RGit8wltxa/1KOBjzCBjDAOBgNVHQ8BAf8EBAMC
B4AwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMB0GA1UdDgQWBBQZzhke
y2EVMhqXkvS8f0ShvbfU6TAfBgNVHSMEGDAWgBTP6P7nCctF0+5MHQFtdHOS+9ir
1zAbBgNVHREEFDASghBjbGllbnQxLWF1dGhuLUlEMAoGCCqGSM49BAMCA0gAMEUC
IQCjPsQCjTZl+OySx5ggC7501bJ4+aFvFjPgWBPzF/qiNQIgYzyLOyOJqadWYh85
usAECzpgqLWVXQOkYbqdicc3CtI=
MIIBxjCCAWugAwIBAgIRAOkYhrcCE+j1PLQ9BDCRPEcwCgYIKoZIzj0EAwIwGzEZ
MBcGA1UEAxMQY2xpZW50MS1hdXRobi1JRDAeFw0yNDA4MTAyMjQ3MzNaFw00NDA4
MDUyMjQ3MzNaMBsxGTAXBgNVBAMTEGNsaWVudDEtYXV0aG4tSUQwWTATBgcqhkjO
PQIBBggqhkjOPQMBBwNCAATz/M6SC0+Lncf4nhMS3tYtqb4enMGnA88gadd7WPRr
DwBbQhd/cLn102NduViQyd8l618YL4XVEaK3zCW3Fr/Uo4GPMIGMMA4GA1UdDwEB
/wQEAwIHgDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwHQYDVR0OBBYE
FBnOGR7LYRUyGpeS9Lx/RKG9t9TpMB8GA1UdIwQYMBaAFM/o/ucJy0XT7kwdAW10
c5L72KvXMBsGA1UdEQQUMBKCEGNsaWVudDEtYXV0aG4tSUQwCgYIKoZIzj0EAwID
SQAwRgIhAOay3IFSxWtbsByHePYSEc/t6zP4f08Xi5/hU6JURfMtAiEAr+AL+zZS
cxY4lsDnl4GhAejnyjB7ptK8DFYLtmOvzjs=
-----END CERTIFICATE-----

View File

@ -39,6 +39,8 @@ uint8_t buffer[256];
void MqttService::task()
{
int try_connect_count = 0;
while(true)
{
if(m_app_if.getBuffer()->waitForDataAvailable(1000))
@ -46,36 +48,40 @@ void MqttService::task()
uint8_t len = 0;
if(m_app_if.getBuffer()->getBlock(buffer, len))
{
char top[64];
char buffer[64];
uint8_t mac[6];
WiFi.macAddress(mac);
while (!m_mqtt_client->connected())
{
sprintf(top, "wh_%02X%02X%02X%02X%02X%02X", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
sprintf(buffer, "wh_%02X%02X%02X%02X%02X%02X", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
ESP_LOGI(TAG, "connecting to mqtt broker, dev id '%s'...", SETTINGS.mqtt.device_id);
if (m_mqtt_client->connect(top, SETTINGS.mqtt.device_id, NULL))
if (m_mqtt_client->connect(buffer, SETTINGS.mqtt.device_id, NULL))
{
try_connect_count = 0;
ESP_LOGI(TAG, "connected");
sprintf(top, "/%02X%02X%02X%02X%02X%02X", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
sprintf(buffer, "/%02X%02X%02X%02X%02X%02X", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
ESP_LOGI(TAG, "Subscribing to %s", top);
if(m_mqtt_client->subscribe(top))
ESP_LOGI(TAG, "Subscribing to %s", buffer);
if(m_mqtt_client->subscribe(buffer))
ESP_LOGI(TAG, "subscribed");
else
ESP_LOGE(TAG, "subscribe failed");
sprintf(top, "/%08x", SETTINGS.device.group_id);
ESP_LOGI(TAG, "Subscribing to %s", top);
if(m_mqtt_client->subscribe(top))
sprintf(buffer, "/%08x", SETTINGS.device.group_id);
ESP_LOGI(TAG, "Subscribing to %s", buffer);
if(m_mqtt_client->subscribe(buffer))
ESP_LOGI(TAG, "subscribed");
else
ESP_LOGE(TAG, "subscribe failed");
}
else
{
try_connect_count++;
if(try_connect_count > 100)
esp_restart();
ESP_LOGE(TAG, "failed with state %d", m_mqtt_client->state());
delay(5000);
}
@ -121,8 +127,8 @@ void MqttService::start()
m_mqtt_client->setServer(mqtt_broker, mqtt_port);
m_mqtt_client->setCallback(std::bind(&MqttService::callback, this, _1, _2, _3));
m_mqtt_client->setKeepAlive(30);
m_mqtt_client->setSocketTimeout(30);
m_mqtt_client->setKeepAlive(50);
m_mqtt_client->setSocketTimeout(50);
m_task = TaskMgr::getInstance().createTask(std::bind(&MqttService::task, this), MQTT_TASK_NAME, MQTT_TASK_STACK_SIZE, MQTT_TASK_PRIORITY, MQTT_TASK_CORE);
}

View File

@ -199,7 +199,7 @@ void ProvisionSoftAP::start()
ESP_ERROR_CHECK(esp_timer_create(&timer, &m_timer));
ESP_ERROR_CHECK(esp_timer_start_periodic(m_timer, INACTIVE_TIMER)); // 5 min
sprintf(ssid, "Wellhub-%02x%02x%02x%02x%02x%02x", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
sprintf(ssid, "Wellplug-%02x%02x%02x%02x%02x%02x", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
start(ssid, "12345678");
}
@ -270,8 +270,14 @@ void ProvisionSoftAP::tryConnect()
{
ESP_LOGI(TAG, "trying to connect to %s", m_ssid);
int connRes = 0;
delay(100);
for(int n = 0; n < 7; n++)
{
WiFi.begin(m_ssid, m_pwd);
int connRes = WiFi.waitForConnectResult(5000);
connRes = WiFi.waitForConnectResult(8000);
if(connRes == WL_CONNECTED)
{
// all is gud!
@ -293,6 +299,8 @@ void ProvisionSoftAP::tryConnect()
WiFi.mode(WIFI_MODE_NULL);
esp_restart();
}
delay(300);
}
WiFi.mode(WIFI_MODE_AP);
ESP_LOGE(TAG, "nuh-uh peppernip, error %d", connRes);
m_webSocket->textAll(wifi_fail, sizeof(wifi_fail)-1);

View File

@ -118,7 +118,7 @@ Wifi::WIFI_STATUS Wifi::connectTo(int index)
delay(1000);
WiFi.disconnect();
ESP_LOGW(TAG, "Failed to connect");
ESP_LOGW(TAG, "Failed to connect, status: %d", status);
return WIFI_STATUS::NOT_CONNECTED;
}

View File

@ -20,7 +20,7 @@ def connect_mqtt(client_id):
else:
print("Failed to connect, return code %d\n", rc)
client = mqtt_client.Client(mqtt_client.CallbackAPIVersion.VERSION1, "asdasdadaswd")
client = mqtt_client.Client(mqtt_client.CallbackAPIVersion.VERSION1, "asdasxzxdadaswd")
client.tls_set(
ca_certs='eventgrid.azure_full.pem',
certfile='../certs/client1-authn-ID.pem',