Skip to content

Commit

Permalink
v5.11.1g - Add PMS5003 support and updates
Browse files Browse the repository at this point in the history
5.11.1g
 * Add support for PMS5003 particle concentration sensor
 *
Reinstate console weblog to 20 lines after some webpage rewrite
 * Add
command SetOption20 to allow update of Dimmer/Color/Ct without turning
power on (#1719)
 * Update language files nl-NL (#1723) and es-AR
(#1722)
  • Loading branch information
arendst committed Jan 27, 2018
1 parent d66ef23 commit abdbe62
Show file tree
Hide file tree
Showing 14 changed files with 269 additions and 42 deletions.
2 changes: 1 addition & 1 deletion README.md
@@ -1,7 +1,7 @@
## Sonoff-Tasmota
Provide ESP8266 based Sonoff by [iTead Studio](https://www.itead.cc/) and ElectroDragon IoT Relay with Serial, Web and MQTT control allowing 'Over the Air' or OTA firmware updates using Arduino IDE.

Current version is **5.11.1f** - See [sonoff/_releasenotes.ino](https://github.com/arendst/Sonoff-Tasmota/blob/development/sonoff/_releasenotes.ino) for change information.
Current version is **5.11.1g** - See [sonoff/_releasenotes.ino](https://github.com/arendst/Sonoff-Tasmota/blob/development/sonoff/_releasenotes.ino) for change information.

### ATTENTION All versions

Expand Down
8 changes: 7 additions & 1 deletion sonoff/_releasenotes.ino
@@ -1,4 +1,10 @@
/* 5.11.1f
/* 5.11.1g
* Add support for PMS5003 particle concentration sensor
* Reinstate console weblog to 20 lines after some webpage rewrite
* Add command SetOption20 to allow update of Dimmer/Color/Ct without turning power on (#1719)
* Update language files nl-NL (#1723) and es-AR (#1722)
*
* 5.11.1f
* Revert chunked webserver pages as it fails on many browsers due to chunks being too small (#1706)
* Reduce initial console weblog from 20 to 13 lines due to memory constraints
*
Expand Down
4 changes: 2 additions & 2 deletions sonoff/language/de-DE.h
Expand Up @@ -376,8 +376,8 @@
#define D_SHT1X_FOUND "SHT1X gefunden"

// xsns_18_pms5003.ino
#define D_STANDARD_CONCENTRATION "Standard Concentration"
#define D_ENVIRONMENTAL_CONCENTRATION "Environmental Concentration"
#define D_STANDARD_CONCENTRATION "Std Concentration"
#define D_ENVIRONMENTAL_CONCENTRATION "Env Concentration"
#define D_PARTICALS_BEYOND "Particals beyond"

// sonoff_template.h
Expand Down
4 changes: 2 additions & 2 deletions sonoff/language/en-GB.h
Expand Up @@ -376,8 +376,8 @@
#define D_SHT1X_FOUND "SHT1X found"

// xsns_18_pms5003.ino
#define D_STANDARD_CONCENTRATION "Standard Concentration"
#define D_ENVIRONMENTAL_CONCENTRATION "Environmental Concentration"
#define D_STANDARD_CONCENTRATION "Std Concentration"
#define D_ENVIRONMENTAL_CONCENTRATION "Env Concentration"
#define D_PARTICALS_BEYOND "Particals beyond"

// sonoff_template.h
Expand Down
4 changes: 2 additions & 2 deletions sonoff/language/es-AR.h
Expand Up @@ -54,7 +54,7 @@
#define D_BLINK "Blink"
#define D_BLINKOFF "BlinkOff"
#define D_BOOT_COUNT "Conteo Reinicios"
#define D_BRIGHTLIGHT "Brillo"
#define D_BRIGHTLIGHT "Brillante"
#define D_BUTTON "Botón"
#define D_BY "por" // Written by me
#define D_BYTES "Bytes"
Expand All @@ -79,7 +79,7 @@
#define D_ERASE "Borrar"
#define D_ERROR "Error"
#define D_FAHRENHEIT "Fahrenheit"
#define D_FAILED "Fallo"
#define D_FAILED "Falló"
#define D_FALLBACK "Fallback"
#define D_FALLBACK_TOPIC "FallbackTopic"
#define D_FALSE "Falso"
Expand Down
8 changes: 4 additions & 4 deletions sonoff/language/nl-NL.h
Expand Up @@ -47,7 +47,7 @@

// Common
#define D_ADMIN "Admin"
#define D_AIR_QUALITY "Lucht kwalitiet"
#define D_AIR_QUALITY "Lucht kwaliteit"
#define D_AP "AP" // Access Point
#define D_AS "als"
#define D_AUTO "AUTO"
Expand Down Expand Up @@ -376,9 +376,9 @@
#define D_SHT1X_FOUND "SHT1X gevonden"

// xsns_18_pms5003.ino
#define D_STANDARD_CONCENTRATION "Standard Concentration"
#define D_ENVIRONMENTAL_CONCENTRATION "Environmental Concentration"
#define D_PARTICALS_BEYOND "Particals beyond"
#define D_STANDARD_CONCENTRATION "Std concentratie"
#define D_ENVIRONMENTAL_CONCENTRATION "Omg concentratie"
#define D_PARTICALS_BEYOND "Deeltjes groter dan"

// sonoff_template.h
// Max string length is 8 characters including suffixes
Expand Down
11 changes: 1 addition & 10 deletions sonoff/settings.h
Expand Up @@ -45,7 +45,7 @@ typedef union { // Restricted by MISRA-C Rule 18.4 bu
uint32_t decimal_text : 1; // bit 17 (v5.8.1)
uint32_t light_signal : 1; // bit 18 (v5.10.0c)
uint32_t hass_discovery : 1; // bit 19 (v5.11.1a)
uint32_t voltage_resolution : 1; // Replaced by below
uint32_t not_power_linked : 1; // bit 20 (v5.11.1f)
uint32_t spare21 : 1;
uint32_t spare22 : 1;
uint32_t spare23 : 1;
Expand All @@ -57,15 +57,6 @@ typedef union { // Restricted by MISRA-C Rule 18.4 bu
uint32_t spare29 : 1;
uint32_t spare30 : 1;
uint32_t spare31 : 1;
/*
uint32_t wattage_resolution : 1;
uint32_t voltage_resolution : 1;
uint32_t emulation : 2;
uint32_t energy_resolution : 3;
uint32_t pressure_resolution : 2;
uint32_t humidity_resolution : 2;
uint32_t temperature_resolution : 2;
*/
};
} SysBitfield;

Expand Down
8 changes: 6 additions & 2 deletions sonoff/settings.ino
Expand Up @@ -430,7 +430,7 @@ void SettingsDefaultSet2()
Settings.flag.mqtt_power_retain = MQTT_POWER_RETAIN;
Settings.flag.mqtt_button_retain = MQTT_BUTTON_RETAIN;
Settings.flag.mqtt_switch_retain = MQTT_SWITCH_RETAIN;
Settings.flag.hass_discovery = HOME_ASSISTANT_DISCOVERY_ENABLE;
Settings.flag.hass_discovery = HOME_ASSISTANT_DISCOVERY_ENABLE;

Settings.flag2.emulation = EMULATION;

Expand Down Expand Up @@ -845,13 +845,17 @@ void SettingsDelta()
if (Settings.version < 0x05090102) {
Settings.flag2.data = Settings.flag.data;
Settings.flag2.data &= 0xFFE80000;
Settings.flag2.voltage_resolution = Settings.flag.voltage_resolution;
Settings.flag2.voltage_resolution = Settings.flag.not_power_linked;
Settings.flag2.current_resolution = 3;
Settings.ina219_mode = 0;
}
if (Settings.version < 0x050A0009) {
SettingsDefaultSet_5_10_1();
}
if (Settings.version < 0x050B0107) {
Settings.flag.not_power_linked = 0;
}


Settings.version = VERSION;
SettingsSave(1);
Expand Down
8 changes: 4 additions & 4 deletions sonoff/sonoff.h
Expand Up @@ -90,11 +90,11 @@ typedef unsigned long power_t; // Power (Relay) type
#ifdef USE_MQTT_TLS
#define MAX_LOG_LINES 10 // Max number of lines in weblog
#else
#ifdef ARDUINO_ESP8266_RELEASE_2_3_0
// #ifdef ARDUINO_ESP8266_RELEASE_2_3_0
#define MAX_LOG_LINES 20 // Max number of lines in weblog
#else
#define MAX_LOG_LINES 13 // Max number of lines in weblog (less due to more memory usage)
#endif
// #else
// #define MAX_LOG_LINES 13 // Max number of lines in weblog (less due to more memory usage which prohibits full webpage load)
// #endif
#endif
#define MAX_BACKLOG 16 // Max number of commands in backlog (chk backlog_index and backlog_pointer code)
#define MIN_BACKLOG_DELAY 2 // Minimal backlog delay in 0.1 seconds
Expand Down
3 changes: 2 additions & 1 deletion sonoff/sonoff.ino
Expand Up @@ -25,7 +25,7 @@
- Select IDE Tools - Flash Size: "1M (no SPIFFS)"
====================================================*/

#define VERSION 0x050B0106 // 5.11.1f
#define VERSION 0x050B0107 // 5.11.1g

// Location specific includes
#include <core_version.h> // Arduino_Esp8266 version information (ARDUINO_ESP8266_RELEASE and ARDUINO_ESP8266_RELEASE_2_3_0)
Expand Down Expand Up @@ -1027,6 +1027,7 @@ void MqttDataCallback(char* topic, byte* data, unsigned int data_len)
case 16: // ws_clock_reverse
case 17: // decimal_text
case 18: // light_signal
case 20: // not_power_linked
bitWrite(Settings.flag.data, index, payload);
}
if (12 == index) { // stop_flash_rotate
Expand Down
2 changes: 2 additions & 0 deletions sonoff/user_config.h
Expand Up @@ -216,6 +216,8 @@
#define CO2_LOW 800 // Below this CO2 value show green light (needs PWM or WS2812 RG(B) led and enable with SetOption18 1)
#define CO2_HIGH 1200 // Above this CO2 value show red light (needs PWM or WS2812 RG(B) led and enable with SetOption18 1)

#define USE_PMS5003 // Add support for PMS5003 particle concentration sensor (+1k3 code)

#define USE_IR_REMOTE // Send IR remote commands using library IRremoteESP8266 and ArduinoJson (+4k code, 0k3 mem, 48 iram)
// #define USE_IR_HVAC // Support for HVAC system using IR (+2k code)
#define USE_IR_RECEIVE // Support for IR receiver (+5k5 code, 264 iram)
Expand Down
73 changes: 61 additions & 12 deletions sonoff/webserver.ino
Expand Up @@ -60,7 +60,7 @@ const char HTTP_HEAD[] PROGMEM =
"x=new XMLHttpRequest();"
"x.onreadystatechange=function(){"
"if(x.readyState==4&&x.status==200){"
"var s=x.responseText.replace(/{s}/g,\"<tr><th>\").replace(/{m}/g,\"</th><td>\").replace(/{e}/g,\"</td></tr>\").replace(/{t}/g,\"%'><div style='text-align:center;font-weight:\");"
"var s=x.responseText.replace(/{t}/g,\"<table style='width:100%'>\").replace(/{s}/g,\"<tr><th>\").replace(/{m}/g,\"</th><td>\").replace(/{e}/g,\"</td></tr>\").replace(/{c}/g,\"%'><div style='text-align:center;font-weight:\");"
"document.getElementById('l1').innerHTML=s;"
"}"
"};"
Expand Down Expand Up @@ -552,7 +552,7 @@ void HandleAjaxStatusRefresh()
snprintf_P(svalue, sizeof(svalue), PSTR(D_CMND_RFKEY "%s"), WebServer->arg("k").c_str());
ExecuteCommand(svalue);
}

/*
String page = "";
mqtt_data[0] = '\0';
XsnsCall(FUNC_WEB_APPEND);
Expand All @@ -568,13 +568,58 @@ void HandleAjaxStatusRefresh()
uint8_t fsize = (devices_present < 5) ? 70 - (devices_present * 8) : 32;
for (byte idx = 1; idx <= devices_present; idx++) {
snprintf_P(svalue, sizeof(svalue), PSTR("%d"), bitRead(power, idx -1));
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("<td style='width:%d{t}%s;font-size:%dpx'>%s</div></td>"), // {t} = %'><div style='text-align:center;font-weight:
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("<td style='width:%d{c}%s;font-size:%dpx'>%s</div></td>"), // {c} = %'><div style='text-align:center;font-weight:
100 / devices_present, (bitRead(power, idx -1)) ? "bold" : "normal", fsize, (devices_present < 5) ? GetStateText(bitRead(power, idx -1)) : svalue);
page += mqtt_data;
}
page += F("</tr></table>");
}
WebServer->send(200, FPSTR(HDR_CTYPE_HTML), page);
*/
/*
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("<table style='width:100%%'>"));
XsnsCall(FUNC_WEB_APPEND);
if (D_DECIMAL_SEPARATOR[0] != '.') {
for (int i = 0; i < strlen(mqtt_data); i++) {
if ('.' == mqtt_data[i]) {
mqtt_data[i] = D_DECIMAL_SEPARATOR[0];
}
}
}
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("%s</table>"), mqtt_data);
if (devices_present) {
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("%s<table style='width:100%%'><tr>"), mqtt_data);
uint8_t fsize = (devices_present < 5) ? 70 - (devices_present * 8) : 32;
for (byte idx = 1; idx <= devices_present; idx++) {
snprintf_P(svalue, sizeof(svalue), PSTR("%d"), bitRead(power, idx -1));
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("%s<td style='width:%d{c}%s;font-size:%dpx'>%s</div></td>"), // {c} = %'><div style='text-align:center;font-weight:
mqtt_data, 100 / devices_present, (bitRead(power, idx -1)) ? "bold" : "normal", fsize, (devices_present < 5) ? GetStateText(bitRead(power, idx -1)) : svalue);
}
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("%s</tr></table>"), mqtt_data);
}
WebServer->send(200, FPSTR(HDR_CTYPE_HTML), mqtt_data);
*/
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("{t}"));
XsnsCall(FUNC_WEB_APPEND);
if (D_DECIMAL_SEPARATOR[0] != '.') {
for (int i = 0; i < strlen(mqtt_data); i++) {
if ('.' == mqtt_data[i]) {
mqtt_data[i] = D_DECIMAL_SEPARATOR[0];
}
}
}
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("%s</table>"), mqtt_data);
if (devices_present) {
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("%s{t}<tr>"), mqtt_data);
uint8_t fsize = (devices_present < 5) ? 70 - (devices_present * 8) : 32;
for (byte idx = 1; idx <= devices_present; idx++) {
snprintf_P(svalue, sizeof(svalue), PSTR("%d"), bitRead(power, idx -1));
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("%s<td style='width:%d{c}%s;font-size:%dpx'>%s</div></td>"), // {c} = %'><div style='text-align:center;font-weight:
mqtt_data, 100 / devices_present, (bitRead(power, idx -1)) ? "bold" : "normal", fsize, (devices_present < 5) ? GetStateText(bitRead(power, idx -1)) : svalue);
}
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("%s</tr></table>"), mqtt_data);
}
WebServer->send(200, FPSTR(HDR_CTYPE_HTML), mqtt_data);
}

