Implemented MQTT over TLS for WiFiDevice

This commit is contained in:
rodriguezst
2022-06-10 09:31:20 +00:00
committed by GitHub
parent bee2b1f191
commit 7481b1f4f0
4 changed files with 34 additions and 10 deletions

View File

@@ -83,6 +83,7 @@ target_link_arduino_libraries(${PROJECT_NAME}
PRIVATE PRIVATE
core core
WiFi WiFi
WiFiClientSecure
Update Update
# WebServer # WebServer
DNSServer DNSServer

View File

@@ -42,11 +42,11 @@ void Network::setupDevice(const NetworkDeviceType hardware)
break; break;
case NetworkDeviceType::WiFi: case NetworkDeviceType::WiFi:
Serial.println(F("Network device: Builtin WiFi")); Serial.println(F("Network device: Builtin WiFi"));
_device = new WifiDevice(_hostname); _device = new WifiDevice(_hostname, _preferences);
break; break;
default: default:
Serial.println(F("Unknown network device type, defaulting to WiFi")); Serial.println(F("Unknown network device type, defaulting to WiFi"));
_device = new WifiDevice(_hostname); _device = new WifiDevice(_hostname, _preferences);
break; break;
} }
} }

View File

@@ -1,15 +1,35 @@
#include <WiFi.h> #include <WiFi.h>
#include "WifiDevice.h" #include "WifiDevice.h"
#include "WiFiManager.h" #include "WiFiManager.h"
#include "../PreferencesKeys.h"
WifiDevice::WifiDevice(const String& hostname) WifiDevice::WifiDevice(const String& hostname, Preferences* _preferences)
: NetworkDevice(hostname), : NetworkDevice(hostname)
_mqttClient(_wifiClient) {
{} String MQTT_CA = _preferences->getString(preference_mqtt_ca);
String MQTT_CRT = _preferences->getString(preference_mqtt_crt);
String MQTT_KEY = _preferences->getString(preference_mqtt_key);
if(MQTT_CA.length() > 0)
{
_wifiClientSecure = new WiFiClientSecure();
_wifiClientSecure->setCACert(MQTT_CA.c_str());
if(MQTT_CRT.length() > 0 && MQTT_KEY.length() > 0)
{
_wifiClientSecure->setCertificate(MQTT_CRT.c_str());
_wifiClientSecure->setPrivateKey(MQTT_KEY.c_str());
}
_mqttClient = new PubSubClient(*_wifiClientSecure);
} else
{
_wifiClient = new WiFiClient();
_mqttClient = new PubSubClient(*_wifiClient);
}
}
PubSubClient *WifiDevice::mqttClient() PubSubClient *WifiDevice::mqttClient()
{ {
return &_mqttClient; return _mqttClient;
} }
void WifiDevice::initialize() void WifiDevice::initialize()

View File

@@ -1,13 +1,15 @@
#pragma once #pragma once
#include <WiFiClient.h> #include <WiFiClient.h>
#include <WiFiClientSecure.h>
#include <Preferences.h>
#include "NetworkDevice.h" #include "NetworkDevice.h"
#include "../SpiffsCookie.h" #include "../SpiffsCookie.h"
class WifiDevice : public NetworkDevice class WifiDevice : public NetworkDevice
{ {
public: public:
WifiDevice(const String& hostname); WifiDevice(const String& hostname, Preferences* _preferences);
virtual void initialize(); virtual void initialize();
virtual void reconfigure(); virtual void reconfigure();
@@ -20,7 +22,8 @@ public:
virtual PubSubClient *mqttClient(); virtual PubSubClient *mqttClient();
private: private:
WiFiClient _wifiClient; WiFiClient* _wifiClient = nullptr;
PubSubClient _mqttClient; WiFiClientSecure* _wifiClientSecure = nullptr;
PubSubClient* _mqttClient = nullptr;
SpiffsCookie _cookie; SpiffsCookie _cookie;
}; };