Add support for ADC0 Moisture

Add support for ``AdcParam`` parameters to control ADC0 Moisture formula by Federico Leoni (#7309)
This commit is contained in:
Theo Arends 2019-12-24 12:20:04 +01:00
parent dac9fa8acf
commit def4378499
6 changed files with 52 additions and 55 deletions

View File

@ -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) - 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 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 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 coalesce sensor attributes into a single message
- Add Zigbee better support for Xiaomi Double Switch and Xiaomi Vibration sensor - 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 - Add Deepsleep start delay based on Teleperiod if ``Teleperiod`` differs from 10 or 300

View File

@ -4,6 +4,7 @@
- Changed Settings variable namings - Changed Settings variable namings
- Add Zigbee better support for Xiaomi Double Switch and Xiaomi Vibration sensor - 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 ### 8.0.0.1 20191221

View File

@ -50,6 +50,7 @@
#define D_JSON_COUNT "Count" #define D_JSON_COUNT "Count"
#define D_JSON_COUNTER "Counter" #define D_JSON_COUNTER "Counter"
#define D_JSON_CURRENT "Current" // As in Voltage and Current #define D_JSON_CURRENT "Current" // As in Voltage and Current
#define D_JSON_DARKNESS "Darkness"
#define D_JSON_DATA "Data" #define D_JSON_DATA "Data"
#define D_JSON_DISTANCE "Distance" #define D_JSON_DISTANCE "Distance"
#define D_JSON_DNSSERVER "DNSServer" #define D_JSON_DNSSERVER "DNSServer"
@ -458,7 +459,6 @@
#define D_CMND_LONGITUDE "Longitude" #define D_CMND_LONGITUDE "Longitude"
// Commands xdrv_16_tuyadimmer.ino // Commands xdrv_16_tuyadimmer.ino
#define D_CMND_TUYA_MCU "TuyaMCU" #define D_CMND_TUYA_MCU "TuyaMCU"
#define D_CMND_TUYA_MCU_SEND_STATE "TuyaSend" #define D_CMND_TUYA_MCU_SEND_STATE "TuyaSend"
#define D_JSON_TUYA_MCU_RECEIVED "TuyaReceived" #define D_JSON_TUYA_MCU_RECEIVED "TuyaReceived"
@ -485,34 +485,33 @@
#define D_CMND_ZIGBEE_SEND "ZigbeeSend" #define D_CMND_ZIGBEE_SEND "ZigbeeSend"
#define D_JSON_ZIGBEE_ZCL_SENT "ZigbeeZCLSent" #define D_JSON_ZIGBEE_ZCL_SENT "ZigbeeZCLSent"
// Commands xdrv_25_A4988_Stepper.ino // Commands xdrv_25_A4988_Stepper.ino
#ifdef USE_A4988_STEPPER #define D_CMND_MOTOR "MOTOR"
#define D_CMND_MOTOR "MOTOR" #define D_JSON_MOTOR_MOVE "doMove"
#define D_JSON_MOTOR_MOVE "doMove" #define D_JSON_MOTOR_ROTATE "doRotate"
#define D_JSON_MOTOR_ROTATE "doRotate" #define D_JSON_MOTOR_TURN "doTurn"
#define D_JSON_MOTOR_TURN "doTurn" #define D_JSON_MOTOR_SPR "setSPR"
#define D_JSON_MOTOR_SPR "setSPR" #define D_JSON_MOTOR_RPM "setRPM"
#define D_JSON_MOTOR_RPM "setRPM" #define D_JSON_MOTOR_MIS "setMIS"
#define D_JSON_MOTOR_MIS "setMIS"
#endif
// Commands xdrv_27_Shutter.ino // Commands xdrv_27_Shutter.ino
#ifdef USE_SHUTTER #define D_PRFX_SHUTTER "Shutter"
#define D_PRFX_SHUTTER "Shutter" #define D_CMND_SHUTTER_OPEN "Open"
#define D_CMND_SHUTTER_OPEN "Open" #define D_CMND_SHUTTER_CLOSE "Close"
#define D_CMND_SHUTTER_CLOSE "Close" #define D_CMND_SHUTTER_STOP "Stop"
#define D_CMND_SHUTTER_STOP "Stop" #define D_CMND_SHUTTER_POSITION "Position"
#define D_CMND_SHUTTER_POSITION "Position" #define D_CMND_SHUTTER_OPENTIME "OpenDuration"
#define D_CMND_SHUTTER_OPENTIME "OpenDuration" #define D_CMND_SHUTTER_CLOSETIME "CloseDuration"
#define D_CMND_SHUTTER_CLOSETIME "CloseDuration" #define D_CMND_SHUTTER_RELAY "Relay"
#define D_CMND_SHUTTER_RELAY "Relay" #define D_CMND_SHUTTER_SETHALFWAY "SetHalfway"
#define D_CMND_SHUTTER_SETHALFWAY "SetHalfway" #define D_CMND_SHUTTER_SETCLOSE "SetClose"
#define D_CMND_SHUTTER_SETCLOSE "SetClose" #define D_CMND_SHUTTER_INVERT "Invert"
#define D_CMND_SHUTTER_INVERT "Invert" #define D_CMND_SHUTTER_CLIBRATION "Calibration"
#define D_CMND_SHUTTER_CLIBRATION "Calibration" #define D_CMND_SHUTTER_MOTORDELAY "MotorDelay"
#define D_CMND_SHUTTER_MOTORDELAY "MotorDelay" #define D_CMND_SHUTTER_FREQUENCY "Frequency"
#define D_CMND_SHUTTER_FREQUENCY "Frequency"
#endif // Commands xsns_02_analog.ino
#define D_CMND_ADCPARAM "AdcParam"
/********************************************************************************************/ /********************************************************************************************/

View File

@ -311,9 +311,9 @@ enum UserSelectableAdc0 {
ADC0_LIGHT, // Light sensor ADC0_LIGHT, // Light sensor
ADC0_BUTTON, // Button ADC0_BUTTON, // Button
ADC0_BUTTON_INV, ADC0_BUTTON_INV,
ADC0_MOIST, // Moisture
// ADC0_SWITCH, // Switch // ADC0_SWITCH, // Switch
// ADC0_SWITCH_INV, // ADC0_SWITCH_INV,
ADC0_MOIST, // Moisture
ADC0_END }; ADC0_END };
// Programmer selectable ADC0 functionality // Programmer selectable ADC0 functionality

View File

@ -193,12 +193,12 @@ void AdcShow(bool json)
#ifdef USE_WEBSERVER #ifdef USE_WEBSERVER
} else { } else {
WSContentSend_PD(HTTP_SNS_ILLUMINANCE, "", adc_light); WSContentSend_PD(HTTP_SNS_ILLUMINANCE, "", adc_light);
#endif // USE_WEBSERVER #endif // USE_WEBSERVER
} }
} }
else if (ADC0_MOIST == my_adc0) { else if (ADC0_MOIST == my_adc0) {
uint16_t adc_moist = AdcGetMoist(); uint16_t adc_moist = AdcGetMoist();
if (json) { if (json) {
ResponseAppend_P(JSON_SNS_MOISTURE, "ANALOG", adc_moist); ResponseAppend_P(JSON_SNS_MOISTURE, "ANALOG", adc_moist);
#ifdef USE_WEBSERVER #ifdef USE_WEBSERVER
@ -213,7 +213,6 @@ void AdcShow(bool json)
* Commands * Commands
\*********************************************************************************************/ \*********************************************************************************************/
#define D_CMND_ADCPARAM "AdcParam"
const char kAdcCommands[] PROGMEM = "|" // No prefix const char kAdcCommands[] PROGMEM = "|" // No prefix
D_CMND_ADC "|" D_CMND_ADCS "|" D_CMND_ADCPARAM; D_CMND_ADC "|" D_CMND_ADCS "|" D_CMND_ADCPARAM;
@ -283,7 +282,8 @@ void CmndAdcParam(void)
if ((ADC0_TEMP == my_adc0) || (ADC0_LIGHT == my_adc0)) { if ((ADC0_TEMP == my_adc0) || (ADC0_LIGHT == my_adc0)) {
Response_P(PSTR("{\"" D_CMND_ADCPARAM "\":[%d,%d,%d,%s]}"), Response_P(PSTR("{\"" D_CMND_ADCPARAM "\":[%d,%d,%d,%s]}"),
Settings.adc_param_type, Settings.adc_param1, Settings.adc_param2, param3); 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]}"), Response_P(PSTR("{\"" D_CMND_ADCPARAM "\":[%d,%d,%d]}"),
Settings.adc_param_type, Settings.adc_param1, Settings.adc_param2); Settings.adc_param_type, Settings.adc_param1, Settings.adc_param2);
} }

View File

@ -397,22 +397,17 @@ void ChirpEvery100MSecond(void)
} }
/********************************************************************************************/ /********************************************************************************************/
// normaly in i18n.h // normaly in i18n.h
// #define D_JSON_MOISTURE "Moisture" // on i18n.h
#define D_JSON_DARKNESS "Darkness"
#ifdef USE_WEBSERVER #ifdef USE_WEBSERVER
// {s} = <tr><th>, {m} = </th><td>, {e} = </td></tr> // {s} = <tr><th>, {m} = </th><td>, {e} = </td></tr>
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_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}"
const char HTTP_SNS_CHIRPVER[] PROGMEM = "{s} CHIRP-sensor %u at address{m}0x%x{e}"
"{s} FW-version{m}%s {e}"; ; "{s} FW-version{m}%s {e}"; ;
const char HTTP_SNS_CHIRPSLEEP[] PROGMEM = "{s} {m} is sleeping ...{e}"; const char HTTP_SNS_CHIRPSLEEP[] PROGMEM = "{s} {m} is sleeping ...{e}";
#endif // USE_WEBSERVER #endif // USE_WEBSERVER
/********************************************************************************************/ /********************************************************************************************/
void ChirpShow(bool json) void ChirpShow(bool json)
@ -420,8 +415,6 @@ void ChirpShow(bool json)
for (uint32_t i = 0; i < chirp_found_sensors; i++) { for (uint32_t i = 0; i < chirp_found_sensors; i++) {
if (chirp_sensor[i].version) { if (chirp_sensor[i].version) {
// convert double values to string // convert double values to string
char str_moisture[33];
dtostrfd(chirp_sensor[i].moisture, 0, str_moisture);
char str_temperature[33]; char str_temperature[33];
double t_temperature = ((double) chirp_sensor[i].temperature )/10.0; double t_temperature = ((double) chirp_sensor[i].temperature )/10.0;
dtostrfd(t_temperature, Settings.flag2.temperature_resolution, str_temperature); dtostrfd(t_temperature, Settings.flag2.temperature_resolution, str_temperature);
@ -434,9 +427,10 @@ void ChirpShow(bool json)
else{ else{
sprintf(str_version, "%x", chirp_sensor[i].version); sprintf(str_version, "%x", chirp_sensor[i].version);
} }
if (json) { if (json) {
if(!chirp_sensor[i].explicitSleep) { 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 if(chirp_sensor[i].temperature!=-1){ // this is the error code -> no temperature
ResponseAppend_P(PSTR(",\"" D_JSON_TEMPERATURE "\":%s"),str_temperature); ResponseAppend_P(PSTR(",\"" D_JSON_TEMPERATURE "\":%s"),str_temperature);
} }
@ -447,6 +441,8 @@ void ChirpShow(bool json)
} }
#ifdef USE_DOMOTICZ #ifdef USE_DOMOTICZ
if (0 == tele_period) { if (0 == tele_period) {
char str_moisture[33];
dtostrfd(chirp_sensor[i].moisture, 0, str_moisture);
DomoticzTempHumSensor(str_temperature, str_moisture); DomoticzTempHumSensor(str_temperature, str_moisture);
DomoticzSensor(DZ_ILLUMINANCE,chirp_sensor[i].light); // this is not LUX!! DomoticzSensor(DZ_ILLUMINANCE,chirp_sensor[i].light); // this is not LUX!!
} }
@ -458,10 +454,10 @@ void ChirpShow(bool json)
WSContentSend_PD(HTTP_SNS_CHIRPSLEEP); WSContentSend_PD(HTTP_SNS_CHIRPSLEEP);
} }
else { else {
WSContentSend_PD(HTTP_SNS_MOISTURE, str_moisture); WSContentSend_PD(HTTP_SNS_MOISTURE, "", chirp_sensor[i].moisture);
WSContentSend_PD(HTTP_SNS_DARKNESS, str_light); WSContentSend_PD(HTTP_SNS_DARKNESS, str_light);
if(chirp_sensor[i].temperature!=-1){ // this is the error code -> no temperature if (chirp_sensor[i].temperature!=-1) { // this is the error code -> no temperature
WSContentSend_PD(HTTP_SNS_TEMP, " ",str_temperature, TempUnit()); WSContentSend_PD(HTTP_SNS_TEMP, "", str_temperature, TempUnit());
} }
} }