boolean HttpUser()
Expand Down Expand Up @@ -696,24 +741,28 @@ void HandleModuleConfiguration()
}
page += FPSTR(HTTP_SCRIPT_MODULE3);

String part2 = FPSTR(HTTP_HEAD_STYLE);
part2 += FPSTR(HTTP_FORM_MODULE);
for (byte i = 0; i < MAX_GPIO_PIN; i++) {
if (GPIO_USER == cmodule.gp.io[i]) {
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("sk(%d,%d);"), my_module.gp.io[i], i); // g0 - g16
page += mqtt_data;
}
}
page += F("}");

page += FPSTR(HTTP_HEAD_STYLE);
page.replace(F("<body>"), F("<body onload='sl()'>"));
page += FPSTR(HTTP_FORM_MODULE);
snprintf_P(stemp, sizeof(stemp), kModules[MODULE].name);
part2.replace(F("{mt"), stemp);
part2 += F("<br/><table>");
page.replace(F("{mt"), stemp);
page += F("<br/><table>");
for (byte i = 0; i < MAX_GPIO_PIN; i++) {
if (GPIO_USER == cmodule.gp.io[i]) {
snprintf_P(stemp, 3, PINS_WEMOS +i*2);
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("<tr><td style='width:190px'>%s <b>" D_GPIO "%d</b> %s</td><td style='width:126px'><select id='g%d' name='g%d'></select></td></tr>"),
(WEMOS==Settings.module)?stemp:"", i, (0==i)? D_SENSOR_BUTTON "1":(1==i)? D_SERIAL_OUT :(3==i)? D_SERIAL_IN :(12==i)? D_SENSOR_RELAY "1":(13==i)? D_SENSOR_LED "1i":(14==i)? D_SENSOR :"", i, i);
part2 += mqtt_data;
snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("sk(%d,%d);"), my_module.gp.io[i], i); // g0 - g16
page += mqtt_data;
}
}
page += F("}");
page += part2;
page.replace(F("<body>"), F("<body onload='sl()'>"));
page += F("</table>");
page += FPSTR(HTTP_FORM_END);
page += FPSTR(HTTP_BTN_CONF);
Expand Down
4 changes: 3 additions & 1 deletion sonoff/xdrv_01_light.ino
Expand Up @@ -568,7 +568,9 @@ void LightState(uint8_t append)
void LightPreparePower()
{
if (Settings.light_dimmer && !(light_power)) {
ExecuteCommandPower(light_device, POWER_ON_NO_STATE);
if (!Settings.flag.not_power_linked) {
ExecuteCommandPower(light_device, POWER_ON_NO_STATE);
}
}
else if (!Settings.light_dimmer && light_power) {
ExecuteCommandPower(light_device, POWER_OFF_NO_STATE);
Expand Down

0 comments on commit abdbe62

Please sign in to comment.