mirror of https://github.com/arendst/Tasmota.git
add support for setting state without tx
This commit is contained in:
parent
712a64c73d
commit
79b935abd9
|
@ -331,7 +331,15 @@ uint32_t IrRemoteCmndIrHvacJson(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
UpperCase_P(parm_uc, PSTR(D_JSON_IRHVAC_MODEL));
|
UpperCase_P(parm_uc, PSTR(D_JSON_IRHVAC_MODEL));
|
||||||
if (json.containsKey(parm_uc)) { state.model = IRac::strToModel(json[parm_uc]); }
|
// extract "SendOnly" flag from "model" field. A better permanent way would be to add a separate field for this
|
||||||
|
const char * model = json[parm_uc];
|
||||||
|
bool stateOnly = false;
|
||||||
|
if (strncasecmp(model, "StateOnly", 9) == 0) {
|
||||||
|
stateOnly = true;
|
||||||
|
model += 9; // skip this prefix and parse the rest of the model
|
||||||
|
}
|
||||||
|
// parse model of the ac
|
||||||
|
if (json.containsKey(parm_uc)) { state.model = IRac::strToModel(model); }
|
||||||
UpperCase_P(parm_uc, PSTR(D_JSON_IRHVAC_MODE));
|
UpperCase_P(parm_uc, PSTR(D_JSON_IRHVAC_MODE));
|
||||||
if (json.containsKey(parm_uc)) { state.mode = IRac::strToOpmode(json[parm_uc]); }
|
if (json.containsKey(parm_uc)) { state.mode = IRac::strToOpmode(json[parm_uc]); }
|
||||||
UpperCase_P(parm_uc, PSTR(D_JSON_IRHVAC_SWINGV));
|
UpperCase_P(parm_uc, PSTR(D_JSON_IRHVAC_SWINGV));
|
||||||
|
@ -368,10 +376,15 @@ uint32_t IrRemoteCmndIrHvacJson(void)
|
||||||
if (json[parm_uc]) { state.sleep = json[parm_uc]; }
|
if (json[parm_uc]) { state.sleep = json[parm_uc]; }
|
||||||
//if (json[D_JSON_IRHVAC_CLOCK]) { state.clock = json[D_JSON_IRHVAC_CLOCK]; } // not sure it's useful to support 'clock'
|
//if (json[D_JSON_IRHVAC_CLOCK]) { state.clock = json[D_JSON_IRHVAC_CLOCK]; } // not sure it's useful to support 'clock'
|
||||||
|
|
||||||
|
if (!stateOnly) {
|
||||||
IRac ac(Pin(GPIO_IRSEND));
|
IRac ac(Pin(GPIO_IRSEND));
|
||||||
bool success = ac.sendAc(state, irhvac_stateful && irac_prev_state.protocol == state.protocol ? &irac_prev_state : nullptr);
|
bool success = ac.sendAc(state, irhvac_stateful && irac_prev_state.protocol == state.protocol ? &irac_prev_state : nullptr);
|
||||||
if (!success) { return IE_SYNTAX_IRHVAC; }
|
if (!success) { return IE_SYNTAX_IRHVAC; }
|
||||||
// don't store what we sent for next time, expect us to receive what we just sent back (loopback) and only update the state there. this will prevent double toggle.
|
// don't store what we sent for next time, expect us to receive what we just sent back (loopback) and only update the state there. this will prevent double toggle.
|
||||||
|
}
|
||||||
|
if (stateOnly && irhvac_stateful) { // don't send anything, just update the state if we requested to sync state manually
|
||||||
|
irac_prev_state = state;
|
||||||
|
}
|
||||||
|
|
||||||
Response_P(PSTR("{\"" D_CMND_IRHVAC "\":%s}"), sendACJsonState(state).c_str());
|
Response_P(PSTR("{\"" D_CMND_IRHVAC "\":%s}"), sendACJsonState(state).c_str());
|
||||||
return IE_RESPONSE_PROVIDED;
|
return IE_RESPONSE_PROVIDED;
|
||||||
|
|
Loading…
Reference in New Issue