@@ -29,6 +29,7 @@ String emoncms_fingerprint = "";
2929
3030// MQTT Settings
3131String mqtt_server = " " ;
32+ uint32_t mqtt_port = 1883 ;
3233String mqtt_topic = " " ;
3334String mqtt_user = " " ;
3435String mqtt_pass = " " ;
@@ -47,7 +48,8 @@ uint32_t flags;
4748#define EEPROM_EMON_API_KEY_SIZE 33
4849#define EEPROM_EMON_SERVER_SIZE 45
4950#define EEPROM_EMON_NODE_SIZE 32
50- #define EEPROM_MQTT_SERVER_SIZE 45
51+ #define EEPROM_MQTT_SERVER_V1_SIZE 45
52+ #define EEPROM_MQTT_SERVER_SIZE 96
5153#define EEPROM_MQTT_TOPIC_SIZE 32
5254#define EEPROM_MQTT_USER_SIZE 32
5355#define EEPROM_MQTT_PASS_SIZE 64
@@ -59,6 +61,7 @@ uint32_t flags;
5961#define EEPROM_OHM_KEY_SIZE 10
6062#define EEPROM_FLAGS_SIZE 4
6163#define EEPROM_HOSTNAME_SIZE 32
64+ #define EEPROM_MQTT_PORT_SIZE 4
6265#define EEPROM_SNTP_HOST_SIZE 45
6366#define EEPROM_TIME_ZONE_SIZE 80
6467#define EEPROM_SIZE 1024
@@ -71,9 +74,9 @@ uint32_t flags;
7174#define EEPROM_EMON_SERVER_END (EEPROM_EMON_SERVER_START + EEPROM_EMON_SERVER_SIZE)
7275#define EEPROM_EMON_NODE_START EEPROM_EMON_SERVER_END
7376#define EEPROM_EMON_NODE_END (EEPROM_EMON_NODE_START + EEPROM_EMON_NODE_SIZE)
74- #define EEPROM_MQTT_SERVER_START EEPROM_EMON_NODE_END
75- #define EEPROM_MQTT_SERVER_END (EEPROM_MQTT_SERVER_START + EEPROM_MQTT_SERVER_SIZE )
76- #define EEPROM_MQTT_TOPIC_START EEPROM_MQTT_SERVER_END
77+ #define EEPROM_MQTT_SERVER_V1_START EEPROM_EMON_NODE_END
78+ #define EEPROM_MQTT_SERVER_V1_END (EEPROM_MQTT_SERVER_V1_START + EEPROM_MQTT_SERVER_V1_SIZE )
79+ #define EEPROM_MQTT_TOPIC_START EEPROM_MQTT_SERVER_V1_END
7780#define EEPROM_MQTT_TOPIC_END (EEPROM_MQTT_TOPIC_START + EEPROM_MQTT_TOPIC_SIZE)
7881#define EEPROM_MQTT_USER_START EEPROM_MQTT_TOPIC_END
7982#define EEPROM_MQTT_USER_END (EEPROM_MQTT_USER_START + EEPROM_MQTT_USER_SIZE)
@@ -101,7 +104,11 @@ uint32_t flags;
101104#define EEPROM_SNTP_HOST_END (EEPROM_SNTP_HOST_START + EEPROM_SNTP_HOST_SIZE)
102105#define EEPROM_TIME_ZONE_START EEPROM_SNTP_HOST_END
103106#define EEPROM_TIME_ZONE_END (EEPROM_TIME_ZONE_START + EEPROM_TIME_ZONE_SIZE)
104- #define EEPROM_CONFIG_END EEPROM_TIME_ZONE_END
107+ #define EEPROM_MQTT_SERVER_START EEPROM_TIME_ZONE_END
108+ #define EEPROM_MQTT_SERVER_END (EEPROM_MQTT_SERVER_START + EEPROM_MQTT_SERVER_SIZE)
109+ #define EEPROM_MQTT_PORT_START EEPROM_MQTT_SERVER_END
110+ #define EEPROM_MQTT_PORT_END (EEPROM_MQTT_PORT_START + EEPROM_MQTT_PORT_SIZE)
111+ #define EEPROM_CONFIG_END EEPROM_MQTT_PORT_END
105112
106113#if EEPROM_CONFIG_END > EEPROM_SIZE
107114#error EEPROM_SIZE too small
@@ -124,7 +131,7 @@ ResetEEPROM() {
124131 EEPROM.end ();
125132}
126133
127- void
134+ bool
128135EEPROM_read_string (int start, int count, String & val, String defaultVal = " " ) {
129136 byte checksum = CHECKSUM_SEED;
130137 for (int i = 0 ; i < count - 1 ; ++i) {
@@ -143,7 +150,10 @@ EEPROM_read_string(int start, int count, String & val, String defaultVal = "") {
143150 if (c != checksum) {
144151 DBUGF (" Using default '%s'" , defaultVal.c_str ());
145152 val = defaultVal;
153+ return false ;
146154 }
155+
156+ return true ;
147157}
148158
149159void
@@ -223,8 +233,11 @@ config_load_settings() {
223233 emoncms_fingerprint," " );
224234
225235 // MQTT settings
226- EEPROM_read_string (EEPROM_MQTT_SERVER_START, EEPROM_MQTT_SERVER_SIZE,
227- mqtt_server, " emonpi" );
236+ if (false == EEPROM_read_string (EEPROM_MQTT_SERVER_START, EEPROM_MQTT_SERVER_SIZE,
237+ mqtt_server, " emonpi" )) {
238+ EEPROM_read_string (EEPROM_MQTT_SERVER_V1_START, EEPROM_MQTT_SERVER_V1_SIZE,
239+ mqtt_server, " emonpi" );
240+ }
228241 EEPROM_read_string (EEPROM_MQTT_TOPIC_START, EEPROM_MQTT_TOPIC_SIZE,
229242 mqtt_topic, esp_hostname);
230243 EEPROM_read_string (EEPROM_MQTT_USER_START, EEPROM_MQTT_USER_SIZE,
@@ -235,6 +248,7 @@ config_load_settings() {
235248 mqtt_solar);
236249 EEPROM_read_string (EEPROM_MQTT_GRID_IE_START, EEPROM_MQTT_GRID_IE_SIZE,
237250 mqtt_grid_ie, " emon/emonpi/power1" );
251+ EEPROM_read_uint24 (EEPROM_MQTT_PORT_START, mqtt_port, 1883 );
238252
239253 // Web server credentials
240254 EEPROM_read_string (EEPROM_WWW_USER_START, EEPROM_WWW_USER_SIZE,
@@ -296,16 +310,21 @@ config_save_emoncms(bool enable, String server, String node, String apikey,
296310}
297311
298312void
299- config_save_mqtt (bool enable, String server, String topic, String user, String pass, String solar, String grid_ie)
313+ config_save_mqtt (bool enable, int protocol, String server, uint16_t port, String topic, String user, String pass, String solar, String grid_ie, bool reject_unauthorized )
300314{
301315 EEPROM.begin (EEPROM_SIZE);
302316
303- flags = flags & ~CONFIG_SERVICE_MQTT;
317+ flags = flags & ~( CONFIG_SERVICE_MQTT | CONFIG_MQTT_PROTOCOL | CONFIG_MQTT_ALLOW_ANY_CERT) ;
304318 if (enable) {
305319 flags |= CONFIG_SERVICE_MQTT;
306320 }
321+ if (!reject_unauthorized) {
322+ flags |= CONFIG_MQTT_ALLOW_ANY_CERT;
323+ }
324+ flags |= protocol << 4 ;
307325
308326 mqtt_server = server;
327+ mqtt_port = port;
309328 mqtt_topic = topic;
310329 mqtt_user = user;
311330 mqtt_pass = pass;
@@ -324,6 +343,7 @@ config_save_mqtt(bool enable, String server, String topic, String user, String p
324343 EEPROM_write_string (EEPROM_MQTT_GRID_IE_START, EEPROM_MQTT_GRID_IE_SIZE, mqtt_grid_ie);
325344
326345 EEPROM_write_uint24 (EEPROM_FLAGS_START, flags);
346+ EEPROM_write_uint24 (EEPROM_MQTT_PORT_START, port);
327347
328348 EEPROM.end ();
329349}
0 commit comments