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
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}'
awk '/BEGIN CERTIFICATE/,/END CERTIFICATE/{ if(/BEGIN CERTIFICATE/){a++}; out="cert"a".pem"; print >out}'
for cert in *.pem; do 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 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}" echo "${newname}"; mv "${cert}" "${newname}"
done done
convert crl to pem 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" 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----- -----BEGIN CERTIFICATE-----
MIIB8DCCAZagAwIBAgIRAOkYhrcCE+j1PLQ9BDCRPEcwCgYIKoZIzj0EAwIwRjEZ MIIBxjCCAWugAwIBAgIRAOkYhrcCE+j1PLQ9BDCRPEcwCgYIKoZIzj0EAwIwGzEZ
MBcGA1UEChMQTXF0dEFwcFNhbXBsZXNDQTEpMCcGA1UEAxMgTXF0dEFwcFNhbXBs MBcGA1UEAxMQY2xpZW50MS1hdXRobi1JRDAeFw0yNDA4MTAyMjQ3MzNaFw00NDA4
ZXNDQSBJbnRlcm1lZGlhdGUgQ0EwHhcNMjQwNTAyMTAxNzU0WhcNMjQwODEwMTAx MDUyMjQ3MzNaMBsxGTAXBgNVBAMTEGNsaWVudDEtYXV0aG4tSUQwWTATBgcqhkjO
NzQ5WjAbMRkwFwYDVQQDExBjbGllbnQxLWF1dGhuLUlEMFkwEwYHKoZIzj0CAQYI PQIBBggqhkjOPQMBBwNCAATz/M6SC0+Lncf4nhMS3tYtqb4enMGnA88gadd7WPRr
KoZIzj0DAQcDQgAE8/zOkgtPi53H+J4TEt7WLam+HpzBpwPPIGnXe1j0aw8AW0IX DwBbQhd/cLn102NduViQyd8l618YL4XVEaK3zCW3Fr/Uo4GPMIGMMA4GA1UdDwEB
f3C59dNjXblYkMnfJetfGC+F1RGit8wltxa/1KOBjzCBjDAOBgNVHQ8BAf8EBAMC /wQEAwIHgDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwHQYDVR0OBBYE
B4AwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMB0GA1UdDgQWBBQZzhke FBnOGR7LYRUyGpeS9Lx/RKG9t9TpMB8GA1UdIwQYMBaAFM/o/ucJy0XT7kwdAW10
y2EVMhqXkvS8f0ShvbfU6TAfBgNVHSMEGDAWgBTP6P7nCctF0+5MHQFtdHOS+9ir c5L72KvXMBsGA1UdEQQUMBKCEGNsaWVudDEtYXV0aG4tSUQwCgYIKoZIzj0EAwID
1zAbBgNVHREEFDASghBjbGllbnQxLWF1dGhuLUlEMAoGCCqGSM49BAMCA0gAMEUC SQAwRgIhAOay3IFSxWtbsByHePYSEc/t6zP4f08Xi5/hU6JURfMtAiEAr+AL+zZS
IQCjPsQCjTZl+OySx5ggC7501bJ4+aFvFjPgWBPzF/qiNQIgYzyLOyOJqadWYh85 cxY4lsDnl4GhAejnyjB7ptK8DFYLtmOvzjs=
usAECzpgqLWVXQOkYbqdicc3CtI=
-----END CERTIFICATE----- -----END CERTIFICATE-----

View File

