From c61a39a06dbf6bb15ab5a6cbcdde78cfd0da8c54 Mon Sep 17 00:00:00 2001 From: arendst Date: Wed, 3 May 2017 18:19:13 +0200 Subject: [PATCH] v5.0.2 5.0.2 20170503 * Reset SaveData, SaveState and MqttResponse to default values due to rearranging settings * Moved some settings flag area * Add command TempUnit Celsius|Fahrenheit for selecting Celsius or Fahrenheit (#347) * Add command TempRes 0..3 for selecting Temperature Resolution (#347) * Add command HumRes 0..3 for selecting Humidity Resolution (#347) * Add command PressRes 0..3 for selecting Pressure Resolution (#347) * Add command EnergyRes 0..5 for selecting Energy Resolution (#347) * Add "TemperatureUnit":"C|F" to sensor JSON output (#347) * Add support for up to three DHT type sensors each using a different GPIO (#339, #404) --- README.md | 4 +- api/arduino/sonoff.ino.bin | Bin 479504 -> 481088 bytes sonoff/_releasenotes.ino | 13 ++- sonoff/settings.h | 54 ++++++--- sonoff/settings.ino | 121 +++++++++++++------- sonoff/sonoff.ino | 190 ++++++++++++++++++++------------ sonoff/support.ino | 21 +++- sonoff/user_config.h | 10 +- sonoff/webserver.ino | 36 +++--- sonoff/xdrv_snfsc.ino | 20 ++-- sonoff/xdrv_wemohue.ino | 4 +- sonoff/xsns_bmp.ino | 29 ++--- sonoff/xsns_dht.ino | 219 ++++++++++++++++++++----------------- sonoff/xsns_ds18b20.ino | 22 ++-- sonoff/xsns_ds18x20.ino | 27 ++--- sonoff/xsns_hlw8012.ino | 46 ++++---- sonoff/xsns_htu21.ino | 26 ++--- sonoff/xsns_sht1x.ino | 10 +- 18 files changed, 488 insertions(+), 364 deletions(-) diff --git a/README.md b/README.md index 40e575646..5ddba7cce 100644 --- a/README.md +++ b/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.0.1** - See [sonoff/_releasenotes.ino](https://github.com/arendst/Sonoff-Tasmota/blob/master/sonoff/_releasenotes.ino) for change information. +Current version is **5.0.2** - See [sonoff/_releasenotes.ino](https://github.com/arendst/Sonoff-Tasmota/blob/master/sonoff/_releasenotes.ino) for change information. ### **** ATTENTION Version 5.0.x specific information **** @@ -11,7 +11,7 @@ Best practice to implement is: - Open the webpage to your device - Perform option ``Backup Configuration`` - Upgrade new firmware using ``Firmware upgrade`` -- If configuration conversion failed keep the webpage open and perform ``Restore Configuration`` +- If configuration conversion fails keep the webpage open and perform ``Restore Configuration`` You should now have a device with 32k more code memory to play with. diff --git a/api/arduino/sonoff.ino.bin b/api/arduino/sonoff.ino.bin index 0621a0c0d2c877f65ba1a4b25f0b1f210ba5119c..32ec27bc1924358123ad3bbcd039e7fe5e8dc59a 100644 GIT binary patch delta 126303 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∨UYX7CkrLG-5Fu| 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 KD|*Fo|NK7#jZyso delta 124790 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� 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 rCWmR>0U?G9oF~7z(d$ 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 BaT)*s diff --git a/sonoff/_releasenotes.ino b/sonoff/_releasenotes.ino index 03361b437..cb0037510 100644 --- a/sonoff/_releasenotes.ino +++ b/sonoff/_releasenotes.ino @@ -1,4 +1,15 @@ -/* 5.0.1 20170429 +/* 5.0.2 20170503 + * Reset SaveData, SaveState and MqttResponse to default values due to rearranging settings + * Moved some settings flag area + * Add command TempUnit Celsius|Fahrenheit for selecting Celsius or Fahrenheit (#347) + * Add command TempRes 0..3 for selecting Temperature Resolution (#347) + * Add command HumRes 0..3 for selecting Humidity Resolution (#347) + * Add command PressRes 0..3 for selecting Pressure Resolution (#347) + * Add command EnergyRes 0..5 for selecting Energy Resolution (#347) + * Add "TemperatureUnit":"C|F" to sensor JSON output (#347) + * Add support for up to three DHT type sensors each using a different GPIO (#339, #404) + * + * 5.0.1 20170429 * Adjust Sonoff SC messages to prepare for display feature * Move static data from RAM to Flash * Fix PowerOnState for some devices not reporting "Power on" state (#284, #380, #383) diff --git a/sonoff/settings.h b/sonoff/settings.h index 1f8d02985..d590b1ec7 100644 --- a/sonoff/settings.h +++ b/sonoff/settings.h @@ -2,21 +2,49 @@ * Config settings \*********************************************************************************************/ +typedef struct { + uint32_t savestate : 1; + uint32_t button_restrict : 1; + uint32_t value_units : 1; + uint32_t mqtt_enabled : 1; + uint32_t mqtt_response : 1; + uint32_t mqtt_power_retain : 1; + uint32_t mqtt_button_retain : 1; + uint32_t mqtt_switch_retain : 1; + uint32_t temperature_conversion : 1; + uint32_t spare23 : 1; + uint32_t spare22 : 1; + uint32_t spare21 : 1; + uint32_t spare20 : 1; + uint32_t spare19 : 1; + uint32_t spare18 : 1; + uint32_t spare17 : 1; + uint32_t spare16 : 1; + uint32_t spare15 : 1; + uint32_t spare14 : 1; + uint32_t spare13 : 1; + uint32_t spare12 : 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; + struct SYSCFG { unsigned long cfg_holder; unsigned long saveFlag; unsigned long version; unsigned long bootcount; - byte migflg; // Not used since 3.9.1 + sysBitfield flag; // Add flag since 5.0.2 int16_t savedata; - byte savestate; - byte mqtt_response; // was model until 3.9.1 + int8_t timezone; char otaUrl[101]; - char mqtt_prefix[3][11]; // was ex_friendlyname[33] until 3.2.5 + char mqtt_prefix[3][11]; // was ex_friendlyname[33] until 3.2.5 - byte serial_enable; + byte serial_enable; // Not used (ever) byte seriallog_level; uint8_t sta_config; byte sta_active; @@ -39,10 +67,10 @@ struct SYSCFG { char button_topic[33]; char mqtt_grptopic[33]; char state_text[3][11]; // was ex_mqtt_subtopic[33] until 4.1.1 - byte mqtt_button_retain; - byte mqtt_power_retain; - byte value_units; - byte button_restrict; // Was message_format until 3.2.6a + byte ex_mqtt_button_retain; // Not used since 5.0.2 + byte ex_mqtt_power_retain; // Not used since 5.0.2 + byte ex_value_units; // Not used since 5.0.2 + byte ex_button_restrict; // Not used since 5.0.2 uint16_t tele_period; uint8_t power; @@ -77,7 +105,7 @@ struct SYSCFG { uint16_t hlw_mkwhs; // MaxEnergyStart // 3.0.6 - uint16_t ex_pulsetime; // Not used since 4.0.4 + uint16_t ex_pulsetime; // Not used since 4.0.4 // 3.1.1 uint8_t poweronstate; @@ -104,8 +132,8 @@ struct SYSCFG { // 3.2.8 char switch_topic[33]; - byte mqtt_switch_retain; - uint8_t mqtt_enabled; + byte ex_mqtt_switch_retain; // Not used since 5.0.2 + uint8_t ex_mqtt_enabled; // Not used since 5.0.2 // 3.2.12 uint8_t sleep; @@ -126,7 +154,7 @@ struct SYSCFG { uint16_t led_wakeup; // 3.9.7 - uint8_t emulation; + uint8_t ex_emulation; // Not used since 5.0.2 // 3.9.20 char web_password[33]; diff --git a/sonoff/settings.ino b/sonoff/settings.ino index ca8cbd49d..d655586ef 100644 --- a/sonoff/settings.ino +++ b/sonoff/settings.ino @@ -277,7 +277,7 @@ void CFG_Erase() } } -void CFG_Dump() +void CFG_Dump(uint16_t srow, uint16_t mrow) { #define CFG_COLS 16 @@ -288,9 +288,19 @@ void CFG_Dump() uint16_t col; uint8_t *buffer = (uint8_t *) &sysCfg; + row = 0; maxrow = ((sizeof(SYSCFG)+CFG_COLS)/CFG_COLS); + if ((srow > 0) && (srow < maxrow)) { + row = srow; + } + if (0 == mrow) { // Default only four lines + mrow = 4; + } + if ((mrow > 0) && (mrow < (maxrow - row))) { + maxrow = row + mrow; + } - for (row = 0; row < maxrow; row++) { + for (row = srow; row < maxrow; row++) { idx = row * CFG_COLS; snprintf_P(log, sizeof(log), PSTR("%04X:"), idx); for (col = 0; col < CFG_COLS; col++) { @@ -313,25 +323,35 @@ void CFG_Dump() /********************************************************************************************/ +void CFG_Default() +{ + addLog_P(LOG_LEVEL_NONE, PSTR("Config: Use default configuration")); + CFG_DefaultSet1(); + CFG_DefaultSet2(); + CFG_Save(); +} + void CFG_DefaultSet1() { memset(&sysCfg, 0x00, sizeof(SYSCFG)); sysCfg.cfg_holder = CFG_HOLDER; - sysCfg.saveFlag = 0; +// sysCfg.saveFlag = 0; sysCfg.version = VERSION; - sysCfg.bootcount = 0; +// sysCfg.bootcount = 0; } void CFG_DefaultSet2() { + memset((char*)&sysCfg +16, 0x00, sizeof(SYSCFG) -16); + + sysCfg.flag.savestate = SAVE_STATE; sysCfg.savedata = SAVE_DATA; - sysCfg.savestate = SAVE_STATE; sysCfg.timezone = APP_TIMEZONE; strlcpy(sysCfg.otaUrl, OTA_URL, sizeof(sysCfg.otaUrl)); sysCfg.seriallog_level = SERIAL_LOG_LEVEL; - sysCfg.sta_active = 0; +// sysCfg.sta_active = 0; strlcpy(sysCfg.sta_ssid[0], STA_SSID1, sizeof(sysCfg.sta_ssid[0])); strlcpy(sysCfg.sta_pwd[0], STA_PASS1, sizeof(sysCfg.sta_pwd[0])); strlcpy(sysCfg.sta_ssid[1], STA_SSID2, sizeof(sysCfg.sta_ssid[1])); @@ -353,10 +373,10 @@ void CFG_DefaultSet2() strlcpy(sysCfg.mqtt_topic, MQTT_TOPIC, sizeof(sysCfg.mqtt_topic)); strlcpy(sysCfg.button_topic, "0", sizeof(sysCfg.button_topic)); strlcpy(sysCfg.mqtt_grptopic, MQTT_GRPTOPIC, sizeof(sysCfg.mqtt_grptopic)); - sysCfg.mqtt_button_retain = MQTT_BUTTON_RETAIN; - sysCfg.mqtt_power_retain = MQTT_POWER_RETAIN; - sysCfg.value_units = 0; - sysCfg.button_restrict = 0; + sysCfg.flag.mqtt_button_retain = MQTT_BUTTON_RETAIN; + sysCfg.flag.mqtt_power_retain = MQTT_POWER_RETAIN; +// sysCfg.flag.value_units = 0; +// sysCfg.flag.button_restrict = 0; sysCfg.tele_period = TELE_PERIOD; sysCfg.power = APP_POWER; @@ -371,31 +391,31 @@ void CFG_DefaultSet2() sysCfg.domoticz_update_timer = DOMOTICZ_UPDATE_TIMER; for (byte i = 0; i < 4; i++) { sysCfg.switchmode[i] = SWITCH_MODE; - sysCfg.domoticz_relay_idx[i] = 0; - sysCfg.domoticz_key_idx[i] = 0; - sysCfg.domoticz_switch_idx[i] = 0; +// sysCfg.domoticz_relay_idx[i] = 0; +// sysCfg.domoticz_key_idx[i] = 0; +// sysCfg.domoticz_switch_idx[i] = 0; } sysCfg.hlw_pcal = HLW_PREF_PULSE; sysCfg.hlw_ucal = HLW_UREF_PULSE; sysCfg.hlw_ical = HLW_IREF_PULSE; - sysCfg.hlw_kWhtoday = 0; - sysCfg.hlw_kWhyesterday = 0; - sysCfg.hlw_kWhdoy = 0; - sysCfg.hlw_pmin = 0; - sysCfg.hlw_pmax = 0; - sysCfg.hlw_umin = 0; - sysCfg.hlw_umax = 0; - sysCfg.hlw_imin = 0; - sysCfg.hlw_imax = 0; - sysCfg.hlw_mpl = 0; // MaxPowerLimit +// sysCfg.hlw_kWhtoday = 0; +// sysCfg.hlw_kWhyesterday = 0; +// sysCfg.hlw_kWhdoy = 0; +// sysCfg.hlw_pmin = 0; +// sysCfg.hlw_pmax = 0; +// sysCfg.hlw_umin = 0; +// sysCfg.hlw_umax = 0; +// sysCfg.hlw_imin = 0; +// sysCfg.hlw_imax = 0; +// sysCfg.hlw_mpl = 0; // MaxPowerLimit sysCfg.hlw_mplh = MAX_POWER_HOLD; sysCfg.hlw_mplw = MAX_POWER_WINDOW; - sysCfg.hlw_mspl = 0; // MaxSafePowerLimit +// sysCfg.hlw_mspl = 0; // MaxSafePowerLimit sysCfg.hlw_msplh = SAFE_POWER_HOLD; sysCfg.hlw_msplw = SAFE_POWER_WINDOW; - sysCfg.hlw_mkwh = 0; // MaxEnergy - sysCfg.hlw_mkwhs = 0; // MaxEnergyStart +// sysCfg.hlw_mkwh = 0; // MaxEnergy +// sysCfg.hlw_mkwhs = 0; // MaxEnergyStart CFG_DefaultSet_3_2_4(); @@ -407,10 +427,10 @@ void CFG_DefaultSet2() CFG_DefaultSet_3_9_3(); strlcpy(sysCfg.switch_topic, "0", sizeof(sysCfg.switch_topic)); - sysCfg.mqtt_switch_retain = MQTT_SWITCH_RETAIN; - sysCfg.mqtt_enabled = MQTT_USE; + sysCfg.flag.mqtt_switch_retain = MQTT_SWITCH_RETAIN; + sysCfg.flag.mqtt_enabled = MQTT_USE; - sysCfg.emulation = EMULATION; + sysCfg.flag.emulation = EMULATION; strlcpy(sysCfg.web_password, WEB_PASSWORD, sizeof(sysCfg.web_password)); @@ -418,7 +438,7 @@ void CFG_DefaultSet2() sysCfg.pulsetime[0] = APP_PULSETIME; // 4.0.7 - for (byte i = 0; i < 5; i++) sysCfg.pwmvalue[i] = 0; +// for (byte i = 0; i < 5; i++) sysCfg.pwmvalue[i] = 0; // 4.0.9 CFG_DefaultSet_4_0_9(); @@ -426,8 +446,12 @@ void CFG_DefaultSet2() // 4.1.1 CFG_DefaultSet_4_1_1(); + // 5.0.2 + CFG_DefaultSet_5_0_2(); } +/********************************************************************************************/ + void CFG_DefaultSet_3_2_4() { sysCfg.ws_pixels = WS2812_LEDS; @@ -503,18 +527,18 @@ void CFG_DefaultSet_4_0_9() void CFG_DefaultSet_4_1_1() { - sysCfg.mqtt_response = 0; strlcpy(sysCfg.state_text[0], MQTT_STATUS_OFF, sizeof(sysCfg.state_text[0])); strlcpy(sysCfg.state_text[1], MQTT_STATUS_ON, sizeof(sysCfg.state_text[1])); strlcpy(sysCfg.state_text[2], MQTT_CMND_TOGGLE, sizeof(sysCfg.state_text[2])); } -void CFG_Default() +void CFG_DefaultSet_5_0_2() { - addLog_P(LOG_LEVEL_NONE, PSTR("Config: Use default configuration")); - CFG_DefaultSet1(); - CFG_DefaultSet2(); - CFG_Save(); + sysCfg.flag.temperature_conversion = TEMP_CONVERSION; + sysCfg.flag.temperature_resolution = TEMP_RESOLUTION; + sysCfg.flag.humidity_resolution = HUMIDITY_RESOLUTION; + sysCfg.flag.pressure_resolution = PRESSURE_RESOLUTION; + sysCfg.flag.energy_resolution = ENERGY_RESOLUTION; } /********************************************************************************************/ @@ -543,8 +567,8 @@ void CFG_Delta() } if (sysCfg.version < 0x03020800) { // 3.2.8 - Add parameter strlcpy(sysCfg.switch_topic, sysCfg.button_topic, sizeof(sysCfg.switch_topic)); - sysCfg.mqtt_switch_retain = MQTT_SWITCH_RETAIN; - sysCfg.mqtt_enabled = MQTT_USE; + sysCfg.ex_mqtt_switch_retain = MQTT_SWITCH_RETAIN; + sysCfg.ex_mqtt_enabled = MQTT_USE; } if (sysCfg.version < 0x03020C00) { // 3.2.12 - Add parameter sysCfg.sleep = APP_SLEEP; @@ -553,7 +577,7 @@ void CFG_Delta() CFG_DefaultSet_3_9_3(); } if (sysCfg.version < 0x03090700) { // 3.9.7 - Add parameter - sysCfg.emulation = EMULATION; + sysCfg.ex_emulation = EMULATION; } if (sysCfg.version < 0x03091400) { strlcpy(sysCfg.web_password, WEB_PASSWORD, sizeof(sysCfg.web_password)); @@ -562,7 +586,7 @@ void CFG_Delta() for (byte i = 0; i < 4; i++) sysCfg.switchmode[i] = sysCfg.ex_switchmode; } if (sysCfg.version < 0x04000200) { - sysCfg.button_restrict = 0; + sysCfg.ex_button_restrict = 0; } if (sysCfg.version < 0x04000400) { CFG_DefaultSet_4_0_4(); @@ -582,6 +606,23 @@ void CFG_Delta() if (sysCfg.version < 0x04010100) { CFG_DefaultSet_4_1_1(); } + if (sysCfg.version < 0x05000105) { + sysCfg.flag = { 0 }; + sysCfg.flag.savestate = SAVE_STATE; + sysCfg.flag.button_restrict = sysCfg.ex_button_restrict; + sysCfg.flag.value_units = sysCfg.ex_value_units; + sysCfg.flag.mqtt_enabled = sysCfg.ex_mqtt_enabled; +// sysCfg.flag.mqtt_response = 0; + sysCfg.flag.mqtt_power_retain = sysCfg.ex_mqtt_power_retain; + sysCfg.flag.mqtt_button_retain = sysCfg.ex_mqtt_button_retain; + sysCfg.flag.mqtt_switch_retain = sysCfg.ex_mqtt_switch_retain; + sysCfg.flag.emulation = sysCfg.ex_emulation; + + CFG_DefaultSet_5_0_2(); + + sysCfg.savedata = SAVE_DATA; + } + sysCfg.version = VERSION; } } diff --git a/sonoff/sonoff.ino b/sonoff/sonoff.ino index 54e45df58..78e498ea6 100644 --- a/sonoff/sonoff.ino +++ b/sonoff/sonoff.ino @@ -10,7 +10,7 @@ * ==================================================== */ -#define VERSION 0x05000100 // 5.0.1 +#define VERSION 0x05000200 // 5.0.2 enum log_t {LOG_LEVEL_NONE, LOG_LEVEL_ERROR, LOG_LEVEL_INFO, LOG_LEVEL_DEBUG, LOG_LEVEL_DEBUG_MORE, LOG_LEVEL_ALL}; enum week_t {Last, First, Second, Third, Fourth}; @@ -264,7 +264,7 @@ uint8_t pin[GPIO_MAX]; // Possible pin configurations uint8_t rel_inverted[4] = { 0 }; // Relay inverted flag (1 = (0 = On, 1 = Off)) uint8_t led_inverted[4] = { 0 }; // LED inverted flag (1 = (0 = On, 1 = Off)) uint8_t swt_flg = 0; // Any external switch configured -uint8_t dht_type = 0; // DHT type (DHT11, DHT21 or DHT22) +uint8_t dht_flg = 0; // DHT configured uint8_t hlw_flg = 0; // Power monitor configured uint8_t i2c_flg = 0; // I2C configured uint8_t spi_flg = 0; // SPI configured @@ -425,7 +425,7 @@ void mqtt_publish_sec(const char* topic, const char* data, boolean retained) { char log[TOPSZ + MESSZ]; - if (sysCfg.mqtt_enabled) { + if (sysCfg.flag.mqtt_enabled) { if (mqttClient.publish(topic, data, retained)) { snprintf_P(log, sizeof(log), PSTR("MQTT: %s = %s%s"), topic, data, (retained) ? " (retained)" : ""); // mqttClient.loop(); // Do not use here! Will block previous publishes @@ -465,7 +465,7 @@ void mqtt_publish_topic_P(uint8_t prefix, const char* subtopic, const char* data char romram[16]; char stopic[TOPSZ]; - snprintf_P(romram, sizeof(romram), ((prefix > 3) && !sysCfg.mqtt_response) ? PSTR("RESULT") : subtopic); + snprintf_P(romram, sizeof(romram), ((prefix > 3) && !sysCfg.flag.mqtt_response) ? PSTR("RESULT") : subtopic); prefix &= 1; snprintf_P(stopic, sizeof(stopic), PSTR("%s/%s/%s"), sysCfg.mqtt_prefix[prefix +1], sysCfg.mqtt_topic, romram); mqtt_publish(stopic, data); @@ -482,12 +482,12 @@ void mqtt_publishPowerState(byte device) } snprintf_P(sdevice, sizeof(sdevice), PSTR("%d"), device); snprintf_P(stopic, sizeof(stopic), PSTR("%s/%s/%s"), - sysCfg.mqtt_prefix[1], sysCfg.mqtt_topic, (sysCfg.mqtt_response)?"POWER":"RESULT"); + sysCfg.mqtt_prefix[1], sysCfg.mqtt_topic, (sysCfg.flag.mqtt_response)?"POWER":"RESULT"); snprintf_P(svalue, sizeof(svalue), PSTR("{\"POWER%s\":\"%s\"}"), (Maxdevice > 1) ? sdevice : "", getStateText(bitRead(power, device -1))); mqtt_publish(stopic, svalue); json2legacy(stopic, svalue); - mqtt_publish(stopic, svalue, sysCfg.mqtt_power_retain); + mqtt_publish(stopic, svalue, sysCfg.flag.mqtt_power_retain); } void mqtt_publishPowerBlinkState(byte device) @@ -509,7 +509,7 @@ void mqtt_connected() char stopic[TOPSZ]; char svalue[128]; // was MESSZ - if (sysCfg.mqtt_enabled) { + if (sysCfg.flag.mqtt_enabled) { // Satisfy iobroker (#299) snprintf_P(stopic, sizeof(stopic), PSTR("%s/%s/POWER"), sysCfg.mqtt_prefix[0], sysCfg.mqtt_topic); @@ -563,7 +563,7 @@ void mqtt_reconnect() mqttcounter = MQTT_RETRY_SECS; - if (!sysCfg.mqtt_enabled) { + if (!sysCfg.flag.mqtt_enabled) { mqtt_connected(); return; } @@ -640,9 +640,9 @@ boolean mqtt_command(boolean grpflg, char *type, uint16_t index, char *dataBuf, } else if (!strcmp_P(type,PSTR("MQTTRESPONSE"))) { if ((data_len > 0) && (payload >= 0) && (payload <= 1)) { - sysCfg.mqtt_response = payload; + sysCfg.flag.mqtt_response = payload; } - snprintf_P(svalue, ssvalue, PSTR("{\"MqttResponse\":\"%s\"}"), getStateText(sysCfg.mqtt_response)); + snprintf_P(svalue, ssvalue, PSTR("{\"MqttResponse\":\"%s\"}"), getStateText(sysCfg.flag.mqtt_response)); } else if (!strcmp_P(type,PSTR("STATETEXT")) && (index > 0) && (index <= 3)) { if ((data_len > 0) && (data_len < sizeof(sysCfg.state_text[0]))) { @@ -764,9 +764,9 @@ boolean mqtt_command(boolean grpflg, char *type, uint16_t index, char *dataBuf, send_button_power(0, i, 3); // Clear MQTT retain in broker } } - sysCfg.mqtt_button_retain = payload; + sysCfg.flag.mqtt_button_retain = payload; } - snprintf_P(svalue, ssvalue, PSTR("{\"ButtonRetain\":\"%s\"}"), getStateText(sysCfg.mqtt_button_retain)); + snprintf_P(svalue, ssvalue, PSTR("{\"ButtonRetain\":\"%s\"}"), getStateText(sysCfg.flag.mqtt_button_retain)); } else if (!strcmp_P(type,PSTR("SWITCHRETAIN"))) { if ((data_len > 0) && (payload >= 0) && (payload <= 1)) { @@ -776,9 +776,9 @@ boolean mqtt_command(boolean grpflg, char *type, uint16_t index, char *dataBuf, send_button_power(1, i, 3); // Clear MQTT retain in broker } } - sysCfg.mqtt_switch_retain = payload; + sysCfg.flag.mqtt_switch_retain = payload; } - snprintf_P(svalue, ssvalue, PSTR("{\"SwitchRetain\":\"%s\"}"), getStateText(sysCfg.mqtt_switch_retain)); + snprintf_P(svalue, ssvalue, PSTR("{\"SwitchRetain\":\"%s\"}"), getStateText(sysCfg.flag.mqtt_switch_retain)); } else if (!strcmp_P(type,PSTR("POWERRETAIN"))) { if ((data_len > 0) && (payload >= 0) && (payload <= 1)) { @@ -786,12 +786,12 @@ boolean mqtt_command(boolean grpflg, char *type, uint16_t index, char *dataBuf, for(i = 1; i <= Maxdevice; i++) { // Clear MQTT retain in broker snprintf_P(stemp2, sizeof(stemp2), PSTR("%d"), i); snprintf_P(stemp1, sizeof(stemp1), PSTR("%s/%s/POWER%s"), sysCfg.mqtt_prefix[1], sysCfg.mqtt_topic, (Maxdevice > 1) ? stemp2 : ""); - mqtt_publish(stemp1, "", sysCfg.mqtt_power_retain); + mqtt_publish(stemp1, "", sysCfg.flag.mqtt_power_retain); } } - sysCfg.mqtt_power_retain = payload; + sysCfg.flag.mqtt_power_retain = payload; } - snprintf_P(svalue, ssvalue, PSTR("{\"PowerRetain\":\"%s\"}"), getStateText(sysCfg.mqtt_power_retain)); + snprintf_P(svalue, ssvalue, PSTR("{\"PowerRetain\":\"%s\"}"), getStateText(sysCfg.flag.mqtt_power_retain)); } #ifdef USE_DOMOTICZ else if (domoticz_command(type, index, dataBuf, data_len, payload, svalue, ssvalue)) { @@ -844,7 +844,7 @@ void mqttDataCb(char* topic, byte* data, unsigned int data_len) // if (LOG_LEVEL_DEBUG_MORE <= seriallog_level) Serial.println(dataBuf); #ifdef USE_DOMOTICZ - if (sysCfg.mqtt_enabled) { + if (sysCfg.flag.mqtt_enabled) { if (domoticz_mqttData(topicBuf, sizeof(topicBuf), dataBuf, sizeof(dataBuf))) { return; } @@ -901,10 +901,10 @@ void mqttDataCb(char* topic, byte* data, unsigned int data_len) } int16_t payload = atoi(dataBuf); // -32766 - 32767 uint16_t payload16 = atoi(dataBuf); // 0 - 65535 - if (!strcmp_P(dataBufUc,PSTR("OFF")) || !strcmp_P(dataBufUc,PSTR("FALSE")) || !strcmp_P(dataBufUc,PSTR("STOP"))) { + if (!strcmp_P(dataBufUc,PSTR("OFF")) || !strcmp_P(dataBufUc,PSTR("FALSE")) || !strcmp_P(dataBufUc,PSTR("STOP")) || !strcmp_P(dataBufUc,PSTR("CELSIUS"))) { payload = 0; } - if (!strcmp_P(dataBufUc,PSTR("ON")) || !strcmp_P(dataBufUc,PSTR("TRUE")) || !strcmp_P(dataBufUc,PSTR("START")) || !strcmp_P(dataBufUc,PSTR("USER"))) { + if (!strcmp_P(dataBufUc,PSTR("ON")) || !strcmp_P(dataBufUc,PSTR("TRUE")) || !strcmp_P(dataBufUc,PSTR("START")) || !strcmp_P(dataBufUc,PSTR("FAHRENHEIT")) || !strcmp_P(dataBufUc,PSTR("USER"))) { payload = 1; } if (!strcmp_P(dataBufUc,PSTR("TOGGLE")) || !strcmp_P(dataBufUc,PSTR("ADMIN"))) { @@ -970,7 +970,7 @@ void mqttDataCb(char* topic, byte* data, unsigned int data_len) sysCfg.savedata = payload; savedatacounter = sysCfg.savedata; } - if (sysCfg.savestate) { + if (sysCfg.flag.savestate) { sysCfg.power = power; } CFG_Save(); @@ -981,28 +981,58 @@ void mqttDataCb(char* topic, byte* data, unsigned int data_len) } else if (!strcmp_P(type,PSTR("SAVESTATE"))) { if ((data_len > 0) && (payload >= 0) && (payload <= 1)) { - sysCfg.savestate = payload; + sysCfg.flag.savestate = payload; } - snprintf_P(svalue, sizeof(svalue), PSTR("{\"SaveState\":\"%s\"}"), getStateText(sysCfg.savestate)); + snprintf_P(svalue, sizeof(svalue), PSTR("{\"SaveState\":\"%s\"}"), getStateText(sysCfg.flag.savestate)); } else if (!strcmp_P(type,PSTR("BUTTONRESTRICT"))) { if ((data_len > 0) && (payload >= 0) && (payload <= 1)) { - sysCfg.button_restrict = payload; + sysCfg.flag.button_restrict = payload; } - snprintf_P(svalue, sizeof(svalue), PSTR("{\"ButtonRestrict\":\"%s\"}"), getStateText(sysCfg.button_restrict)); + snprintf_P(svalue, sizeof(svalue), PSTR("{\"ButtonRestrict\":\"%s\"}"), getStateText(sysCfg.flag.button_restrict)); } else if (!strcmp_P(type,PSTR("UNITS"))) { if ((data_len > 0) && (payload >= 0) && (payload <= 1)) { - sysCfg.value_units = payload; + sysCfg.flag.value_units = payload; } - snprintf_P(svalue, sizeof(svalue), PSTR("{\"Units\":\"%s\"}"), getStateText(sysCfg.value_units)); + snprintf_P(svalue, sizeof(svalue), PSTR("{\"Units\":\"%s\"}"), getStateText(sysCfg.flag.value_units)); } else if (!strcmp_P(type,PSTR("MQTT"))) { if ((data_len > 0) && (payload >= 0) && (payload <= 1)) { - sysCfg.mqtt_enabled = payload; + sysCfg.flag.mqtt_enabled = payload; restartflag = 2; } - snprintf_P(svalue, sizeof(svalue), PSTR("{\"Mqtt\":\"%s\"}"), getStateText(sysCfg.mqtt_enabled)); + snprintf_P(svalue, sizeof(svalue), PSTR("{\"Mqtt\":\"%s\"}"), getStateText(sysCfg.flag.mqtt_enabled)); + } + else if (!strcmp_P(type,PSTR("TEMPUNIT"))) { + if ((data_len > 0) && (payload >= 0) && (payload <= 1)) { + sysCfg.flag.temperature_conversion = payload; + } + snprintf_P(svalue, sizeof(svalue), PSTR("{\"TempUnit\":\"%s\"}"), (sysCfg.flag.temperature_conversion) ? "Fahrenheit" : "Celsius"); + } + else if (!strcmp_P(type,PSTR("TEMPRES"))) { + if ((data_len > 0) && (payload >= 0) && (payload <= 3)) { + sysCfg.flag.temperature_resolution = payload; + } + snprintf_P(svalue, sizeof(svalue), PSTR("{\"TempRes\":%d}"), sysCfg.flag.temperature_resolution); + } + else if (!strcmp_P(type,PSTR("HUMRES"))) { + if ((data_len > 0) && (payload >= 0) && (payload <= 3)) { + sysCfg.flag.humidity_resolution = payload; + } + snprintf_P(svalue, sizeof(svalue), PSTR("{\"HumRes\":%d}"), sysCfg.flag.humidity_resolution); + } + else if (!strcmp_P(type,PSTR("PRESSRES"))) { + if ((data_len > 0) && (payload >= 0) && (payload <= 3)) { + sysCfg.flag.pressure_resolution = payload; + } + snprintf_P(svalue, sizeof(svalue), PSTR("{\"PressRes\":%d}"), sysCfg.flag.pressure_resolution); + } + else if (!strcmp_P(type,PSTR("ENERGYRES"))) { + if ((data_len > 0) && (payload >= 0) && (payload <= 5)) { + sysCfg.flag.energy_resolution = payload; + } + snprintf_P(svalue, sizeof(svalue), PSTR("{\"EnergyRes\":%d}"), sysCfg.flag.energy_resolution); } else if (!strcmp_P(type,PSTR("MODULE"))) { if ((data_len > 0) && (payload > 0) && (payload <= MAXMODULE)) { @@ -1123,7 +1153,7 @@ void mqttDataCb(char* topic, byte* data, unsigned int data_len) sysCfg.sleep = payload; sleep = payload; } - snprintf_P(svalue, sizeof(svalue), PSTR("{\"Sleep\":\"%d%s (%d%s)\"}"), sleep, (sysCfg.value_units) ? " mS" : "", sysCfg.sleep, (sysCfg.value_units) ? " mS" : ""); + snprintf_P(svalue, sizeof(svalue), PSTR("{\"Sleep\":\"%d%s (%d%s)\"}"), sleep, (sysCfg.flag.value_units) ? " mS" : "", sysCfg.sleep, (sysCfg.flag.value_units) ? " mS" : ""); } else if (!strcmp_P(type,PSTR("FLASHMODE"))) { // 0 = QIO, 1 = QOUT, 2 = DIO, 3 = DOUT if ((data_len > 0) && (payload >= 0) && (payload <= 3)) { @@ -1157,7 +1187,7 @@ void mqttDataCb(char* topic, byte* data, unsigned int data_len) else if (!strcmp_P(type,PSTR("SYSLOG"))) { if ((data_len > 0) && (payload >= LOG_LEVEL_NONE) && (payload <= LOG_LEVEL_ALL)) { sysCfg.syslog_level = payload; - syslog_level = (sysCfg.emulation) ? 0 : payload; + syslog_level = (sysCfg.flag.emulation) ? 0 : payload; syslog_timer = 0; } snprintf_P(svalue, sizeof(svalue), PSTR("{\"SysLog\":\"%d (Active %d)\"}"), sysCfg.syslog_level, syslog_level); @@ -1293,10 +1323,10 @@ void mqttDataCb(char* topic, byte* data, unsigned int data_len) #ifdef USE_EMULATION else if (!strcmp_P(type,PSTR("EMULATION"))) { if ((data_len > 0) && (payload >= 0) && (payload <= 2)) { - sysCfg.emulation = payload; + sysCfg.flag.emulation = payload; restartflag = 2; } - snprintf_P(svalue, sizeof(svalue), PSTR("{\"Emulation\":%d}"), sysCfg.emulation); + snprintf_P(svalue, sizeof(svalue), PSTR("{\"Emulation\":%d}"), sysCfg.flag.emulation); } #endif // USE_EMULATION #endif // USE_WEBSERVER @@ -1308,7 +1338,7 @@ void mqttDataCb(char* topic, byte* data, unsigned int data_len) } tele_period = sysCfg.tele_period; } - snprintf_P(svalue, sizeof(svalue), PSTR("{\"TelePeriod\":\"%d%s\"}"), sysCfg.tele_period, (sysCfg.value_units) ? " Sec" : ""); + snprintf_P(svalue, sizeof(svalue), PSTR("{\"TelePeriod\":\"%d%s\"}"), sysCfg.tele_period, (sysCfg.flag.value_units) ? " Sec" : ""); } else if (!strcmp_P(type,PSTR("RESTART"))) { switch (payload) { @@ -1371,10 +1401,26 @@ void mqttDataCb(char* topic, byte* data, unsigned int data_len) snprintf_P(svalue, sizeof(svalue), PSTR("{\"LedState\":%d}"), sysCfg.ledstate); } else if (!strcmp_P(type,PSTR("CFGDUMP"))) { - CFG_Dump(); + uint16_t srow = 0; + uint16_t mrow = 0; + if (data_len > 0) { + srow = payload16; + byte i = 0; + while (isdigit(dataBuf[i])) { + i++; + } + if (i < strlen(dataBuf)) { + mrow = atoi(dataBuf +i); + } + if (0 == mrow) { + mrow = payload16; + srow = 0; + } + } + CFG_Dump(srow, mrow); snprintf_P(svalue, sizeof(svalue), PSTR("{\"CfgDump\":\"Done\"}")); } - else if (sysCfg.mqtt_enabled && mqtt_command(grpflg, type, index, dataBuf, data_len, payload, svalue, sizeof(svalue))) { + else if (sysCfg.flag.mqtt_enabled && mqtt_command(grpflg, type, index, dataBuf, data_len, payload, svalue, sizeof(svalue))) { // Serviced } else if (hlw_flg && hlw_command(type, index, dataBuf, data_len, payload, svalue, sizeof(svalue))) { @@ -1444,10 +1490,10 @@ void send_button_power(byte key, byte device, byte state) } #ifdef USE_DOMOTICZ if (!(domoticz_button(key, device, state, strlen(svalue)))) { - mqtt_publish_sec(stopic, svalue, (key) ? sysCfg.mqtt_switch_retain : sysCfg.mqtt_button_retain); + mqtt_publish_sec(stopic, svalue, (key) ? sysCfg.flag.mqtt_switch_retain : sysCfg.flag.mqtt_button_retain); } #else - mqtt_publish_sec(stopic, svalue, (key) ? sysCfg.mqtt_switch_retain : sysCfg.mqtt_button_retain); + mqtt_publish_sec(stopic, svalue, (key) ? sysCfg.flag.mqtt_switch_retain : sysCfg.flag.mqtt_button_retain); #endif // USE_DOMOTICZ } @@ -1552,7 +1598,7 @@ void publish_status(uint8_t payload) // Workaround MQTT - TCP/IP stack queueing when SUB_PREFIX = PUB_PREFIX option = (!strcmp(sysCfg.mqtt_prefix[0],sysCfg.mqtt_prefix[1]) && (!payload)); - if ((!sysCfg.mqtt_enabled) && (6 == payload)) { + if ((!sysCfg.flag.mqtt_enabled) && (6 == payload)) { payload = 99; } if ((!hlw_flg) && ((8 == payload) || (9 == payload))) { @@ -1561,7 +1607,7 @@ void publish_status(uint8_t payload) if ((0 == payload) || (99 == payload)) { snprintf_P(svalue, sizeof(svalue), PSTR("{\"Status\":{\"Module\":%d, \"FriendlyName\":\"%s\", \"Topic\":\"%s\", \"ButtonTopic\":\"%s\", \"Power\":%d, \"PowerOnState\":%d, \"LedState\":%d, \"SaveData\":%d, \"SaveState\":%d, \"ButtonRetain\":%d, \"PowerRetain\":%d}}"), - sysCfg.module +1, sysCfg.friendlyname[0], sysCfg.mqtt_topic, sysCfg.button_topic, power, sysCfg.poweronstate, sysCfg.ledstate, sysCfg.savedata, sysCfg.savestate, sysCfg.mqtt_button_retain, sysCfg.mqtt_power_retain); + sysCfg.module +1, sysCfg.friendlyname[0], sysCfg.mqtt_topic, sysCfg.button_topic, power, sysCfg.poweronstate, sysCfg.ledstate, sysCfg.savedata, sysCfg.flag.savestate, sysCfg.flag.mqtt_button_retain, sysCfg.flag.mqtt_power_retain); mqtt_publish_topic_P(option, PSTR("STATUS"), svalue); } @@ -1596,7 +1642,7 @@ void publish_status(uint8_t payload) mqtt_publish_topic_P(option, PSTR("STATUS5"), svalue); } - if (((0 == payload) || (6 == payload)) && sysCfg.mqtt_enabled) { + if (((0 == payload) || (6 == payload)) && sysCfg.flag.mqtt_enabled) { snprintf_P(svalue, sizeof(svalue), PSTR("{\"StatusMQT\":{\"Host\":\"%s\", \"Port\":%d, \"ClientMask\":\"%s\", \"Client\":\"%s\", \"User\":\"%s\", \"MAX_PACKET_SIZE\":%d, \"KEEPALIVE\":%d}}"), sysCfg.mqtt_host, sysCfg.mqtt_port, sysCfg.mqtt_client, MQTTClient, sysCfg.mqtt_user, MQTT_MAX_PACKET_SIZE, MQTT_KEEPALIVE); mqtt_publish_topic_P(option, PSTR("STATUS6"), svalue); @@ -1687,7 +1733,7 @@ void sensors_mqttPresent(char* svalue, uint16_t ssvalue, uint8_t* djson) #endif // USE_DS18x20 } #ifdef USE_DHT - if (dht_type) { + if (dht_flg) { dht_mqttPresent(svalue, ssvalue, djson); } #endif // USE_DHT @@ -1706,7 +1752,10 @@ void sensors_mqttPresent(char* svalue, uint16_t ssvalue, uint8_t* djson) bh1750_mqttPresent(svalue, ssvalue, djson); #endif // USE_BH1750 } -#endif // USE_I2C +#endif // USE_I2C + if (strstr_P(svalue, PSTR("Temperature"))) { + snprintf_P(svalue, ssvalue, PSTR("%s, \"TempUnit\":\"%c\""), svalue, tempUnit()); + } snprintf_P(svalue, ssvalue, PSTR("%s}"), svalue); } @@ -1735,7 +1784,7 @@ void every_second() if (syslog_timer) { // Restore syslog level syslog_timer--; if (!syslog_timer) { - syslog_level = (sysCfg.emulation) ? 0 : sysCfg.syslog_level; + syslog_level = (sysCfg.flag.emulation) ? 0 : sysCfg.syslog_level; if (sysCfg.syslog_level) { addLog_P(LOG_LEVEL_INFO, PSTR("SYSL: Syslog logging re-enabled")); // Might trigger disable again (on purpose) } @@ -1768,7 +1817,7 @@ void every_second() #endif // USE_DS18x20 } #ifdef USE_DHT - if (dht_type) { + if (dht_flg) { dht_readPrep(); } #endif // USE_DHT @@ -1914,7 +1963,7 @@ void stateloop() holdcount = 0; } else { holdcount++; - if (!sysCfg.button_restrict && ((STATES *4) == holdcount)) { // 4 seconds button hold + if (!sysCfg.flag.button_restrict && ((STATES *4) == holdcount)) { // 4 seconds button hold snprintf_P(scmnd, sizeof(scmnd), PSTR("reset 1")); multipress = 0; do_cmnd(scmnd); @@ -1929,7 +1978,7 @@ void stateloop() } else { flag = (1 == multipress); } - if (flag && sysCfg.mqtt_enabled && mqttClient.connected() && (strlen(sysCfg.button_topic) != 0) && strcmp(sysCfg.button_topic, "0")) { + if (flag && sysCfg.flag.mqtt_enabled && mqttClient.connected() && (strlen(sysCfg.button_topic) != 0) && strcmp(sysCfg.button_topic, "0")) { send_button_power(0, multipress, 2); // Execute command via MQTT using ButtonTopic to sync external clients } else { if ((1 == multipress) || (2 == multipress)) { @@ -1939,7 +1988,7 @@ void stateloop() do_cmnd_power(multipress, 2); // Execute command internally } } else { - if (!sysCfg.button_restrict) { + if (!sysCfg.flag.button_restrict) { snprintf_P(scmnd, sizeof(scmnd), commands[multipress -3]); do_cmnd(scmnd); } @@ -1953,7 +2002,7 @@ void stateloop() if (pin[GPIO_KEY1 +i] < 99) { button = digitalRead(pin[GPIO_KEY1 +i]); if ((PRESSED == button) && (NOT_PRESSED == lastbutton[i])) { - if (sysCfg.mqtt_enabled && mqttClient.connected() && (strlen(sysCfg.button_topic) != 0) && strcmp(sysCfg.button_topic, "0")) { + if (sysCfg.flag.mqtt_enabled && mqttClient.connected() && (strlen(sysCfg.button_topic) != 0) && strcmp(sysCfg.button_topic, "0")) { send_button_power(0, i +1, 2); // Execute commend via MQTT } else { do_cmnd_power(i +1, 2); // Execute command internally @@ -1989,7 +2038,7 @@ void stateloop() } } if (switchflag < 3) { - if (sysCfg.mqtt_enabled && mqttClient.connected() && (strlen(sysCfg.switch_topic) != 0) && strcmp(sysCfg.switch_topic, "0")) { + if (sysCfg.flag.mqtt_enabled && mqttClient.connected() && (strlen(sysCfg.switch_topic) != 0) && strcmp(sysCfg.switch_topic, "0")) { send_button_power(1, i +1, switchflag); // Execute commend via MQTT } else { do_cmnd_power(i +1, switchflag); // Execute command internally (if i < Maxdevice) @@ -2066,7 +2115,7 @@ void stateloop() if (savedatacounter) { savedatacounter--; if (savedatacounter <= 0) { - if (sysCfg.savestate) { + if (sysCfg.flag.savestate) { byte mask = 0xFF; for (byte i = 0; i < MAX_PULSETIMERS; i++) { if ((sysCfg.pulsetime[i] > 0) && (sysCfg.pulsetime[i] < 30)) { @@ -2091,7 +2140,7 @@ void stateloop() CFG_Default(); restartflag = 2; } - if (sysCfg.savestate) { + if (sysCfg.flag.savestate) { sysCfg.power = power; } if (hlw_flg) { @@ -2111,7 +2160,7 @@ void stateloop() break; case (STATES/10)*8: if (WL_CONNECTED == WiFi.status()) { - if (sysCfg.mqtt_enabled) { + if (sysCfg.flag.mqtt_enabled) { if (!mqttClient.connected()) { if (!mqttcounter) { mqtt_reconnect(); @@ -2231,17 +2280,16 @@ void GPIO_init() led_inverted[mpin - GPIO_LED1_INV] = 1; mpin -= 4; } - else if (GPIO_DHT11 == mpin) { - dht_type = mpin; - } - else if (GPIO_DHT21 == mpin) { - dht_type = mpin; - mpin--; - } - else if (GPIO_DHT22 == mpin) { - dht_type = mpin; - mpin -= 2; + else if ((mpin >= GPIO_DHT11) && (mpin <= GPIO_DHT22)) { + if (dht_setup(i, mpin)) { + dht_flg = 1; + mpin = GPIO_DHT11; + } else { + mpin = 0; + } } + } + if (mpin) { pin[mpin] = i; } } @@ -2326,7 +2374,7 @@ void GPIO_init() } #ifdef USE_DHT - if (dht_type) { + if (dht_flg) { dht_init(); } #endif // USE_DHT @@ -2389,9 +2437,9 @@ void setup() seriallog_timer = SERIALLOG_TIMER; seriallog_level = sysCfg.seriallog_level; #ifndef USE_EMULATION - sysCfg.emulation = 0; + sysCfg.flag.emulation = 0; #endif // USE_EMULATION - syslog_level = (sysCfg.emulation) ? 0 : sysCfg.syslog_level; + syslog_level = (sysCfg.flag.emulation) ? 0 : sysCfg.syslog_level; sleep = sysCfg.sleep; GPIO_init(); @@ -2432,19 +2480,19 @@ void setup() } else if (2 == sysCfg.poweronstate) { // All saved state toggle power = sysCfg.power & ((1 << Maxdevice) -1) ^ 0xFF; - if (sysCfg.savestate) { + if (sysCfg.flag.savestate) { setRelay(power); } } else if (3 == sysCfg.poweronstate) { // All saved state power = sysCfg.power & ((1 << Maxdevice) -1); - if (sysCfg.savestate) { + if (sysCfg.flag.savestate) { setRelay(power); } } } else { power = sysCfg.power & ((1 << Maxdevice) -1); - if (sysCfg.savestate) { + if (sysCfg.flag.savestate) { setRelay(power); } } @@ -2470,7 +2518,7 @@ void loop() #endif // USE_WEBSERVER #ifdef USE_EMULATION - if (sysCfg.emulation) { + if (sysCfg.flag.emulation) { pollUDP(); } #endif // USE_EMULATION @@ -2478,7 +2526,7 @@ void loop() if (millis() >= timerxs) { stateloop(); } - if (sysCfg.mqtt_enabled) { + if (sysCfg.flag.mqtt_enabled) { mqttClient.loop(); } if (Serial.available()){ diff --git a/sonoff/support.ino b/sonoff/support.ino index 37f7a0730..7f3b86dbf 100644 --- a/sonoff/support.ino +++ b/sonoff/support.ino @@ -475,7 +475,7 @@ void WIFI_Check(uint8_t param) stopWebserver(); } #ifdef USE_EMULATION - if (sysCfg.emulation) { + if (sysCfg.flag.emulation) { UDP_Connect(); } #endif // USE_EMULATION @@ -942,6 +942,25 @@ void rtc_init() tickerRTC.attach(1, rtc_second); } +/*********************************************************************************************\ + * Miscellaneous +\*********************************************************************************************/ + +float convertTemp(float c) +{ + float result = c; + + if (!isnan(c) && sysCfg.flag.temperature_conversion) { + result = c * 1.8 + 32; // Fahrenheit + } + return result; +} + +char tempUnit() +{ + return (sysCfg.flag.temperature_conversion) ? 'F' : 'C'; +} + /*********************************************************************************************\ * Syslog \*********************************************************************************************/ diff --git a/sonoff/user_config.h b/sonoff/user_config.h index e73361d53..251917b8c 100644 --- a/sonoff/user_config.h +++ b/sonoff/user_config.h @@ -120,11 +120,11 @@ #define SWITCH_MODE TOGGLE // [SwitchMode] TOGGLE, FOLLOW, FOLLOW_INV, PUSHBUTTON or PUSHBUTTON_INV (the wall switch state) #define WS2812_LEDS 30 // [Pixels] Number of WS2812 LEDs to start with -#define TEMP_CONVERSION 0 // Convert temperature to (0 = Celsius or 1 = Fahrenheit) -#define TEMP_RESOLUTION 1 // Maximum number of decimals (0 - 3) showing sensor Temperature -#define HUMIDITY_RESOLUTION 1 // Maximum number of decimals (0 - 3) showing sensor Humidity -#define PRESSURE_RESOLUTION 1 // Maximum number of decimals (0 - 3) showing sensor Pressure -#define ENERGY_RESOLUTION 3 // Maximum number of decimals (0 - 5) showing energy usage in kWh +#define TEMP_CONVERSION 0 // [TempUnit] Return temperature in (0 = Celsius or 1 = Fahrenheit) +#define TEMP_RESOLUTION 1 // [TempRes] Maximum number of decimals (0 - 3) showing sensor Temperature +#define HUMIDITY_RESOLUTION 1 // [HumRes] Maximum number of decimals (0 - 3) showing sensor Humidity +#define PRESSURE_RESOLUTION 1 // [PressRes] Maximum number of decimals (0 - 3) showing sensor Pressure +#define ENERGY_RESOLUTION 3 // [EnergyRes] Maximum number of decimals (0 - 5) showing energy usage in kWh // -- Sensor code selection ----------------------- #define USE_ADC_VCC // Display Vcc in Power status. Disable for use as Analog input on selected devices diff --git a/sonoff/webserver.ino b/sonoff/webserver.ino index f1011fa2d..4a213d62a 100644 --- a/sonoff/webserver.ino +++ b/sonoff/webserver.ino @@ -303,7 +303,7 @@ void startWebserver(int type, IPAddress ipweb) webServer->on("/md", handleModule); webServer->on("/w1", handleWifi1); webServer->on("/w0", handleWifi0); - if (sysCfg.mqtt_enabled) { + if (sysCfg.flag.mqtt_enabled) { webServer->on("/mq", handleMqtt); #ifdef USE_DOMOTICZ webServer->on("/dm", handleDomoticz); @@ -326,12 +326,12 @@ void startWebserver(int type, IPAddress ipweb) webServer->on("/rb", handleRestart); webServer->on("/fwlink", handleRoot); // Microsoft captive portal. Maybe not needed. Might be handled by notFound handler. #ifdef USE_EMULATION - if (EMUL_WEMO == sysCfg.emulation) { + if (EMUL_WEMO == sysCfg.flag.emulation) { webServer->on("/upnp/control/basicevent1", HTTP_POST, handleUPnPevent); webServer->on("/eventservice.xml", handleUPnPservice); webServer->on("/setup.xml", handleUPnPsetupWemo); } - if (EMUL_HUE == sysCfg.emulation) { + if (EMUL_HUE == sysCfg.flag.emulation) { webServer->on("/description.xml", handleUPnPsetupHue); } #endif // USE_EMULATION @@ -483,7 +483,7 @@ void handleAjax2() } #endif // USE_DS18x20 #ifdef USE_DHT - if (dht_type) { + if (dht_flg) { tpage += dht_webPresent(); } #endif // USE_DHT @@ -554,7 +554,7 @@ void handleConfig() String page = FPSTR(HTTP_HEAD); page.replace("{v}", "Configuration"); page += FPSTR(HTTP_BTN_MENU2); - if (sysCfg.mqtt_enabled) { + if (sysCfg.flag.mqtt_enabled) { page += FPSTR(HTTP_BTN_MENU3); } page += FPSTR(HTTP_BTN_MENU4); @@ -857,16 +857,16 @@ void handleOther() page.replace("{v}", "Configure Other"); page += FPSTR(HTTP_FORM_OTHER); page.replace("{p1}", sysCfg.web_password); - page.replace("{r1}", (sysCfg.mqtt_enabled) ? " checked" : ""); + page.replace("{r1}", (sysCfg.flag.mqtt_enabled) ? " checked" : ""); page += FPSTR(HTTP_FORM_OTHER2); page.replace("{1", "1"); page.replace("{2", FRIENDLY_NAME); page.replace("{3", sysCfg.friendlyname[0]); #ifdef USE_EMULATION page += FPSTR(HTTP_FORM_OTHER3); - page.replace("{r2}", (EMUL_NONE == sysCfg.emulation) ? " checked" : ""); - page.replace("{r3}", (EMUL_WEMO == sysCfg.emulation) ? " checked" : ""); - page.replace("{r4}", (EMUL_HUE == sysCfg.emulation) ? " checked" : ""); + page.replace("{r2}", (EMUL_NONE == sysCfg.flag.emulation) ? " checked" : ""); + page.replace("{r3}", (EMUL_WEMO == sysCfg.flag.emulation) ? " checked" : ""); + page.replace("{r4}", (EMUL_HUE == sysCfg.flag.emulation) ? " checked" : ""); for (int i = 1; i < Maxdevice; i++) { page += FPSTR(HTTP_FORM_OTHER2); page.replace("{1", String(i +1)); @@ -972,16 +972,16 @@ void handleSave() #endif // USE_DOMOTICZ case 5: strlcpy(sysCfg.web_password, (!strlen(webServer->arg("p1").c_str())) ? WEB_PASSWORD : (!strcmp(webServer->arg("p1").c_str(),"0")) ? "" : webServer->arg("p1").c_str(), sizeof(sysCfg.web_password)); - sysCfg.mqtt_enabled = webServer->hasArg("b1"); + sysCfg.flag.mqtt_enabled = webServer->hasArg("b1"); #ifdef USE_EMULATION - sysCfg.emulation = (!strlen(webServer->arg("b2").c_str())) ? 0 : atoi(webServer->arg("b2").c_str()); + sysCfg.flag.emulation = (!strlen(webServer->arg("b2").c_str())) ? 0 : atoi(webServer->arg("b2").c_str()); #endif // USE_EMULATION strlcpy(sysCfg.friendlyname[0], (!strlen(webServer->arg("a1").c_str())) ? FRIENDLY_NAME : webServer->arg("a1").c_str(), sizeof(sysCfg.friendlyname[0])); strlcpy(sysCfg.friendlyname[1], (!strlen(webServer->arg("a2").c_str())) ? FRIENDLY_NAME"2" : webServer->arg("a2").c_str(), sizeof(sysCfg.friendlyname[1])); strlcpy(sysCfg.friendlyname[2], (!strlen(webServer->arg("a3").c_str())) ? FRIENDLY_NAME"3" : webServer->arg("a3").c_str(), sizeof(sysCfg.friendlyname[2])); strlcpy(sysCfg.friendlyname[3], (!strlen(webServer->arg("a4").c_str())) ? FRIENDLY_NAME"4" : webServer->arg("a4").c_str(), sizeof(sysCfg.friendlyname[3])); snprintf_P(log, sizeof(log), PSTR("HTTP: Other MQTT Enable %s, Emulation %d, Friendly Names %s, %s, %s and %s"), - getStateText(sysCfg.mqtt_enabled), sysCfg.emulation, sysCfg.friendlyname[0], sysCfg.friendlyname[1], sysCfg.friendlyname[2], sysCfg.friendlyname[3]); + getStateText(sysCfg.flag.mqtt_enabled), sysCfg.flag.emulation, sysCfg.friendlyname[0], sysCfg.friendlyname[1], sysCfg.friendlyname[2], sysCfg.friendlyname[3]); addLog(LOG_LEVEL_INFO, log); break; case 6: @@ -1190,7 +1190,7 @@ void handleUploadLoop() #ifdef USE_EMULATION UDP_Disconnect(); #endif // USE_EMULATION - if (sysCfg.mqtt_enabled) { + if (sysCfg.flag.mqtt_enabled) { mqttClient.disconnect(); } uint32_t maxSketchSpace = (ESP.getFreeSketchSpace() - 0x1000) & 0xFFFFF000; @@ -1320,7 +1320,7 @@ void handleCmnd() if (message.length()) { message += F("\n"); } - if (sysCfg.mqtt_enabled) { + if (sysCfg.flag.mqtt_enabled) { // [14:49:36 MQTT: stat/wemos5/RESULT = {"POWER":"OFF"}] > [RESULT = {"POWER":"OFF"}] // message += Log[counter].substring(17 + strlen(PUB_PREFIX) + strlen(sysCfg.mqtt_topic)); message += Log[counter].substring(Log[counter].lastIndexOf("/",Log[counter].indexOf("="))+1); @@ -1469,7 +1469,7 @@ void handleInfo() page += F("AP MAC address"); page += WiFi.softAPmacAddress(); page += F(""); } page += F(" "); - if (sysCfg.mqtt_enabled) { + if (sysCfg.flag.mqtt_enabled) { page += F("MQTT Host"); page += sysCfg.mqtt_host; page += F(""); page += F("MQTT Port"); page += String(sysCfg.mqtt_port); page += F(""); page += F("MQTT Client &
 Fallback Topic"); page += MQTTClient; page += F(""); @@ -1483,10 +1483,10 @@ void handleInfo() page += F("Emulation"); #ifdef USE_EMULATION - if (EMUL_WEMO == sysCfg.emulation) { + if (EMUL_WEMO == sysCfg.flag.emulation) { page += F("Belkin WeMo"); } - else if (EMUL_HUE == sysCfg.emulation) { + else if (EMUL_HUE == sysCfg.flag.emulation) { page += F("Hue Bridge"); } else { @@ -1556,7 +1556,7 @@ void handleNotFound() #ifdef USE_EMULATION String path = webServer->uri(); - if ((EMUL_HUE == sysCfg.emulation) && (path.startsWith("/api"))) { + if ((EMUL_HUE == sysCfg.flag.emulation) && (path.startsWith("/api"))) { handle_hue_api(&path); } else #endif // USE_EMULATION diff --git a/sonoff/xdrv_snfsc.ino b/sonoff/xdrv_snfsc.ino index 88d22264b..892eb31eb 100644 --- a/sonoff/xdrv_snfsc.ino +++ b/sonoff/xdrv_snfsc.ino @@ -111,13 +111,10 @@ void sc_mqttPresent(char* svalue, uint16_t ssvalue, uint8_t* djson) char stemp1[10]; char stemp2[10]; - float t = sc_value[1]; - if (TEMP_CONVERSION) { - t = sc_convertCtoF(t); - } - dtostrf(t, 1, TEMP_RESOLUTION &3, stemp1); + float t = convertTemp(sc_value[1]); + dtostrf(t, 1, sysCfg.flag.temperature_resolution, stemp1); float h = sc_value[0]; - dtostrf(h, 1, HUMIDITY_RESOLUTION &3, stemp2); + dtostrf(h, 1, sysCfg.flag.humidity_resolution, stemp2); // snprintf_P(svalue, ssvalue, PSTR("%s, \"SC\":{\"Temperature\":%s, \"Humidity\":%s, \"Light\":%d, \"Noise\":%d, \"AirQuality\":%d}"), snprintf_P(svalue, ssvalue, PSTR("%s, \"Temperature\":%s, \"Humidity\":%s, \"Light\":%d, \"Noise\":%d, \"AirQuality\":%d"), svalue, stemp1, stemp2, sc_value[2], sc_value[3], sc_value[4]); @@ -139,15 +136,12 @@ String sc_webPresent() char sensor[80]; char scstype[] = ""; - float t = sc_value[1]; - if (TEMP_CONVERSION) { - t = sc_convertCtoF(t); - } - dtostrf(t, 1, TEMP_RESOLUTION &3, stemp); - snprintf_P(sensor, sizeof(sensor), HTTP_SNS_TEMP, scstype, stemp, (TEMP_CONVERSION) ? 'F' : 'C'); + float t = convertTemp(sc_value[1]); + dtostrf(t, 1, sysCfg.flag.temperature_resolution, stemp); + snprintf_P(sensor, sizeof(sensor), HTTP_SNS_TEMP, scstype, stemp, tempUnit()); page += sensor; float h = sc_value[0]; - dtostrf(h, 1, HUMIDITY_RESOLUTION &3, stemp); + dtostrf(h, 1, sysCfg.flag.humidity_resolution, stemp); snprintf_P(sensor, sizeof(sensor), HTTP_SNS_HUM, scstype, stemp); page += sensor; snprintf_P(sensor, sizeof(sensor), HTTP_SNS_LIGHT, scstype, sc_value[2]); diff --git a/sonoff/xdrv_wemohue.ino b/sonoff/xdrv_wemohue.ino index 5092ea6d0..b7e1b9e2c 100644 --- a/sonoff/xdrv_wemohue.ino +++ b/sonoff/xdrv_wemohue.ino @@ -214,10 +214,10 @@ void pollUDP() String request = packetBuffer; // addLog_P(LOG_LEVEL_DEBUG_MORE, packetBuffer); if (request.indexOf("M-SEARCH") >= 0) { - if ((EMUL_WEMO == sysCfg.emulation) &&(request.indexOf("urn:Belkin:device:**") > 0)) { + if ((EMUL_WEMO == sysCfg.flag.emulation) &&(request.indexOf("urn:Belkin:device:**") > 0)) { wemo_respondToMSearch(); } - else if ((EMUL_HUE == sysCfg.emulation) && ((request.indexOf("ST: urn:schemas-upnp-org:device:basic:1") > 0) || (request.indexOf("ST: upnp:rootdevice") > 0) || (request.indexOf("ST: ssdp:all") > 0))) { + else if ((EMUL_HUE == sysCfg.flag.emulation) && ((request.indexOf("ST: urn:schemas-upnp-org:device:basic:1") > 0) || (request.indexOf("ST: upnp:rootdevice") > 0) || (request.indexOf("ST: ssdp:all") > 0))) { hue_respondToMSearch(); } } diff --git a/sonoff/xsns_bmp.ino b/sonoff/xsns_bmp.ino index 391cba0a2..adf9a47c6 100644 --- a/sonoff/xsns_bmp.ino +++ b/sonoff/xsns_bmp.ino @@ -351,12 +351,7 @@ double bme280_readHumidity(void) * BMP \*********************************************************************************************/ -double bmp_convertCtoF(double c) -{ - return c * 1.8 + 32; -} - -double bmp_readTemperature(bool S) +double bmp_readTemperature(void) { double t = NAN; @@ -369,9 +364,7 @@ double bmp_readTemperature(bool S) t = bmp280_readTemperature(); } if (!isnan(t)) { - if (S) { - t = bmp_convertCtoF(t); - } + t = convertTemp(t); return t; } return 0; @@ -453,12 +446,12 @@ void bmp_mqttPresent(char* svalue, uint16_t ssvalue, uint8_t* djson) char stemp2[10]; char stemp3[10]; - double t = bmp_readTemperature(TEMP_CONVERSION); + double t = bmp_readTemperature(); double p = bmp_readPressure(); double h = bmp_readHumidity(); - dtostrf(t, 1, TEMP_RESOLUTION &3, stemp1); - dtostrf(p, 1, PRESSURE_RESOLUTION &3, stemp2); - dtostrf(h, 1, HUMIDITY_RESOLUTION &3, stemp3); + dtostrf(t, 1, sysCfg.flag.temperature_resolution, stemp1); + dtostrf(p, 1, sysCfg.flag.pressure_resolution, stemp2); + dtostrf(h, 1, sysCfg.flag.humidity_resolution, stemp3); if (!strcmp(bmpstype,"BME280")) { snprintf_P(svalue, ssvalue, PSTR("%s, \"%s\":{\"Temperature\":%s, \"Humidity\":%s, \"Pressure\":%s}"), svalue, bmpstype, stemp1, stemp3, stemp2); @@ -480,18 +473,18 @@ String bmp_webPresent() char stemp[10]; char sensor[80]; - double t_bmp = bmp_readTemperature(TEMP_CONVERSION); + double t_bmp = bmp_readTemperature(); double p_bmp = bmp_readPressure(); double h_bmp = bmp_readHumidity(); - dtostrf(t_bmp, 1, TEMP_RESOLUTION &3, stemp); - snprintf_P(sensor, sizeof(sensor), HTTP_SNS_TEMP, bmpstype, stemp, (TEMP_CONVERSION) ? 'F' : 'C'); + dtostrf(t_bmp, 1, sysCfg.flag.temperature_resolution, stemp); + snprintf_P(sensor, sizeof(sensor), HTTP_SNS_TEMP, bmpstype, stemp, tempUnit()); page += sensor; if (!strcmp(bmpstype,"BME280")) { - dtostrf(h_bmp, 1, HUMIDITY_RESOLUTION &3, stemp); + dtostrf(h_bmp, 1, sysCfg.flag.humidity_resolution, stemp); snprintf_P(sensor, sizeof(sensor), HTTP_SNS_HUM, bmpstype, stemp); page += sensor; } - dtostrf(p_bmp, 1, PRESSURE_RESOLUTION &3, stemp); + dtostrf(p_bmp, 1, sysCfg.flag.pressure_resolution, stemp); snprintf_P(sensor, sizeof(sensor), HTTP_SNS_PRESSURE, bmpstype, stemp); page += sensor; } diff --git a/sonoff/xsns_dht.ino b/sonoff/xsns_dht.ino index d391bad1b..3b130b91a 100644 --- a/sonoff/xsns_dht.ino +++ b/sonoff/xsns_dht.ino @@ -32,71 +32,80 @@ POSSIBILITY OF SUCH DAMAGE. * Source: Adafruit Industries https://github.com/adafruit/DHT-sensor-library \*********************************************************************************************/ -#define MIN_INTERVAL 2000 +#define DHT_MAX_SENSORS 3 +#define MIN_INTERVAL 2000 -uint8_t data[5]; -char dhtstype[7]; -uint32_t _lastreadtime; -uint32_t _maxcycles; -bool _lastresult; -float mt; -float mh = 0; +uint32_t dht_maxcycles; +uint8_t dht_data[5]; +byte dht_sensors = 0; + +struct DHTSTRUCT { + byte pin; + byte type; + char stype[10]; + uint32_t lastreadtime; + bool lastresult; + float t; + float h = 0; +} dht[DHT_MAX_SENSORS]; void dht_readPrep() { - digitalWrite(pin[GPIO_DHT11], HIGH); + for (byte i = 0; i < dht_sensors; i++) { + digitalWrite(dht[i].pin, HIGH); + } } -uint32_t dht_expectPulse(bool level) +uint32_t dht_expectPulse(byte sensor, bool level) { uint32_t count = 0; - while (digitalRead(pin[GPIO_DHT11]) == level) { - if (count++ >= _maxcycles) { + while (digitalRead(dht[sensor].pin) == level) { + if (count++ >= dht_maxcycles) { return 0; } } return count; } -boolean dht_read() +boolean dht_read(byte sensor) { char log[LOGSZ]; uint32_t cycles[80]; uint32_t currenttime = millis(); - if ((currenttime - _lastreadtime) < 2000) { - return _lastresult; + if ((currenttime - dht[sensor].lastreadtime) < 2000) { + return dht[sensor].lastresult; } - _lastreadtime = currenttime; + dht[sensor].lastreadtime = currenttime; - data[0] = data[1] = data[2] = data[3] = data[4] = 0; + dht_data[0] = dht_data[1] = dht_data[2] = dht_data[3] = dht_data[4] = 0; -// digitalWrite(pin[GPIO_DHT11], HIGH); +// digitalWrite(dht[sensor].pin, HIGH); // delay(250); - pinMode(pin[GPIO_DHT11], OUTPUT); - digitalWrite(pin[GPIO_DHT11], LOW); + pinMode(dht[sensor].pin, OUTPUT); + digitalWrite(dht[sensor].pin, LOW); delay(20); noInterrupts(); - digitalWrite(pin[GPIO_DHT11], HIGH); + digitalWrite(dht[sensor].pin, HIGH); delayMicroseconds(40); - pinMode(pin[GPIO_DHT11], INPUT_PULLUP); + pinMode(dht[sensor].pin, INPUT_PULLUP); delayMicroseconds(10); - if (0 == dht_expectPulse(LOW)) { + if (0 == dht_expectPulse(sensor, LOW)) { addLog_P(LOG_LEVEL_DEBUG, PSTR("DHT: Timeout waiting for start signal low pulse")); - _lastresult = false; - return _lastresult; + dht[sensor].lastresult = false; + return dht[sensor].lastresult; } - if (0 == dht_expectPulse(HIGH)) { + if (0 == dht_expectPulse(sensor, HIGH)) { addLog_P(LOG_LEVEL_DEBUG, PSTR("DHT: Timeout waiting for start signal high pulse")); - _lastresult = false; - return _lastresult; + dht[sensor].lastresult = false; + return dht[sensor].lastresult; } for (int i = 0; i < 80; i += 2) { - cycles[i] = dht_expectPulse(LOW); - cycles[i+1] = dht_expectPulse(HIGH); + cycles[i] = dht_expectPulse(sensor, LOW); + cycles[i+1] = dht_expectPulse(sensor, HIGH); } interrupts(); @@ -105,101 +114,105 @@ boolean dht_read() uint32_t highCycles = cycles[2*i+1]; if ((0 == lowCycles) || (0 == highCycles)) { addLog_P(LOG_LEVEL_DEBUG, PSTR("DHT: Timeout waiting for pulse")); - _lastresult = false; - return _lastresult; + dht[sensor].lastresult = false; + return dht[sensor].lastresult; } - data[i/8] <<= 1; + dht_data[i/8] <<= 1; if (highCycles > lowCycles) { - data[i/8] |= 1; + dht_data[i/8] |= 1; } } snprintf_P(log, sizeof(log), PSTR("DHT: Received %02X, %02X, %02X, %02X, %02X =? %02X"), - data[0], data[1], data[2], data[3], data[4], (data[0] + data[1] + data[2] + data[3]) & 0xFF); + dht_data[0], dht_data[1], dht_data[2], dht_data[3], dht_data[4], (dht_data[0] + dht_data[1] + dht_data[2] + dht_data[3]) & 0xFF); addLog(LOG_LEVEL_DEBUG, log); - if (data[4] == ((data[0] + data[1] + data[2] + data[3]) & 0xFF)) { - _lastresult = true; - return _lastresult; + if (dht_data[4] == ((dht_data[0] + dht_data[1] + dht_data[2] + dht_data[3]) & 0xFF)) { + dht[sensor].lastresult = true; } else { addLog_P(LOG_LEVEL_DEBUG, PSTR("DHT: Checksum failure")); - _lastresult = false; - return _lastresult; + dht[sensor].lastresult = false; } + return dht[sensor].lastresult; } -float dht_convertCtoF(float c) +boolean dht_readTempHum(byte sensor, float &t, float &h) { - return c * 1.8 + 32; -} - -boolean dht_readTempHum(bool S, float &t, float &h) -{ - if (!mh) { + if (!dht[sensor].h) { t = NAN; h = NAN; } else { - t = mt; - h = mh; + t = dht[sensor].t; + h = dht[sensor].h; } - if (dht_read()) { - switch (dht_type) { + if (dht_read(sensor)) { + switch (dht[sensor].type) { case GPIO_DHT11: - h = data[0]; - t = data[2]; - if (S) { - t = dht_convertCtoF(t); - } + h = dht_data[0]; + t = convertTemp(dht_data[2]); break; case GPIO_DHT22: case GPIO_DHT21: - h = data[0]; + h = dht_data[0]; h *= 256; - h += data[1]; + h += dht_data[1]; h *= 0.1; - t = data[2] & 0x7F; + t = dht_data[2] & 0x7F; t *= 256; - t += data[3]; + t += dht_data[3]; t *= 0.1; - if (data[2] & 0x80) { + if (dht_data[2] & 0x80) { t *= -1; } - if (S) { - t = dht_convertCtoF(t); - } + t = convertTemp(t); break; } if (!isnan(t)) { - mt = t; + dht[sensor].t = t; } if (!isnan(h)) { - mh = h; + dht[sensor].h = h; } } return (!isnan(t) && !isnan(h)); } +boolean dht_setup(byte pin, byte type) +{ + boolean success = false; + + if (dht_sensors < DHT_MAX_SENSORS) { + dht[dht_sensors].pin = pin; + dht[dht_sensors].type = type; + dht_sensors++; + success = true; + } + return success; +} + void dht_init() { char log[LOGSZ]; - _maxcycles = microsecondsToClockCycles(1000); // 1 millisecond timeout for - // reading pulses from DHT sensor. - pinMode(pin[GPIO_DHT11], INPUT_PULLUP); - _lastreadtime = -MIN_INTERVAL; - switch (dht_type) { - case GPIO_DHT11: - strcpy(dhtstype, "DHT11"); - break; - case GPIO_DHT21: - strcpy(dhtstype, "AM2301"); - break; - case GPIO_DHT22: - strcpy(dhtstype, "DHT22"); + dht_maxcycles = microsecondsToClockCycles(1000); // 1 millisecond timeout for reading pulses from DHT sensor. + + for (byte i = 0; i < dht_sensors; i++) { + pinMode(dht[i].pin, INPUT_PULLUP); + dht[i].lastreadtime = -MIN_INTERVAL; + switch (dht[i].type) { + case GPIO_DHT11: + snprintf_P(dht[i].stype, sizeof(dht[i].stype), PSTR("DHT11-%02d"), dht[i].pin); + break; + case GPIO_DHT21: + snprintf_P(dht[i].stype, sizeof(dht[i].stype), PSTR("AM2301-%02d"), dht[i].pin); + break; + case GPIO_DHT22: + snprintf_P(dht[i].stype, sizeof(dht[i].stype), PSTR("DHT22-%02d"), dht[i].pin); + } } - - snprintf_P(log, sizeof(log), PSTR("DHT: Max clock cycles %d"), _maxcycles); + + snprintf_P(log, sizeof(log), PSTR("DHT: Max clock cycles %d"), dht_maxcycles); addLog(LOG_LEVEL_DEBUG, log); } @@ -214,16 +227,22 @@ void dht_mqttPresent(char* svalue, uint16_t ssvalue, uint8_t* djson) float t; float h; - if (dht_readTempHum(TEMP_CONVERSION, t, h)) { // Read temperature - dtostrf(t, 1, TEMP_RESOLUTION &3, stemp1); - dtostrf(h, 1, HUMIDITY_RESOLUTION &3, stemp2); -// snprintf_P(svalue, ssvalue, PSTR("%s, \"%s\":{\"Temperature\":%s, \"Humidity\":%s}"), -// svalue, dhtstype, stemp1, stemp2); - snprintf_P(svalue, ssvalue, JSON_SNS_TEMPHUM, svalue, dhtstype, stemp1, stemp2); - *djson = 1; + byte dsxflg = 0; + for (byte i = 0; i < dht_sensors; i++) { + if (dht_readTempHum(i, t, h)) { // Read temperature + dtostrf(t, 1, sysCfg.flag.temperature_resolution, stemp1); + dtostrf(h, 1, sysCfg.flag.humidity_resolution, stemp2); +// snprintf_P(svalue, ssvalue, PSTR("%s, \"%s\":{\"Temperature\":%s, \"Humidity\":%s}"), +// svalue, dhtstype, stemp1, stemp2); + snprintf_P(svalue, ssvalue, JSON_SNS_TEMPHUM, svalue, dht[i].stype, stemp1, stemp2); + *djson = 1; #ifdef USE_DOMOTICZ - domoticz_sensor2(stemp1, stemp2); + if (!dsxflg) { + domoticz_sensor2(stemp1, stemp2); + dsxflg++; + } #endif // USE_DOMOTICZ + } } } @@ -231,20 +250,20 @@ void dht_mqttPresent(char* svalue, uint16_t ssvalue, uint8_t* djson) String dht_webPresent() { String page = ""; + char stemp[10]; + char sensor[80]; float t; float h; - if (dht_readTempHum(TEMP_CONVERSION, t, h)) { // Read temperature as Celsius (the default) - char stemp[10]; - char sensor[80]; - - dtostrf(t, 1, TEMP_RESOLUTION &3, stemp); - snprintf_P(sensor, sizeof(sensor), HTTP_SNS_TEMP, dhtstype, stemp, (TEMP_CONVERSION) ? 'F' : 'C'); - page += sensor; - dtostrf(h, 1, HUMIDITY_RESOLUTION &3, stemp); - snprintf_P(sensor, sizeof(sensor), HTTP_SNS_HUM, dhtstype, stemp); - page += sensor; - + for (byte i = 0; i < dht_sensors; i++) { + if (dht_readTempHum(i, t, h)) { + dtostrf(t, 1, sysCfg.flag.temperature_resolution, stemp); + snprintf_P(sensor, sizeof(sensor), HTTP_SNS_TEMP, dht[i].stype, stemp, tempUnit()); + page += sensor; + dtostrf(h, 1, sysCfg.flag.humidity_resolution, stemp); + snprintf_P(sensor, sizeof(sensor), HTTP_SNS_HUM, dht[i].stype, stemp); + page += sensor; + } } return page; } diff --git a/sonoff/xsns_ds18b20.ino b/sonoff/xsns_ds18b20.ino index b84ff0857..0c24e962e 100644 --- a/sonoff/xsns_ds18b20.ino +++ b/sonoff/xsns_ds18b20.ino @@ -129,12 +129,7 @@ void dsb_readTempPrep() dsb_write(0x44); // Start conversion } -float dsb_convertCtoF(float c) -{ - return c * 1.8 + 32; -} - -boolean dsb_readTemp(bool S, float &t) +boolean dsb_readTemp(float &t) { int16_t DSTemp; byte msb, lsb, crc, sign = 1; @@ -178,10 +173,7 @@ boolean dsb_readTemp(bool S, float &t) DSTemp = (~DSTemp) +1; sign = -1; } - t = (float)sign * DSTemp * 0.0625; - if(S) { - t = dsb_convertCtoF(t); - } + t = convertTemp((float)sign * DSTemp * 0.0625); } if (!isnan(t)) dsb_mt = t; return !isnan(t); @@ -196,8 +188,8 @@ void dsb_mqttPresent(char* svalue, uint16_t ssvalue, uint8_t* djson) char stemp1[10]; float t; - if (dsb_readTemp(TEMP_CONVERSION, t)) { // Check if read failed - dtostrf(t, 1, TEMP_RESOLUTION &3, stemp1); + if (dsb_readTemp(t)) { // Check if read failed + dtostrf(t, 1, sysCfg.flag.temperature_resolution, stemp1); snprintf_P(svalue, ssvalue, PSTR("%s, \"DS18B20\":{\"Temperature\":%s}"), svalue, stemp1); *djson = 1; #ifdef USE_DOMOTICZ @@ -213,12 +205,12 @@ String dsb_webPresent() String page = ""; float st; - if (dsb_readTemp(TEMP_CONVERSION, st)) { // Check if read failed + if (dsb_readTemp(st)) { // Check if read failed char stemp[10]; char sensor[80]; - dtostrf(st, 1, TEMP_RESOLUTION &3, stemp); - snprintf_P(sensor, sizeof(sensor), HTTP_SNS_TEMP, "DS18B20", stemp, (TEMP_CONVERSION) ? 'F' : 'C'); + dtostrf(st, 1, sysCfg.flag.temperature_resolution, stemp); + snprintf_P(sensor, sizeof(sensor), HTTP_SNS_TEMP, "DS18B20", stemp, tempUnit()); page += sensor; } dsb_readTempPrep(); diff --git a/sonoff/xsns_ds18x20.ino b/sonoff/xsns_ds18x20.ino index 8afc60863..4eef3f685 100644 --- a/sonoff/xsns_ds18x20.ino +++ b/sonoff/xsns_ds18x20.ino @@ -107,12 +107,7 @@ void ds18x20_convert() // delay(750); // 750ms should be enough for 12bit conv } -float ds18x20_convertCtoF(float c) -{ - return c * 1.8 + 32; -} - -boolean ds18x20_read(uint8_t sensor, bool S, float &t) +boolean ds18x20_read(uint8_t sensor, float &t) { byte data[12]; int8_t sign = 1; @@ -155,10 +150,7 @@ boolean ds18x20_read(uint8_t sensor, bool S, float &t) } else { temp9 = (data[0] >> 1) * sign; } - t = (temp9 - 0.25) + ((16.0 - data[6]) / 16.0); - if(S) { - t = ds18x20_convertCtoF(t); - } + t = convertTemp((temp9 - 0.25) + ((16.0 - data[6]) / 16.0)); break; case DS18B20_CHIPID: // DS18B20 case MAX31850_CHIPID: // MAX31850 @@ -167,10 +159,7 @@ boolean ds18x20_read(uint8_t sensor, bool S, float &t) temp12 = (~temp12) +1; sign = -1; } - t = sign * temp12 * 0.0625; - if(S) { - t = ds18x20_convertCtoF(t); - } + t = convertTemp(sign * temp12 * 0.0625); break; } } @@ -205,9 +194,9 @@ void ds18x20_mqttPresent(char* svalue, uint16_t ssvalue, uint8_t* djson) byte dsxflg = 0; for (byte i = 0; i < ds18x20_sensors(); i++) { - if (ds18x20_read(i, TEMP_CONVERSION, t)) { // Check if read failed + if (ds18x20_read(i, t)) { // Check if read failed ds18x20_type(i); - dtostrf(t, 1, TEMP_RESOLUTION &3, stemp2); + dtostrf(t, 1, sysCfg.flag.temperature_resolution, stemp2); if (!dsxflg) { snprintf_P(svalue, ssvalue, PSTR("%s, \"DS18x20\":{"), svalue); *djson = 1; @@ -237,11 +226,11 @@ String ds18x20_webPresent() float t; for (byte i = 0; i < ds18x20_sensors(); i++) { - if (ds18x20_read(i, TEMP_CONVERSION, t)) { // Check if read failed + if (ds18x20_read(i, t)) { // Check if read failed ds18x20_type(i); - dtostrf(t, 1, TEMP_RESOLUTION &3, stemp); + dtostrf(t, 1, sysCfg.flag.temperature_resolution, stemp); snprintf_P(stemp2, sizeof(stemp2), PSTR("%s-%d"), dsbstype, i +1); - snprintf_P(sensor, sizeof(sensor), HTTP_SNS_TEMP, stemp2, stemp, (TEMP_CONVERSION) ? 'F' : 'C'); + snprintf_P(sensor, sizeof(sensor), HTTP_SNS_TEMP, stemp2, stemp, tempUnit()); page += sensor; } } diff --git a/sonoff/xsns_hlw8012.ino b/sonoff/xsns_hlw8012.ino index 340c6cb71..4f18f0fb0 100644 --- a/sonoff/xsns_hlw8012.ino +++ b/sonoff/xsns_hlw8012.ino @@ -375,7 +375,7 @@ void hlw_margin_chk() } else { hlw_mplh_counter--; if (!hlw_mplh_counter) { - snprintf_P(svalue, sizeof(svalue), PSTR("{\"MaxPowerReached\":\"%d%s\"}"), pw, (sysCfg.value_units) ? " W" : ""); + snprintf_P(svalue, sizeof(svalue), PSTR("{\"MaxPowerReached\":\"%d%s\"}"), pw, (sysCfg.flag.value_units) ? " W" : ""); mqtt_publish_topic_P(0, PSTR("WARNING"), svalue); do_cmnd_power(1, 0); if (!hlw_mplr_counter) { @@ -421,7 +421,7 @@ void hlw_margin_chk() else if ((1 == hlw_mkwh_state) && (uped >= sysCfg.hlw_mkwh)) { hlw_mkwh_state = 2; dtostrf(ped, 1, 3, svalue); - snprintf_P(svalue, sizeof(svalue), PSTR("{\"MaxEnergyReached\":\"%s%s\"}"), svalue, (sysCfg.value_units) ? " kWh" : ""); + snprintf_P(svalue, sizeof(svalue), PSTR("{\"MaxEnergyReached\":\"%s%s\"}"), svalue, (sysCfg.flag.value_units) ? " kWh" : ""); mqtt_publish_topic_P(0, PSTR("WARNING"), svalue); do_cmnd_power(1, 0); } @@ -441,105 +441,105 @@ boolean hlw_command(char *type, uint16_t index, char *dataBuf, uint16_t data_len if ((data_len > 0) && (payload >= 0) && (payload < 3601)) { sysCfg.hlw_pmin = payload; } - snprintf_P(svalue, ssvalue, PSTR("{\"PowerLow\":\"%d%s\"}"), sysCfg.hlw_pmin, (sysCfg.value_units) ? " W" : ""); + snprintf_P(svalue, ssvalue, PSTR("{\"PowerLow\":\"%d%s\"}"), sysCfg.hlw_pmin, (sysCfg.flag.value_units) ? " W" : ""); } else if (!strcmp_P(type,PSTR("POWERHIGH"))) { if ((data_len > 0) && (payload >= 0) && (payload < 3601)) { sysCfg.hlw_pmax = payload; } - snprintf_P(svalue, ssvalue, PSTR("{\"PowerHigh\":\"%d%s\"}"), sysCfg.hlw_pmax, (sysCfg.value_units) ? " W" : ""); + snprintf_P(svalue, ssvalue, PSTR("{\"PowerHigh\":\"%d%s\"}"), sysCfg.hlw_pmax, (sysCfg.flag.value_units) ? " W" : ""); } else if (!strcmp_P(type,PSTR("VOLTAGELOW"))) { if ((data_len > 0) && (payload >= 0) && (payload < 501)) { sysCfg.hlw_umin = payload; } - snprintf_P(svalue, ssvalue, PSTR("{\"VoltageLow\":\"%d%s\"}"), sysCfg.hlw_umin, (sysCfg.value_units) ? " V" : ""); + snprintf_P(svalue, ssvalue, PSTR("{\"VoltageLow\":\"%d%s\"}"), sysCfg.hlw_umin, (sysCfg.flag.value_units) ? " V" : ""); } else if (!strcmp_P(type,PSTR("VOLTAGEHIGH"))) { if ((data_len > 0) && (payload >= 0) && (payload < 501)) { sysCfg.hlw_umax = payload; } - snprintf_P(svalue, ssvalue, PSTR("[\"VoltageHigh\":\"%d%s\"}"), sysCfg.hlw_umax, (sysCfg.value_units) ? " V" : ""); + snprintf_P(svalue, ssvalue, PSTR("[\"VoltageHigh\":\"%d%s\"}"), sysCfg.hlw_umax, (sysCfg.flag.value_units) ? " V" : ""); } else if (!strcmp_P(type,PSTR("CURRENTLOW"))) { if ((data_len > 0) && (payload >= 0) && (payload < 16001)) { sysCfg.hlw_imin = payload; } - snprintf_P(svalue, ssvalue, PSTR("{\"CurrentLow\":\"%d%s\"}"), sysCfg.hlw_imin, (sysCfg.value_units) ? " mA" : ""); + snprintf_P(svalue, ssvalue, PSTR("{\"CurrentLow\":\"%d%s\"}"), sysCfg.hlw_imin, (sysCfg.flag.value_units) ? " mA" : ""); } else if (!strcmp_P(type,PSTR("CURRENTHIGH"))) { if ((data_len > 0) && (payload >= 0) && (payload < 16001)) { sysCfg.hlw_imax = payload; } - snprintf_P(svalue, ssvalue, PSTR("{\"CurrentHigh\":\"%d%s\"}"), sysCfg.hlw_imax, (sysCfg.value_units) ? " mA" : ""); + snprintf_P(svalue, ssvalue, PSTR("{\"CurrentHigh\":\"%d%s\"}"), sysCfg.hlw_imax, (sysCfg.flag.value_units) ? " mA" : ""); } else if (!strcmp_P(type,PSTR("HLWPCAL"))) { if ((data_len > 0) && (payload > 0) && (payload < 32001)) { sysCfg.hlw_pcal = (payload > 9999) ? payload : HLW_PREF_PULSE; // 12530 } - snprintf_P(svalue, ssvalue, PSTR("(\"HlwPcal\":\"%d%s\"}"), sysCfg.hlw_pcal, (sysCfg.value_units) ? " uS" : ""); + snprintf_P(svalue, ssvalue, PSTR("(\"HlwPcal\":\"%d%s\"}"), sysCfg.hlw_pcal, (sysCfg.flag.value_units) ? " uS" : ""); } else if (!strcmp_P(type,PSTR("HLWUCAL"))) { if ((data_len > 0) && (payload > 0) && (payload < 32001)) { sysCfg.hlw_ucal = (payload > 999) ? payload : HLW_UREF_PULSE; // 1950 } - snprintf_P(svalue, ssvalue, PSTR("{\"HlwUcal\":\"%d%s\"}"), sysCfg.hlw_ucal, (sysCfg.value_units) ? " uS" : ""); + snprintf_P(svalue, ssvalue, PSTR("{\"HlwUcal\":\"%d%s\"}"), sysCfg.hlw_ucal, (sysCfg.flag.value_units) ? " uS" : ""); } else if (!strcmp_P(type,PSTR("HLWICAL"))) { if ((data_len > 0) && (payload > 0) && (payload < 32001)) { sysCfg.hlw_ical = (payload > 2499) ? payload : HLW_IREF_PULSE; // 3500 } - snprintf_P(svalue, ssvalue, PSTR("{\"HlwIcal\":\"%d%s\"}"), sysCfg.hlw_ical, (sysCfg.value_units) ? " uS" : ""); + snprintf_P(svalue, ssvalue, PSTR("{\"HlwIcal\":\"%d%s\"}"), sysCfg.hlw_ical, (sysCfg.flag.value_units) ? " uS" : ""); } #if FEATURE_POWER_LIMIT else if (!strcmp_P(type,PSTR("MAXPOWER"))) { if ((data_len > 0) && (payload >= 0) && (payload < 3601)) { sysCfg.hlw_mpl = payload; } - snprintf_P(svalue, ssvalue, PSTR("{\"MaxPower\":\"%d%s\"}"), sysCfg.hlw_mpl, (sysCfg.value_units) ? " W" : ""); + snprintf_P(svalue, ssvalue, PSTR("{\"MaxPower\":\"%d%s\"}"), sysCfg.hlw_mpl, (sysCfg.flag.value_units) ? " W" : ""); } else if (!strcmp_P(type,PSTR("MAXPOWERHOLD"))) { if ((data_len > 0) && (payload >= 0) && (payload < 3601)) { sysCfg.hlw_mplh = (1 == payload) ? MAX_POWER_HOLD : payload; } - snprintf_P(svalue, ssvalue, PSTR("{\"MaxPowerHold\":\"%d%s\"}"), sysCfg.hlw_mplh, (sysCfg.value_units) ? " Sec" : ""); + snprintf_P(svalue, ssvalue, PSTR("{\"MaxPowerHold\":\"%d%s\"}"), sysCfg.hlw_mplh, (sysCfg.flag.value_units) ? " Sec" : ""); } else if (!strcmp_P(type,PSTR("MAXPOWERWINDOW"))) { if ((data_len > 0) && (payload >= 0) && (payload < 3601)) { sysCfg.hlw_mplw = (1 == payload) ? MAX_POWER_WINDOW : payload; } - snprintf_P(svalue, ssvalue, PSTR("{\"MaxPowerWindow\":\"%d%s\"}"), sysCfg.hlw_mplw, (sysCfg.value_units) ? " Sec" : ""); + snprintf_P(svalue, ssvalue, PSTR("{\"MaxPowerWindow\":\"%d%s\"}"), sysCfg.hlw_mplw, (sysCfg.flag.value_units) ? " Sec" : ""); } else if (!strcmp_P(type,PSTR("SAFEPOWER"))) { if ((data_len > 0) && (payload >= 0) && (payload < 3601)) { sysCfg.hlw_mspl = payload; } - snprintf_P(svalue, ssvalue, PSTR("{\"SafePower\":\"%d%s\"}"), sysCfg.hlw_mspl, (sysCfg.value_units) ? " W" : ""); + snprintf_P(svalue, ssvalue, PSTR("{\"SafePower\":\"%d%s\"}"), sysCfg.hlw_mspl, (sysCfg.flag.value_units) ? " W" : ""); } else if (!strcmp_P(type,PSTR("SAFEPOWERHOLD"))) { if ((data_len > 0) && (payload >= 0) && (payload < 3601)) { sysCfg.hlw_msplh = (1 == payload) ? SAFE_POWER_HOLD : payload; } - snprintf_P(svalue, ssvalue, PSTR("{\"SafePowerHold\":\"%d%s\"}"), sysCfg.hlw_msplh, (sysCfg.value_units) ? " Sec" : ""); + snprintf_P(svalue, ssvalue, PSTR("{\"SafePowerHold\":\"%d%s\"}"), sysCfg.hlw_msplh, (sysCfg.flag.value_units) ? " Sec" : ""); } else if (!strcmp_P(type,PSTR("SAFEPOWERWINDOW"))) { if ((data_len > 0) && (payload >= 0) && (payload < 1440)) { sysCfg.hlw_msplw = (1 == payload) ? SAFE_POWER_WINDOW : payload; } - snprintf_P(svalue, ssvalue, PSTR("{\"SafePowerWindow\":\"%d%s\"}"), sysCfg.hlw_msplw, (sysCfg.value_units) ? " Min" : ""); + snprintf_P(svalue, ssvalue, PSTR("{\"SafePowerWindow\":\"%d%s\"}"), sysCfg.hlw_msplw, (sysCfg.flag.value_units) ? " Min" : ""); } else if (!strcmp_P(type,PSTR("MAXENERGY"))) { if ((data_len > 0) && (payload >= 0) && (payload < 3601)) { sysCfg.hlw_mkwh = payload; hlw_mkwh_state = 3; } - snprintf_P(svalue, ssvalue, PSTR("{\"MaxEnergy\":\"%d%s\"}"), sysCfg.hlw_mkwh, (sysCfg.value_units) ? " Wh" : ""); + snprintf_P(svalue, ssvalue, PSTR("{\"MaxEnergy\":\"%d%s\"}"), sysCfg.hlw_mkwh, (sysCfg.flag.value_units) ? " Wh" : ""); } else if (!strcmp_P(type,PSTR("MAXENERGYSTART"))) { if ((data_len > 0) && (payload >= 0) && (payload < 24)) { sysCfg.hlw_mkwhs = payload; } - snprintf_P(svalue, ssvalue, PSTR("{\"MaxEnergyStart\":\"%d%s\"}"), sysCfg.hlw_mkwhs, (sysCfg.value_units) ? " Hr" : ""); + snprintf_P(svalue, ssvalue, PSTR("{\"MaxEnergyStart\":\"%d%s\"}"), sysCfg.hlw_mkwhs, (sysCfg.flag.value_units) ? " Hr" : ""); } #endif // FEATURE_POWER_LIMIT else { @@ -567,8 +567,8 @@ void hlw_mqttStat(byte option, char* svalue, uint16_t ssvalue) uint16_t pu; hlw_readEnergy(option, ped, pe, pw, pu, pi, pc); - dtostrf((float)sysCfg.hlw_kWhyesterday / 100000000, 1, ENERGY_RESOLUTION &7, stemp0); - dtostrf(ped, 1, ENERGY_RESOLUTION &7, stemp1); + dtostrf((float)sysCfg.hlw_kWhyesterday / 100000000, 1, sysCfg.flag.energy_resolution, stemp0); + dtostrf(ped, 1, sysCfg.flag.energy_resolution, stemp1); dtostrf(pc, 1, 2, stemp2); dtostrf(pi, 1, 3, stemp3); snprintf_P(speriod, sizeof(speriod), PSTR(", \"Period\":%d"), pe); @@ -625,8 +625,8 @@ String hlw_webPresent() dtostrf(pi, 1, 3, stemp); dtostrf(pc, 1, 2, stemp2); - dtostrf(ped, 1, ENERGY_RESOLUTION &7, stemp3); - dtostrf((float)sysCfg.hlw_kWhyesterday / 100000000, 1, ENERGY_RESOLUTION &7, stemp4); + dtostrf(ped, 1, sysCfg.flag.energy_resolution, stemp3); + dtostrf((float)sysCfg.hlw_kWhyesterday / 100000000, 1, sysCfg.flag.energy_resolution, stemp4); snprintf_P(sensor, sizeof(sensor), HTTP_ENERGY_SNS, pu, stemp, pw, stemp2, stemp3, stemp4); page += sensor; return page; diff --git a/sonoff/xsns_htu21.ino b/sonoff/xsns_htu21.ino index fb943a710..03cf4976e 100644 --- a/sonoff/xsns_htu21.ino +++ b/sonoff/xsns_htu21.ino @@ -138,11 +138,6 @@ boolean htu21_init() return true; } -float htu21_convertCtoF(float c) -{ - return c * 1.8 + 32; -} - float htu21_readHumidity(void) { uint8_t checksum = 0; @@ -179,7 +174,7 @@ float htu21_readHumidity(void) return humidity; } -float htu21_readTemperature(bool S) +float htu21_readTemperature() { uint8_t checksum=0; uint16_t sensorval=0; @@ -202,10 +197,7 @@ float htu21_readTemperature(bool S) return 0.0; // Checksum mismatch } - t = (0.002681 * (float)sensorval - 46.85); - if(S) { - t = htu21_convertCtoF(t); - } + t = convertTemp(0.002681 * (float)sensorval - 46.85); return t; } @@ -279,11 +271,11 @@ void htu_mqttPresent(char* svalue, uint16_t ssvalue, uint8_t* djson) char stemp1[10]; char stemp2[10]; - float t = htu21_readTemperature(TEMP_CONVERSION); + float t = htu21_readTemperature(); float h = htu21_readHumidity(); h = htu21_compensatedHumidity(h, t); - dtostrf(t, 1, TEMP_RESOLUTION &3, stemp1); - dtostrf(h, 1, HUMIDITY_RESOLUTION &3, stemp2); + dtostrf(t, 1, sysCfg.flag.temperature_resolution, stemp1); + dtostrf(h, 1, sysCfg.flag.humidity_resolution, stemp2); snprintf_P(svalue, ssvalue, JSON_SNS_TEMPHUM, svalue, htustype, stemp1, stemp2); *djson = 1; #ifdef USE_DOMOTICZ @@ -299,13 +291,13 @@ String htu_webPresent() char stemp[10]; char sensor[80]; - float t_htu21 = htu21_readTemperature(TEMP_CONVERSION); + float t_htu21 = htu21_readTemperature(); float h_htu21 = htu21_readHumidity(); h_htu21 = htu21_compensatedHumidity(h_htu21, t_htu21); - dtostrf(t_htu21, 1, TEMP_RESOLUTION &3, stemp); - snprintf_P(sensor, sizeof(sensor), HTTP_SNS_TEMP, htustype, stemp, (TEMP_CONVERSION) ? 'F' : 'C'); + dtostrf(t_htu21, 1, sysCfg.flag.temperature_resolution, stemp); + snprintf_P(sensor, sizeof(sensor), HTTP_SNS_TEMP, htustype, stemp, tempUnit()); page += sensor; - dtostrf(h_htu21, 1, HUMIDITY_RESOLUTION &3, stemp); + dtostrf(h_htu21, 1, sysCfg.flag.humidity_resolution, stemp); snprintf_P(sensor, sizeof(sensor), HTTP_SNS_HUM, htustype, stemp); page += sensor; } diff --git a/sonoff/xsns_sht1x.ino b/sonoff/xsns_sht1x.ino index 7365c2fb9..4937d067f 100644 --- a/sonoff/xsns_sht1x.ino +++ b/sonoff/xsns_sht1x.ino @@ -161,9 +161,7 @@ boolean sht_readTempHum(float &t, float &h) const float t2 = 0.00008; rhLinear = c1 + c2 * humRaw + c3 * humRaw * humRaw; h = (t - 25) * (t1 + t2 * humRaw) + rhLinear; - if (!isnan(t) && TEMP_CONVERSION) { - t = t * 1.8 + 32; - } + t = convertTemp(t); return (!isnan(t) && !isnan(h)); } @@ -173,8 +171,8 @@ boolean sht_readCharTempHum(char* temp, char* hum) float h; boolean success = sht_readTempHum(t, h); - dtostrf(t, 1, TEMP_RESOLUTION &3, temp); - dtostrf(h, 1, HUMIDITY_RESOLUTION &3, hum); + dtostrf(t, 1, sysCfg.flag.temperature_resolution, temp); + dtostrf(h, 1, sysCfg.flag.humidity_resolution, hum); return success; } @@ -231,7 +229,7 @@ String sht_webPresent() if (sht_readCharTempHum(stemp, shum)) { char sensor[80]; - snprintf_P(sensor, sizeof(sensor), HTTP_SNS_TEMP, "SHT1X", stemp, (TEMP_CONVERSION) ? 'F' : 'C'); + snprintf_P(sensor, sizeof(sensor), HTTP_SNS_TEMP, "SHT1X", stemp, tempUnit()); page += sensor; snprintf_P(sensor, sizeof(sensor), HTTP_SNS_HUM, "SHT1X", shum); page += sensor;