Commit 95964301 authored by Eric Duminil's avatar Eric Duminil
Browse files

Adding MQTT_TOPIC_PREFIX in config

parent 02389ab5
......@@ -41,8 +41,8 @@
// AMPEL_CONFIG_VERSION should be defined, and have exactly 3 characters.
// If you modify this string, every parameter saved on the Ampel will be replaced by the ones in config.h.
// AMPEL_CONFIG_VERSION should also be updated if the configuration structure is modified.
// The structure of the Ampel configuration has been modified 10 times, so it's called "a10" for now.
# define AMPEL_CONFIG_VERSION "a10"
// The structure of the Ampel configuration has been modified 11 times, so it's called "a11" for now.
# define AMPEL_CONFIG_VERSION "a11"
/**
* SERVICES
......@@ -150,6 +150,7 @@
# define MQTT_ENCRYPTED true // Set to false for unencrypted MQTT (e.g. with port 1883).
# define MQTT_USER ""
# define MQTT_PASSWORD ""
# define MQTT_TOPIC_PREFIX "CO2sensors/" // ESPxxxxxx will be added to the prefix, so complete topic will be "CO2sensors/ESPxxxxxx"
/**
* LoRaWAN
......
......@@ -33,13 +33,13 @@ namespace mqtt {
unsigned long last_failed_at = 0;
bool connected = false;
char publish_topic[21]; // e.g. "CO2sensors/ESPxxxxxx\0"
char publish_topic[42]; // "MQTT_TOPIC_PREFIX/ESPxxxxxx\0", e.g. "CO2sensors/ESPxxxxxx\0"
const char *json_sensor_format;
char last_successful_publish[23] = "";
void initialize(const char *sensorId) {
json_sensor_format = PSTR("{\"time\":\"%s\", \"co2\":%d, \"temp\":%.1f, \"rh\":%.1f}");
snprintf(publish_topic, sizeof(publish_topic), "CO2sensors/%s", sensorId);
snprintf(publish_topic, sizeof(publish_topic), "%s%s", config::mqtt_topic_prefix, sensorId);
if (config::mqtt_encryption) {
// The sensor doesn't check the fingerprint of the MQTT broker, because otherwise this fingerprint should be updated
......@@ -62,11 +62,13 @@ namespace mqtt {
void publish(const char *timestamp, int16_t co2, float temperature, float humidity) {
if (wifi::connected() && mqttClient.connected()) {
led_effects::onBoardLEDOn();
Serial.print(F("MQTT - Publishing message ... "));
Serial.print(F("MQTT - Publishing message to '"));
Serial.print(publish_topic);
Serial.print(F("' ... "));
char payload[75]; // Should be enough for json...
snprintf(payload, sizeof(payload), json_sensor_format, timestamp, co2, temperature, humidity);
// Topic is the same as clientID. e.g. 'CO2sensors/ESP3d03da'
// Topic is 'MQTT_TOPIC_PREFIX/ESP123456'
if (mqttClient.publish(publish_topic, payload)) {
Serial.println(F("OK"));
ntp::getLocalTime(last_successful_publish);
......@@ -130,7 +132,7 @@ namespace mqtt {
if (connected) {
if (config::allow_mqtt_commands) {
char control_topic[60]; // Should be enough for "CO2sensors/ESPd03cc5/control"
char control_topic[50]; // Should be enough for "MQTT_TOPIC_PREFIX/ESPd03cc5/control\0"
snprintf(control_topic, sizeof(control_topic), "%s/control", publish_topic);
mqttClient.subscribe(control_topic);
mqttClient.setCallback(controlSensorCallback);
......@@ -184,7 +186,7 @@ namespace mqtt {
// If the sensor can be reach by MQTT, it can answer with info about local_ip and ssid.
// The sensor will send the info to "CO2sensors/ESP123456/info".
void sendInfoAboutLocalNetwork() {
char info_topic[60]; // Should be enough for "CO2sensors/ESP123456/info"
char info_topic[50]; // Should be enough for "MQTT_TOPIC_PREFIX/ESP123456/info"
snprintf(info_topic, sizeof(info_topic), "%s/info", publish_topic);
char payload[75]; // Should be enough for info json...
......
......@@ -6,7 +6,7 @@
#define STRINGIFY(x) STRING(x) // Allows to call STRINGIFY(SOME_MACRO) and convert the value of SOME_MACRO to string
#include "config.h"
#ifndef AMPEL_PASSWORD
#ifndef MQTT_TOPIC_PREFIX
# error Missing config.h file. Please copy config.public.h to config.h.
# warning config.h has a new structure (e.g. AMPEL_WIFI should be set to true or false)
#endif
......@@ -118,6 +118,8 @@ namespace web_config {
PasswordTParameter<STRING_LEN> mqttPasswordParam = Builder<PasswordTParameter<STRING_LEN>>("mqtt_password").label(
"MQTT password").defaultValue(MQTT_PASSWORD).build();
TextTParameter<STRING_LEN> mqttTopicPrefixParam =
Builder<TextTParameter<STRING_LEN>>("mqtt_topic").label("MQTT Topic prefix").defaultValue(MQTT_TOPIC_PREFIX).build();
/**
* NTP Time
*/
......@@ -204,6 +206,7 @@ namespace web_config {
mqttParams.addItem(&mqttPortParam);
mqttParams.addItem(&mqttUserParam);
mqttParams.addItem(&mqttPasswordParam);
mqttParams.addItem(&mqttTopicPrefixParam);
mqttParams.addItem(&mqttEncryptionParam);
mqttParams.addItem(&mqttCommandsParam);
......@@ -352,6 +355,7 @@ namespace config {
char *mqtt_server = web_config::mqttServerParam.value();
char *mqtt_user = web_config::mqttUserParam.value();
char *mqtt_password = web_config::mqttPasswordParam.value();
char *mqtt_topic_prefix = web_config::mqttTopicPrefixParam.value();
uint16_t &mqtt_port = web_config::mqttPortParam.value();
uint16_t &mqtt_sending_interval = web_config::mqttIntervalParam.value();
bool &mqtt_encryption = web_config::mqttEncryptionParam.value();
......
......@@ -43,6 +43,7 @@ namespace config {
extern char *mqtt_server;
extern char *mqtt_user;
extern char *mqtt_password;
extern char *mqtt_topic_prefix;
extern uint16_t &mqtt_port;
extern uint16_t &mqtt_sending_interval; // [s]
extern bool &mqtt_encryption; // [true / false]
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment