mirror of
https://github.com/arendst/Tasmota.git
synced 2025-08-02 23:47:42 +00:00
Refactor Counter commands
Refactor Counter commands
This commit is contained in:
parent
cc9d7bb8e9
commit
9bcba3772e
@ -399,8 +399,10 @@ struct XDRVMAILBOX {
|
|||||||
int16_t payload;
|
int16_t payload;
|
||||||
bool grpflg;
|
bool grpflg;
|
||||||
bool usridx;
|
bool usridx;
|
||||||
|
int32_t payload32;
|
||||||
char *topic;
|
char *topic;
|
||||||
char *data;
|
char *data;
|
||||||
|
char *command;
|
||||||
} XdrvMailbox;
|
} XdrvMailbox;
|
||||||
|
|
||||||
const uint8_t MAX_RULES_FLAG = 8; // Number of bits used in RulesBitfield (tricky I know...)
|
const uint8_t MAX_RULES_FLAG = 8; // Number of bits used in RulesBitfield (tricky I know...)
|
||||||
|
@ -21,8 +21,8 @@ enum TasmotaCommands {
|
|||||||
CMND_BACKLOG, CMND_DELAY, CMND_POWER, CMND_STATUS, CMND_STATE, CMND_POWERONSTATE, CMND_PULSETIME,
|
CMND_BACKLOG, CMND_DELAY, CMND_POWER, CMND_STATUS, CMND_STATE, CMND_POWERONSTATE, CMND_PULSETIME,
|
||||||
CMND_BLINKTIME, CMND_BLINKCOUNT, CMND_SENSOR, CMND_SAVEDATA, CMND_SETOPTION, CMND_TEMPERATURE_RESOLUTION, CMND_HUMIDITY_RESOLUTION,
|
CMND_BLINKTIME, CMND_BLINKCOUNT, CMND_SENSOR, CMND_SAVEDATA, CMND_SETOPTION, CMND_TEMPERATURE_RESOLUTION, CMND_HUMIDITY_RESOLUTION,
|
||||||
CMND_PRESSURE_RESOLUTION, CMND_POWER_RESOLUTION, CMND_VOLTAGE_RESOLUTION, CMND_FREQUENCY_RESOLUTION, CMND_CURRENT_RESOLUTION, CMND_ENERGY_RESOLUTION, CMND_WEIGHT_RESOLUTION,
|
CMND_PRESSURE_RESOLUTION, CMND_POWER_RESOLUTION, CMND_VOLTAGE_RESOLUTION, CMND_FREQUENCY_RESOLUTION, CMND_CURRENT_RESOLUTION, CMND_ENERGY_RESOLUTION, CMND_WEIGHT_RESOLUTION,
|
||||||
CMND_MODULE, CMND_MODULES, CMND_ADC, CMND_ADCS, CMND_GPIO, CMND_GPIOS, CMND_PWM, CMND_PWMFREQUENCY, CMND_PWMRANGE, CMND_COUNTER, CMND_COUNTERTYPE,
|
CMND_MODULE, CMND_MODULES, CMND_ADC, CMND_ADCS, CMND_GPIO, CMND_GPIOS, CMND_PWM, CMND_PWMFREQUENCY, CMND_PWMRANGE,
|
||||||
CMND_COUNTERDEBOUNCE, CMND_BUTTONDEBOUNCE, CMND_SWITCHDEBOUNCE, CMND_SLEEP, CMND_UPGRADE, CMND_UPLOAD, CMND_OTAURL, CMND_SERIALLOG, CMND_SYSLOG,
|
CMND_BUTTONDEBOUNCE, CMND_SWITCHDEBOUNCE, CMND_SLEEP, CMND_UPGRADE, CMND_UPLOAD, CMND_OTAURL, CMND_SERIALLOG, CMND_SYSLOG,
|
||||||
CMND_LOGHOST, CMND_LOGPORT, CMND_IPADDRESS, CMND_NTPSERVER, CMND_AP, CMND_SSID, CMND_PASSWORD, CMND_HOSTNAME,
|
CMND_LOGHOST, CMND_LOGPORT, CMND_IPADDRESS, CMND_NTPSERVER, CMND_AP, CMND_SSID, CMND_PASSWORD, CMND_HOSTNAME,
|
||||||
CMND_WIFICONFIG, CMND_FRIENDLYNAME, CMND_SWITCHMODE, CMND_INTERLOCK, CMND_TEMPLATE,
|
CMND_WIFICONFIG, CMND_FRIENDLYNAME, CMND_SWITCHMODE, CMND_INTERLOCK, CMND_TEMPLATE,
|
||||||
CMND_TELEPERIOD, CMND_RESTART, CMND_RESET, CMND_TIME, CMND_TIMEZONE, CMND_TIMESTD, CMND_TIMEDST, CMND_ALTITUDE, CMND_LEDPOWER, CMND_LEDSTATE, CMND_LEDMASK,
|
CMND_TELEPERIOD, CMND_RESTART, CMND_RESET, CMND_TIME, CMND_TIMEZONE, CMND_TIMESTD, CMND_TIMEDST, CMND_ALTITUDE, CMND_LEDPOWER, CMND_LEDSTATE, CMND_LEDMASK,
|
||||||
@ -31,8 +31,8 @@ const char kTasmotaCommands[] PROGMEM =
|
|||||||
D_CMND_BACKLOG "|" D_CMND_DELAY "|" D_CMND_POWER "|" D_CMND_STATUS "|" D_CMND_STATE "|" D_CMND_POWERONSTATE "|" D_CMND_PULSETIME "|"
|
D_CMND_BACKLOG "|" D_CMND_DELAY "|" D_CMND_POWER "|" D_CMND_STATUS "|" D_CMND_STATE "|" D_CMND_POWERONSTATE "|" D_CMND_PULSETIME "|"
|
||||||
D_CMND_BLINKTIME "|" D_CMND_BLINKCOUNT "|" D_CMND_SENSOR "|" D_CMND_SAVEDATA "|" D_CMND_SETOPTION "|" D_CMND_TEMPERATURE_RESOLUTION "|" D_CMND_HUMIDITY_RESOLUTION "|"
|
D_CMND_BLINKTIME "|" D_CMND_BLINKCOUNT "|" D_CMND_SENSOR "|" D_CMND_SAVEDATA "|" D_CMND_SETOPTION "|" D_CMND_TEMPERATURE_RESOLUTION "|" D_CMND_HUMIDITY_RESOLUTION "|"
|
||||||
D_CMND_PRESSURE_RESOLUTION "|" D_CMND_POWER_RESOLUTION "|" D_CMND_VOLTAGE_RESOLUTION "|" D_CMND_FREQUENCY_RESOLUTION "|" D_CMND_CURRENT_RESOLUTION "|" D_CMND_ENERGY_RESOLUTION "|" D_CMND_WEIGHT_RESOLUTION "|"
|
D_CMND_PRESSURE_RESOLUTION "|" D_CMND_POWER_RESOLUTION "|" D_CMND_VOLTAGE_RESOLUTION "|" D_CMND_FREQUENCY_RESOLUTION "|" D_CMND_CURRENT_RESOLUTION "|" D_CMND_ENERGY_RESOLUTION "|" D_CMND_WEIGHT_RESOLUTION "|"
|
||||||
D_CMND_MODULE "|" D_CMND_MODULES "|" D_CMND_ADC "|" D_CMND_ADCS "|" D_CMND_GPIO "|" D_CMND_GPIOS "|" D_CMND_PWM "|" D_CMND_PWMFREQUENCY "|" D_CMND_PWMRANGE "|" D_CMND_COUNTER "|" D_CMND_COUNTERTYPE "|"
|
D_CMND_MODULE "|" D_CMND_MODULES "|" D_CMND_ADC "|" D_CMND_ADCS "|" D_CMND_GPIO "|" D_CMND_GPIOS "|" D_CMND_PWM "|" D_CMND_PWMFREQUENCY "|" D_CMND_PWMRANGE "|"
|
||||||
D_CMND_COUNTERDEBOUNCE "|" D_CMND_BUTTONDEBOUNCE "|" D_CMND_SWITCHDEBOUNCE "|" D_CMND_SLEEP "|" D_CMND_UPGRADE "|" D_CMND_UPLOAD "|" D_CMND_OTAURL "|" D_CMND_SERIALLOG "|" D_CMND_SYSLOG "|"
|
D_CMND_BUTTONDEBOUNCE "|" D_CMND_SWITCHDEBOUNCE "|" D_CMND_SLEEP "|" D_CMND_UPGRADE "|" D_CMND_UPLOAD "|" D_CMND_OTAURL "|" D_CMND_SERIALLOG "|" D_CMND_SYSLOG "|"
|
||||||
D_CMND_LOGHOST "|" D_CMND_LOGPORT "|" D_CMND_IPADDRESS "|" D_CMND_NTPSERVER "|" D_CMND_AP "|" D_CMND_SSID "|" D_CMND_PASSWORD "|" D_CMND_HOSTNAME "|"
|
D_CMND_LOGHOST "|" D_CMND_LOGPORT "|" D_CMND_IPADDRESS "|" D_CMND_NTPSERVER "|" D_CMND_AP "|" D_CMND_SSID "|" D_CMND_PASSWORD "|" D_CMND_HOSTNAME "|"
|
||||||
D_CMND_WIFICONFIG "|" D_CMND_FRIENDLYNAME "|" D_CMND_SWITCHMODE "|" D_CMND_INTERLOCK "|" D_CMND_TEMPLATE "|"
|
D_CMND_WIFICONFIG "|" D_CMND_FRIENDLYNAME "|" D_CMND_SWITCHMODE "|" D_CMND_INTERLOCK "|" D_CMND_TEMPLATE "|"
|
||||||
D_CMND_TELEPERIOD "|" D_CMND_RESTART "|" D_CMND_RESET "|" D_CMND_TIME "|" D_CMND_TIMEZONE "|" D_CMND_TIMESTD "|" D_CMND_TIMEDST "|" D_CMND_ALTITUDE "|" D_CMND_LEDPOWER "|" D_CMND_LEDSTATE "|" D_CMND_LEDMASK "|"
|
D_CMND_TELEPERIOD "|" D_CMND_RESTART "|" D_CMND_RESET "|" D_CMND_TIME "|" D_CMND_TIMEZONE "|" D_CMND_TIMESTD "|" D_CMND_TIMEDST "|" D_CMND_ALTITUDE "|" D_CMND_LEDPOWER "|" D_CMND_LEDSTATE "|" D_CMND_LEDMASK "|"
|
||||||
@ -145,6 +145,7 @@ void CommandHandler(char* topic, uint8_t* data, uint32_t data_len)
|
|||||||
// XdrvMailbox.valid = 1;
|
// XdrvMailbox.valid = 1;
|
||||||
XdrvMailbox.index = index;
|
XdrvMailbox.index = index;
|
||||||
XdrvMailbox.data_len = data_len;
|
XdrvMailbox.data_len = data_len;
|
||||||
|
XdrvMailbox.payload32 = payload32;
|
||||||
XdrvMailbox.payload16 = payload16;
|
XdrvMailbox.payload16 = payload16;
|
||||||
XdrvMailbox.payload = payload;
|
XdrvMailbox.payload = payload;
|
||||||
XdrvMailbox.grpflg = grpflg;
|
XdrvMailbox.grpflg = grpflg;
|
||||||
@ -320,6 +321,7 @@ void CommandHandler(char* topic, uint8_t* data, uint32_t data_len)
|
|||||||
else if ((CMND_SENSOR == command_code) || (CMND_DRIVER == command_code)) {
|
else if ((CMND_SENSOR == command_code) || (CMND_DRIVER == command_code)) {
|
||||||
XdrvMailbox.index = index;
|
XdrvMailbox.index = index;
|
||||||
XdrvMailbox.data_len = data_len;
|
XdrvMailbox.data_len = data_len;
|
||||||
|
XdrvMailbox.payload32 = payload32;
|
||||||
XdrvMailbox.payload16 = payload16;
|
XdrvMailbox.payload16 = payload16;
|
||||||
XdrvMailbox.payload = payload;
|
XdrvMailbox.payload = payload;
|
||||||
XdrvMailbox.grpflg = grpflg;
|
XdrvMailbox.grpflg = grpflg;
|
||||||
@ -682,32 +684,6 @@ void CommandHandler(char* topic, uint8_t* data, uint32_t data_len)
|
|||||||
}
|
}
|
||||||
Response_P(S_JSON_COMMAND_NVALUE, command, Settings.pwm_range);
|
Response_P(S_JSON_COMMAND_NVALUE, command, Settings.pwm_range);
|
||||||
}
|
}
|
||||||
else if ((CMND_COUNTER == command_code) && (index > 0) && (index <= MAX_COUNTERS)) {
|
|
||||||
if ((data_len > 0) && (pin[GPIO_CNTR1 + index -1] < 99)) {
|
|
||||||
if ((dataBuf[0] == '-') || (dataBuf[0] == '+')) {
|
|
||||||
RtcSettings.pulse_counter[index -1] += payload32;
|
|
||||||
Settings.pulse_counter[index -1] += payload32;
|
|
||||||
} else {
|
|
||||||
RtcSettings.pulse_counter[index -1] = payload32;
|
|
||||||
Settings.pulse_counter[index -1] = payload32;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Response_P(S_JSON_COMMAND_INDEX_LVALUE, command, index, RtcSettings.pulse_counter[index -1]);
|
|
||||||
}
|
|
||||||
else if ((CMND_COUNTERTYPE == command_code) && (index > 0) && (index <= MAX_COUNTERS)) {
|
|
||||||
if ((payload >= 0) && (payload <= 1) && (pin[GPIO_CNTR1 + index -1] < 99)) {
|
|
||||||
bitWrite(Settings.pulse_counter_type, index -1, payload &1);
|
|
||||||
RtcSettings.pulse_counter[index -1] = 0;
|
|
||||||
Settings.pulse_counter[index -1] = 0;
|
|
||||||
}
|
|
||||||
Response_P(S_JSON_COMMAND_INDEX_NVALUE, command, index, bitRead(Settings.pulse_counter_type, index -1));
|
|
||||||
}
|
|
||||||
else if (CMND_COUNTERDEBOUNCE == command_code) {
|
|
||||||
if ((data_len > 0) && (payload16 < 32001)) {
|
|
||||||
Settings.pulse_counter_debounce = payload16;
|
|
||||||
}
|
|
||||||
Response_P(S_JSON_COMMAND_NVALUE, command, Settings.pulse_counter_debounce);
|
|
||||||
}
|
|
||||||
else if (CMND_BUTTONDEBOUNCE == command_code) {
|
else if (CMND_BUTTONDEBOUNCE == command_code) {
|
||||||
if ((payload > 39) && (payload < 1001)) {
|
if ((payload > 39) && (payload < 1001)) {
|
||||||
Settings.button_debounce = payload;
|
Settings.button_debounce = payload;
|
||||||
|
@ -145,6 +145,54 @@ void CounterShow(bool json)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*********************************************************************************************\
|
||||||
|
* Commands
|
||||||
|
\*********************************************************************************************/
|
||||||
|
|
||||||
|
enum CounterCommands { CMND_COUNTER, CMND_COUNTERTYPE, CMND_COUNTERDEBOUNCE };
|
||||||
|
const char kCounterCommands[] PROGMEM = D_CMND_COUNTER "|" D_CMND_COUNTERTYPE "|" D_CMND_COUNTERDEBOUNCE ;
|
||||||
|
|
||||||
|
bool CounterCommand(void)
|
||||||
|
{
|
||||||
|
char command[CMDSZ];
|
||||||
|
bool serviced = true;
|
||||||
|
|
||||||
|
int command_code = GetCommandCode(command, sizeof(command), XdrvMailbox.topic, kCounterCommands);
|
||||||
|
if (CMND_COUNTER == command_code) {
|
||||||
|
if ((XdrvMailbox.index > 0) && (XdrvMailbox.index <= MAX_COUNTERS)) {
|
||||||
|
if ((XdrvMailbox.data_len > 0) && (pin[GPIO_CNTR1 + XdrvMailbox.index -1] < 99)) {
|
||||||
|
if ((XdrvMailbox.data[0] == '-') || (XdrvMailbox.data[0] == '+')) {
|
||||||
|
RtcSettings.pulse_counter[XdrvMailbox.index -1] += XdrvMailbox.payload32;
|
||||||
|
Settings.pulse_counter[XdrvMailbox.index -1] += XdrvMailbox.payload32;
|
||||||
|
} else {
|
||||||
|
RtcSettings.pulse_counter[XdrvMailbox.index -1] = XdrvMailbox.payload32;
|
||||||
|
Settings.pulse_counter[XdrvMailbox.index -1] = XdrvMailbox.payload32;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Response_P(S_JSON_COMMAND_INDEX_LVALUE, command, XdrvMailbox.index, RtcSettings.pulse_counter[XdrvMailbox.index -1]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (CMND_COUNTERTYPE == command_code) {
|
||||||
|
if ((XdrvMailbox.index > 0) && (XdrvMailbox.index <= MAX_COUNTERS)) {
|
||||||
|
if ((XdrvMailbox.payload >= 0) && (XdrvMailbox.payload <= 1) && (pin[GPIO_CNTR1 + XdrvMailbox.index -1] < 99)) {
|
||||||
|
bitWrite(Settings.pulse_counter_type, XdrvMailbox.index -1, XdrvMailbox.payload &1);
|
||||||
|
RtcSettings.pulse_counter[XdrvMailbox.index -1] = 0;
|
||||||
|
Settings.pulse_counter[XdrvMailbox.index -1] = 0;
|
||||||
|
}
|
||||||
|
Response_P(S_JSON_COMMAND_INDEX_NVALUE, command, XdrvMailbox.index, bitRead(Settings.pulse_counter_type, XdrvMailbox.index -1));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (CMND_COUNTERDEBOUNCE == command_code) {
|
||||||
|
if ((XdrvMailbox.data_len > 0) && (XdrvMailbox.payload16 < 32001)) {
|
||||||
|
Settings.pulse_counter_debounce = XdrvMailbox.payload16;
|
||||||
|
}
|
||||||
|
Response_P(S_JSON_COMMAND_NVALUE, command, Settings.pulse_counter_debounce);
|
||||||
|
}
|
||||||
|
else serviced = false; // Unknown command
|
||||||
|
|
||||||
|
return serviced;
|
||||||
|
}
|
||||||
|
|
||||||
/*********************************************************************************************\
|
/*********************************************************************************************\
|
||||||
* Interface
|
* Interface
|
||||||
\*********************************************************************************************/
|
\*********************************************************************************************/
|
||||||
@ -169,6 +217,9 @@ bool Xsns01(uint8_t function)
|
|||||||
case FUNC_SAVE_AT_MIDNIGHT:
|
case FUNC_SAVE_AT_MIDNIGHT:
|
||||||
CounterSaveState();
|
CounterSaveState();
|
||||||
break;
|
break;
|
||||||
|
case FUNC_COMMAND:
|
||||||
|
result = CounterCommand();
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user