Skip to content

Commit 4e7df1f

Browse files
Nicolas Emilianinemiliani
Nicolas Emiliani
authored andcommitted
(homieiot#648) enable psk tls if ESP32
-> If using ESP32 and ssl is enabled then the json config parameters need to be setup : * mqtt.psk : the pre shared key, up to 32 chars * mqtt.psk_identity : the pre shared key identity, up to 32 chars -> Don't publish stats nor invoke the user defined loop function if OTA is ongoing. This helps aliviate the TCP window going out of space. -> Send out only 30% of the 206 messages while doing OTA updates
1 parent b9f6bc1 commit 4e7df1f

File tree

4 files changed

+49
-1
lines changed

4 files changed

+49
-1
lines changed

src/Homie/Boot/BootNormal.cpp

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,12 +77,18 @@ void BootNormal::setup() {
7777
#if ASYNC_TCP_SSL_ENABLED
7878
Interface::get().getLogger() << "SSL is: " << Interface::get().getConfig().get().mqtt.server.ssl.enabled << endl;
7979
Interface::get().getMqttClient().setSecure(Interface::get().getConfig().get().mqtt.server.ssl.enabled);
80-
if (Interface::get().getConfig().get().mqtt.server.ssl.enabled && Interface::get().getConfig().get().mqtt.server.ssl.hasFingerprint) {
80+
if (Interface::get().getConfig().get().mqtt.server.ssl.enabled){ // && Interface::get().getConfig().get().mqtt.server.ssl.hasFingerprint) {
81+
#if defined(ESP8266)
8182
char hexBuf[MAX_FINGERPRINT_STRING_LENGTH];
8283
Helpers::byteArrayToHexString(Interface::get().getConfig().get().mqtt.server.ssl.fingerprint, hexBuf, MAX_FINGERPRINT_SIZE);
8384
Interface::get().getLogger() << "Using fingerprint: " << hexBuf << endl;
8485
Interface::get().getMqttClient().addServerFingerprint((const uint8_t*)Interface::get().getConfig().get().mqtt.server.ssl.fingerprint);
86+
#elif defined(ESP32)
87+
Interface::get().getMqttClient().setPsk(
88+
Interface::get().getConfig().get().mqtt.server.ssl.psk_ident,
89+
Interface::get().getConfig().get().mqtt.server.ssl.psk);
8590
}
91+
#endif
8692
#endif
8793

8894
Interface::get().getMqttClient().setMaxTopicLength(MAX_MQTT_TOPIC_LENGTH);
@@ -164,6 +170,7 @@ void BootNormal::loop() {
164170
return;
165171
}
166172

173+
if(_otaOngoing) return;
167174
// here, we have notified the sketch we are ready
168175

169176
if (_mqttOfflineMessageId == 0 && Interface::get().flaggedForSleep) {
@@ -211,6 +218,10 @@ char* BootNormal::_prefixMqttTopic(PGM_P topic) {
211218
}
212219

213220
bool BootNormal::_publishOtaStatus(int status, const char* info) {
221+
long randNumber = random(10);
222+
if(randNumber < 8)
223+
return false;
224+
214225
String payload(status);
215226
if (info) {
216227
payload.concat(F(" "));
@@ -779,6 +790,13 @@ void BootNormal::_onMqttDisconnected(AsyncMqttClientDisconnectReason reason) {
779790
}
780791

781792
void BootNormal::_onMqttMessage(char* topic, char* payload, AsyncMqttClientMessageProperties properties, size_t len, size_t index, size_t total) {
793+
/*
794+
Interface::get().getLogger() << F("BootNormal::_onMqttMessage") << endl;
795+
Interface::get().getLogger() << "topic > " << topic << endl;
796+
Interface::get().getLogger() << "len > " << len << endl;
797+
Interface::get().getLogger() << "index > " << index << endl;
798+
Interface::get().getLogger() << "total > " << total << endl;
799+
*/
782800
if (total == 0) return; // no empty message possible
783801

784802
if (index == 0) {
@@ -875,6 +893,13 @@ bool HomieInternals::BootNormal::__fillPayloadBuffer(char * topic, char * payloa
875893
}
876894

877895
bool HomieInternals::BootNormal::__handleOTAUpdates(char* topic, char* payload, const AsyncMqttClientMessageProperties& properties, size_t len, size_t index, size_t total) {
896+
/*
897+
Interface::get().getLogger() << F("HomieInternals::BootNormal::__handleOTAUpdates...") << endl;
898+
Interface::get().getLogger() << "0 > " << _mqttTopicLevels.get()[0] << endl;
899+
Interface::get().getLogger() << "1 > " << _mqttTopicLevels.get()[1] << endl;
900+
Interface::get().getLogger() << "2 > " << _mqttTopicLevels.get()[2] << endl;
901+
Interface::get().getLogger() << "3 > " << _mqttTopicLevels.get()[3] << endl;
902+
*/
878903
if (
879904
_mqttTopicLevelsCount == 5
880905
&& strcmp(_mqttTopicLevels.get()[0], Interface::get().getConfig().get().deviceId) == 0
@@ -1047,6 +1072,7 @@ bool HomieInternals::BootNormal::__handleOTAUpdates(char* topic, char* payload,
10471072
}
10481073
return true;
10491074
}
1075+
Interface::get().getLogger() << F("HomieInternals::BootNormal::__handleOTAUpdates FALSE") << endl;
10501076
return false;
10511077
}
10521078

src/Homie/Config.cpp

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,8 @@ bool Config::load() {
9090
const char* reqMqttUsername = reqMqtt["username"] | "";
9191
const char* reqMqttPassword = reqMqtt["password"] | "";
9292
const char* reqMqttFingerprint = reqMqtt["ssl_fingerprint"] | "";
93+
const char* reqMqttPsk = reqMqtt["psk"] | "";
94+
const char* reqMqttPskIdent = reqMqtt["psk_identity"] | "";
9395
const char* reqMqttBaseTopic = reqMqtt["base_topic"] | DEFAULT_MQTT_BASE_TOPIC;
9496

9597
strlcpy(_configStruct.name, reqName, MAX_FRIENDLY_NAME_LENGTH);
@@ -107,10 +109,15 @@ bool Config::load() {
107109
strlcpy(_configStruct.mqtt.server.host, reqMqttHost, MAX_HOSTNAME_LENGTH);
108110
#if ASYNC_TCP_SSL_ENABLED
109111
_configStruct.mqtt.server.ssl.enabled = reqMqttSsl;
112+
#if ESP8266
110113
if (strcmp_P(reqMqttFingerprint, PSTR("")) != 0) {
111114
_configStruct.mqtt.server.ssl.hasFingerprint = true;
112115
Helpers::hexStringToByteArray(reqMqttFingerprint, _configStruct.mqtt.server.ssl.fingerprint, MAX_FINGERPRINT_SIZE);
113116
}
117+
#elif defined(ESP32)
118+
strlcpy(_configStruct.mqtt.server.ssl.psk, reqMqttPsk, MAX_PSK_STRING_LENGTH);
119+
strlcpy(_configStruct.mqtt.server.ssl.psk_ident, reqMqttPskIdent, MAX_PSK_STRING_LENGTH);
120+
#endif
114121
#endif
115122
_configStruct.mqtt.server.port = reqMqttPort;
116123
strlcpy(_configStruct.mqtt.baseTopic, reqMqttBaseTopic, MAX_MQTT_BASE_TOPIC_LENGTH);
@@ -305,11 +312,18 @@ void Config::log() const {
305312
Interface::get().getLogger() << F(" ◦ Port: ") << _configStruct.mqtt.server.port << endl;
306313
#if ASYNC_TCP_SSL_ENABLED
307314
Interface::get().getLogger() << F(" ◦ SSL enabled: ") << (_configStruct.mqtt.server.ssl.enabled ? "true" : "false") << endl;
315+
#if ESP8266
308316
if (_configStruct.mqtt.server.ssl.enabled && _configStruct.mqtt.server.ssl.hasFingerprint) {
309317
char hexBuf[MAX_FINGERPRINT_STRING_LENGTH];
310318
Helpers::byteArrayToHexString(Interface::get().getConfig().get().mqtt.server.ssl.fingerprint, hexBuf, MAX_FINGERPRINT_SIZE);
311319
Interface::get().getLogger() << F(" ◦ Fingerprint: ") << hexBuf << endl;
312320
}
321+
#elif defined(ESP32)
322+
if (_configStruct.mqtt.server.ssl.enabled) {
323+
Interface::get().getLogger() << F(" ◦ PSK identity not shown") << endl;
324+
Interface::get().getLogger() << F(" ◦ PSK not shown") << endl;
325+
}
326+
#endif
313327
#endif
314328
Interface::get().getLogger() << F(" ◦ Base topic: ") << _configStruct.mqtt.baseTopic << endl;
315329
Interface::get().getLogger() << F(" ◦ Auth? ") << (_configStruct.mqtt.auth ? F("yes") : F("no")) << endl;

src/Homie/Datatypes/ConfigStruct.hpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,14 @@ struct ConfigStruct {
2828
#if ASYNC_TCP_SSL_ENABLED
2929
struct {
3030
bool enabled;
31+
#if ESP8266
3132
bool hasFingerprint;
3233
uint8_t fingerprint[MAX_FINGERPRINT_SIZE];
34+
#elif ESP32
35+
char psk_ident[MAX_PSK_STRING_LENGTH];
36+
char psk[MAX_PSK_STRING_LENGTH];
3337
} ssl;
38+
#endif
3439
#endif
3540
} server;
3641
char baseTopic[MAX_MQTT_BASE_TOPIC_LENGTH];
@@ -44,3 +49,4 @@ struct ConfigStruct {
4449
} ota;
4550
};
4651
} // namespace HomieInternals
52+

src/Homie/Limits.hpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,4 +36,6 @@ namespace HomieInternals {
3636

3737
const uint8_t MAX_IP_STRING_LENGTH = 16 + 1;
3838

39+
const uint8_t MAX_PSK_STRING_LENGTH = 64 + 1;
40+
3941
} // namespace HomieInternals

0 commit comments

Comments
 (0)