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:
parent
cbe99e6f79
commit
060a831abd
10
README.md
10
README.md
@ -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"
|
||||||
|
|||||||
@ -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-----
|
||||||
@ -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);
|
||||||
}
|
}
|
||||||
@ -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,28 +270,36 @@ void ProvisionSoftAP::tryConnect()
|
|||||||
{
|
{
|
||||||
ESP_LOGI(TAG, "trying to connect to %s", m_ssid);
|
ESP_LOGI(TAG, "trying to connect to %s", m_ssid);
|
||||||
|
|
||||||
WiFi.begin(m_ssid, m_pwd);
|
int connRes = 0;
|
||||||
int connRes = WiFi.waitForConnectResult(5000);
|
|
||||||
if(connRes == WL_CONNECTED)
|
delay(100);
|
||||||
|
|
||||||
|
for(int n = 0; n < 7; n++)
|
||||||
{
|
{
|
||||||
// all is gud!
|
WiFi.begin(m_ssid, m_pwd);
|
||||||
ESP_LOGI(TAG, "we're connected, sending confirmation");
|
connRes = WiFi.waitForConnectResult(8000);
|
||||||
m_webSocket->textAll(wifi_ok, sizeof(wifi_ok)-1);
|
if(connRes == WL_CONNECTED)
|
||||||
|
{
|
||||||
|
// all is gud!
|
||||||
|
ESP_LOGI(TAG, "we're connected, sending confirmation");
|
||||||
|
m_webSocket->textAll(wifi_ok, sizeof(wifi_ok)-1);
|
||||||
|
|
||||||
strcpy(SETTINGS.wifi.entry[0].ssid, m_ssid);
|
strcpy(SETTINGS.wifi.entry[0].ssid, m_ssid);
|
||||||
strcpy(SETTINGS.wifi.entry[0].pwd, m_pwd);
|
strcpy(SETTINGS.wifi.entry[0].pwd, m_pwd);
|
||||||
SETTINGS.wifi.selected = 0;
|
SETTINGS.wifi.selected = 0;
|
||||||
SETTINGS.wifi.num = 1;
|
SETTINGS.wifi.num = 1;
|
||||||
|
|
||||||
SETTINGS_SAVE;
|
SETTINGS_SAVE;
|
||||||
|
|
||||||
vTaskDelay(3000 / portTICK_PERIOD_MS);
|
vTaskDelay(3000 / portTICK_PERIOD_MS);
|
||||||
waitBufferEmpty();
|
waitBufferEmpty();
|
||||||
|
|
||||||
ESP_LOGI(TAG, "restarting...");
|
ESP_LOGI(TAG, "restarting...");
|
||||||
WiFi.disconnect();
|
WiFi.disconnect();
|
||||||
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);
|
||||||
|
|||||||
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -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',
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user