Make sure we received the correct amount of data from SmartDongle, otherwise warn and do not process incomplete blocks
This commit is contained in:
parent
d995874ddb
commit
8e5a639591
@ -95,23 +95,27 @@ bool HuaweiFusionSolar::update()
|
|||||||
if (!m_registersQueue.isEmpty())
|
if (!m_registersQueue.isEmpty())
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
// Add the requests
|
// Add the requests to queue, begin with power values, since they are most important
|
||||||
m_registersQueue.enqueue(HuaweiFusionModbusTcpConnection::RegisterInverterActivePower);
|
m_registersQueue.enqueue(HuaweiFusionModbusTcpConnection::RegisterInverterActivePower);
|
||||||
m_registersQueue.enqueue(HuaweiFusionModbusTcpConnection::RegisterInverterDeviceStatus);
|
|
||||||
m_registersQueue.enqueue(HuaweiFusionModbusTcpConnection::RegisterInverterEnergyProduced);
|
|
||||||
m_registersQueue.enqueue(HuaweiFusionModbusTcpConnection::RegisterLunaBattery1Status);
|
|
||||||
if (m_battery1Available) {
|
|
||||||
m_registersQueue.enqueue(HuaweiFusionModbusTcpConnection::RegisterLunaBattery1Power);
|
|
||||||
m_registersQueue.enqueue(HuaweiFusionModbusTcpConnection::RegisterLunaBattery1Soc);
|
|
||||||
}
|
|
||||||
m_registersQueue.enqueue(HuaweiFusionModbusTcpConnection::RegisterPowerMeterActivePower);
|
m_registersQueue.enqueue(HuaweiFusionModbusTcpConnection::RegisterPowerMeterActivePower);
|
||||||
m_registersQueue.enqueue(HuaweiFusionModbusTcpConnection::RegisterLunaBattery2Status);
|
if (m_battery1Available)
|
||||||
if (m_battery2Available) {
|
m_registersQueue.enqueue(HuaweiFusionModbusTcpConnection::RegisterLunaBattery1Power);
|
||||||
m_registersQueue.enqueue(HuaweiFusionModbusTcpConnection::RegisterLunaBattery2Power);
|
|
||||||
m_registersQueue.enqueue(HuaweiFusionModbusTcpConnection::RegisterLunaBattery2Soc);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Note: since huawei can only process one request at the time, we need to queue the requests
|
if (m_battery2Available)
|
||||||
|
m_registersQueue.enqueue(HuaweiFusionModbusTcpConnection::RegisterLunaBattery2Power);
|
||||||
|
|
||||||
|
m_registersQueue.enqueue(HuaweiFusionModbusTcpConnection::RegisterInverterEnergyProduced);
|
||||||
|
m_registersQueue.enqueue(HuaweiFusionModbusTcpConnection::RegisterInverterDeviceStatus);
|
||||||
|
m_registersQueue.enqueue(HuaweiFusionModbusTcpConnection::RegisterLunaBattery1Status);
|
||||||
|
m_registersQueue.enqueue(HuaweiFusionModbusTcpConnection::RegisterLunaBattery2Status);
|
||||||
|
|
||||||
|
if (m_battery1Available)
|
||||||
|
m_registersQueue.enqueue(HuaweiFusionModbusTcpConnection::RegisterLunaBattery1Soc);
|
||||||
|
|
||||||
|
if (m_battery2Available)
|
||||||
|
m_registersQueue.enqueue(HuaweiFusionModbusTcpConnection::RegisterLunaBattery2Soc);
|
||||||
|
|
||||||
|
// Note: since huawei can only process one request at the time, we need to queue the requests and have some time between requests...
|
||||||
|
|
||||||
m_currentRegisterRequest = -1;
|
m_currentRegisterRequest = -1;
|
||||||
readNextRegister();
|
readNextRegister();
|
||||||
@ -152,8 +156,12 @@ void HuaweiFusionSolar::readNextRegister()
|
|||||||
handleModbusError(reply->error());
|
handleModbusError(reply->error());
|
||||||
if (reply->error() == QModbusDevice::NoError) {
|
if (reply->error() == QModbusDevice::NoError) {
|
||||||
const QModbusDataUnit unit = reply->result();
|
const QModbusDataUnit unit = reply->result();
|
||||||
qCDebug(dcHuaweiFusionSolar()) << "<-- Response from \"Inverter active power\" register" << 32080 << "size:" << 2 << unit.values();
|
qCDebug(dcHuaweiFusionSolar()) << "<-- Response from \"Inverter active power\" register" << 32080 << "size:" << 2 << "valueCount:" << unit.valueCount() << unit.values() << unit.values().count();
|
||||||
processInverterActivePowerRegisterValues(unit.values());
|
if (unit.values().count() != 2) {
|
||||||
|
qCWarning(dcHuaweiFusionSolar()) << "<-- Received invalid values count. Requested" << 2 << "but received" << unit.values().count();
|
||||||
|
} else {
|
||||||
|
processInverterActivePowerRegisterValues(unit.values());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
finishRequest();
|
finishRequest();
|
||||||
@ -193,8 +201,12 @@ void HuaweiFusionSolar::readNextRegister()
|
|||||||
handleModbusError(reply->error());
|
handleModbusError(reply->error());
|
||||||
if (reply->error() == QModbusDevice::NoError) {
|
if (reply->error() == QModbusDevice::NoError) {
|
||||||
const QModbusDataUnit unit = reply->result();
|
const QModbusDataUnit unit = reply->result();
|
||||||
qCDebug(dcHuaweiFusionSolar()) << "<-- Response from \"Inverter device status\" register" << 32089 << "size:" << 1 << unit.values();
|
qCDebug(dcHuaweiFusionSolar()) << "<-- Response from \"Inverter device status\" register" << 32089 << "size:" << 1 << "valueCount:" << unit.valueCount() << unit.values() << unit.values().count();
|
||||||
processInverterDeviceStatusRegisterValues(unit.values());
|
if (unit.values().count() != 1) {
|
||||||
|
qCWarning(dcHuaweiFusionSolar()) << "<-- Received invalid values count. Requested" << 1 << "but received" << unit.values().count();
|
||||||
|
} else {
|
||||||
|
processInverterDeviceStatusRegisterValues(unit.values());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
finishRequest();
|
finishRequest();
|
||||||
});
|
});
|
||||||
@ -233,8 +245,12 @@ void HuaweiFusionSolar::readNextRegister()
|
|||||||
handleModbusError(reply->error());
|
handleModbusError(reply->error());
|
||||||
if (reply->error() == QModbusDevice::NoError) {
|
if (reply->error() == QModbusDevice::NoError) {
|
||||||
const QModbusDataUnit unit = reply->result();
|
const QModbusDataUnit unit = reply->result();
|
||||||
qCDebug(dcHuaweiFusionSolar()) << "<-- Response from \"Inverter energy produced\" register" << 32106 << "size:" << 2 << unit.values();
|
qCDebug(dcHuaweiFusionSolar()) << "<-- Response from \"Inverter energy produced\" register" << 32106 << "size:" << 2 << "valueCount:" << unit.valueCount() << unit.values() << unit.values().count();
|
||||||
processInverterEnergyProducedRegisterValues(unit.values());
|
if (unit.values().count() != 2) {
|
||||||
|
qCWarning(dcHuaweiFusionSolar()) << "<-- Received invalid values count. Requested" << 2 << "but received" << unit.values().count();
|
||||||
|
} else {
|
||||||
|
processInverterEnergyProducedRegisterValues(unit.values());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
finishRequest();
|
finishRequest();
|
||||||
});
|
});
|
||||||
@ -272,8 +288,13 @@ void HuaweiFusionSolar::readNextRegister()
|
|||||||
handleModbusError(reply->error());
|
handleModbusError(reply->error());
|
||||||
if (reply->error() == QModbusDevice::NoError) {
|
if (reply->error() == QModbusDevice::NoError) {
|
||||||
const QModbusDataUnit unit = reply->result();
|
const QModbusDataUnit unit = reply->result();
|
||||||
qCDebug(dcHuaweiFusionSolar()) << "<-- Response from \"Power meter active power\" register" << 37113 << "size:" << 2 << unit.values();
|
|
||||||
processPowerMeterActivePowerRegisterValues(unit.values());
|
qCDebug(dcHuaweiFusionSolar()) << "<-- Response from \"Power meter active power\" register" << 37113 << "size:" << 2 << "valueCount:" << unit.valueCount() << unit.values() << unit.values().count();
|
||||||
|
if (unit.values().count() != 2) {
|
||||||
|
qCWarning(dcHuaweiFusionSolar()) << "<-- Received invalid values count. Requested" << 2 << "but received" << unit.values().count();
|
||||||
|
} else {
|
||||||
|
processPowerMeterActivePowerRegisterValues(unit.values());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
finishRequest();
|
finishRequest();
|
||||||
});
|
});
|
||||||
@ -312,8 +333,12 @@ void HuaweiFusionSolar::readNextRegister()
|
|||||||
handleModbusError(reply->error());
|
handleModbusError(reply->error());
|
||||||
if (reply->error() == QModbusDevice::NoError) {
|
if (reply->error() == QModbusDevice::NoError) {
|
||||||
const QModbusDataUnit unit = reply->result();
|
const QModbusDataUnit unit = reply->result();
|
||||||
qCDebug(dcHuaweiFusionSolar()) << "<-- Response from \"Luna 2000 Battery 1 status\" register" << 37000 << "size:" << 1 << unit.values();
|
qCDebug(dcHuaweiFusionSolar()) << "<-- Response from \"Luna 2000 Battery 1 status\" register" << 37000 << "size:" << 1 << "valueCount:" << unit.valueCount() << unit.values() << unit.values().count();
|
||||||
processLunaBattery1StatusRegisterValues(unit.values());
|
if (unit.values().count() != 1) {
|
||||||
|
qCWarning(dcHuaweiFusionSolar()) << "<-- Received invalid values count. Requested" << 1 << "but received" << unit.values().count();
|
||||||
|
} else {
|
||||||
|
processLunaBattery1StatusRegisterValues(unit.values());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
finishRequest();
|
finishRequest();
|
||||||
});
|
});
|
||||||
@ -351,8 +376,12 @@ void HuaweiFusionSolar::readNextRegister()
|
|||||||
handleModbusError(reply->error());
|
handleModbusError(reply->error());
|
||||||
if (reply->error() == QModbusDevice::NoError) {
|
if (reply->error() == QModbusDevice::NoError) {
|
||||||
const QModbusDataUnit unit = reply->result();
|
const QModbusDataUnit unit = reply->result();
|
||||||
qCDebug(dcHuaweiFusionSolar()) << "<-- Response from \"Luna 2000 Battery 1 power\" register" << 37001 << "size:" << 2 << unit.values();
|
qCDebug(dcHuaweiFusionSolar()) << "<-- Response from \"Luna 2000 Battery 1 power\" register" << 37001 << "size:" << 2 << "valueCount:" << unit.valueCount() << unit.values() << unit.values().count();
|
||||||
processLunaBattery1PowerRegisterValues(unit.values());
|
if (unit.values().count() != 2) {
|
||||||
|
qCWarning(dcHuaweiFusionSolar()) << "<-- Received invalid values count. Requested" << 2 << "but received" << unit.values().count();
|
||||||
|
} else {
|
||||||
|
processLunaBattery1PowerRegisterValues(unit.values());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
finishRequest();
|
finishRequest();
|
||||||
});
|
});
|
||||||
@ -390,8 +419,12 @@ void HuaweiFusionSolar::readNextRegister()
|
|||||||
handleModbusError(reply->error());
|
handleModbusError(reply->error());
|
||||||
if (reply->error() == QModbusDevice::NoError) {
|
if (reply->error() == QModbusDevice::NoError) {
|
||||||
const QModbusDataUnit unit = reply->result();
|
const QModbusDataUnit unit = reply->result();
|
||||||
qCDebug(dcHuaweiFusionSolar()) << "<-- Response from \"Luna 2000 Battery 1 state of charge\" register" << 37004 << "size:" << 1 << unit.values();
|
qCDebug(dcHuaweiFusionSolar()) << "<-- Response from \"Luna 2000 Battery 1 state of charge\" register" << 37004 << "size:" << 1 << "valueCount:" << unit.valueCount() << unit.values() << unit.values().count();
|
||||||
processLunaBattery1SocRegisterValues(unit.values());
|
if (unit.values().count() != 1) {
|
||||||
|
qCWarning(dcHuaweiFusionSolar()) << "<-- Received invalid values count. Requested" << 1 << "but received" << unit.values().count();
|
||||||
|
} else {
|
||||||
|
processLunaBattery1SocRegisterValues(unit.values());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
finishRequest();
|
finishRequest();
|
||||||
});
|
});
|
||||||
@ -430,8 +463,12 @@ void HuaweiFusionSolar::readNextRegister()
|
|||||||
handleModbusError(reply->error());
|
handleModbusError(reply->error());
|
||||||
if (reply->error() == QModbusDevice::NoError) {
|
if (reply->error() == QModbusDevice::NoError) {
|
||||||
const QModbusDataUnit unit = reply->result();
|
const QModbusDataUnit unit = reply->result();
|
||||||
qCDebug(dcHuaweiFusionSolar()) << "<-- Response from \"Luna 2000 Battery 2 status\" register" << 37741 << "size:" << 1 << unit.values();
|
qCDebug(dcHuaweiFusionSolar()) << "<-- Response from \"Luna 2000 Battery 2 status\" register" << 37741 << "size:" << 1 << "valueCount:" << unit.valueCount() << unit.values() << unit.values().count();
|
||||||
processLunaBattery2StatusRegisterValues(unit.values());
|
if (unit.values().count() != 1) {
|
||||||
|
qCWarning(dcHuaweiFusionSolar()) << "<-- Received invalid values count. Requested" << 1 << "but received" << unit.values().count();
|
||||||
|
} else {
|
||||||
|
processLunaBattery2StatusRegisterValues(unit.values());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
finishRequest();
|
finishRequest();
|
||||||
});
|
});
|
||||||
@ -469,8 +506,12 @@ void HuaweiFusionSolar::readNextRegister()
|
|||||||
handleModbusError(reply->error());
|
handleModbusError(reply->error());
|
||||||
if (reply->error() == QModbusDevice::NoError) {
|
if (reply->error() == QModbusDevice::NoError) {
|
||||||
const QModbusDataUnit unit = reply->result();
|
const QModbusDataUnit unit = reply->result();
|
||||||
qCDebug(dcHuaweiFusionSolar()) << "<-- Response from \"Luna 2000 Battery 2 power\" register" << 37743 << "size:" << 2 << unit.values();
|
qCDebug(dcHuaweiFusionSolar()) << "<-- Response from \"Luna 2000 Battery 2 power\" register" << 37743 << "size:" << 2 << "valueCount:" << unit.valueCount() << unit.values() << unit.values().count();
|
||||||
processLunaBattery2PowerRegisterValues(unit.values());
|
if (unit.values().count() != 2) {
|
||||||
|
qCWarning(dcHuaweiFusionSolar()) << "<-- Received invalid values count. Requested" << 2 << "but received" << unit.values().count();
|
||||||
|
} else {
|
||||||
|
processLunaBattery2PowerRegisterValues(unit.values());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
finishRequest();
|
finishRequest();
|
||||||
});
|
});
|
||||||
@ -508,8 +549,12 @@ void HuaweiFusionSolar::readNextRegister()
|
|||||||
handleModbusError(reply->error());
|
handleModbusError(reply->error());
|
||||||
if (reply->error() == QModbusDevice::NoError) {
|
if (reply->error() == QModbusDevice::NoError) {
|
||||||
const QModbusDataUnit unit = reply->result();
|
const QModbusDataUnit unit = reply->result();
|
||||||
qCDebug(dcHuaweiFusionSolar()) << "<-- Response from \"Luna 2000 Battery 2 state of charge\" register" << 37738 << "size:" << 1 << unit.values();
|
qCDebug(dcHuaweiFusionSolar()) << "<-- Response from \"Luna 2000 Battery 2 state of charge\" register" << 37738 << "size:" << 1 << "valueCount:" << unit.valueCount() << unit.values() << unit.values().count();
|
||||||
processLunaBattery2SocRegisterValues(unit.values());
|
if (unit.values().count() != 1) {
|
||||||
|
qCWarning(dcHuaweiFusionSolar()) << "<-- Received invalid values count. Requested" << 1 << "but received" << unit.values().count();
|
||||||
|
} else {
|
||||||
|
processLunaBattery2SocRegisterValues(unit.values());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
finishRequest();
|
finishRequest();
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user