mirror of https://github.com/arendst/Tasmota.git
Merge pull request #11182 from shaap/development
Add eMylo EAI-90 support
This commit is contained in:
commit
3f6bff793a
|
@ -0,0 +1,5 @@
|
|||
Template TuyaMCU(54)
|
||||
|
||||
Console:
|
||||
Backlog SetOption66 1; TuyaMCU 11,16; TuyaMCU 36,6; TuyaMCU 37,1; SetOption59 1; SetOption72 1
|
||||
Rule1 on System#Boot do RuleTimer1 10 endon on Rules#Timer=1 do backlog TuyaSend8; RuleTimer1 10 endon
|
|
@ -424,7 +424,7 @@ enum TuyaSupportedFunctions { TUYA_MCU_FUNC_NONE,
|
|||
TUYA_MCU_FUNC_REL6, TUYA_MCU_FUNC_REL7, TUYA_MCU_FUNC_REL8,
|
||||
TUYA_MCU_FUNC_DIMMER = 21, TUYA_MCU_FUNC_DIMMER2, TUYA_MCU_FUNC_CT, TUYA_MCU_FUNC_RGB, TUYA_MCU_FUNC_WHITE,
|
||||
TUYA_MCU_FUNC_MODESET, TUYA_MCU_FUNC_REPORT1, TUYA_MCU_FUNC_REPORT2,
|
||||
TUYA_MCU_FUNC_POWER = 31, TUYA_MCU_FUNC_CURRENT, TUYA_MCU_FUNC_VOLTAGE, TUYA_MCU_FUNC_BATTERY_STATE, TUYA_MCU_FUNC_BATTERY_PERCENTAGE,
|
||||
TUYA_MCU_FUNC_POWER = 31, TUYA_MCU_FUNC_CURRENT, TUYA_MCU_FUNC_VOLTAGE, TUYA_MCU_FUNC_BATTERY_STATE, TUYA_MCU_FUNC_BATTERY_PERCENTAGE, TUYA_MCU_FUNC_POWER_COMBINED, TUYA_MCU_FUNC_POWER_TOTAL,
|
||||
TUYA_MCU_FUNC_REL1_INV = 41, TUYA_MCU_FUNC_REL2_INV, TUYA_MCU_FUNC_REL3_INV, TUYA_MCU_FUNC_REL4_INV, TUYA_MCU_FUNC_REL5_INV,
|
||||
TUYA_MCU_FUNC_REL6_INV, TUYA_MCU_FUNC_REL7_INV, TUYA_MCU_FUNC_REL8_INV,
|
||||
TUYA_MCU_FUNC_LOWPOWER_MODE = 51,
|
||||
|
|
|
@ -386,7 +386,7 @@ inline bool TuyaFuncIdValid(uint8_t fnId) {
|
|||
return (fnId >= TUYA_MCU_FUNC_SWT1 && fnId <= TUYA_MCU_FUNC_SWT4) ||
|
||||
(fnId >= TUYA_MCU_FUNC_REL1 && fnId <= TUYA_MCU_FUNC_REL8) ||
|
||||
(fnId >= TUYA_MCU_FUNC_DIMMER && fnId <= TUYA_MCU_FUNC_REPORT2) ||
|
||||
(fnId >= TUYA_MCU_FUNC_POWER && fnId <= TUYA_MCU_FUNC_BATTERY_PERCENTAGE) ||
|
||||
(fnId >= TUYA_MCU_FUNC_POWER && fnId <= TUYA_MCU_FUNC_POWER_TOTAL) ||
|
||||
(fnId >= TUYA_MCU_FUNC_REL1_INV && fnId <= TUYA_MCU_FUNC_REL8_INV) ||
|
||||
(fnId >= TUYA_MCU_FUNC_ENUM1 && fnId <= TUYA_MCU_FUNC_ENUM4) ||
|
||||
(fnId >= TUYA_MCU_FUNC_MOTOR_DIR && fnId <= TUYA_MCU_FUNC_DUMMY) ||
|
||||
|
@ -697,13 +697,41 @@ void TuyaProcessStatePacket(void) {
|
|||
uint8_t fnId;
|
||||
uint16_t dpDataLen;
|
||||
bool PowerOff = false;
|
||||
bool tuya_energy_enabled = (XNRG_32 == TasmotaGlobal.energy_driver);
|
||||
|
||||
while (dpidStart + 4 < Tuya.byte_counter) {
|
||||
dpDataLen = Tuya.buffer[dpidStart + 2] << 8 | Tuya.buffer[dpidStart + 3];
|
||||
fnId = TuyaGetFuncId(Tuya.buffer[dpidStart]);
|
||||
|
||||
AddLog(LOG_LEVEL_DEBUG, PSTR("TYA: fnId=%d is set for dpId=%d"), fnId, Tuya.buffer[dpidStart]);
|
||||
if (Tuya.buffer[dpidStart + 1] == 1) { // Data Type 1
|
||||
if (Tuya.buffer[dpidStart + 1] == 0) {
|
||||
#ifdef USE_ENERGY_SENSOR
|
||||
if (tuya_energy_enabled && fnId == TUYA_MCU_FUNC_POWER_COMBINED) {
|
||||
if (dpDataLen == 8) {
|
||||
uint16_t tmpVol = Tuya.buffer[dpidStart + 4] << 8 | Tuya.buffer[dpidStart + 5];
|
||||
uint16_t tmpCur = Tuya.buffer[dpidStart + 7] << 8 | Tuya.buffer[dpidStart + 8];
|
||||
uint16_t tmpPow = Tuya.buffer[dpidStart + 10] << 8 | Tuya.buffer[dpidStart + 11];
|
||||
Energy.voltage[0] = (float)tmpVol / 10;
|
||||
Energy.current[0] = (float)tmpCur / 1000;
|
||||
Energy.active_power[0] = (float)tmpPow;
|
||||
AddLog(LOG_LEVEL_DEBUG, PSTR("TYA: Rx ID=%d Voltage=%d"), Tuya.buffer[dpidStart], tmpVol);
|
||||
AddLog(LOG_LEVEL_DEBUG, PSTR("TYA: Rx ID=%d Current=%d"), Tuya.buffer[dpidStart], tmpCur);
|
||||
AddLog(LOG_LEVEL_DEBUG, PSTR("TYA: Rx ID=%d Active_Power=%d"), Tuya.buffer[dpidStart], tmpPow);
|
||||
|
||||
if (RtcTime.valid) {
|
||||
if (Tuya.lastPowerCheckTime != 0 && Energy.active_power[0] > 0) {
|
||||
Energy.kWhtoday += (float)Energy.active_power[0] * (Rtc.utc_time - Tuya.lastPowerCheckTime) / 36;
|
||||
EnergyUpdateToday();
|
||||
}
|
||||
Tuya.lastPowerCheckTime = Rtc.utc_time;
|
||||
}
|
||||
} else {
|
||||
AddLog(LOG_LEVEL_DEBUG, PSTR("TYA: Rx ID=%d INV_LEN=%d"), Tuya.buffer[dpidStart], dpDataLen);
|
||||
}
|
||||
}
|
||||
#endif // USE_ENERGY_SENSOR
|
||||
}
|
||||
else if (Tuya.buffer[dpidStart + 1] == 1) { // Data Type 1
|
||||
|
||||
if (fnId >= TUYA_MCU_FUNC_REL1 && fnId <= TUYA_MCU_FUNC_REL8) {
|
||||
AddLog(LOG_LEVEL_DEBUG, PSTR("TYA: RX Relay-%d --> MCU State: %s Current State:%s"), fnId - TUYA_MCU_FUNC_REL1 + 1, Tuya.buffer[dpidStart + 4]?"On":"Off",bitRead(TasmotaGlobal.power, fnId - TUYA_MCU_FUNC_REL1)?"On":"Off");
|
||||
|
@ -728,7 +756,6 @@ void TuyaProcessStatePacket(void) {
|
|||
if (PowerOff) { Tuya.ignore_dimmer_cmd_timeout = millis() + 250; }
|
||||
}
|
||||
else if (Tuya.buffer[dpidStart + 1] == 2) { // Data Type 2
|
||||
bool tuya_energy_enabled = (XNRG_32 == TasmotaGlobal.energy_driver);
|
||||
uint16_t packetValue = Tuya.buffer[dpidStart + 6] << 8 | Tuya.buffer[dpidStart + 7];
|
||||
uint8_t dimIndex;
|
||||
bool SnsUpdate = false;
|
||||
|
@ -824,6 +851,9 @@ void TuyaProcessStatePacket(void) {
|
|||
}
|
||||
Tuya.lastPowerCheckTime = Rtc.utc_time;
|
||||
}
|
||||
} else if (tuya_energy_enabled && fnId == TUYA_MCU_FUNC_POWER_TOTAL) {
|
||||
EnergyUpdateTotal((float)packetValue / 100,true);
|
||||
AddLog(LOG_LEVEL_DEBUG, PSTR("TYA: Rx ID=%d Total_Power=%d"), Tuya.buffer[dpidStart], packetValue);
|
||||
}
|
||||
#endif // USE_ENERGY_SENSOR
|
||||
}
|
||||
|
@ -862,6 +892,7 @@ void TuyaProcessStatePacket(void) {
|
|||
ExecuteCommand(scmnd, SRC_SWITCH);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
else if (Tuya.buffer[dpidStart + 1] == 4) { // Data Type 4
|
||||
const unsigned char *dpData = (unsigned char*)&Tuya.buffer[dpidStart + 4];
|
||||
|
@ -1273,11 +1304,11 @@ bool Xnrg32(uint8_t function)
|
|||
|
||||
if (TUYA_DIMMER == TasmotaGlobal.module_type) {
|
||||
if (FUNC_PRE_INIT == function) {
|
||||
if (TuyaGetDpId(TUYA_MCU_FUNC_POWER) != 0) {
|
||||
if (TuyaGetDpId(TUYA_MCU_FUNC_CURRENT) == 0) {
|
||||
if (TuyaGetDpId(TUYA_MCU_FUNC_POWER) != 0 || TuyaGetDpId(TUYA_MCU_FUNC_POWER_COMBINED) != 0) {
|
||||
if (TuyaGetDpId(TUYA_MCU_FUNC_CURRENT) == 0 && TuyaGetDpId(TUYA_MCU_FUNC_POWER_COMBINED) == 0) {
|
||||
Energy.current_available = false;
|
||||
}
|
||||
if (TuyaGetDpId(TUYA_MCU_FUNC_VOLTAGE) == 0) {
|
||||
if (TuyaGetDpId(TUYA_MCU_FUNC_VOLTAGE) == 0 && TuyaGetDpId(TUYA_MCU_FUNC_POWER_COMBINED) == 0) {
|
||||
Energy.voltage_available = false;
|
||||
}
|
||||
TasmotaGlobal.energy_driver = XNRG_32;
|
||||
|
|
Loading…
Reference in New Issue