diff --git a/RELEASENOTES.md b/RELEASENOTES.md index 88442445a..3515a7433 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -57,6 +57,7 @@ The following binary downloads have been compiled with ESP8266/Arduino library c - Change number of rule ``Var``s and ``Mem``s from 5 to 16 (#4933) - Add support for max 150 characters in most command parameter strings (#3686, #4754) - Add support for GPS as NTP server by Christian Baars and Adrian Scillato +- Add support for ``AdcParam`` parameters to control ADC0 Moisture formula by Federico Leoni (#7309) - Add Zigbee coalesce sensor attributes into a single message - Add Zigbee better support for Xiaomi Double Switch and Xiaomi Vibration sensor - Add Deepsleep start delay based on Teleperiod if ``Teleperiod`` differs from 10 or 300 diff --git a/tasmota/CHANGELOG.md b/tasmota/CHANGELOG.md index cb2bfe0c5..372a2507f 100644 --- a/tasmota/CHANGELOG.md +++ b/tasmota/CHANGELOG.md @@ -4,6 +4,7 @@ - Changed Settings variable namings - Add Zigbee better support for Xiaomi Double Switch and Xiaomi Vibration sensor +- Add support for ``AdcParam`` parameters to control ADC0 Moisture formula by Federico Leoni (#7309) ### 8.0.0.1 20191221 diff --git a/tasmota/i18n.h b/tasmota/i18n.h index 24b0e1f19..1ae20dcde 100644 --- a/tasmota/i18n.h +++ b/tasmota/i18n.h @@ -50,6 +50,7 @@ #define D_JSON_COUNT "Count" #define D_JSON_COUNTER "Counter" #define D_JSON_CURRENT "Current" // As in Voltage and Current +#define D_JSON_DARKNESS "Darkness" #define D_JSON_DATA "Data" #define D_JSON_DISTANCE "Distance" #define D_JSON_DNSSERVER "DNSServer" @@ -458,7 +459,6 @@ #define D_CMND_LONGITUDE "Longitude" // Commands xdrv_16_tuyadimmer.ino - #define D_CMND_TUYA_MCU "TuyaMCU" #define D_CMND_TUYA_MCU_SEND_STATE "TuyaSend" #define D_JSON_TUYA_MCU_RECEIVED "TuyaReceived" @@ -485,34 +485,33 @@ #define D_CMND_ZIGBEE_SEND "ZigbeeSend" #define D_JSON_ZIGBEE_ZCL_SENT "ZigbeeZCLSent" - // Commands xdrv_25_A4988_Stepper.ino - #ifdef USE_A4988_STEPPER - #define D_CMND_MOTOR "MOTOR" - #define D_JSON_MOTOR_MOVE "doMove" - #define D_JSON_MOTOR_ROTATE "doRotate" - #define D_JSON_MOTOR_TURN "doTurn" - #define D_JSON_MOTOR_SPR "setSPR" - #define D_JSON_MOTOR_RPM "setRPM" - #define D_JSON_MOTOR_MIS "setMIS" - #endif +// Commands xdrv_25_A4988_Stepper.ino +#define D_CMND_MOTOR "MOTOR" +#define D_JSON_MOTOR_MOVE "doMove" +#define D_JSON_MOTOR_ROTATE "doRotate" +#define D_JSON_MOTOR_TURN "doTurn" +#define D_JSON_MOTOR_SPR "setSPR" +#define D_JSON_MOTOR_RPM "setRPM" +#define D_JSON_MOTOR_MIS "setMIS" - // Commands xdrv_27_Shutter.ino - #ifdef USE_SHUTTER - #define D_PRFX_SHUTTER "Shutter" - #define D_CMND_SHUTTER_OPEN "Open" - #define D_CMND_SHUTTER_CLOSE "Close" - #define D_CMND_SHUTTER_STOP "Stop" - #define D_CMND_SHUTTER_POSITION "Position" - #define D_CMND_SHUTTER_OPENTIME "OpenDuration" - #define D_CMND_SHUTTER_CLOSETIME "CloseDuration" - #define D_CMND_SHUTTER_RELAY "Relay" - #define D_CMND_SHUTTER_SETHALFWAY "SetHalfway" - #define D_CMND_SHUTTER_SETCLOSE "SetClose" - #define D_CMND_SHUTTER_INVERT "Invert" - #define D_CMND_SHUTTER_CLIBRATION "Calibration" - #define D_CMND_SHUTTER_MOTORDELAY "MotorDelay" - #define D_CMND_SHUTTER_FREQUENCY "Frequency" - #endif +// Commands xdrv_27_Shutter.ino +#define D_PRFX_SHUTTER "Shutter" +#define D_CMND_SHUTTER_OPEN "Open" +#define D_CMND_SHUTTER_CLOSE "Close" +#define D_CMND_SHUTTER_STOP "Stop" +#define D_CMND_SHUTTER_POSITION "Position" +#define D_CMND_SHUTTER_OPENTIME "OpenDuration" +#define D_CMND_SHUTTER_CLOSETIME "CloseDuration" +#define D_CMND_SHUTTER_RELAY "Relay" +#define D_CMND_SHUTTER_SETHALFWAY "SetHalfway" +#define D_CMND_SHUTTER_SETCLOSE "SetClose" +#define D_CMND_SHUTTER_INVERT "Invert" +#define D_CMND_SHUTTER_CLIBRATION "Calibration" +#define D_CMND_SHUTTER_MOTORDELAY "MotorDelay" +#define D_CMND_SHUTTER_FREQUENCY "Frequency" + +// Commands xsns_02_analog.ino +#define D_CMND_ADCPARAM "AdcParam" /********************************************************************************************/ diff --git a/tasmota/tasmota_template.h b/tasmota/tasmota_template.h index 6b936d14a..685546b91 100644 --- a/tasmota/tasmota_template.h +++ b/tasmota/tasmota_template.h @@ -311,9 +311,9 @@ enum UserSelectableAdc0 { ADC0_LIGHT, // Light sensor ADC0_BUTTON, // Button ADC0_BUTTON_INV, + ADC0_MOIST, // Moisture // ADC0_SWITCH, // Switch // ADC0_SWITCH_INV, - ADC0_MOIST, // Moisture ADC0_END }; // Programmer selectable ADC0 functionality diff --git a/tasmota/xsns_02_analog.ino b/tasmota/xsns_02_analog.ino index 4e75dbbe7..3dd974918 100644 --- a/tasmota/xsns_02_analog.ino +++ b/tasmota/xsns_02_analog.ino @@ -146,7 +146,7 @@ void AdcEverySecond(void) } void AdcShow(bool json) -{ +{ if (ADC0_INPUT == my_adc0) { uint16_t analog = AdcRead(5); @@ -193,12 +193,12 @@ void AdcShow(bool json) #ifdef USE_WEBSERVER } else { WSContentSend_PD(HTTP_SNS_ILLUMINANCE, "", adc_light); - #endif // USE_WEBSERVER } } else if (ADC0_MOIST == my_adc0) { uint16_t adc_moist = AdcGetMoist(); + if (json) { ResponseAppend_P(JSON_SNS_MOISTURE, "ANALOG", adc_moist); #ifdef USE_WEBSERVER @@ -206,14 +206,13 @@ void AdcShow(bool json) WSContentSend_PD(HTTP_SNS_MOISTURE, "", adc_moist); #endif // USE_WEBSERVER } - } + } } /*********************************************************************************************\ * Commands \*********************************************************************************************/ -#define D_CMND_ADCPARAM "AdcParam" const char kAdcCommands[] PROGMEM = "|" // No prefix D_CMND_ADC "|" D_CMND_ADCS "|" D_CMND_ADCPARAM; @@ -248,7 +247,7 @@ void CmndAdcs(void) void CmndAdcParam(void) { if (XdrvMailbox.data_len) { - if ((ADC0_TEMP == XdrvMailbox.payload) || (ADC0_LIGHT == XdrvMailbox.payload) || (ADC0_MOIST == XdrvMailbox.payload)) { + if ((ADC0_TEMP == XdrvMailbox.payload) || (ADC0_LIGHT == XdrvMailbox.payload) || (ADC0_MOIST == XdrvMailbox.payload)) { // if ((XdrvMailbox.payload == my_adc0) && ((ADC0_TEMP == my_adc0) || (ADC0_LIGHT == my_adc0))) { if (strstr(XdrvMailbox.data, ",") != nullptr) { // Process parameter entry char sub_string[XdrvMailbox.data_len +1]; @@ -283,10 +282,11 @@ void CmndAdcParam(void) if ((ADC0_TEMP == my_adc0) || (ADC0_LIGHT == my_adc0)) { Response_P(PSTR("{\"" D_CMND_ADCPARAM "\":[%d,%d,%d,%s]}"), Settings.adc_param_type, Settings.adc_param1, Settings.adc_param2, param3); - } else if (ADC0_MOIST == my_adc0) { + } + else if (ADC0_MOIST == my_adc0) { Response_P(PSTR("{\"" D_CMND_ADCPARAM "\":[%d,%d,%d]}"), Settings.adc_param_type, Settings.adc_param1, Settings.adc_param2); - } + } } /*********************************************************************************************\ diff --git a/tasmota/xsns_48_chirp.ino b/tasmota/xsns_48_chirp.ino index 131a0cc24..f761e6afc 100644 --- a/tasmota/xsns_48_chirp.ino +++ b/tasmota/xsns_48_chirp.ino @@ -397,22 +397,17 @@ void ChirpEvery100MSecond(void) } /********************************************************************************************/ + // normaly in i18n.h - -// #define D_JSON_MOISTURE "Moisture" // on i18n.h -#define D_JSON_DARKNESS "Darkness" - #ifdef USE_WEBSERVER // {s} = , {m} = , {e} = - const char HTTP_SNS_MOISTURE[] PROGMEM = "{s} " D_JSON_MOISTURE "{m}%s %{e}"; - const char HTTP_SNS_DARKNESS[] PROGMEM = "{s} " D_JSON_DARKNESS "{m}%s %{e}"; - const char HTTP_SNS_CHIRPVER[] PROGMEM = "{s} CHIRP-sensor %u at address{m}0x%x{e}" - "{s} FW-version{m}%s {e}"; ; - const char HTTP_SNS_CHIRPSLEEP[] PROGMEM = "{s} {m} is sleeping ...{e}"; +const char HTTP_SNS_DARKNESS[] PROGMEM = "{s} " D_JSON_DARKNESS "{m}%s %%{e}"; +const char HTTP_SNS_CHIRPVER[] PROGMEM = "{s} CHIRP-sensor %u at address{m}0x%x{e}" + "{s} FW-version{m}%s {e}"; ; +const char HTTP_SNS_CHIRPSLEEP[] PROGMEM = "{s} {m} is sleeping ...{e}"; #endif // USE_WEBSERVER - /********************************************************************************************/ void ChirpShow(bool json) @@ -420,8 +415,6 @@ void ChirpShow(bool json) for (uint32_t i = 0; i < chirp_found_sensors; i++) { if (chirp_sensor[i].version) { // convert double values to string - char str_moisture[33]; - dtostrfd(chirp_sensor[i].moisture, 0, str_moisture); char str_temperature[33]; double t_temperature = ((double) chirp_sensor[i].temperature )/10.0; dtostrfd(t_temperature, Settings.flag2.temperature_resolution, str_temperature); @@ -434,9 +427,10 @@ void ChirpShow(bool json) else{ sprintf(str_version, "%x", chirp_sensor[i].version); } + if (json) { if(!chirp_sensor[i].explicitSleep) { - ResponseAppend_P(PSTR(",\"%s%u\":{\"" D_JSON_MOISTURE "\":%s"),chirp_name, i, str_moisture); + ResponseAppend_P(PSTR(",\"%s%u\":{\"" D_JSON_MOISTURE "\":%d"), chirp_name, i, chirp_sensor[i].moisture); if(chirp_sensor[i].temperature!=-1){ // this is the error code -> no temperature ResponseAppend_P(PSTR(",\"" D_JSON_TEMPERATURE "\":%s"),str_temperature); } @@ -447,9 +441,11 @@ void ChirpShow(bool json) } #ifdef USE_DOMOTICZ if (0 == tele_period) { - DomoticzTempHumSensor(str_temperature, str_moisture); - DomoticzSensor(DZ_ILLUMINANCE,chirp_sensor[i].light); // this is not LUX!! - } + char str_moisture[33]; + dtostrfd(chirp_sensor[i].moisture, 0, str_moisture); + DomoticzTempHumSensor(str_temperature, str_moisture); + DomoticzSensor(DZ_ILLUMINANCE,chirp_sensor[i].light); // this is not LUX!! + } #endif // USE_DOMOTICZ #ifdef USE_WEBSERVER } else { @@ -458,10 +454,10 @@ void ChirpShow(bool json) WSContentSend_PD(HTTP_SNS_CHIRPSLEEP); } else { - WSContentSend_PD(HTTP_SNS_MOISTURE, str_moisture); + WSContentSend_PD(HTTP_SNS_MOISTURE, "", chirp_sensor[i].moisture); WSContentSend_PD(HTTP_SNS_DARKNESS, str_light); - if(chirp_sensor[i].temperature!=-1){ // this is the error code -> no temperature - WSContentSend_PD(HTTP_SNS_TEMP, " ",str_temperature, TempUnit()); + if (chirp_sensor[i].temperature!=-1) { // this is the error code -> no temperature + WSContentSend_PD(HTTP_SNS_TEMP, "", str_temperature, TempUnit()); } }