@ -39,6 +39,8 @@ uint8_t buffer[256];
void MqttService::task() void MqttService::task()
{ {
int try_connect_count = 0;
while(true) while(true)
{ {
if(m_app_if.getBuffer()->waitForDataAvailable(1000)) if(m_app_if.getBuffer()->waitForDataAvailable(1000))
@ -46,36 +48,40 @@ void MqttService::task()
uint8_t len = 0; uint8_t len = 0;
if(m_app_if.getBuffer()->getBlock(buffer, len)) if(m_app_if.getBuffer()->getBlock(buffer, len))
{ {
char top[64]; char buffer[64];
uint8_t mac[6]; uint8_t mac[6];
WiFi.macAddress(mac); WiFi.macAddress(mac);
while (!m_mqtt_client->connected()) 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); 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"); 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); ESP_LOGI(TAG, "Subscribing to %s", buffer);
if(m_mqtt_client->subscribe(top)) if(m_mqtt_client->subscribe(buffer))
ESP_LOGI(TAG, "subscribed"); ESP_LOGI(TAG, "subscribed");
else else
ESP_LOGE(TAG, "subscribe failed"); ESP_LOGE(TAG, "subscribe failed");
sprintf(top, "/%08x", SETTINGS.device.group_id); sprintf(buffer, "/%08x", SETTINGS.device.group_id);
ESP_LOGI(TAG, "Subscribing to %s", top); ESP_LOGI(TAG, "Subscribing to %s", buffer);
if(m_mqtt_client->subscribe(top)) if(m_mqtt_client->subscribe(buffer))
ESP_LOGI(TAG, "subscribed"); ESP_LOGI(TAG, "subscribed");
else else
ESP_LOGE(TAG, "subscribe failed"); ESP_LOGE(TAG, "subscribe failed");
} }
else else
{ {
try_connect_count++;
if(try_connect_count > 100)
esp_restart();
ESP_LOGE(TAG, "failed with state %d", m_mqtt_client->state()); ESP_LOGE(TAG, "failed with state %d", m_mqtt_client->state());
delay(5000); delay(5000);
} }
@ -121,8 +127,8 @@ void MqttService::start()
m_mqtt_client->setServer(mqtt_broker, mqtt_port); m_mqtt_client->setServer(mqtt_broker, mqtt_port);
m_mqtt_client->setCallback(std::bind(&MqttService::callback, this, _1, _2, _3)); m_mqtt_client->setCallback(std::bind(&MqttService::callback, this, _1, _2, _3));
m_mqtt_client->setKeepAlive(30); m_mqtt_client->setKeepAlive(50);
m_mqtt_client->setSocketTimeout(30); 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); 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_create(&timer, &m_timer));
ESP_ERROR_CHECK(esp_timer_start_periodic(m_timer, INACTIVE_TIMER)); // 5 min 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"); start(ssid, "12345678");
} }
@ -270,8 +270,14 @@ void ProvisionSoftAP::tryConnect()
{ {
ESP_LOGI(TAG, "trying to connect to %s", m_ssid); 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); WiFi.begin(m_ssid, m_pwd);
int connRes = WiFi.waitForConnectResult(5000); connRes = WiFi.waitForConnectResult(8000);
if(connRes == WL_CONNECTED) if(connRes == WL_CONNECTED)
{ {
// all is gud! // all is gud!
@ -293,6 +299,8 @@ void ProvisionSoftAP::tryConnect()
WiFi.mode(WIFI_MODE_NULL); WiFi.mode(WIFI_MODE_NULL);
esp_restart(); esp_restart();
} }
delay(300);
}
WiFi.mode(WIFI_MODE_AP); WiFi.mode(WIFI_MODE_AP);
ESP_LOGE(TAG, "nuh-uh peppernip, error %d", connRes); ESP_LOGE(TAG, "nuh-uh peppernip, error %d", connRes);
m_webSocket->textAll(wifi_fail, sizeof(wifi_fail)-1); m_webSocket->textAll(wifi_fail, sizeof(wifi_fail)-1);

View File

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

View File

@ -20,7 +20,7 @@ def connect_mqtt(client_id):
else: else:
print("Failed to connect, return code %d\n", rc) 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( client.tls_set(
ca_certs='eventgrid.azure_full.pem', ca_certs='eventgrid.azure_full.pem',
certfile='../certs/client1-authn-ID.pem', certfile='../certs/client1-authn-ID.pem',