diff --git a/README.md b/README.md
index e676f6d..f811ddd 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,7 @@
## Sonoff-MQTT-OTA-Arduino
Provide ESP8266 based itead Sonoff with Serial, Web and MQTT control allowing 'Over the Air' or OTA firmware updates using Arduino IDE.
-Current version is **3.1.15** - See ```sonoff/_releasenotes.ino``` for change information.
+Current version is **3.1.16** - See ```sonoff/_releasenotes.ino``` for change information.
Starting with version 2.0.0 the following devices are supported:
diff --git a/api/arduino/sonoff.ino.bin b/api/arduino/sonoff.ino.bin
index 4dcfb1c..621601e 100644
Binary files a/api/arduino/sonoff.ino.bin and b/api/arduino/sonoff.ino.bin differ
diff --git a/sonoff/_releasenotes.ino b/sonoff/_releasenotes.ino
index 9048a08..f211532 100644
--- a/sonoff/_releasenotes.ino
+++ b/sonoff/_releasenotes.ino
@@ -1,4 +1,12 @@
-/* 3.1.15 20170108
+/* 3.1.16 20170109
+ * Fix Domoticz possible error condition
+ * Remove Wifi password from connection message (#216)
+ * Add Configure Other menu item to web page (#209)
+ * Add command FriendlyName, field Friendly Name and define FRIENDLY_NAME to be used by Alexa
+ * eliminating current use of MQTT_CLIENT_ID (#209)
+ * Add friendlyname to webpage replacing former hostname
+ *
+ * 3.1.15 20170108
* Fix Domoticz send key regression with Toggle command
*
* 3.1.14 20170107
diff --git a/sonoff/sonoff.ino b/sonoff/sonoff.ino
index 86a4e71..85a68c5 100644
--- a/sonoff/sonoff.ino
+++ b/sonoff/sonoff.ino
@@ -10,7 +10,7 @@
* ====================================================
*/
-#define VERSION 0x03010F00 // 3.1.15
+#define VERSION 0x03011000 // 3.1.16
#define SONOFF 1 // Sonoff, Sonoff RF, Sonoff SV, Sonoff Dual, Sonoff TH, S20 Smart Socket, 4 Channel
#define SONOFF_POW 9 // Sonoff Pow
@@ -429,7 +429,7 @@ void CFG_DefaultSet()
sysCfg.model = 0;
sysCfg.timezone = APP_TIMEZONE;
strlcpy(sysCfg.otaUrl, OTA_URL, sizeof(sysCfg.otaUrl));
- strlcpy(sysCfg.friendlyname, MQTT_TOPIC, sizeof(sysCfg.friendlyname));
+ strlcpy(sysCfg.friendlyname, FRIENDLY_NAME, sizeof(sysCfg.friendlyname));
sysCfg.seriallog_level = SERIAL_LOG_LEVEL;
sysCfg.sta_active = 0;
@@ -637,6 +637,9 @@ void CFG_Delta()
sysCfg.blinktime = APP_BLINKTIME;
sysCfg.blinkcount = APP_BLINKCOUNT;
}
+ if (sysCfg.version < 0x03011000) { // 3.1.16 - Add parameter
+ getClient(sysCfg.friendlyname, sysCfg.mqtt_client, sizeof(sysCfg.friendlyname));
+ }
sysCfg.version = VERSION;
}
@@ -1012,23 +1015,32 @@ void mqttDataCb(char* topic, byte* data, unsigned int data_len)
unsigned long idx = 0;
int16_t nvalue;
- if (strlen(dataBuf) < 20) return;
+ if (data_len < 20) return;
idx = getKeyIntValue(dataBuf,"\"idx\"");
nvalue = getKeyIntValue(dataBuf,"\"nvalue\"");
- dataBuf[0] = '\0';
+
+ snprintf_P(svalue, sizeof(svalue), PSTR("DMTZ: idx %d, nvalue %d"), idx, nvalue);
+ addLog(LOG_LEVEL_DEBUG_MORE, svalue);
+
+ data_len = 0;
if (nvalue == 0 || nvalue == 1) {
for (i = 0; i < Maxdevice; i++) {
- if (idx > 0 && idx == sysCfg.domoticz_relay_idx[i]) {
+ if ((idx > 0) && (idx == sysCfg.domoticz_relay_idx[i])) {
snprintf_P(dataBuf, sizeof(dataBuf), PSTR("%d"), nvalue);
+ data_len = strlen(dataBuf);
break;
}
}
}
- if (!strlen(dataBuf)) return;
+ if (!data_len) return;
if (((power >> i) &1) == nvalue) return;
snprintf_P(stemp1, sizeof(stemp1), PSTR("%d"), i +1);
snprintf_P(topicBuf, sizeof(topicBuf), PSTR("%s/%s/%s%s"),
SUB_PREFIX, sysCfg.mqtt_topic, sysCfg.mqtt_subtopic, (Maxdevice > 1) ? stemp1 : "");
+
+ snprintf_P(svalue, sizeof(svalue), PSTR("DMTZ: Receive topic %s, data size %d, data %s"), topicBuf, data_len, dataBuf);
+ addLog(LOG_LEVEL_DEBUG_MORE, svalue);
+
domoticz_update_flag = 0;
}
#endif // USE_DOMOTICZ
@@ -1266,6 +1278,12 @@ void mqttDataCb(char* topic, byte* data, unsigned int data_len)
snprintf_P(svalue, sizeof(svalue), PSTR("{\"WifiConfig\":\"%d (%s)\"}"), sysCfg.sta_config, stemp1);
}
}
+ else if (!strcmp(type,"FRIENDLYNAME")) {
+ if ((data_len > 0) && (data_len < sizeof(sysCfg.friendlyname))) {
+ strlcpy(sysCfg.friendlyname, (payload == 1) ? FRIENDLY_NAME : dataBuf, sizeof(sysCfg.friendlyname));
+ }
+ snprintf_P(svalue, sizeof(svalue), PSTR("{\"FriendlyName\":\"%s\"}"), sysCfg.friendlyname);
+ }
#ifdef USE_WALL_SWITCH
else if (!strcmp(type,"SWITCHMODE")) {
if ((data_len > 0) && (payload >= 0) && (payload < MAX_SWITCH_OPTION)) {
@@ -1293,13 +1311,6 @@ void mqttDataCb(char* topic, byte* data, unsigned int data_len)
snprintf_P(svalue, sizeof(svalue), PSTR("{\"WebLog\":%d}"), sysCfg.weblog_level);
}
#endif // USE_WEBSERVER
- else if (!grpflg && !strcmp(type,"MQTTCLIENT")) { // Also Alexa friendlyname
- if ((data_len > 0) && (data_len < sizeof(sysCfg.mqtt_client))) {
- strlcpy(sysCfg.mqtt_client, (payload == 1) ? MQTT_CLIENT_ID : dataBuf, sizeof(sysCfg.mqtt_client));
- restartflag = 2;
- }
- snprintf_P(svalue, sizeof(svalue), PSTR("{\"MqttClient\":\"%s\"}"), sysCfg.mqtt_client);
- }
else if (!strcmp(type,"MQTTUNITS")) {
if ((data_len > 0) && (payload >= 0) && (payload <= 1)) {
sysCfg.mqtt_units = payload;
@@ -1330,6 +1341,13 @@ void mqttDataCb(char* topic, byte* data, unsigned int data_len)
snprintf_P(svalue, sizeof(svalue), PSTR("{\"MqttFingerprint\":\"%s\"}"), sysCfg.mqtt_fingerprint);
}
#endif
+ else if (!grpflg && !strcmp(type,"MQTTCLIENT")) {
+ if ((data_len > 0) && (data_len < sizeof(sysCfg.mqtt_client))) {
+ strlcpy(sysCfg.mqtt_client, (payload == 1) ? MQTT_CLIENT_ID : dataBuf, sizeof(sysCfg.mqtt_client));
+ restartflag = 2;
+ }
+ snprintf_P(svalue, sizeof(svalue), PSTR("{\"MqttClient\":\"%s\"}"), sysCfg.mqtt_client);
+ }
else if (!strcmp(type,"MQTTUSER")) {
if ((data_len > 0) && (data_len < sizeof(sysCfg.mqtt_user))) {
strlcpy(sysCfg.mqtt_user, (payload == 1) ? MQTT_USER : dataBuf, sizeof(sysCfg.mqtt_user));
diff --git a/sonoff/support.ino b/sonoff/support.ino
index 437bca2..ffb01fe 100644
--- a/sonoff/support.ino
+++ b/sonoff/support.ino
@@ -430,8 +430,8 @@ void WIFI_begin(uint8_t flag)
} // 3: Current AP
if (strlen(sysCfg.sta_ssid[1]) == 0) sysCfg.sta_active = 0;
WiFi.begin(sysCfg.sta_ssid[sysCfg.sta_active], sysCfg.sta_pwd[sysCfg.sta_active]);
- snprintf_P(log, sizeof(log), PSTR("Wifi: Connecting to AP%d %s (%s) in mode 11%c as %s..."),
- sysCfg.sta_active +1, sysCfg.sta_ssid[sysCfg.sta_active], sysCfg.sta_pwd[sysCfg.sta_active], PhyMode[WiFi.getPhyMode() & 0x3], Hostname);
+ snprintf_P(log, sizeof(log), PSTR("Wifi: Connecting to AP%d %s in mode 11%c as %s..."),
+ sysCfg.sta_active +1, sysCfg.sta_ssid[sysCfg.sta_active], PhyMode[WiFi.getPhyMode() & 0x3], Hostname);
addLog(LOG_LEVEL_INFO, log);
}
diff --git a/sonoff/user_config.h b/sonoff/user_config.h
index fe9e3f2..74be312 100644
--- a/sonoff/user_config.h
+++ b/sonoff/user_config.h
@@ -101,8 +101,9 @@
// -- HTTP -----------------------------------
#define USE_WEBSERVER // Enable web server and wifi manager (+43k code, +2k mem) - Disable by //
-// #define USE_WEMO_EMULATION // Enable Belkin WeMo PowerSwitch emulation for Alexa (+4k code, +2k mem)
+ #define FRIENDLY_NAME "Sonoff" // [FriendlyName] Friendlyname up to 32 characters used by webpages and Alexa
#define WEB_SERVER 2 // [WebServer] Web server (0 = Off, 1 = Start as User, 2 = Start as Admin)
+// #define USE_WEMO_EMULATION // Enable Belkin WeMo PowerSwitch emulation for Alexa (+4k code, +2k mem)
// -- mDNS -----------------------------------
#define USE_DISCOVERY // Enable mDNS for the following services (+8k code, +0.3k mem)
diff --git a/sonoff/webserver.ino b/sonoff/webserver.ino
index 9f9fd9f..8cf4e65 100644
--- a/sonoff/webserver.ino
+++ b/sonoff/webserver.ino
@@ -88,6 +88,7 @@ const char HTTP_HEAD[] PROGMEM =
"