mirror of https://github.com/arendst/Tasmota.git
Fix initial user added modbus field:value pair
This commit is contained in:
parent
c1484f761c
commit
35b4bfcb3f
|
@ -238,9 +238,9 @@ struct NRGMBSPARAM {
|
||||||
uint8_t function;
|
uint8_t function;
|
||||||
uint8_t total_regs;
|
uint8_t total_regs;
|
||||||
uint8_t user_adds;
|
uint8_t user_adds;
|
||||||
uint8_t phase;
|
|
||||||
uint8_t state;
|
uint8_t state;
|
||||||
uint8_t retry;
|
uint8_t retry;
|
||||||
|
int8_t phase;
|
||||||
bool mutex;
|
bool mutex;
|
||||||
} NrgMbsParam;
|
} NrgMbsParam;
|
||||||
|
|
||||||
|
@ -419,7 +419,13 @@ void EnergyModbusLoop(void) {
|
||||||
NrgMbsUser[NrgMbsParam.state - NRG_MBS_MAX_REGS].data[NrgMbsParam.phase] = value;
|
NrgMbsUser[NrgMbsParam.state - NRG_MBS_MAX_REGS].data[NrgMbsParam.phase] = value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
} // end data ready
|
||||||
|
|
||||||
|
if (0 == NrgMbsParam.retry || data_ready) {
|
||||||
|
NrgMbsParam.retry = 1;
|
||||||
|
|
||||||
|
uint32_t address = 0;
|
||||||
uint32_t phase = 0;
|
uint32_t phase = 0;
|
||||||
do {
|
do {
|
||||||
NrgMbsParam.phase++;
|
NrgMbsParam.phase++;
|
||||||
|
@ -430,34 +436,33 @@ void EnergyModbusLoop(void) {
|
||||||
NrgMbsParam.state = 0;
|
NrgMbsParam.state = 0;
|
||||||
NrgMbsParam.phase = 0;
|
NrgMbsParam.phase = 0;
|
||||||
EnergyUpdateTotal(); // update every cycle after all registers have been read
|
EnergyUpdateTotal(); // update every cycle after all registers have been read
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
delay(0);
|
delay(0);
|
||||||
if (NrgMbsParam.devices == 1) {
|
if (NrgMbsParam.devices == 1) {
|
||||||
phase = NrgMbsParam.phase;
|
phase = NrgMbsParam.phase;
|
||||||
|
} else {
|
||||||
|
address = NrgMbsParam.phase;
|
||||||
}
|
}
|
||||||
} while (NrgMbsReg[NrgMbsParam.state].address[phase] == nrg_mbs_reg_not_used);
|
} while (NrgMbsReg[NrgMbsParam.state].address[phase] == nrg_mbs_reg_not_used);
|
||||||
}
|
|
||||||
} // end data ready
|
|
||||||
|
|
||||||
uint32_t address = 0;
|
|
||||||
uint32_t phase = NrgMbsParam.phase;
|
|
||||||
if (NrgMbsParam.devices > 1) {
|
|
||||||
address = NrgMbsParam.phase;
|
|
||||||
phase = 0;
|
|
||||||
}
|
|
||||||
if (0 == NrgMbsParam.retry || data_ready) {
|
|
||||||
NrgMbsParam.retry = 1;
|
|
||||||
// Even data type is single register, Odd data type is double registers
|
// Even data type is single register, Odd data type is double registers
|
||||||
register_count = 2 - (NrgMbsReg[NrgMbsParam.state].datatype & 1);
|
register_count = 2 - (NrgMbsReg[NrgMbsParam.state].datatype & 1);
|
||||||
|
|
||||||
|
#ifdef ENERGY_MODBUS_DEBUG
|
||||||
|
AddLog(LOG_LEVEL_DEBUG_MORE, PSTR("NRG: Modbus send Device %d, Function %d, Register %04X (%d/%d), Size %d"),
|
||||||
|
NrgMbsParam.device_address[address], NrgMbsParam.function,
|
||||||
|
NrgMbsReg[NrgMbsParam.state].address[phase], NrgMbsParam.state, phase,
|
||||||
|
register_count);
|
||||||
|
#endif
|
||||||
|
|
||||||
EnergyModbus->Send(NrgMbsParam.device_address[address], NrgMbsParam.function, NrgMbsReg[NrgMbsParam.state].address[phase], register_count);
|
EnergyModbus->Send(NrgMbsParam.device_address[address], NrgMbsParam.function, NrgMbsReg[NrgMbsParam.state].address[phase], register_count);
|
||||||
} else {
|
} else {
|
||||||
NrgMbsParam.retry--;
|
NrgMbsParam.retry--;
|
||||||
|
|
||||||
#ifdef ENERGY_MODBUS_DEBUG
|
#ifdef ENERGY_MODBUS_DEBUG
|
||||||
if (NrgMbsParam.devices > 1) {
|
if (NrgMbsParam.devices > 1) {
|
||||||
AddLog(LOG_LEVEL_DEBUG, PSTR("NRG: Modbus retry device %d state %d"), NrgMbsParam.device_address[address], NrgMbsParam.state);
|
AddLog(LOG_LEVEL_DEBUG, PSTR("NRG: Modbus retry device %d state %d"), NrgMbsParam.device_address[NrgMbsParam.phase], NrgMbsParam.state);
|
||||||
} else {
|
} else {
|
||||||
AddLog(LOG_LEVEL_DEBUG, PSTR("NRG: Modbus retry state %d phase %d"), NrgMbsParam.state, NrgMbsParam.phase);
|
AddLog(LOG_LEVEL_DEBUG, PSTR("NRG: Modbus retry state %d phase %d"), NrgMbsParam.state, NrgMbsParam.phase);
|
||||||
}
|
}
|
||||||
|
@ -556,7 +561,7 @@ bool EnergyModbusReadUserRegisters(JsonParserObject user_add_value, uint32_t add
|
||||||
|
|
||||||
#ifdef ENERGY_MODBUS_DEBUG
|
#ifdef ENERGY_MODBUS_DEBUG
|
||||||
AddLog(LOG_LEVEL_DEBUG, PSTR("NRG: Idx %d (%s), R [%04X,%04X,%04X], T %d, F %d, J '%s', G '%s', U '%s', D %d"),
|
AddLog(LOG_LEVEL_DEBUG, PSTR("NRG: Idx %d (%s), R [%04X,%04X,%04X], T %d, F %d, J '%s', G '%s', U '%s', D %d"),
|
||||||
add_index, NrgMbsUser[add_index].json_name,
|
reg_index, NrgMbsUser[add_index].json_name,
|
||||||
NrgMbsReg[reg_index].address[0],
|
NrgMbsReg[reg_index].address[0],
|
||||||
NrgMbsReg[reg_index].address[1],
|
NrgMbsReg[reg_index].address[1],
|
||||||
NrgMbsReg[reg_index].address[2],
|
NrgMbsReg[reg_index].address[2],
|
||||||
|
@ -797,7 +802,7 @@ bool EnergyModbusReadRegisters(void) {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// NrgMbsParam.state = 0; // Set by calloc()
|
// NrgMbsParam.state = 0; // Set by calloc()
|
||||||
// NrgMbsParam.phase = 0;
|
NrgMbsParam.phase = -1;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
#endif // USE_RULES
|
#endif // USE_RULES
|
||||||
|
|
Loading…
Reference in New Issue