diff --git a/sonoff/language/bg-BG.h b/sonoff/language/bg-BG.h index bd71bf38c..ccd767b2b 100644 --- a/sonoff/language/bg-BG.h +++ b/sonoff/language/bg-BG.h @@ -307,6 +307,7 @@ #define D_BASE_TYPE "Базиран на" #define D_TEMPLATE_FLAGS "Флагове" #define D_ALLOW_ADC0 "ADC0 вход" +#define D_ALLOW_ADC0_TEMP "ADC0 температура" #define D_ALLOW_PULLUP "Потребителски избор на pull-up" #define D_SAVE_CONFIGURATION "Запазване на конфигурацията" diff --git a/sonoff/language/cs-CZ.h b/sonoff/language/cs-CZ.h index a0b48f627..bf74e95e8 100644 --- a/sonoff/language/cs-CZ.h +++ b/sonoff/language/cs-CZ.h @@ -307,6 +307,7 @@ #define D_BASE_TYPE "Based on" #define D_TEMPLATE_FLAGS "Options" #define D_ALLOW_ADC0 "ADC0 input" +#define D_ALLOW_ADC0_TEMP "ADC0 temperature" #define D_ALLOW_PULLUP "User pull-up selection" #define D_SAVE_CONFIGURATION "Ulož nastavení" diff --git a/sonoff/language/de-DE.h b/sonoff/language/de-DE.h index dbcc39b9a..6e1f8f4c1 100644 --- a/sonoff/language/de-DE.h +++ b/sonoff/language/de-DE.h @@ -307,6 +307,7 @@ #define D_BASE_TYPE "basiert auf" #define D_TEMPLATE_FLAGS "Options" #define D_ALLOW_ADC0 "ADC0 input" +#define D_ALLOW_ADC0_TEMP "ADC0 Temperatur" #define D_ALLOW_PULLUP "Nutzer pull-up Auswahl" #define D_SAVE_CONFIGURATION "Konfiguration speichern" diff --git a/sonoff/language/el-GR.h b/sonoff/language/el-GR.h index 20e4ed47a..53a0d779f 100644 --- a/sonoff/language/el-GR.h +++ b/sonoff/language/el-GR.h @@ -307,6 +307,7 @@ #define D_BASE_TYPE "Based on" #define D_TEMPLATE_FLAGS "Options" #define D_ALLOW_ADC0 "ADC0 input" +#define D_ALLOW_ADC0_TEMP "ADC0 temperature" #define D_ALLOW_PULLUP "User pull-up selection" #define D_SAVE_CONFIGURATION "Αποθήκευση ρυθμίσεων" diff --git a/sonoff/language/en-GB.h b/sonoff/language/en-GB.h index 911e88d29..3b76639de 100644 --- a/sonoff/language/en-GB.h +++ b/sonoff/language/en-GB.h @@ -307,6 +307,7 @@ #define D_BASE_TYPE "Based on" #define D_TEMPLATE_FLAGS "Options" #define D_ALLOW_ADC0 "ADC0 input" +#define D_ALLOW_ADC0_TEMP "ADC0 temperature" #define D_ALLOW_PULLUP "User pull-up selection" #define D_SAVE_CONFIGURATION "Save configuration" diff --git a/sonoff/language/es-ES.h b/sonoff/language/es-ES.h index 426d829bd..004fbc7f1 100644 --- a/sonoff/language/es-ES.h +++ b/sonoff/language/es-ES.h @@ -307,6 +307,7 @@ #define D_BASE_TYPE "Based on" #define D_TEMPLATE_FLAGS "Options" #define D_ALLOW_ADC0 "ADC0 input" +#define D_ALLOW_ADC0_TEMP "ADC0 temperature" #define D_ALLOW_PULLUP "User pull-up selection" #define D_SAVE_CONFIGURATION "Grabar configuración" diff --git a/sonoff/language/fr-FR.h b/sonoff/language/fr-FR.h index 36e8566f3..7f57fb230 100644 --- a/sonoff/language/fr-FR.h +++ b/sonoff/language/fr-FR.h @@ -307,6 +307,7 @@ #define D_BASE_TYPE "Basé sur" #define D_TEMPLATE_FLAGS "Options" #define D_ALLOW_ADC0 "Entrée ADC0" +#define D_ALLOW_ADC0_TEMP "ADC0 temperature" #define D_ALLOW_PULLUP "Pull-up utilisateur" #define D_SAVE_CONFIGURATION "Enregistrer la configuration" diff --git a/sonoff/language/he-HE.h b/sonoff/language/he-HE.h index c6061d05a..9d6b76a12 100644 --- a/sonoff/language/he-HE.h +++ b/sonoff/language/he-HE.h @@ -307,6 +307,7 @@ #define D_BASE_TYPE "מבוסס על" #define D_TEMPLATE_FLAGS "אפשריות" #define D_ALLOW_ADC0 "ADC0 כניסת" +#define D_ALLOW_ADC0_TEMP "ADC0 temperature" #define D_ALLOW_PULLUP "pull-up בחירת משתמש עבור" #define D_SAVE_CONFIGURATION "שמירת הגדרות" diff --git a/sonoff/language/hu-HU.h b/sonoff/language/hu-HU.h index 76628df43..61d9c01ad 100644 --- a/sonoff/language/hu-HU.h +++ b/sonoff/language/hu-HU.h @@ -307,6 +307,7 @@ #define D_BASE_TYPE "Based on" #define D_TEMPLATE_FLAGS "Options" #define D_ALLOW_ADC0 "ADC0 input" +#define D_ALLOW_ADC0_TEMP "ADC0 temperature" #define D_ALLOW_PULLUP "User pull-up selection" #define D_SAVE_CONFIGURATION "Beállítások mentése" diff --git a/sonoff/language/it-IT.h b/sonoff/language/it-IT.h index b77fc7282..e392e7df0 100644 --- a/sonoff/language/it-IT.h +++ b/sonoff/language/it-IT.h @@ -307,6 +307,7 @@ #define D_BASE_TYPE "Based on" #define D_TEMPLATE_FLAGS "Options" #define D_ALLOW_ADC0 "ADC0 input" +#define D_ALLOW_ADC0_TEMP "ADC0 temperature" #define D_ALLOW_PULLUP "User pull-up selection" #define D_SAVE_CONFIGURATION "Salva configurazione" diff --git a/sonoff/language/ko-KO.h b/sonoff/language/ko-KO.h index c1c5d2b43..ad8102559 100644 --- a/sonoff/language/ko-KO.h +++ b/sonoff/language/ko-KO.h @@ -307,6 +307,7 @@ #define D_BASE_TYPE "Based on" #define D_TEMPLATE_FLAGS "옵션" #define D_ALLOW_ADC0 "ADC0 입력" +#define D_ALLOW_ADC0_TEMP "ADC0 temperature" #define D_ALLOW_PULLUP "User pull-up selection" #define D_SAVE_CONFIGURATION "설정 저장" diff --git a/sonoff/language/nl-NL.h b/sonoff/language/nl-NL.h index dc78b1445..ac7872228 100644 --- a/sonoff/language/nl-NL.h +++ b/sonoff/language/nl-NL.h @@ -291,8 +291,8 @@ #define D_TELEMETRY_PERIOD "Telemetry periode" #define D_OTHER_PARAMETERS "Overige parameters" -#define D_TEMPLATE "Template" -#define D_ACTIVATE "Activate" +#define D_TEMPLATE "Sjabloon" +#define D_ACTIVATE "Activeer" #define D_WEB_ADMIN_PASSWORD "Web Admin Wachtwoord" #define D_MQTT_ENABLE "MQTT ingeschakeld" #define D_FRIENDLY_NAME "Beschrijvende naam" @@ -301,12 +301,13 @@ #define D_SINGLE_DEVICE "een apparaat" #define D_MULTI_DEVICE "meer apparaten" -#define D_CONFIGURE_TEMPLATE "Configure Template" -#define D_TEMPLATE_PARAMETERS "Template parameters" -#define D_TEMPLATE_NAME "Name" -#define D_BASE_TYPE "Based on" -#define D_TEMPLATE_FLAGS "Options" -#define D_ALLOW_ADC0 "ADC0 input" +#define D_CONFIGURE_TEMPLATE "Configureer Sjabloon" +#define D_TEMPLATE_PARAMETERS "Sjabloon parameters" +#define D_TEMPLATE_NAME "Naam" +#define D_BASE_TYPE "Op basis van" +#define D_TEMPLATE_FLAGS "Opties" +#define D_ALLOW_ADC0 "ADC0 ingang" +#define D_ALLOW_ADC0_TEMP "ADC0 temperatuur" #define D_ALLOW_PULLUP "User pull-up selection" #define D_SAVE_CONFIGURATION "Bewaar configuratie" diff --git a/sonoff/language/pl-PL.h b/sonoff/language/pl-PL.h index 20507fc87..6b99d7233 100644 --- a/sonoff/language/pl-PL.h +++ b/sonoff/language/pl-PL.h @@ -307,6 +307,7 @@ #define D_BASE_TYPE "Based on" #define D_TEMPLATE_FLAGS "Options" #define D_ALLOW_ADC0 "ADC0 input" +#define D_ALLOW_ADC0_TEMP "ADC0 temperature" #define D_ALLOW_PULLUP "User pull-up selection" #define D_SAVE_CONFIGURATION "Zapisz ustawienia" diff --git a/sonoff/language/pt-BR.h b/sonoff/language/pt-BR.h index 433390fb6..40feecc1c 100644 --- a/sonoff/language/pt-BR.h +++ b/sonoff/language/pt-BR.h @@ -307,6 +307,7 @@ #define D_BASE_TYPE "Based on" #define D_TEMPLATE_FLAGS "Options" #define D_ALLOW_ADC0 "ADC0 input" +#define D_ALLOW_ADC0_TEMP "ADC0 temperature" #define D_ALLOW_PULLUP "User pull-up selection" #define D_SAVE_CONFIGURATION "Gravar configuração" diff --git a/sonoff/language/pt-PT.h b/sonoff/language/pt-PT.h index 4240008b4..3cc8343d5 100644 --- a/sonoff/language/pt-PT.h +++ b/sonoff/language/pt-PT.h @@ -307,6 +307,7 @@ #define D_BASE_TYPE "Based on" #define D_TEMPLATE_FLAGS "Options" #define D_ALLOW_ADC0 "ADC0 input" +#define D_ALLOW_ADC0_TEMP "ADC0 temperature" #define D_ALLOW_PULLUP "User pull-up selection" #define D_SAVE_CONFIGURATION "Salvar configuração" diff --git a/sonoff/language/ru-RU.h b/sonoff/language/ru-RU.h index 2c39bb456..d91bd427c 100644 --- a/sonoff/language/ru-RU.h +++ b/sonoff/language/ru-RU.h @@ -307,6 +307,7 @@ #define D_BASE_TYPE "Based on" #define D_TEMPLATE_FLAGS "Options" #define D_ALLOW_ADC0 "ADC0 input" +#define D_ALLOW_ADC0_TEMP "ADC0 temperature" #define D_ALLOW_PULLUP "User pull-up selection" #define D_SAVE_CONFIGURATION "Сохранить конфигурацию" diff --git a/sonoff/language/sk-SK.h b/sonoff/language/sk-SK.h index a8134677b..8aa6174dc 100644 --- a/sonoff/language/sk-SK.h +++ b/sonoff/language/sk-SK.h @@ -307,6 +307,7 @@ #define D_BASE_TYPE "Based on" #define D_TEMPLATE_FLAGS "Options" #define D_ALLOW_ADC0 "ADC0 input" +#define D_ALLOW_ADC0_TEMP "ADC0 temperature" #define D_ALLOW_PULLUP "User pull-up selection" #define D_SAVE_CONFIGURATION "Ulož nastavenia" diff --git a/sonoff/language/sv-SE.h b/sonoff/language/sv-SE.h index 786d5c766..e82717157 100644 --- a/sonoff/language/sv-SE.h +++ b/sonoff/language/sv-SE.h @@ -307,6 +307,7 @@ #define D_BASE_TYPE "Based on" #define D_TEMPLATE_FLAGS "Options" #define D_ALLOW_ADC0 "ADC0 input" +#define D_ALLOW_ADC0_TEMP "ADC0 temperature" #define D_ALLOW_PULLUP "User pull-up selection" #define D_SAVE_CONFIGURATION "Spara konfiguration" diff --git a/sonoff/language/tr-TR.h b/sonoff/language/tr-TR.h index 59cd95023..aec12b8fb 100755 --- a/sonoff/language/tr-TR.h +++ b/sonoff/language/tr-TR.h @@ -307,6 +307,7 @@ #define D_BASE_TYPE "Based on" #define D_TEMPLATE_FLAGS "Options" #define D_ALLOW_ADC0 "ADC0 input" +#define D_ALLOW_ADC0_TEMP "ADC0 temperature" #define D_ALLOW_PULLUP "User pull-up selection" #define D_SAVE_CONFIGURATION "Ayarları Kaydet" diff --git a/sonoff/language/uk-UK.h b/sonoff/language/uk-UK.h index 4cceb18a6..6bf6397bf 100644 --- a/sonoff/language/uk-UK.h +++ b/sonoff/language/uk-UK.h @@ -307,6 +307,7 @@ #define D_BASE_TYPE "Based on" #define D_TEMPLATE_FLAGS "Options" #define D_ALLOW_ADC0 "ADC0 input" +#define D_ALLOW_ADC0_TEMP "ADC0 temperature" #define D_ALLOW_PULLUP "User pull-up selection" #define D_SAVE_CONFIGURATION "Зберегти конфігурацію" diff --git a/sonoff/language/zh-CN.h b/sonoff/language/zh-CN.h index 9612b370a..a48f6a474 100644 --- a/sonoff/language/zh-CN.h +++ b/sonoff/language/zh-CN.h @@ -307,6 +307,7 @@ #define D_BASE_TYPE "基于" #define D_TEMPLATE_FLAGS "选项" #define D_ALLOW_ADC0 "ADC0 输入" +#define D_ALLOW_ADC0_TEMP "ADC0 temperature" #define D_ALLOW_PULLUP "用户上拉选择" #define D_SAVE_CONFIGURATION "保存设置" diff --git a/sonoff/language/zh-TW.h b/sonoff/language/zh-TW.h index 0a1f8ed03..3caff8aa4 100644 --- a/sonoff/language/zh-TW.h +++ b/sonoff/language/zh-TW.h @@ -307,6 +307,7 @@ #define D_BASE_TYPE "Based on" #define D_TEMPLATE_FLAGS "Options" #define D_ALLOW_ADC0 "ADC0 input" +#define D_ALLOW_ADC0_TEMP "ADC0 temperature" #define D_ALLOW_PULLUP "User pull-up selection" #define D_SAVE_CONFIGURATION "保存設置" diff --git a/sonoff/sonoff_template.h b/sonoff/sonoff_template.h index 947ee2667..297177c6a 100644 --- a/sonoff/sonoff_template.h +++ b/sonoff/sonoff_template.h @@ -338,22 +338,22 @@ typedef struct MYCFGIO { uint8_t io[MAX_GPIO_PIN - MIN_FLASH_PINS]; } mycfgio; -#define GPIO_FLAG_USED 1 // Currently only one flag used +#define GPIO_FLAG_USED 2 // Currently two flags used -#define GPIO_FLAG_ADC0 1 // Allow ADC0 when define USE_ADC_VCC is disabled -#define GPIO_FLAG_SPARE01 2 // Allow input pull-up control using SetOption62 - Superseded by user template editing -#define GPIO_FLAG_SPARE02 4 -#define GPIO_FLAG_SPARE03 8 -#define GPIO_FLAG_SPARE04 16 -#define GPIO_FLAG_SPARE05 32 -#define GPIO_FLAG_SPARE06 64 -#define GPIO_FLAG_SPARE07 128 +#define GPIO_FLAG_ADC0 1 // Allow ADC0 when define USE_ADC_VCC is disabled +#define GPIO_FLAG_ADC0_TEMP 2 // Allow ADC0 as Temperature sensor when define USE_ADC_VCC is disabled +#define GPIO_FLAG_SPARE02 4 +#define GPIO_FLAG_SPARE03 8 +#define GPIO_FLAG_SPARE04 16 +#define GPIO_FLAG_SPARE05 32 +#define GPIO_FLAG_SPARE06 64 +#define GPIO_FLAG_SPARE07 128 typedef union { uint8_t data; struct { - uint8_t adc0 : 1; // Allow ADC0 when define USE_ADC_VCC is disabled - uint8_t spare01 : 1; + uint8_t adc0 : 1; // Allow ADC0 when define USE_ADC_VCC is disabled + uint8_t adc0_temp : 1; // Allow ADC0 as Temperature sensor when define USE_ADC_VCC is disabled uint8_t spare02 : 1; uint8_t spare03 : 1; uint8_t spare04 : 1; diff --git a/sonoff/xdrv_01_webserver.ino b/sonoff/xdrv_01_webserver.ino index 167da85d5..2ecd8c4c3 100644 --- a/sonoff/xdrv_01_webserver.ino +++ b/sonoff/xdrv_01_webserver.ino @@ -299,6 +299,7 @@ const char HTTP_FORM_TEMPLATE_FLAG[] PROGMEM = "

