diff --git a/code/espurna/config/general.h b/code/espurna/config/general.h index f420e089..0c2003fe 100644 --- a/code/espurna/config/general.h +++ b/code/espurna/config/general.h @@ -1,19 +1,22 @@ +//------------------------------------------------------------------------------ +// Do not change this file unless you know what you are doing +// Configuration settings are in the settings.h file +//------------------------------------------------------------------------------ + //------------------------------------------------------------------------------ // GENERAL //------------------------------------------------------------------------------ -#define SERIAL_BAUDRATE 115200 -#define HOSTNAME DEVICE -#define BUFFER_SIZE 1024 -#define HEARTBEAT_INTERVAL 300000 -#define UPTIME_OVERFLOW 4294967295 +#define SERIAL_BAUDRATE 115200 // Debugging console boud rate +#define HOSTNAME DEVICE // Hostname +#define UPTIME_OVERFLOW 4294967295 // Uptime overflow value //-------------------------------------------------------------------------------- // DEBUG //-------------------------------------------------------------------------------- #ifndef DEBUG_PORT -#define DEBUG_PORT Serial +#define DEBUG_PORT Serial // Default debugging port #endif // Uncomment and configure these lines to enable remote debug via udpDebug @@ -27,24 +30,45 @@ // EEPROM //-------------------------------------------------------------------------------- -#define EEPROM_RELAY_STATUS 0 -#define EEPROM_ENERGY_COUNT 1 -#define EEPROM_CUSTOM_RESET 5 -#define EEPROM_DATA_END 6 +#define EEPROM_RELAY_STATUS 0 // Address for the relay status (1 byte) +#define EEPROM_ENERGY_COUNT 1 // Address for the energy counter (4 bytes) +#define EEPROM_CUSTOM_RESET 5 // Address for the reset reason (1 byte) +#define EEPROM_DATA_END 6 // End of custom EEPROM data block + +//-------------------------------------------------------------------------------- +// HEARTBEAT +//-------------------------------------------------------------------------------- + +#define HEARTBEAT_INTERVAL 300000 // Interval between heartbeat messages (in ms) + +// Topics that will be reported in heartbeat +#define HEARTBEAT_REPORT_STATUS 1 +#define HEARTBEAT_REPORT_IP 1 +#define HEARTBEAT_REPORT_MAC 1 +#define HEARTBEAT_REPORT_RSSI 1 +#define HEARTBEAT_REPORT_UPTIME 1 +#define HEARTBEAT_REPORT_FREEHEAP 1 +#define HEARTBEAT_REPORT_VCC 1 +#define HEARTBEAT_REPORT_RELAY 1 +#define HEARTBEAT_REPORT_COLOR 1 +#define HEARTBEAT_REPORT_HOSTNAME 1 +#define HEARTBEAT_REPORT_APP 1 +#define HEARTBEAT_REPORT_VERSION 1 +#define HEARTBEAT_REPORT_INTERVAL 0 //-------------------------------------------------------------------------------- // RESET //-------------------------------------------------------------------------------- -#define CUSTOM_RESET_HARDWARE 1 -#define CUSTOM_RESET_WEB 2 -#define CUSTOM_RESET_TERMINAL 3 -#define CUSTOM_RESET_MQTT 4 -#define CUSTOM_RESET_RPC 5 -#define CUSTOM_RESET_OTA 6 -#define CUSTOM_RESET_NOFUSS 8 -#define CUSTOM_RESET_UPGRADE 9 -#define CUSTOM_RESET_FACTORY 10 +#define CUSTOM_RESET_HARDWARE 1 // Reset from hardware button +#define CUSTOM_RESET_WEB 2 // Reset from web interface +#define CUSTOM_RESET_TERMINAL 3 // Reset from terminal +#define CUSTOM_RESET_MQTT 4 // Reset via MQTT +#define CUSTOM_RESET_RPC 5 // Reset via RPC (HTTP) +#define CUSTOM_RESET_OTA 6 // Reset after successful OTA update +#define CUSTOM_RESET_NOFUSS 8 // Reset after successful NOFUSS update +#define CUSTOM_RESET_UPGRADE 9 // Reset after update from web interface +#define CUSTOM_RESET_FACTORY 10 // Factory reset from terminal #define CUSTOM_RESET_MAX 10 @@ -69,10 +93,10 @@ PROGMEM const char* const custom_reset_string[] = { // BUTTON //-------------------------------------------------------------------------------- -#define BUTTON_DEBOUNCE_DELAY 50 -#define BUTTON_DBLCLICK_DELAY 500 -#define BUTTON_LNGCLICK_DELAY 1000 -#define BUTTON_LNGLNGCLICK_DELAY 10000 +#define BUTTON_DEBOUNCE_DELAY 50 // Debounce delay (ms) +#define BUTTON_DBLCLICK_DELAY 500 // Time in ms to wait for a second (or third...) click +#define BUTTON_LNGCLICK_DELAY 1000 // Time in ms holding the button down to get a long click +#define BUTTON_LNGLNGCLICK_DELAY 10000 // Time in ms holding the button down to get a long-long click #define BUTTON_EVENT_NONE 0 #define BUTTON_EVENT_PRESSED 1 @@ -88,8 +112,6 @@ PROGMEM const char* const custom_reset_string[] = { #define BUTTON_MODE_PULSE 4 #define BUTTON_MODE_FACTORY 5 -#define BUTTON_DEFAULT_MODE BUTTON_MODE_TOGGLE - //-------------------------------------------------------------------------------- // RELAY //-------------------------------------------------------------------------------- @@ -137,7 +159,7 @@ PROGMEM const char* const custom_reset_string[] = { #define TMP_CELSIUS 0 #define TMP_FAHRENHEIT 1 -#define TMP_UNITS TMP_CELSIUS +#define TMP_UNITS TMP_CELSIUS // Temperature units (TMP_CELSIUS | TMP_FAHRENHEIT) //-------------------------------------------------------------------------------- // LED @@ -152,17 +174,17 @@ PROGMEM const char* const custom_reset_string[] = { // WIFI & WEB // ----------------------------------------------------------------------------- -#define WIFI_RECONNECT_INTERVAL 120000 -#define WIFI_CONNECT_TIMEOUT 30000 -#define WIFI_MAX_NETWORKS 5 -#define ADMIN_PASS "fibonacci" -#define FORCE_CHANGE_PASS 1 -#define HTTP_USERNAME "admin" -#define WS_BUFFER_SIZE 5 -#define WS_TIMEOUT 1800000 -#define WEBSERVER_PORT 80 -#define DNS_PORT 53 -#define ENABLE_MDNS 1 +#define WIFI_CONNECT_TIMEOUT 30000 // Connecting timeout for WIFI in ms +#define WIFI_RECONNECT_INTERVAL 120000 // If could not connect to WIFI, retry after this time in ms +#define WIFI_MAX_NETWORKS 5 // Max number of WIFI connection configurations +#define HTTP_USERNAME "admin" // HTTP username +#define ADMIN_PASS "fibonacci" // Default password +#define FORCE_CHANGE_PASS 1 // Force the user to change the password if default one +#define WS_BUFFER_SIZE 5 // Max number of secured websocket connections +#define WS_TIMEOUT 1800000 // Timeout for secured websocket +#define WEBSERVER_PORT 80 // HTTP port +#define DNS_PORT 53 // MDNS port +#define ENABLE_MDNS 1 // Enabled MDNS #define WEB_MODE_NORMAL 0 #define WEB_MODE_PASSWORD 1 @@ -170,9 +192,6 @@ PROGMEM const char* const custom_reset_string[] = { #define AP_MODE AP_MODE_ALONE // This option builds the firmware with the web interface embedded. -// You first have to build the data.h file that holds the contents -// of the web interface by running "gulp buildfs_embed" - #ifndef EMBEDDED_WEB #define EMBEDDED_WEB 1 #endif @@ -181,32 +200,34 @@ PROGMEM const char* const custom_reset_string[] = { // OTA & NOFUSS // ----------------------------------------------------------------------------- -#define OTA_PORT 8266 -#define NOFUSS_SERVER "" -#define NOFUSS_INTERVAL 3600000 +#define OTA_PORT 8266 // OTA port +#define NOFUSS_SERVER "" // Default NoFuss Server +#define NOFUSS_INTERVAL 3600000 // Check for updates every hour // ----------------------------------------------------------------------------- // MQTT // ----------------------------------------------------------------------------- #ifndef MQTT_USE_ASYNC -#define MQTT_USE_ASYNC 1 +#define MQTT_USE_ASYNC 1 // Use AysncMQTTClient (1) or PubSubClient (0) #endif -#define MQTT_SERVER "" -#define MQTT_PORT 1883 -#define MQTT_TOPIC "/test/switch/{identifier}" -#define MQTT_RETAIN true -#define MQTT_QOS 0 -#define MQTT_KEEPALIVE 30 -#define MQTT_RECONNECT_DELAY 10000 -#define MQTT_TRY_INTERVAL 30000 -#define MQTT_MAX_TRIES 12 -#define MQTT_SKIP_RETAINED 1 -#define MQTT_SKIP_TIME 1000 - -#define MQTT_USE_JSON 0 - +#define MQTT_SERVER "" // Default MQTT broker address +#define MQTT_PORT 1883 // MQTT broker port +#define MQTT_TOPIC "/test/switch/{identifier}" // Default MQTT base topic +#define MQTT_RETAIN true // MQTT retain flag +#define MQTT_QOS 0 // MQTT QoS value for all messages +#define MQTT_KEEPALIVE 30 // MQTT keepalive value +#define MQTT_RECONNECT_DELAY 10000 // Try to reconnect after 10s +#define MQTT_TRY_INTERVAL 30000 // Timeframe for disconnect retries +#define MQTT_MAX_TRIES 12 // After these many retries during the previous MQTT_TRY_INTERVAL the board will reset +#define MQTT_SKIP_RETAINED 1 // Skip retained messages on connection +#define MQTT_SKIP_TIME 1000 // Skip messages for 1 second anter connection + +#define MQTT_USE_JSON 0 // Group messages in a JSON body +#define MQTT_USE_JSON_DELAY 100 // Wait this many ms before grouping messages + +// These particles will be concatenated to the MQTT_TOPIC base to form the actual topic #define MQTT_TOPIC_JSON "data" #define MQTT_TOPIC_ACTION "action" #define MQTT_TOPIC_RELAY "relay" @@ -230,44 +251,30 @@ PROGMEM const char* const custom_reset_string[] = { #define MQTT_TOPIC_RFIN "rfin" #define MQTT_TOPIC_RFLEARN "rflearn" -// Periodic reports -#define MQTT_REPORT_STATUS 1 -#define MQTT_REPORT_IP 1 -#define MQTT_REPORT_MAC 1 -#define MQTT_REPORT_RSSI 1 -#define MQTT_REPORT_UPTIME 1 -#define MQTT_REPORT_FREEHEAP 1 -#define MQTT_REPORT_VCC 1 -#define MQTT_REPORT_RELAY 1 -#define MQTT_REPORT_COLOR 1 -#define MQTT_REPORT_HOSTNAME 1 -#define MQTT_REPORT_APP 1 -#define MQTT_REPORT_VERSION 1 -#define MQTT_REPORT_INTERVAL 0 - -#define MQTT_STATUS_ONLINE "1" -#define MQTT_STATUS_OFFLINE "0" - -#define MQTT_ACTION_RESET "reset" +#define MQTT_STATUS_ONLINE "1" // Value for the device ON message +#define MQTT_STATUS_OFFLINE "0" // Value for the device OFF message (will) + +#define MQTT_ACTION_RESET "reset" // RESET MQTT topic particle +// Internal MQTT events (do not change) #define MQTT_CONNECT_EVENT 0 #define MQTT_DISCONNECT_EVENT 1 #define MQTT_MESSAGE_EVENT 2 -// Custom get and set postfixes6+ +// Custom get and set postfixes // Use something like "/status" or "/set", with leading slash #define MQTT_USE_GETTER "" -#define MQTT_USE_SETTER "" +#define MQTT_USE_SETTER "/set" // ----------------------------------------------------------------------------- // I2C // ----------------------------------------------------------------------------- -#define ENABLE_I2C 0 -#define I2C_SDA_PIN 4 -#define I2C_SCL_PIN 14 -#define I2C_CLOCK_STRETCH_TIME 200 -#define I2C_SCL_FREQUENCY 1000 +#define ENABLE_I2C 0 // I2C enabled +#define I2C_SDA_PIN 4 // SDA GPIO +#define I2C_SCL_PIN 14 // SCL GPIO +#define I2C_CLOCK_STRETCH_TIME 200 // BRZO clock stretch time +#define I2C_SCL_FREQUENCY 1000 // BRZO SCL frequency // ----------------------------------------------------------------------------- // LIGHT @@ -286,6 +293,7 @@ PROGMEM const char* const custom_reset_string[] = { #define LIGHT_SAVE_DELAY 5 #define LIGHT_MAX_VALUE 255 +// Settings for MY9291 bulbs (AI Light) #define MY9291_DI_PIN 13 #define MY9291_DCKI_PIN 15 #define MY9291_COMMAND MY9291_COMMAND_DEFAULT @@ -302,28 +310,28 @@ PROGMEM const char* const custom_reset_string[] = { // ----------------------------------------------------------------------------- #ifndef ENABLE_DOMOTICZ - #define ENABLE_DOMOTICZ 1 +#define ENABLE_DOMOTICZ 1 // Enable Domoticz support by default #endif -#define DOMOTICZ_IN_TOPIC "domoticz/in" -#define DOMOTICZ_OUT_TOPIC "domoticz/out" +#define DOMOTICZ_IN_TOPIC "domoticz/in" // Default subscription topic +#define DOMOTICZ_OUT_TOPIC "domoticz/out" // Default publication topic // ----------------------------------------------------------------------------- // INFLUXDB // ----------------------------------------------------------------------------- #ifndef ENABLE_INFLUXDB - #define ENABLE_INFLUXDB 1 +#define ENABLE_INFLUXDB 1 // Enable InfluxDB support by default #endif -#define INFLUXDB_PORT 8086 +#define INFLUXDB_PORT 8086 // Default InfluxDB port // ----------------------------------------------------------------------------- // NTP // ----------------------------------------------------------------------------- -#define NTP_SERVER "pool.ntp.org" -#define NTP_TIME_OFFSET 1 -#define NTP_DAY_LIGHT true -#define NTP_UPDATE_INTERVAL 1800 +#define NTP_SERVER "pool.ntp.org" // Default NTP server +#define NTP_TIME_OFFSET 1 // Default timezone offset (GMT+1) +#define NTP_DAY_LIGHT true // Enable daylight time saving by default +#define NTP_UPDATE_INTERVAL 1800 // NTP check every 30 minutes // ----------------------------------------------------------------------------- // FAUXMO @@ -331,7 +339,7 @@ PROGMEM const char* const custom_reset_string[] = { // This setting defines whether Alexa support should be built into the firmware #ifndef ENABLE_FAUXMO - #define ENABLE_FAUXMO 1 +#define ENABLE_FAUXMO 1 #endif // This is default value for the fauxmoEnabled setting that defines whether diff --git a/code/espurna/espurna.ino b/code/espurna/espurna.ino index e2b44235..f41194ea 100644 --- a/code/espurna/espurna.ino +++ b/code/espurna/espurna.ino @@ -52,53 +52,53 @@ void heartbeat() { } - #if (MQTT_REPORT_INTERVAL) + #if (HEARTBEAT_REPORT_INTERVAL) mqttSend(MQTT_TOPIC_INTERVAL, HEARTBEAT_INTERVAL / 1000); #endif - #if (MQTT_REPORT_APP) + #if (HEARTBEAT_REPORT_APP) mqttSend(MQTT_TOPIC_APP, APP_NAME); #endif - #if (MQTT_REPORT_VERSION) + #if (HEARTBEAT_REPORT_VERSION) mqttSend(MQTT_TOPIC_VERSION, APP_VERSION); #endif - #if (MQTT_REPORT_HOSTNAME) + #if (HEARTBEAT_REPORT_HOSTNAME) mqttSend(MQTT_TOPIC_HOSTNAME, getSetting("hostname").c_str()); #endif - #if (MQTT_REPORT_IP) + #if (HEARTBEAT_REPORT_IP) mqttSend(MQTT_TOPIC_IP, getIP().c_str()); #endif - #if (MQTT_REPORT_MAC) + #if (HEARTBEAT_REPORT_MAC) mqttSend(MQTT_TOPIC_MAC, WiFi.macAddress().c_str()); #endif - #if (MQTT_REPORT_RSSI) + #if (HEARTBEAT_REPORT_RSSI) mqttSend(MQTT_TOPIC_RSSI, String(WiFi.RSSI()).c_str()); #endif - #if (MQTT_REPORT_UPTIME) + #if (HEARTBEAT_REPORT_UPTIME) mqttSend(MQTT_TOPIC_UPTIME, String(uptime_seconds).c_str()); #if ENABLE_INFLUXDB influxDBSend(MQTT_TOPIC_UPTIME, String(uptime_seconds).c_str()); #endif #endif - #if (MQTT_REPORT_FREEHEAP) + #if (HEARTBEAT_REPORT_FREEHEAP) mqttSend(MQTT_TOPIC_FREEHEAP, String(free_heap).c_str()); #if ENABLE_INFLUXDB influxDBSend(MQTT_TOPIC_FREEHEAP, String(free_heap).c_str()); #endif #endif - #if (MQTT_REPORT_RELAY) + #if (HEARTBEAT_REPORT_RELAY) relayMQTT(); #endif #if LIGHT_PROVIDER != LIGHT_PROVIDER_NONE - #if (MQTT_REPORT_COLOR) + #if (HEARTBEAT_REPORT_COLOR) mqttSend(MQTT_TOPIC_COLOR, lightColor().c_str()); #endif #endif - #if (MQTT_REPORT_VCC) + #if (HEARTBEAT_REPORT_VCC) #if ENABLE_ADC_VCC mqttSend(MQTT_TOPIC_VCC, String(ESP.getVcc()).c_str()); #endif #endif - #if (MQTT_REPORT_STATUS) + #if (HEARTBEAT_REPORT_STATUS) mqttSend(MQTT_TOPIC_STATUS, MQTT_STATUS_ONLINE, true); #endif diff --git a/code/espurna/mqtt.ino b/code/espurna/mqtt.ino index b0112e96..d76195fa 100644 --- a/code/espurna/mqtt.ino +++ b/code/espurna/mqtt.ino @@ -125,7 +125,7 @@ void mqttSend(const char * topic, const char * message, bool force) { element.topic = strdup(topic); element.message = strdup(message); _mqtt_queue.push_back(element); - mqttFlushTicker.once_ms(100, _mqttFlush); + mqttFlushTicker.once_ms(MQTT_USE_JSON_DELAY, _mqttFlush); } else { String mqttGetter = getSetting("mqttGetter", MQTT_USE_GETTER); String path = mqttTopic + String(topic) + mqttGetter; diff --git a/code/espurna/relay.ino b/code/espurna/relay.ino index d03a3c2b..a8c257f8 100644 --- a/code/espurna/relay.ino +++ b/code/espurna/relay.ino @@ -413,7 +413,7 @@ void relayMQTTCallback(unsigned int type, const char * topic, const char * paylo if (type == MQTT_CONNECT_EVENT) { - #if not MQTT_REPORT_RELAY + #if not HEARTBEAT_REPORT_RELAY relayMQTT(); #endif