Release for implementing microinverter totals and actually managing the age of parameters

This commit is contained in:
TraYali 2024-03-20 22:48:59 +01:00
parent 8c29930594
commit 5e34b7fe37
6 changed files with 57 additions and 25 deletions

View file

@ -44,9 +44,9 @@ void Dtu::populateMicroinverters() {
portParameterMicroinverterSerialNumber.updateValue(this->modbus, portStartAddress);
long long serialNumber = portParameterMicroinverterSerialNumber.getValue().first.i;
std::pair<bool, Microinverter *> getMicroinverterBySerialNumber = this->getMicroinverterBySerialNumber(serialNumber);
if (getMicroinverterBySerialNumber.first) {
getMicroinverterBySerialNumber.second->ports.push_back(port);
std::pair<Microinverter *, bool> getMicroinverterBySerialNumber = this->getMicroinverterBySerialNumber(serialNumber);
if (getMicroinverterBySerialNumber.second) {
getMicroinverterBySerialNumber.first->ports.push_back(port);
} else {
Microinverter microinverter{this->modbus, serialNumber};
this->microinverters.push_back(microinverter);
@ -59,16 +59,16 @@ void Dtu::populateMicroinverters() {
}
}
std::pair<bool, Microinverter *> Dtu::getMicroinverterBySerialNumber(long long serialNumber) {
std::pair<Microinverter *, bool> Dtu::getMicroinverterBySerialNumber(long long serialNumber) {
std::vector<Microinverter>::iterator microinvertersIterator = this->microinverters.begin();
while (microinvertersIterator != this->microinverters.end()) {
if (microinvertersIterator->serialNumber == serialNumber) {
return std::pair<bool, Microinverter *>(true, &*microinvertersIterator);
return std::pair<Microinverter *, bool>(&*microinvertersIterator, true);
} else {
microinvertersIterator++;
}
}
return std::pair<bool, Microinverter *>(false, &*microinvertersIterator);
return std::pair<Microinverter *, bool>(&*microinvertersIterator, false);
}
void Dtu::updateMicroinverters(std::vector<std::string> &parametersToGet, bool allParameters, std::vector<long long> &microinvertersToGet) {
@ -82,15 +82,15 @@ void Dtu::updateMicroinverters(std::vector<std::string> &parametersToGet, bool a
std::vector<long long>::iterator microinvertersToGetIterator = microinvertersToGet.begin();
while (microinvertersToGetIterator != microinvertersToGet.end()) {
std::pair<bool, Microinverter *> microinverterPair = this->getMicroinverterBySerialNumber(*microinvertersToGetIterator);
if (microinverterPair.first) {
microinverterPair.second->updatePorts(parametersToGet, allParameters);
std::pair<Microinverter *, bool> microinverterPair = this->getMicroinverterBySerialNumber(*microinvertersToGetIterator);
if (microinverterPair.second) {
microinverterPair.first->updatePorts(parametersToGet, allParameters);
}
microinvertersToGetIterator++;
}
}
void Dtu::printMicroinverters(std::vector<std::string> &parametersToGet, bool allParameters, std::vector<long long> &microinvertersToGet, bool shortNames) {
void Dtu::printMicroinverters(std::vector<std::string> &parametersToGet, bool allParameters, std::vector<long long> &microinvertersToGet, bool shortNames, bool printTodayProduction, bool printTotalProduction) {
if (microinvertersToGet.empty()) {
std::vector<Microinverter>::iterator microinvertersIterator = this->microinverters.begin();
while (microinvertersIterator != this->microinverters.end()) {
@ -101,9 +101,16 @@ void Dtu::printMicroinverters(std::vector<std::string> &parametersToGet, bool al
std::vector<long long>::iterator microinvertersToGetIterator = microinvertersToGet.begin();
while (microinvertersToGetIterator != microinvertersToGet.end()) {
std::pair<bool, Microinverter *> microinverterPair = this->getMicroinverterBySerialNumber(*microinvertersToGetIterator);
if (microinverterPair.first) {
microinverterPair.second->printPorts(parametersToGet, allParameters, shortNames);
std::pair<Microinverter *, bool> microinverterPair = this->getMicroinverterBySerialNumber(*microinvertersToGetIterator);
if (microinverterPair.second) {
std::cout << "Microinverter: " << microinverterPair.first->serialNumber << std::endl;
if(printTodayProduction) {
std::cout << "TodayProduction: " << microinverterPair.first->getTodayProduction() << std::endl;
}
if(printTotalProduction) {
std::cout << "TotalProduction: " << microinverterPair.first->getTotalProduction() << std::endl;
}
microinverterPair.first->printPorts(parametersToGet, allParameters, shortNames);
}
microinvertersToGetIterator++;
}

View file

@ -21,8 +21,6 @@ void Microinverter::updatePorts(std::vector<std::string> &parametersToGet, bool
}
void Microinverter::printPorts(std::vector<std::string> &parametersToGet, bool allParameters, bool shortNames) {
std::cout << "Microinverter: " << this->serialNumber << std::endl;
std::vector<Port>::iterator portsIterator = this->ports.begin();
while (portsIterator != this->ports.end()) {
portsIterator->printParameters(parametersToGet, allParameters, shortNames);
@ -36,6 +34,9 @@ long long Microinverter::getTodayProduction() {
std::vector<Port>::iterator portsIterator = this->ports.begin();
while(portsIterator != this->ports.end()) {
if(portsIterator->getParameterByName("todayProduction").first->age > 0) {
portsIterator->getParameterByName("todayProduction").first->updateValue(this->modbus, portsIterator->portStartAddress);
}
result += portsIterator->getParameterByName("todayProduction").first->getValue().first.i;
portsIterator++;
}
@ -48,8 +49,12 @@ long long Microinverter::getTotalProduction() {
std::vector<Port>::iterator portsIterator = this->ports.begin();
while(portsIterator != this->ports.end()) {
if(portsIterator->getParameterByName("totalProduction").first->age > 0) {
portsIterator->getParameterByName("totalProduction").first->updateValue(this->modbus, portsIterator->portStartAddress);
}
result += portsIterator->getParameterByName("totalProduction").first->getValue().first.i;
portsIterator++;
portsIterator++;
}
return result;

View file

@ -87,7 +87,17 @@ void Port::fixCurrent() {
}
}
void Port::increaseParametersAge() {
std::vector<std::shared_ptr<PortParameter>>::iterator parametersIterator = this->parameters.begin();
while(parametersIterator != this->parameters.end()) {
parametersIterator->get()->age++;
parametersIterator++;
}
}
void Port::updateParameters(std::vector<std::string> &parametersToGet, bool allParameters) {
this->increaseParametersAge();
if (allParameters && parametersToGet.size() < this->parameters.size()) {
std::vector<std::shared_ptr<PortParameter>>::iterator parametersIterator = this->parameters.begin();
while (parametersIterator != this->parameters.end()) {