mirror of https://github.com/arendst/Tasmota.git
Add Sensor83 switch light relay cmnd
This commit is contained in:
parent
76f2948189
commit
e13d0c1f5f
|
@ -1104,6 +1104,13 @@ void NeoPoolShow(bool json)
|
||||||
* 1 - sync with Tasmota utc time
|
* 1 - sync with Tasmota utc time
|
||||||
* any other value of <time> will set time as epoch
|
* any other value of <time> will set time as epoch
|
||||||
*
|
*
|
||||||
|
* Sensor83 7 {<state>}
|
||||||
|
* get/set light (state=0|1|2)
|
||||||
|
* get light state if <state> is omitted, otherwise set new state
|
||||||
|
* 0 - switch light manual off
|
||||||
|
* 1 - switch light manual on
|
||||||
|
* 2 - switch light to auto mode
|
||||||
|
*
|
||||||
* Sensor83 16 <addr> {<cnt>}
|
* Sensor83 16 <addr> {<cnt>}
|
||||||
* same as "Sensor83 1" but using hex data output
|
* same as "Sensor83 1" but using hex data output
|
||||||
*
|
*
|
||||||
|
@ -1166,6 +1173,7 @@ void NeoPoolShow(bool json)
|
||||||
#define NEOPOOL_CMND_FILTRATION 4
|
#define NEOPOOL_CMND_FILTRATION 4
|
||||||
#define NEOPOOL_CMND_FILTRATION_MODE 5
|
#define NEOPOOL_CMND_FILTRATION_MODE 5
|
||||||
#define NEOPOOL_CMND_TIME 6
|
#define NEOPOOL_CMND_TIME 6
|
||||||
|
#define NEOPOOL_CMND_LIGHT 7
|
||||||
#define NEOPOOL_CMND_READ_REG_HEX 16
|
#define NEOPOOL_CMND_READ_REG_HEX 16
|
||||||
#define NEOPOOL_CMND_READ_REG32 21
|
#define NEOPOOL_CMND_READ_REG32 21
|
||||||
#define NEOPOOL_CMND_WRITE_REG32 22
|
#define NEOPOOL_CMND_WRITE_REG32 22
|
||||||
|
@ -1174,6 +1182,7 @@ void NeoPoolShow(bool json)
|
||||||
#define NEOPOOL_CMND_IMM_TAKE_OVER 100
|
#define NEOPOOL_CMND_IMM_TAKE_OVER 100
|
||||||
|
|
||||||
#define NEOPOOL_CMND_SENSOR D_CMND_SENSOR STR(XSNS_83)
|
#define NEOPOOL_CMND_SENSOR D_CMND_SENSOR STR(XSNS_83)
|
||||||
|
#define NEOPOOL_MAX_CMND_LEN 160
|
||||||
|
|
||||||
bool NeoPoolCmnd(void)
|
bool NeoPoolCmnd(void)
|
||||||
{
|
{
|
||||||
|
@ -1184,13 +1193,9 @@ bool NeoPoolCmnd(void)
|
||||||
bool bits32 = false;
|
bool bits32 = false;
|
||||||
uint32_t value[10] = { 0 };
|
uint32_t value[10] = { 0 };
|
||||||
uint32_t params_cnt = ParseParameters(ARRAY_SIZE(value), value);
|
uint32_t params_cnt = ParseParameters(ARRAY_SIZE(value), value);
|
||||||
|
char *scmnd = (char *)malloc(NEOPOOL_MAX_CMND_LEN);
|
||||||
|
|
||||||
if (neopool_error) {
|
if(!neopool_error && scmnd != nullptr && params_cnt > 0) {
|
||||||
serviced = false;
|
|
||||||
return serviced;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(params_cnt > 0) {
|
|
||||||
params_cnt--;
|
params_cnt--;
|
||||||
|
|
||||||
cmnd = value[0];
|
cmnd = value[0];
|
||||||
|
@ -1266,14 +1271,12 @@ bool NeoPoolCmnd(void)
|
||||||
serviced = (NEOPOOL_OK == NeoPoolReadRegister(addr, data, 1));
|
serviced = (NEOPOOL_OK == NeoPoolReadRegister(addr, data, 1));
|
||||||
}
|
}
|
||||||
if (1 == params_cnt) {
|
if (1 == params_cnt) {
|
||||||
char stemp[20];
|
|
||||||
|
|
||||||
data[0] = value[1] ? 1 : 0;
|
|
||||||
// Filtration ON/OFF:
|
// Filtration ON/OFF:
|
||||||
// First set filtration mode to manual
|
// First set filtration mode to manual
|
||||||
snprintf_P(stemp, sizeof(stemp), PSTR(NEOPOOL_CMND_SENSOR " %d,0"), NEOPOOL_CMND_FILTRATION_MODE);
|
snprintf_P(scmnd, NEOPOOL_MAX_CMND_LEN, PSTR(NEOPOOL_CMND_SENSOR " " STR(NEOPOOL_CMND_FILTRATION_MODE) ",0"));
|
||||||
ExecuteWebCommand(stemp, SRC_WEBGUI);
|
ExecuteWebCommand(scmnd, SRC_WEBGUI);
|
||||||
// Set MBF_PAR_FILT_MANUAL_STATE [MBF_PAR_FILT_MANUAL_STATE] accordingly (0|1)
|
// Set MBF_PAR_FILT_MANUAL_STATE [MBF_PAR_FILT_MANUAL_STATE] accordingly (0|1)
|
||||||
|
data[0] = value[1] ? 1 : 0;
|
||||||
serviced = (NEOPOOL_OK == NeoPoolWriteRegister(addr, data, 1));
|
serviced = (NEOPOOL_OK == NeoPoolWriteRegister(addr, data, 1));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1281,11 +1284,11 @@ bool NeoPoolCmnd(void)
|
||||||
|
|
||||||
case NEOPOOL_CMND_FILTRATION_MODE: // (<mode>)
|
case NEOPOOL_CMND_FILTRATION_MODE: // (<mode>)
|
||||||
{
|
{
|
||||||
|
addr = MBF_PAR_FILT_MODE;
|
||||||
if (0 == params_cnt) {
|
if (0 == params_cnt) {
|
||||||
serviced = (NEOPOOL_OK == NeoPoolReadRegister(addr, data, 1));
|
serviced = (NEOPOOL_OK == NeoPoolReadRegister(addr, data, 1));
|
||||||
}
|
}
|
||||||
if (1 == params_cnt) {
|
if (1 == params_cnt) {
|
||||||
addr = MBF_PAR_FILT_MODE;
|
|
||||||
data[0] = value[1];
|
data[0] = value[1];
|
||||||
if( (data[0] >= MBV_PAR_FILT_MANUAL && data[0] <= MBV_PAR_FILT_INTELLIGENT) || MBV_PAR_FILT_BACKWASH == data[0]) {
|
if( (data[0] >= MBV_PAR_FILT_MANUAL && data[0] <= MBV_PAR_FILT_INTELLIGENT) || MBV_PAR_FILT_BACKWASH == data[0]) {
|
||||||
// Set MBF_PAR_FILT_MODE
|
// Set MBF_PAR_FILT_MODE
|
||||||
|
@ -1337,6 +1340,39 @@ bool NeoPoolCmnd(void)
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case NEOPOOL_CMND_LIGHT: // (<state>)
|
||||||
|
{
|
||||||
|
if (0 == params_cnt) {
|
||||||
|
addr = MBF_RELAY_STATE;
|
||||||
|
if (NEOPOOL_OK == NeoPoolReadRegister(MBF_PAR_LIGHTING_GPIO, data, 1) && 0 != data[0]) {
|
||||||
|
data[1] = data[0] - 1;
|
||||||
|
serviced = (NEOPOOL_OK == NeoPoolReadRegister(MBF_RELAY_STATE, data, 1));
|
||||||
|
data[0] >>= data[1];
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
serviced = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (1 == params_cnt) {
|
||||||
|
addr = MBF_PAR_TIMER_BLOCK_LIGHT_INT + MBV_TIMER_OFFMB_TIMER_ENABLE;
|
||||||
|
uint16_t timer_val[] = {MBV_PAR_CTIMER_ALWAYS_OFF, MBV_PAR_CTIMER_ALWAYS_ON, MBV_PAR_CTIMER_ENABLED};
|
||||||
|
if (value[1] <= ARRAY_SIZE(timer_val)) {
|
||||||
|
data[0] = timer_val[value[1]];
|
||||||
|
serviced = true;
|
||||||
|
}
|
||||||
|
if( serviced ) {
|
||||||
|
snprintf_P(scmnd, NEOPOOL_MAX_CMND_LEN,
|
||||||
|
PSTR(D_CMND_BACKLOG " "
|
||||||
|
NEOPOOL_CMND_SENSOR " " STR(NEOPOOL_CMND_WRITE_REG) ",0x%04X,%d;"
|
||||||
|
NEOPOOL_CMND_SENSOR " " STR(NEOPOOL_CMND_SAVE_TO_EEPROM) ";"
|
||||||
|
NEOPOOL_CMND_SENSOR " " STR(NEOPOOL_CMND_IMM_TAKE_OVER)),
|
||||||
|
addr, data[0]);
|
||||||
|
ExecuteWebCommand(scmnd, SRC_WEBGUI);
|
||||||
|
serviced = (NEOPOOL_OK == NeoPoolReadRegister(addr, data, 1));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
case NEOPOOL_CMND_SAVE_TO_EEPROM:
|
case NEOPOOL_CMND_SAVE_TO_EEPROM:
|
||||||
addr = MBF_SAVE_TO_EEPROM;
|
addr = MBF_SAVE_TO_EEPROM;
|
||||||
|
@ -1358,6 +1394,7 @@ bool NeoPoolCmnd(void)
|
||||||
AddLog_P(LOG_LEVEL_DEBUG, PSTR("NEO: Unknown " NEOPOOL_CMND_SENSOR " cmnd %d"), cmnd);
|
AddLog_P(LOG_LEVEL_DEBUG, PSTR("NEO: Unknown " NEOPOOL_CMND_SENSOR " cmnd %d"), cmnd);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
free(scmnd);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (serviced) {
|
if (serviced) {
|
||||||
|
|
Loading…
Reference in New Issue