" // Keep close so do not use
"
 " D_TEMPLATE_FLAGS " 

" "" D_ALLOW_ADC0 "
" + "" D_ALLOW_ADC0_TEMP "
" "

"; const char HTTP_FORM_MODULE[] PROGMEM = diff --git a/sonoff/xsns_02_analog.ino b/sonoff/xsns_02_analog.ino index 9c6c5074e..76db4ac43 100644 --- a/sonoff/xsns_02_analog.ino +++ b/sonoff/xsns_02_analog.ino @@ -22,7 +22,16 @@ * ADC support \*********************************************************************************************/ -#define XSNS_02 2 +#define XSNS_02 2 + +#define TO_CELSIUS(x) ((x) - 273.15) +#define TO_KELVIN(x) ((x) + 273.15) + +#define ANALOG_V33 3.3 +#define ANALOG_R21 32000.0 +#define ANALOG_R0 10000.0 +#define ANALOG_T0 TO_KELVIN(25.0) +#define ANALOG_B 3350.0 uint16_t adc_last_value = 0; @@ -40,26 +49,58 @@ uint16_t AdcRead(void) #ifdef USE_RULES void AdcEvery250ms(void) { - uint16_t new_value = AdcRead(); - if ((new_value < adc_last_value -10) || (new_value > adc_last_value +10)) { - adc_last_value = new_value; - uint16_t value = adc_last_value / 10; - Response_P(PSTR("{\"ANALOG\":{\"A0div10\":%d}}"), (value > 99) ? 100 : value); - XdrvRulesProcess(); + if (my_module_flag.adc0) { + uint16_t new_value = AdcRead(); + if ((new_value < adc_last_value -10) || (new_value > adc_last_value +10)) { + adc_last_value = new_value; + uint16_t value = adc_last_value / 10; + Response_P(PSTR("{\"ANALOG\":{\"A0div10\":%d}}"), (value > 99) ? 100 : value); + XdrvRulesProcess(); + } } } #endif // USE_RULES void AdcShow(bool json) { - uint16_t analog = AdcRead(); + if (my_module_flag.adc0) { + uint16_t analog = AdcRead(); - if (json) { - ResponseAppend_P(PSTR(",\"ANALOG\":{\"A0\":%d}"), analog); + if (json) { + ResponseAppend_P(PSTR(",\"ANALOG\":{\"A0\":%d}"), analog); #ifdef USE_WEBSERVER - } else { - WSContentSend_PD(HTTP_SNS_ANALOG, "", 0, analog); + } else { + WSContentSend_PD(HTTP_SNS_ANALOG, "", 0, analog); #endif // USE_WEBSERVER + } + } + if (my_module_flag.adc0_temp) { + int adc = analogRead(A0); + // Formule used by Shelly 2.5 analog temperature sensor + double Rt = (adc * ANALOG_R21) / (1024.0 * ANALOG_V33 - (double)adc); + double T = ANALOG_B / (ANALOG_B/ANALOG_T0 + log(Rt/ANALOG_R0)); + double temp = ConvertTemp(TO_CELSIUS(T)); + + char temperature[33]; + dtostrfd(temp, Settings.flag2.temperature_resolution, temperature); + + if (json) { + ResponseAppend_P(JSON_SNS_TEMP, "ANALOG", temperature); +#ifdef USE_DOMOTICZ + if (0 == tele_period) { + DomoticzSensor(DZ_TEMP, temperature); + } +#endif // USE_DOMOTICZ +#ifdef USE_KNX + if (0 == tele_period) { + KnxSensor(KNX_TEMPERATURE, temp); + } +#endif // USE_KNX +#ifdef USE_WEBSERVER + } else { + WSContentSend_PD(HTTP_SNS_TEMP, "", temperature, TempUnit()); +#endif // USE_WEBSERVER + } } } @@ -71,7 +112,7 @@ bool Xsns02(uint8_t function) { bool result = false; - if (my_module_flag.adc0) { + if (my_module_flag.adc0 || my_module_flag.adc0_temp) { switch (function) { #ifdef USE_RULES case FUNC_EVERY_250_MSECOND: