Remove Secure Connection macro and add the config to wifimanager. (#961)
This adds the ability to specify if the MQTT broker connection is secure via a checkbox on the config page of WiFiManager. Also added to the WiFiManager config page is a text box to enter the brokers TLS certificate. In the case of using manual configuration a new macro is created MQTT_SECURE_DEFAULT. When defined as true a secure connection will be requested and the certificate defined in user_config.h will be used.
This commit is contained in:
1 parent
cd09476807
commit
31efcb32ee
5 files changed
+130
-106
No files matched your search
@@ -13,7 +13,7 @@ The MQTT broker is configured for TLS and you have access to the CA certificate
|
|||||||
You are using ESP8266 or ESP32, for other boards TLS is not supported.
|
You are using ESP8266 or ESP32, for other boards TLS is not supported.
|
||||||
|
|
||||||
### Configure secure connection in the gateway
|
### Configure secure connection in the gateway
|
||||||
To enable the secure connection and use TLS uncomment `//#define SECURE_CONNECTION` in `User_config.h`.
|
To enable the secure connection and use TLS set the `#define MQTT_DEFAULT_SECURE` to true.
|
||||||
Set `MQTT_SERVER` to the Common Name (CN) of the certificate of the broker.
|
Set `MQTT_SERVER` to the Common Name (CN) of the certificate of the broker.
|
||||||
This can be the hostname or the ip of the broker.
|
This can be the hostname or the ip of the broker.
|
||||||
|
|
||||||
@@ -28,9 +28,6 @@ const char* certificate CERT_ATTRIBUTE = R"EOF("
|
|||||||
")EOF";
|
")EOF";
|
||||||
```
|
```
|
||||||
|
|
||||||
If you have no ntp server in your local network (included in the router) or not using dhcp, you should uncomment `//# define NTP_SERVER "pool.ntp.org"` to use a ntp server for time synchronization.
|
|
||||||
This is related to the `W: failed, ssl error code=54` error message, which indicate that the time of the esp is not correct.
|
|
||||||
|
|
||||||
You can know compile and upload to your board and the gateway should connect with TLS to your broker.
|
You can know compile and upload to your board and the gateway should connect with TLS to your broker.
|
||||||
|
|
||||||
## Add the reveived "value" at the end of the topic
|
## Add the reveived "value" at the end of the topic
|
||||||
|
|||||||
@@ -14,6 +14,9 @@ From your smartphone search for your OpenMQTTGateway wifi network and connect to
|
|||||||
* Select your wifi
|
* Select your wifi
|
||||||
* Set your wifi password
|
* Set your wifi password
|
||||||
* Set your MQTT Server IP
|
* Set your MQTT Server IP
|
||||||
|
* Set your MQTT Server Port
|
||||||
|
* Set the MQTT secure connection box to select whether or not the connection should be secure
|
||||||
|
* Copy/paste the MQTT server certificate in the MQTT server cert box (only required if using a secure connection), be sure to include the `-----BEGIN CERIFICATE-----` and `-----END CERTIFICATE-----` markers
|
||||||
* Set your MQTT Server username (facultative)
|
* Set your MQTT Server username (facultative)
|
||||||
* Set your MQTT Server password (facultative)
|
* Set your MQTT Server password (facultative)
|
||||||
* Set your MQTT base topic if you need to change it (you must keep the / at the end)
|
* Set your MQTT base topic if you need to change it (you must keep the / at the end)
|
||||||
|
|||||||
+9
-24
@@ -80,6 +80,10 @@ const byte ip[] = {192, 168, 1, 99};
|
|||||||
const byte mac[] = {0xDE, 0xED, 0xBA, 0xFE, 0x54, 0x95}; //W5100 ethernet shield mac adress
|
const byte mac[] = {0xDE, 0xED, 0xBA, 0xFE, 0x54, 0x95}; //W5100 ethernet shield mac adress
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef NTP_SERVER
|
||||||
|
# define NTP_SERVER "pool.ntp.org"
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef MQTT_HTTPS_FW_UPDATE
|
#ifdef MQTT_HTTPS_FW_UPDATE
|
||||||
# if defined(ESP8266) || defined(ESP32)
|
# if defined(ESP8266) || defined(ESP32)
|
||||||
//If used, this should be set to the root CA certificate of the server hosting the firmware.
|
//If used, this should be set to the root CA certificate of the server hosting the firmware.
|
||||||
@@ -89,7 +93,6 @@ const char* https_fw_server_cert PROGMEM = R"EOF("
|
|||||||
...
|
...
|
||||||
-----END CERTIFICATE-----
|
-----END CERTIFICATE-----
|
||||||
")EOF";
|
")EOF";
|
||||||
# define NTP_SERVER "pool.ntp.org"
|
|
||||||
# ifndef MQTT_HTTPS_FW_UPDATE_USE_PASSWORD
|
# ifndef MQTT_HTTPS_FW_UPDATE_USE_PASSWORD
|
||||||
# define MQTT_HTTPS_FW_UPDATE_USE_PASSWORD 1 // Set this to 0 if not using TLS connection to MQTT broker to prevent clear text passwords being sent.
|
# define MQTT_HTTPS_FW_UPDATE_USE_PASSWORD 1 // Set this to 0 if not using TLS connection to MQTT broker to prevent clear text passwords being sent.
|
||||||
# endif
|
# endif
|
||||||
@@ -142,16 +145,6 @@ const char* https_fw_server_cert PROGMEM = R"EOF("
|
|||||||
# define mqtt_max_packet_size 128
|
# define mqtt_max_packet_size 128
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// activate the use of TLS for secure connection to the MQTT broker
|
|
||||||
// MQTT_SERVER must be set to the Common Name (CN) of the broker's certificate
|
|
||||||
//#define SECURE_CONNECTION
|
|
||||||
|
|
||||||
#ifdef SECURE_CONNECTION
|
|
||||||
# define MQTT_DEFAULT_PORT "8883"
|
|
||||||
#else
|
|
||||||
# define MQTT_DEFAULT_PORT "1883"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef MQTT_USER
|
#ifndef MQTT_USER
|
||||||
# define MQTT_USER "your_username"
|
# define MQTT_USER "your_username"
|
||||||
#endif
|
#endif
|
||||||
@@ -162,11 +155,13 @@ const char* https_fw_server_cert PROGMEM = R"EOF("
|
|||||||
# define MQTT_SERVER "192.168.1.17"
|
# define MQTT_SERVER "192.168.1.17"
|
||||||
#endif
|
#endif
|
||||||
#ifndef MQTT_PORT
|
#ifndef MQTT_PORT
|
||||||
# define MQTT_PORT MQTT_DEFAULT_PORT
|
# define MQTT_PORT "1883"
|
||||||
|
#endif
|
||||||
|
#ifndef MQTT_SECURE_DEFAULT
|
||||||
|
# define MQTT_SECURE_DEFAULT false
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef SECURE_CONNECTION
|
#if defined(ESP8266) || defined(ESP32)
|
||||||
# if defined(ESP8266) || defined(ESP32)
|
|
||||||
// The root ca certificate used for validating the MQTT broker
|
// The root ca certificate used for validating the MQTT broker
|
||||||
// The certificate must be in PEM ascii format
|
// The certificate must be in PEM ascii format
|
||||||
const char* certificate PROGMEM = R"EOF("
|
const char* certificate PROGMEM = R"EOF("
|
||||||
@@ -175,16 +170,6 @@ const char* certificate PROGMEM = R"EOF("
|
|||||||
-----END CERTIFICATE-----
|
-----END CERTIFICATE-----
|
||||||
")EOF";
|
")EOF";
|
||||||
|
|
||||||
// specify a NTP server here or else the NTP server from DHCP is used
|
|
||||||
# ifndef NTP_SERVER
|
|
||||||
//# define NTP_SERVER "pool.ntp.org"
|
|
||||||
# endif
|
|
||||||
# else
|
|
||||||
# error "only ESP8266 and ESP32 support SECURE_CONNECTION with TLS"
|
|
||||||
# endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(ESP8266) || defined(ESP32)
|
|
||||||
# define ATTEMPTS_BEFORE_BG 10 // Number of wifi connection attempts before going to BG protocol
|
# define ATTEMPTS_BEFORE_BG 10 // Number of wifi connection attempts before going to BG protocol
|
||||||
# define ATTEMPTS_BEFORE_B 20 // Number of wifi connection attempts before going to B protocol
|
# define ATTEMPTS_BEFORE_B 20 // Number of wifi connection attempts before going to B protocol
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
+110
-69
@@ -173,6 +173,9 @@ int failure_number_mqtt = 0; // number of failure connecting to MQTT
|
|||||||
bool disc = true; // Auto discovery with Home Assistant convention
|
bool disc = true; // Auto discovery with Home Assistant convention
|
||||||
#endif
|
#endif
|
||||||
unsigned long timer_led_measures = 0;
|
unsigned long timer_led_measures = 0;
|
||||||
|
static void* eClient = nullptr;
|
||||||
|
static bool mqtt_secure = MQTT_SECURE_DEFAULT;
|
||||||
|
static String mqtt_cert = "";
|
||||||
|
|
||||||
#ifdef ESP32
|
#ifdef ESP32
|
||||||
# include <ArduinoOTA.h>
|
# include <ArduinoOTA.h>
|
||||||
@@ -186,13 +189,8 @@ unsigned long timer_led_measures = 0;
|
|||||||
void WiFiEvent(WiFiEvent_t event);
|
void WiFiEvent(WiFiEvent_t event);
|
||||||
static bool esp32EthConnected = false;
|
static bool esp32EthConnected = false;
|
||||||
# endif
|
# endif
|
||||||
# ifdef SECURE_CONNECTION
|
|
||||||
# include <WiFiClientSecure.h>
|
# include <WiFiClientSecure.h>
|
||||||
WiFiClientSecure eClient;
|
|
||||||
# else
|
|
||||||
# include <WiFi.h>
|
|
||||||
WiFiClient eClient;
|
|
||||||
# endif
|
|
||||||
# include <WiFiMulti.h>
|
# include <WiFiMulti.h>
|
||||||
WiFiMulti wifiMulti;
|
WiFiMulti wifiMulti;
|
||||||
# include <Preferences.h>
|
# include <Preferences.h>
|
||||||
@@ -201,6 +199,7 @@ Preferences preferences;
|
|||||||
# ifdef MDNS_SD
|
# ifdef MDNS_SD
|
||||||
# include <ESPmDNS.h>
|
# include <ESPmDNS.h>
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
#elif defined(ESP8266)
|
#elif defined(ESP8266)
|
||||||
# include <ArduinoOTA.h>
|
# include <ArduinoOTA.h>
|
||||||
# include <DNSServer.h>
|
# include <DNSServer.h>
|
||||||
@@ -209,26 +208,21 @@ Preferences preferences;
|
|||||||
# include <ESP8266WiFiMulti.h>
|
# include <ESP8266WiFiMulti.h>
|
||||||
# include <FS.h>
|
# include <FS.h>
|
||||||
# include <WiFiManager.h>
|
# include <WiFiManager.h>
|
||||||
# ifdef SECURE_CONNECTION
|
X509List caCert;
|
||||||
WiFiClientSecure eClient;
|
|
||||||
X509List caCert(certificate);
|
|
||||||
# else
|
|
||||||
WiFiClient eClient;
|
|
||||||
# endif
|
|
||||||
ESP8266WiFiMulti wifiMulti;
|
ESP8266WiFiMulti wifiMulti;
|
||||||
# ifdef MDNS_SD
|
# ifdef MDNS_SD
|
||||||
# include <ESP8266mDNS.h>
|
# include <ESP8266mDNS.h>
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
#else
|
#else
|
||||||
# include <Ethernet.h>
|
# include <Ethernet.h>
|
||||||
EthernetClient eClient;
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define convertTemp_CtoF(c) ((c * 1.8) + 32)
|
#define convertTemp_CtoF(c) ((c * 1.8) + 32)
|
||||||
#define convertTemp_FtoC(f) ((f - 32) * 5 / 9)
|
#define convertTemp_FtoC(f) ((f - 32) * 5 / 9)
|
||||||
|
|
||||||
// client link to pubsub mqtt
|
// client link to pubsub mqtt
|
||||||
PubSubClient client(eClient);
|
PubSubClient client;
|
||||||
|
|
||||||
void revert_hex_data(const char* in, char* out, int l) {
|
void revert_hex_data(const char* in, char* out, int l) {
|
||||||
//reverting array 2 by 2 to get the data in good order
|
//reverting array 2 by 2 to get the data in good order
|
||||||
@@ -517,10 +511,10 @@ void connectMQTT() {
|
|||||||
failure_number_mqtt++; // we count the failure
|
failure_number_mqtt++; // we count the failure
|
||||||
Log.warning(F("failure_number_mqtt: %d" CR), failure_number_mqtt);
|
Log.warning(F("failure_number_mqtt: %d" CR), failure_number_mqtt);
|
||||||
Log.warning(F("failed, rc=%d" CR), client.state());
|
Log.warning(F("failed, rc=%d" CR), client.state());
|
||||||
#if defined(SECURE_CONNECTION) && defined(ESP32)
|
#if defined(ESP32)
|
||||||
Log.warning(F("failed, ssl error code=%d" CR), eClient.lastError(nullptr, 0));
|
Log.warning(F("failed, ssl error code=%d" CR), ((WiFiClientSecure*)eClient)->lastError(nullptr, 0));
|
||||||
#elif defined(SECURE_CONNECTION) && defined(ESP8266)
|
#elif defined(ESP8266)
|
||||||
Log.warning(F("failed, ssl error code=%d" CR), eClient.getLastSSLError());
|
Log.warning(F("failed, ssl error code=%d" CR), ((WiFiClientSecure*)eClient)->getLastSSLError());
|
||||||
#endif
|
#endif
|
||||||
digitalWrite(LED_INFO, LED_INFO_ON);
|
digitalWrite(LED_INFO, LED_INFO_ON);
|
||||||
delay(1000);
|
delay(1000);
|
||||||
@@ -590,9 +584,6 @@ void setup() {
|
|||||||
# endif
|
# endif
|
||||||
|
|
||||||
setOTA();
|
setOTA();
|
||||||
# ifdef SECURE_CONNECTION
|
|
||||||
setupTLS();
|
|
||||||
# endif
|
|
||||||
#else // In case of arduino platform
|
#else // In case of arduino platform
|
||||||
|
|
||||||
//Launch serial for debugging purposes
|
//Launch serial for debugging purposes
|
||||||
@@ -617,6 +608,18 @@ void setup() {
|
|||||||
port = strtol(mqtt_port, NULL, 10);
|
port = strtol(mqtt_port, NULL, 10);
|
||||||
Log.trace(F("Port: %l" CR), port);
|
Log.trace(F("Port: %l" CR), port);
|
||||||
Log.trace(F("Mqtt server: %s" CR), mqtt_server);
|
Log.trace(F("Mqtt server: %s" CR), mqtt_server);
|
||||||
|
# if defined(ESP8266) || defined(ESP32)
|
||||||
|
if (mqtt_secure) {
|
||||||
|
eClient = new WiFiClientSecure;
|
||||||
|
setupTLS();
|
||||||
|
} else {
|
||||||
|
eClient = new WiFiClient;
|
||||||
|
}
|
||||||
|
# else
|
||||||
|
eClient = new EthernetClient;
|
||||||
|
# endif
|
||||||
|
|
||||||
|
client.setClient(*(Client*)eClient);
|
||||||
client.setServer(mqtt_server, port);
|
client.setServer(mqtt_server, port);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -848,19 +851,24 @@ void setOTA() {
|
|||||||
ArduinoOTA.begin();
|
ArduinoOTA.begin();
|
||||||
}
|
}
|
||||||
|
|
||||||
# ifdef SECURE_CONNECTION
|
|
||||||
void setupTLS() {
|
void setupTLS() {
|
||||||
# if defined(NTP_SERVER)
|
|
||||||
configTime(0, 0, NTP_SERVER);
|
configTime(0, 0, NTP_SERVER);
|
||||||
# endif
|
WiFiClientSecure* sClient = (WiFiClientSecure*)eClient;
|
||||||
# if defined(ESP32)
|
if (mqtt_cert.length() > 0) {
|
||||||
eClient.setCACert(certificate);
|
# if defined(ESP32)
|
||||||
# elif defined(ESP8266)
|
sClient->setCACert(mqtt_cert.c_str());
|
||||||
eClient.setTrustAnchors(&caCert);
|
} else {
|
||||||
eClient.setBufferSizes(512, 512);
|
sClient->setCACert(certificate);
|
||||||
# endif
|
}
|
||||||
}
|
# elif defined(ESP8266)
|
||||||
|
caCert.append(mqtt_cert.c_str());
|
||||||
|
} else {
|
||||||
|
caCert.append(certificate);
|
||||||
|
}
|
||||||
|
sClient->setTrustAnchors(&caCert);
|
||||||
|
sClient->setBufferSizes(512, 512);
|
||||||
# endif
|
# endif
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(ESPWifiManualSetup)
|
#if defined(ESPWifiManualSetup)
|
||||||
@@ -904,7 +912,7 @@ void setup_wifi() {
|
|||||||
WiFiManager wifiManager;
|
WiFiManager wifiManager;
|
||||||
|
|
||||||
//flag for saving data
|
//flag for saving data
|
||||||
bool shouldSaveConfig = true;
|
bool shouldSaveConfig = false;
|
||||||
//do we have been connected once to mqtt
|
//do we have been connected once to mqtt
|
||||||
|
|
||||||
//callback notifying us of the need to save config
|
//callback notifying us of the need to save config
|
||||||
@@ -999,6 +1007,10 @@ void setup_wifimanager(bool reset_settings) {
|
|||||||
strcpy(mqtt_pass, json["mqtt_pass"]);
|
strcpy(mqtt_pass, json["mqtt_pass"]);
|
||||||
if (json.containsKey("mqtt_topic"))
|
if (json.containsKey("mqtt_topic"))
|
||||||
strcpy(mqtt_topic, json["mqtt_topic"]);
|
strcpy(mqtt_topic, json["mqtt_topic"]);
|
||||||
|
if (json.containsKey("mqtt_secure"))
|
||||||
|
mqtt_secure = json.get<bool>("mqtt_secure");
|
||||||
|
if (json.containsKey("mqtt_cert"))
|
||||||
|
mqtt_cert = json.get<const char*>("mqtt_cert");
|
||||||
if (json.containsKey("gateway_name"))
|
if (json.containsKey("gateway_name"))
|
||||||
strcpy(gateway_name, json["gateway_name"]);
|
strcpy(gateway_name, json["gateway_name"]);
|
||||||
} else {
|
} else {
|
||||||
@@ -1015,6 +1027,8 @@ void setup_wifimanager(bool reset_settings) {
|
|||||||
WiFiManagerParameter custom_mqtt_user("user", "mqtt user", mqtt_user, parameters_size);
|
WiFiManagerParameter custom_mqtt_user("user", "mqtt user", mqtt_user, parameters_size);
|
||||||
WiFiManagerParameter custom_mqtt_pass("pass", "mqtt pass", mqtt_pass, parameters_size * 2);
|
WiFiManagerParameter custom_mqtt_pass("pass", "mqtt pass", mqtt_pass, parameters_size * 2);
|
||||||
WiFiManagerParameter custom_mqtt_topic("topic", "mqtt base topic", mqtt_topic, mqtt_topic_max_size);
|
WiFiManagerParameter custom_mqtt_topic("topic", "mqtt base topic", mqtt_topic, mqtt_topic_max_size);
|
||||||
|
WiFiManagerParameter custom_mqtt_secure("secure", "mqtt secure", "1", 1, mqtt_secure ? "type=\"checkbox\" checked" : "type=\"checkbox\"");
|
||||||
|
WiFiManagerParameter custom_mqtt_cert("cert", "mqtt broker cert", mqtt_cert.c_str(), 2048);
|
||||||
WiFiManagerParameter custom_gateway_name("name", "gateway name", gateway_name, parameters_size * 2);
|
WiFiManagerParameter custom_gateway_name("name", "gateway name", gateway_name, parameters_size * 2);
|
||||||
|
|
||||||
//WiFiManager
|
//WiFiManager
|
||||||
@@ -1041,6 +1055,8 @@ void setup_wifimanager(bool reset_settings) {
|
|||||||
wifiManager.addParameter(&custom_mqtt_port);
|
wifiManager.addParameter(&custom_mqtt_port);
|
||||||
wifiManager.addParameter(&custom_mqtt_user);
|
wifiManager.addParameter(&custom_mqtt_user);
|
||||||
wifiManager.addParameter(&custom_mqtt_pass);
|
wifiManager.addParameter(&custom_mqtt_pass);
|
||||||
|
wifiManager.addParameter(&custom_mqtt_secure);
|
||||||
|
wifiManager.addParameter(&custom_mqtt_cert);
|
||||||
wifiManager.addParameter(&custom_gateway_name);
|
wifiManager.addParameter(&custom_gateway_name);
|
||||||
wifiManager.addParameter(&custom_mqtt_topic);
|
wifiManager.addParameter(&custom_mqtt_topic);
|
||||||
|
|
||||||
@@ -1083,16 +1099,35 @@ void setup_wifimanager(bool reset_settings) {
|
|||||||
M5Display("Wifi connected", "", "");
|
M5Display("Wifi connected", "", "");
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
//read updated parameters
|
|
||||||
strcpy(mqtt_server, custom_mqtt_server.getValue());
|
|
||||||
strcpy(mqtt_port, custom_mqtt_port.getValue());
|
|
||||||
strcpy(mqtt_user, custom_mqtt_user.getValue());
|
|
||||||
strcpy(mqtt_pass, custom_mqtt_pass.getValue());
|
|
||||||
strcpy(mqtt_topic, custom_mqtt_topic.getValue());
|
|
||||||
strcpy(gateway_name, custom_gateway_name.getValue());
|
|
||||||
|
|
||||||
//save the custom parameters to FS
|
|
||||||
if (shouldSaveConfig) {
|
if (shouldSaveConfig) {
|
||||||
|
//read updated parameters
|
||||||
|
strcpy(mqtt_server, custom_mqtt_server.getValue());
|
||||||
|
strcpy(mqtt_port, custom_mqtt_port.getValue());
|
||||||
|
strcpy(mqtt_user, custom_mqtt_user.getValue());
|
||||||
|
strcpy(mqtt_pass, custom_mqtt_pass.getValue());
|
||||||
|
strcpy(mqtt_topic, custom_mqtt_topic.getValue());
|
||||||
|
strcpy(gateway_name, custom_gateway_name.getValue());
|
||||||
|
mqtt_secure = *custom_mqtt_secure.getValue();
|
||||||
|
|
||||||
|
int cert_len = strlen(custom_mqtt_cert.getValue());
|
||||||
|
if (cert_len) {
|
||||||
|
char* cert_in = (char*)custom_mqtt_cert.getValue();
|
||||||
|
while (*cert_in == ' ' || *cert_in == '\t') {
|
||||||
|
cert_in++;
|
||||||
|
}
|
||||||
|
|
||||||
|
char* cert_begin = cert_in;
|
||||||
|
while (*cert_in != NULL) {
|
||||||
|
if (*cert_in == ' ' && (strncmp((cert_in + 1), "CERTIFICATE", 11) != 0)) {
|
||||||
|
*cert_in = '\n';
|
||||||
|
}
|
||||||
|
cert_in++;
|
||||||
|
}
|
||||||
|
|
||||||
|
mqtt_cert = cert_begin;
|
||||||
|
}
|
||||||
|
|
||||||
|
//save the custom parameters to FS
|
||||||
Log.trace(F("saving config" CR));
|
Log.trace(F("saving config" CR));
|
||||||
DynamicJsonBuffer jsonBuffer;
|
DynamicJsonBuffer jsonBuffer;
|
||||||
JsonObject& json = jsonBuffer.createObject();
|
JsonObject& json = jsonBuffer.createObject();
|
||||||
@@ -1102,6 +1137,8 @@ void setup_wifimanager(bool reset_settings) {
|
|||||||
json["mqtt_pass"] = mqtt_pass;
|
json["mqtt_pass"] = mqtt_pass;
|
||||||
json["mqtt_topic"] = mqtt_topic;
|
json["mqtt_topic"] = mqtt_topic;
|
||||||
json["gateway_name"] = gateway_name;
|
json["gateway_name"] = gateway_name;
|
||||||
|
json["mqtt_secure"] = mqtt_secure;
|
||||||
|
json["mqtt_cert"] = mqtt_cert;
|
||||||
|
|
||||||
File configFile = SPIFFS.open("/config.json", "w");
|
File configFile = SPIFFS.open("/config.json", "w");
|
||||||
if (!configFile) {
|
if (!configFile) {
|
||||||
@@ -1623,12 +1660,11 @@ void receivingMQTT(char* topicOri, char* datacallback) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#ifdef MQTT_HTTPS_FW_UPDATE
|
#ifdef MQTT_HTTPS_FW_UPDATE
|
||||||
# ifndef NTP_SERVER
|
|
||||||
# error no NTP_SERVER defined
|
|
||||||
# endif
|
|
||||||
# include <WiFiClientSecure.h>
|
# include <WiFiClientSecure.h>
|
||||||
|
|
||||||
|
# include "Ota_github.h"
|
||||||
|
|
||||||
# ifdef ESP32
|
# ifdef ESP32
|
||||||
# include "Ota_github.h"
|
|
||||||
# include "zzHTTPUpdate.h"
|
# include "zzHTTPUpdate.h"
|
||||||
# elif ESP8266
|
# elif ESP8266
|
||||||
# include <ESP8266httpUpdate.h>
|
# include <ESP8266httpUpdate.h>
|
||||||
@@ -1649,9 +1685,6 @@ void MQTTHttpsFWUpdate(char* topicOri, JsonObject& HttpsFwUpdateData) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
# if MQTT_HTTPS_FW_UPDATE_USE_PASSWORD > 0
|
# if MQTT_HTTPS_FW_UPDATE_USE_PASSWORD > 0
|
||||||
# ifndef SECURE_CONNECTION
|
|
||||||
# warning using a password with an unsecure MQTT connection will send it as clear text!!!
|
|
||||||
# endif
|
|
||||||
const char* pwd = HttpsFwUpdateData["password"];
|
const char* pwd = HttpsFwUpdateData["password"];
|
||||||
if (pwd) {
|
if (pwd) {
|
||||||
if (strcmp(pwd, ota_password) != 0) {
|
if (strcmp(pwd, ota_password) != 0) {
|
||||||
@@ -1683,38 +1716,46 @@ void MQTTHttpsFWUpdate(char* topicOri, JsonObject& HttpsFwUpdateData) {
|
|||||||
|
|
||||||
} else {
|
} else {
|
||||||
WiFiClientSecure update_client;
|
WiFiClientSecure update_client;
|
||||||
# ifdef SECURE_CONNECTION
|
if (mqtt_secure) {
|
||||||
client.disconnect();
|
client.disconnect();
|
||||||
update_client = eClient;
|
update_client = *(WiFiClientSecure*)eClient;
|
||||||
# else
|
} else {
|
||||||
configTime(0, 0, NTP_SERVER);
|
configTime(0, 0, NTP_SERVER);
|
||||||
time_t now = time(nullptr);
|
time_t now = time(nullptr);
|
||||||
uint8_t count = 0;
|
uint8_t count = 0;
|
||||||
Log.trace(F("Waiting for NTP time sync" CR));
|
Log.trace(F("Waiting for NTP time sync" CR));
|
||||||
while ((now < 8 * 3600 * 2) && count++ < 60) {
|
while ((now < 8 * 3600 * 2) && count++ < 60) {
|
||||||
vTaskDelay(500);
|
delay(500);
|
||||||
now = time(nullptr);
|
now = time(nullptr);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (count >= 60) {
|
||||||
|
Log.error(F("Unable to update - invalid time" CR));
|
||||||
|
# if defined(ZgatewayBT) && defined(ESP32)
|
||||||
|
startProcessing();
|
||||||
|
# endif
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (count >= 60) {
|
|
||||||
Log.error(F("Unable to update - invalid time" CR));
|
|
||||||
# if defined(ZgatewayBT) && defined(ESP32)
|
|
||||||
startProcessing();
|
|
||||||
# endif
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
# endif
|
|
||||||
# ifdef ESP32
|
# ifdef ESP32
|
||||||
if (strstr(url, "github") != 0) {
|
if (strstr(url, "github") != 0) {
|
||||||
update_client.setCACert(_github_cert);
|
update_client.setCACert(_github_cert);
|
||||||
} else {
|
} else {
|
||||||
update_client.setCACert(https_fw_server_cert);
|
update_client.setCACert(https_fw_server_cert);
|
||||||
}
|
}
|
||||||
|
|
||||||
update_client.setTimeout(12);
|
update_client.setTimeout(12);
|
||||||
httpUpdate.setFollowRedirects(HTTPC_STRICT_FOLLOW_REDIRECTS);
|
httpUpdate.setFollowRedirects(HTTPC_STRICT_FOLLOW_REDIRECTS);
|
||||||
result = httpUpdate.update(update_client, url);
|
result = httpUpdate.update(update_client, url);
|
||||||
# elif ESP8266
|
# elif ESP8266
|
||||||
update_client.setInsecure(); // TODO: replace with cert checking
|
if (strstr(url, "github") != 0) {
|
||||||
|
caCert.append(_github_cert);
|
||||||
|
} else {
|
||||||
|
caCert.append(https_fw_server_cert);
|
||||||
|
}
|
||||||
|
|
||||||
|
update_client.setTrustAnchors(&caCert);
|
||||||
update_client.setTimeout(12000);
|
update_client.setTimeout(12000);
|
||||||
ESPhttpUpdate.setFollowRedirects(HTTPC_STRICT_FOLLOW_REDIRECTS);
|
ESPhttpUpdate.setFollowRedirects(HTTPC_STRICT_FOLLOW_REDIRECTS);
|
||||||
result = ESPhttpUpdate.update(update_client, url);
|
result = ESPhttpUpdate.update(update_client, url);
|
||||||
|
|||||||
+7
-9
@@ -71,8 +71,8 @@ extra_configs =
|
|||||||
;default_envs = uno-fastled
|
;default_envs = uno-fastled
|
||||||
;default_envs = atmega-all-test
|
;default_envs = atmega-all-test
|
||||||
;default_envs = manual-wifi-test
|
;default_envs = manual-wifi-test
|
||||||
;default_envs = esp32dev-tls-test
|
;default_envs = esp32dev-mqtt-fw-test
|
||||||
;default_envs = nodemcuv2-tls-test
|
;default_envs = nodemcuv2-mqtt-fw-test
|
||||||
;default_envs = nodemcuv2-rs232
|
;default_envs = nodemcuv2-rs232
|
||||||
;default_envs = sonoff-rfbridge-direct
|
;default_envs = sonoff-rfbridge-direct
|
||||||
|
|
||||||
@@ -105,7 +105,7 @@ bmp180 = BMP180#efac46bd8d
|
|||||||
htu21 = SparkFun HTU21D Humidity and Temperature Sensor Breakout@1.1.3
|
htu21 = SparkFun HTU21D Humidity and Temperature Sensor Breakout@1.1.3
|
||||||
ahtx0 = Adafruit AHTX0
|
ahtx0 = Adafruit AHTX0
|
||||||
ina226 = https://github.com/jarzebski/Arduino-INA226.git#968a684
|
ina226 = https://github.com/jarzebski/Arduino-INA226.git#968a684
|
||||||
a6lib = https://github.com/1technophile/A6lib.git
|
a6lib = https://github.com/h2zero/A6lib
|
||||||
wifimanager = https://github.com/tzapu/WiFiManager.git#c3ff582
|
wifimanager = https://github.com/tzapu/WiFiManager.git#c3ff582
|
||||||
ethernet = Ethernet
|
ethernet = Ethernet
|
||||||
esp8266_mdns = esp8266_mdns
|
esp8266_mdns = esp8266_mdns
|
||||||
@@ -826,29 +826,27 @@ build_flags =
|
|||||||
'-DGateway_Name="OpenMQTTGateway_TEST_MANUAL_WIFI"'
|
'-DGateway_Name="OpenMQTTGateway_TEST_MANUAL_WIFI"'
|
||||||
board_build.flash_mode = dout
|
board_build.flash_mode = dout
|
||||||
|
|
||||||
[env:esp32dev-tls-test]
|
[env:esp32dev-mqtt-fw-test]
|
||||||
platform = ${com.esp32_platform}
|
platform = ${com.esp32_platform}
|
||||||
board = esp32dev
|
board = esp32dev
|
||||||
lib_deps =
|
lib_deps =
|
||||||
${com-esp.lib_deps}
|
${com-esp.lib_deps}
|
||||||
build_flags =
|
build_flags =
|
||||||
${com-esp.build_flags}
|
${com-esp.build_flags}
|
||||||
'-DSECURE_CONNECTION'
|
|
||||||
'-DMQTT_HTTPS_FW_UPDATE'
|
'-DMQTT_HTTPS_FW_UPDATE'
|
||||||
'-DGateway_Name="OpenMQTTGateway_TEST_TLS"'
|
'-DGateway_Name="OpenMQTTGateway_TEST_MQTT_FW"'
|
||||||
board_build.flash_mode = dout
|
board_build.flash_mode = dout
|
||||||
|
|
||||||
|
|
||||||
[env:nodemcuv2-tls-test]
|
[env:nodemcuv2-mqtt-fw-test]
|
||||||
platform = ${com.esp8266_platform}
|
platform = ${com.esp8266_platform}
|
||||||
board = nodemcuv2
|
board = nodemcuv2
|
||||||
lib_deps =
|
lib_deps =
|
||||||
${com-esp.lib_deps}
|
${com-esp.lib_deps}
|
||||||
build_flags =
|
build_flags =
|
||||||
${com-esp.build_flags}
|
${com-esp.build_flags}
|
||||||
'-DSECURE_CONNECTION'
|
|
||||||
'-DMQTT_HTTPS_FW_UPDATE'
|
'-DMQTT_HTTPS_FW_UPDATE'
|
||||||
'-DGateway_Name="OpenMQTTGateway_TEST_TLS"'
|
'-DGateway_Name="OpenMQTTGateway_TEST_MQTT_FW"'
|
||||||
board_build.flash_mode = dout
|
board_build.flash_mode = dout
|
||||||
|
|
||||||
[env:rf-wifi-gateway]
|
[env:rf-wifi-gateway]
|
||||||
|
|||||||
Reference in new issue
Block a user