diff --git a/inc/hoymiles/dtu.h b/inc/hoymiles/dtu.h index b4a3ccd..bf2875c 100644 --- a/inc/hoymiles/dtu.h +++ b/inc/hoymiles/dtu.h @@ -14,6 +14,8 @@ class Dtu { std::vector microinverters; + bool connected; + void populateMicroinverters(); std::pair getMicroinverterBySerialNumber(long long serialNumber); @@ -23,12 +25,12 @@ class Dtu { bool isConnected(); - bool modbusError(); - - std::string modbusErrorMessage(); + // void updateMicroinverters(); void updateMicroinverters(std::vector ¶metersToGet, bool allParameters, std::vector µinvertersToGet); + // void printMicroinverters(); + void printMicroinverters(std::vector ¶metersToGet, bool allParameters, std::vector µinvertersToGet, bool shortNames, bool printTodayProduction, bool printTotalProduction); ~Dtu(); diff --git a/inc/hoymiles/microinverter.h b/inc/hoymiles/microinverter.h index 6ff4309..d582cc3 100644 --- a/inc/hoymiles/microinverter.h +++ b/inc/hoymiles/microinverter.h @@ -12,20 +12,14 @@ class Microinverter { private: std::shared_ptr modbus; - int startAddress; - public: - Microinverter(std::shared_ptr modbus, int startAddress, long long serialNumber); + Microinverter(std::shared_ptr modbus, long long serialNumber); long long serialNumber; - int age; - std::vector ports; - // void updatePorts(std::vector ¶metersToGet, bool allParameters); - - void updateParameters(std::vector ¶metersToGet, bool allParameters); + void updatePorts(std::vector ¶metersToGet, bool allParameters); void printPorts(std::vector ¶metersToGet, bool allParameters, bool shortNames); diff --git a/inc/hoymiles/port.h b/inc/hoymiles/port.h index 130918a..194ffe7 100644 --- a/inc/hoymiles/port.h +++ b/inc/hoymiles/port.h @@ -10,25 +10,25 @@ class Port { private: + std::shared_ptr modbus; + void populateParameters(); void fixCurrent(); bool currentFixed; - // void increaseParametersAge(); + void increaseParametersAge(); public: - Port(int portStartAddress); + Port(std::shared_ptr modbus, uint16_t portStartAddress); - int portStartAddress; + uint16_t portStartAddress; std::vector> parameters; std::pair, bool> getParameterByName(std::string name); - // void updateParameters(std::vector ¶metersToGet, bool allParameters); - - void setParametersFromMicroinverterArray(uint8_t *registers, int addressOffset); + void updateParameters(std::vector ¶metersToGet, bool allParameters); void printParameters(std::vector ¶metersToGet, bool allParameters, bool shortNames); }; diff --git a/inc/hoymiles/portParameters/portParameters.h b/inc/hoymiles/portParameters/portParameters.h index 329ff17..3db6fbe 100644 --- a/inc/hoymiles/portParameters/portParameters.h +++ b/inc/hoymiles/portParameters/portParameters.h @@ -5,13 +5,16 @@ class PortParameterMicroinverterSerialNumber : public PortParameterInt { private: - void setValueFromRegisters(uint8_t *registers, int addressOffset); + void setValueFromRegisters(uint16_t *readArray, int registerCount); public: PortParameterMicroinverterSerialNumber(); }; class PortParameterPortNumber : public PortParameterInt { + private: + void setValueFromRegisters(uint16_t *readArray, int registerCount); + public: PortParameterPortNumber(); }; diff --git a/inc/hoymiles/portParameters/portParametersGeneric.h b/inc/hoymiles/portParameters/portParametersGeneric.h index e209be9..ebec562 100644 --- a/inc/hoymiles/portParameters/portParametersGeneric.h +++ b/inc/hoymiles/portParameters/portParametersGeneric.h @@ -13,6 +13,8 @@ class PortParameter { uint16_t parameterAddressOffset; int registerSize; + virtual void setValueFromRegisters(uint16_t *readArray, int registerCount); + public: PortParameter(std::string name, std::string shortName, uint16_t parameterAddressOffset, int registerSize); @@ -33,38 +35,35 @@ class PortParameter { std::string name; std::string shortName; - // int age; + int age; std::pair getValue(); virtual std::string getOutputValue(); - virtual void setValueFromRegisters(uint8_t *registers, int addressOffset); - - // void updateValue(std::shared_ptr modubs, uint16_t portStartAddress); + void updateValue(std::shared_ptr modubs, uint16_t portStartAddress); }; class PortParameterFloat : public PortParameter { protected: int decimalPlaces; + virtual void setValueFromRegisters(uint16_t *readArray, int registerCount); + public: PortParameterFloat(std::string name, std::string shortName, int decimalPlaces, uint16_t parameterAddressOffset, int registerSize); std::string getOutputValue(); - - virtual void setValueFromRegisters(uint8_t *registers, int addressOffset); }; class PortParameterInt : public PortParameter { protected: + virtual void setValueFromRegisters(uint16_t *readArray, int registerCount); public: PortParameterInt(std::string name, std::string shortName, uint16_t parameterAddressOffset, int registerSize); std::string getOutputValue(); - - virtual void setValueFromRegisters(uint8_t *registers, int addressOffset); }; #endif \ No newline at end of file diff --git a/src/hoymiles/dtu.cpp b/src/hoymiles/dtu.cpp index 83ab7af..c3025db 100644 --- a/src/hoymiles/dtu.cpp +++ b/src/hoymiles/dtu.cpp @@ -16,57 +16,46 @@ Dtu::Dtu(const char *ip_address, int port) { this->modbus = std::make_shared(modbus); if (!this->modbus.get()->modbus_connect()) { - std::cerr << "NOT CONNECTED" << std::endl; + std::cerr << "conn_error" << std::endl; + this->connected = false; + } else { + this->connected = true; } - if (this->modbus.get()->is_connected()) { + if (this->connected) { this->populateMicroinverters(); } } -bool Dtu::isConnected() { return this->modbus.get()->is_connected(); } - -bool Dtu::modbusError() { return this->modbus.get()->err; } - -std::string Dtu::modbusErrorMessage() { return this->modbus.get()->error_msg; } +bool Dtu::isConnected() { return this->connected; } Dtu::~Dtu() { this->modbus.get()->modbus_close(); } void Dtu::populateMicroinverters() { - int portStartAddress = 0x1000; - uint16_t readArrayJoined[20]; - uint8_t registers[40]; + uint16_t portStartAddress = 0x1000; + uint16_t readArray[1]; int registerCount; - registerCount = this->modbus.get()->modbus_read_holding_registers(portStartAddress, 20, readArrayJoined); + registerCount = this->modbus.get()->modbus_read_holding_registers(portStartAddress + 0x0021, 1, readArray); + while (registerCount != -1 && readArray[0] == 0x700) { + Port port{this->modbus, portStartAddress}; - if (registerCount != 0) { - return; - } + PortParameterMicroinverterSerialNumber portParameterMicroinverterSerialNumber{}; + portParameterMicroinverterSerialNumber.updateValue(this->modbus, portStartAddress); + long long serialNumber = portParameterMicroinverterSerialNumber.getValue().first.i; - while (registerCount == 0) { - for (int i{0}; i < 20; i ++) { - registers[2 * i] = (readArrayJoined[i] & 0xFF00) >> 8; - registers[(2 * i) + 1] = (readArrayJoined[i] & 0x00FF); - } - - if(registers[0] != 12) { - break; - } - - Port port{portStartAddress}; - port.setParametersFromMicroinverterArray(registers, 0); - - if (!this->getMicroinverterBySerialNumber(port.getParameterByName("microinverterSerialNumber").first.get()->getValue().first.i).second) { - Microinverter microinverter{this->modbus, portStartAddress, port.getParameterByName("microinverterSerialNumber").first.get()->getValue().first.i}; + std::pair getMicroinverterBySerialNumber = this->getMicroinverterBySerialNumber(serialNumber); + if (getMicroinverterBySerialNumber.second) { + getMicroinverterBySerialNumber.first->ports.push_back(port); + } else { + Microinverter microinverter{this->modbus, serialNumber}; this->microinverters.push_back(microinverter); + this->microinverters.back().ports.push_back(port); } - this->getMicroinverterBySerialNumber(port.getParameterByName("microinverterSerialNumber").first.get()->getValue().first.i).first->ports.push_back(port); - portStartAddress += 0x0028; - registerCount = this->modbus.get()->modbus_read_holding_registers(portStartAddress, 20, readArrayJoined); + registerCount = this->modbus.get()->modbus_read_holding_registers(portStartAddress + 0x0021, 1, readArray); } } @@ -95,7 +84,7 @@ void Dtu::updateMicroinverters(std::vector ¶metersToGet, bool a while (microinvertersToGetIterator != microinvertersToGet.end()) { std::pair microinverterPair = this->getMicroinverterBySerialNumber(*microinvertersToGetIterator); if (microinverterPair.second) { - microinverterPair.first->updateParameters(parametersToGet, allParameters); + microinverterPair.first->updatePorts(parametersToGet, allParameters); } microinvertersToGetIterator++; } @@ -114,16 +103,14 @@ void Dtu::printMicroinverters(std::vector ¶metersToGet, bool al while (microinvertersToGetIterator != microinvertersToGet.end()) { std::pair microinverterPair = this->getMicroinverterBySerialNumber(*microinvertersToGetIterator); if (microinverterPair.second) { - std::cout << " " << "Microinverter: " << microinverterPair.first->serialNumber << std::endl; - std::cout << " " << "Microinverter Data Age: " << microinverterPair.first->age << std::endl; - if (printTodayProduction) { - std::cout << " " << "TodayProduction: " << microinverterPair.first->getTodayProduction() << std::endl; + 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; + if(printTotalProduction) { + std::cout << "TotalProduction: " << microinverterPair.first->getTotalProduction() << std::endl; } microinverterPair.first->printPorts(parametersToGet, allParameters, shortNames); - std::cout << std::endl; } microinvertersToGetIterator++; } diff --git a/src/hoymiles/microinverter.cpp b/src/hoymiles/microinverter.cpp index 3f5b79d..6ec1eb5 100644 --- a/src/hoymiles/microinverter.cpp +++ b/src/hoymiles/microinverter.cpp @@ -7,41 +7,16 @@ #include "microinverter.h" #include "port.h" -Microinverter::Microinverter(std::shared_ptr modbus, int startAddress, long long serialNumber) { +Microinverter::Microinverter(std::shared_ptr modbus, long long serialNumber) { this->modbus = modbus; - this->startAddress = startAddress; this->serialNumber = serialNumber; - - this->age = 0; } -// void Microinverter::updatePorts(std::vector ¶metersToGet, bool allParameters) { -// int registersToRead = (this->ports.size() * 40) / 2; -// uint16_t registersJoined[registersToRead]; - -// int registerCount = this->modbus.get()->modbus_read_holding_registers(this->startAddress, registersToRead, registersJoined); -// } - -void Microinverter::updateParameters(std::vector ¶metersToGet, bool allParameters) { - int registersToRead = (this->ports.size() * 40) / 2; - uint16_t registersJoined[registersToRead]; - uint8_t registers[registersToRead*2]; - - int registerCount; - registerCount = this->modbus.get()->modbus_read_holding_registers(this->startAddress, registersToRead, registersJoined); - - if(registerCount != 0) { - this->age++; - return; - } - - for(int i{0}; i> 8; - registers[(2 * i)+1] = (registersJoined[i] & 0x00FF); - } - - for(int i{0}; iports.size(); i++) { - this->ports.at(i).setParametersFromMicroinverterArray(registers, i * 40); +void Microinverter::updatePorts(std::vector ¶metersToGet, bool allParameters) { + std::vector::iterator portsIterator = this->ports.begin(); + while (portsIterator != this->ports.end()) { + portsIterator->updateParameters(parametersToGet, allParameters); + portsIterator++; } } @@ -59,7 +34,10 @@ long long Microinverter::getTodayProduction() { std::vector::iterator portsIterator = this->ports.begin(); while(portsIterator != this->ports.end()) { - result += portsIterator->getParameterByName("todayProduction").first.get()->getValue().first.i; + 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++; } @@ -71,7 +49,11 @@ long long Microinverter::getTotalProduction() { std::vector::iterator portsIterator = this->ports.begin(); while(portsIterator != this->ports.end()) { - result += portsIterator->getParameterByName("totalProduction").first.get()->getValue().first.i; + 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++; } diff --git a/src/hoymiles/port.cpp b/src/hoymiles/port.cpp index 833a0ac..6a8b8ba 100644 --- a/src/hoymiles/port.cpp +++ b/src/hoymiles/port.cpp @@ -9,7 +9,9 @@ #include "port.h" #include "portParameters.h" -Port::Port(int portStartAddress) { +Port::Port(std::shared_ptr modbus, uint16_t portStartAddress) { + this->modbus = modbus; + this->portStartAddress = portStartAddress; this->currentFixed = false; @@ -18,8 +20,6 @@ Port::Port(int portStartAddress) { } void Port::populateParameters() { - this->parameters.push_back(std::make_shared()); - this->parameters.push_back(std::make_shared()); this->parameters.push_back(std::make_shared()); @@ -87,55 +87,20 @@ void Port::fixCurrent() { } } -// void Port::increaseParametersAge() { -// std::vector>::iterator parametersIterator = this->parameters.begin(); -// while(parametersIterator != this->parameters.end()) { -// parametersIterator->get()->age++; -// parametersIterator++; -// } -// } - -// void Port::updateParameters(std::vector ¶metersToGet, bool allParameters) { -// this->increaseParametersAge(); - -// if (allParameters && parametersToGet.size() < this->parameters.size()) { -// std::vector>::iterator parametersIterator = this->parameters.begin(); -// while (parametersIterator != this->parameters.end()) { -// if (std::find(parametersToGet.begin(), parametersToGet.end(), parametersIterator->get()->name) == parametersToGet.end()) { -// parametersToGet.push_back(parametersIterator->get()->name); -// } -// parametersIterator++; -// } -// } - -// std::vector::iterator parametersToGetIterator = parametersToGet.begin(); -// while (parametersToGetIterator != parametersToGet.end()) { -// std::pair, bool> parameterPair; - -// parameterPair = this->getParameterByName(*parametersToGetIterator); -// if (parameterPair.second) { -// parameterPair.first->updateValue(this->modbus, this->portStartAddress); -// } - -// this->fixCurrent(); - -// parametersToGetIterator++; -// } -// } - -void Port::setParametersFromMicroinverterArray(uint8_t *registers, int addressOffset) { +void Port::increaseParametersAge() { std::vector>::iterator parametersIterator = this->parameters.begin(); while(parametersIterator != this->parameters.end()) { - parametersIterator->get()->setValueFromRegisters(registers, addressOffset); + parametersIterator->get()->age++; parametersIterator++; } } -void Port::printParameters(std::vector ¶metersToGet, bool allParameters, bool shortNames) { +void Port::updateParameters(std::vector ¶metersToGet, bool allParameters) { + this->increaseParametersAge(); + if (allParameters && parametersToGet.size() < this->parameters.size()) { std::vector>::iterator parametersIterator = this->parameters.begin(); while (parametersIterator != this->parameters.end()) { - std::string temp{parametersIterator->get()->name}; if (std::find(parametersToGet.begin(), parametersToGet.end(), parametersIterator->get()->name) == parametersToGet.end()) { parametersToGet.push_back(parametersIterator->get()->name); } @@ -143,16 +108,38 @@ void Port::printParameters(std::vector ¶metersToGet, bool allPa } } + std::vector::iterator parametersToGetIterator = parametersToGet.begin(); + while (parametersToGetIterator != parametersToGet.end()) { + std::pair, bool> parameterPair; + + parameterPair = this->getParameterByName(*parametersToGetIterator); + if (parameterPair.second) { + parameterPair.first->updateValue(this->modbus, this->portStartAddress); + } + + this->fixCurrent(); + + parametersToGetIterator++; + } +} + +void Port::printParameters(std::vector ¶metersToGet, bool allParameters, bool shortNames) { + if (allParameters && parametersToGet.size() < this->parameters.size()) { + std::vector>::iterator parametersIterator = this->parameters.begin(); + while (parametersIterator != this->parameters.end()) { + if (std::find(parametersToGet.begin(), parametersToGet.end(), parametersIterator->get()->name) != parametersToGet.end()) { + parametersToGet.push_back(parametersIterator->get()->name); + } + parametersIterator++; + } + } + std::vector::iterator parametersToGetIterator = parametersToGet.begin(); if (parametersToGetIterator != parametersToGet.end()) { - std::cout << " |"; + std::cout << "|"; } while (parametersToGetIterator != parametersToGet.end()) { - if(*parametersToGetIterator == "microinverterSerialNumber") { - parametersToGetIterator++; - continue; - } std::pair, bool> parameterPair; parameterPair = this->getParameterByName(*parametersToGetIterator); diff --git a/src/hoymiles/portParameters/portParameters.cpp b/src/hoymiles/portParameters/portParameters.cpp index c6e4e4a..4ef3ca3 100644 --- a/src/hoymiles/portParameters/portParameters.cpp +++ b/src/hoymiles/portParameters/portParameters.cpp @@ -7,11 +7,14 @@ PortParameterMicroinverterSerialNumber::PortParameterMicroinverterSerialNumber() : PortParameterInt("microinverterSerialNumber", "mSN", 0x0001, 6) {} -void PortParameterMicroinverterSerialNumber::setValueFromRegisters(uint8_t *registers, int addressOffset) { +void PortParameterMicroinverterSerialNumber::setValueFromRegisters(uint16_t *readArray, int registerCount) { + uint16_t readValue; std::string readValueString = ""; - for (int i{0}; i < this->registerSize; i++) { + registerCount = std::ceil(registerCount/2); + for (int i{0}; i < registerCount; i++) { + readValue = readArray[i]; std::stringstream readValueStringStream; - readValueStringStream << std::hex << (int) registers[addressOffset + this->parameterAddressOffset + i]; + readValueStringStream << std::hex << readValue; readValueString.append(readValueStringStream.str()); } this->value.i = std::stoll(readValueString); @@ -19,6 +22,15 @@ void PortParameterMicroinverterSerialNumber::setValueFromRegisters(uint8_t *regi PortParameterPortNumber::PortParameterPortNumber() : PortParameterInt("portNumber", "pN", 0x0007, 1) {} +void PortParameterPortNumber::setValueFromRegisters(uint16_t *readArray, int registerCount) { + if (registerCount > 0) { + this->value.i = readArray[0]; + std::stringstream valueStringStream; + valueStringStream << std::hex << this->value.i; + this->value.i = valueStringStream.str().at(0) - '0'; + } +} + PortParameterPvVoltage::PortParameterPvVoltage() : PortParameterFloat("pvVoltage", "pvU", 1, 0x0008, 2) {} PortParameterPvCurrentMi::PortParameterPvCurrentMi() : PortParameterFloat("pvCurrentMI", "pvIMI", 1, 0x000a, 2) {} diff --git a/src/hoymiles/portParameters/portParametersGeneric.cpp b/src/hoymiles/portParameters/portParametersGeneric.cpp index 83348a2..96be846 100644 --- a/src/hoymiles/portParameters/portParametersGeneric.cpp +++ b/src/hoymiles/portParameters/portParametersGeneric.cpp @@ -15,12 +15,12 @@ PortParameter::PortParameter(std::string name, std::string shortName, uint16_t p this->parameterAddressOffset = parameterAddressOffset; this->registerSize = registerSize; - // this->age = 0; + this->age = 0; } PortParameter::~PortParameter() {} -void PortParameter::setValueFromRegisters(uint8_t *readArray, int portOffset) {} +void PortParameter::setValueFromRegisters(uint16_t *readArray, int registerCount) {} std::pair PortParameter::getValue() { return std::pair(this->value, this->valueType); @@ -30,21 +30,21 @@ std::string PortParameter::getOutputValue() { return "yeet"; } -// void PortParameter::updateValue(std::shared_ptr modbus, uint16_t portStartAddress) { -// uint16_t readArray[this->registerSize]; -// int registerCount; +void PortParameter::updateValue(std::shared_ptr modbus, uint16_t portStartAddress) { + uint16_t readArray[this->registerSize]; + int registerCount; -// registerCount = modbus.get()->modbus_read_holding_registers(portStartAddress + this->parameterAddressOffset, this->registerSize, readArray); + registerCount = modbus.get()->modbus_read_holding_registers(portStartAddress + this->parameterAddressOffset, this->registerSize, readArray); -// if(registerCount != 0){ -// this->age++; -// } -// else{ -// registerCount = this->registerSize; -// this->setValueFromRegisters(readArray, registerCount); -// this->age = 0; -// } -// } + if(registerCount != 0){ + this->age++; + } + else{ + registerCount = this->registerSize; + this->setValueFromRegisters(readArray, registerCount); + this->age = 0; + } +} PortParameterFloat::PortParameterFloat(std::string name, std::string shortName, int decimalPlaces, uint16_t parameterAddressOffset, int registerSize) : PortParameter(name, shortName, parameterAddressOffset, registerSize) { this->decimalPlaces = decimalPlaces; @@ -54,20 +54,17 @@ PortParameterFloat::PortParameterFloat(std::string name, std::string shortName, this->value.f = 0; } -void PortParameterFloat::setValueFromRegisters(uint8_t *registers, int addressOffset) { - std::string readValueString{""}; - for(int i{0}; iregisterSize; i++) { - std::stringstream readValueStringStream; - readValueStringStream << (int) registers[addressOffset + this->parameterAddressOffset + i]; - readValueString.append(readValueStringStream.str().c_str()); - } - this->value.f = std::stoll(readValueString) / std::pow(10, this->decimalPlaces); +void PortParameterFloat::setValueFromRegisters(uint16_t *readArray, int registerCount) { + float temp = readArray[0]; + temp = temp / std::pow(10, this->decimalPlaces); + this->value.f = temp; } std::string PortParameterFloat::getOutputValue() { + std::string separator{"_age"}; std::stringstream valueStringStream; valueStringStream << std::fixed << std::setprecision(this->decimalPlaces) << this->value.f; - return valueStringStream.str(); + return valueStringStream.str().append(separator.append(std::to_string(this->age))); } PortParameterInt::PortParameterInt(std::string name, std::string shortName, uint16_t parameterAddressOffset, int registerSize) : PortParameter(name, shortName, parameterAddressOffset, registerSize) { @@ -76,16 +73,18 @@ PortParameterInt::PortParameterInt(std::string name, std::string shortName, uint this->value.i = 0; } -void PortParameterInt::setValueFromRegisters(uint8_t *registers, int addressOffset) { - std::string readValueString{""}; - for (int i{0}; i < this->registerSize; i++) { - std::stringstream readValueStringStream; - readValueStringStream << (int) registers[addressOffset + this->parameterAddressOffset + i]; - readValueString.append(readValueStringStream.str().c_str()); +void PortParameterInt::setValueFromRegisters(uint16_t *readArray, int registerCount) { + uint16_t readValue; + std::string readValueString = ""; + registerCount = std::ceil(registerCount/2); + for (int i{0}; i < registerCount; i++) { + readValue = readArray[i]; + readValueString.append(std::to_string(readValue)); } this->value.i = std::stoll(readValueString); } std::string PortParameterInt::getOutputValue() { - return std::to_string(this->value.i); + std::string separator{"_age"}; + return std::to_string(this->value.i).append(separator.append(std::to_string(this->age))); } \ No newline at end of file diff --git a/src/main.cpp b/src/main.cpp index aa7d743..0383375 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -19,7 +19,7 @@ int main(int argc, char **argv) { signal(SIGTERM, sigHandler); signal(SIGABRT, sigHandler); - std::string version{"v2.0beta"}; + std::string version{"v1.0mt"}; std::cout << version << std::endl; CLI::App hoymilesClient{"Client for DTU-Pro/DTU-ProS"}; @@ -48,11 +48,11 @@ int main(int argc, char **argv) { std::string microinvertersToGetHelp{"List of microinverters to fetch, delimited by ','; if omitted, all are fetched"}; hoymilesClient.add_option>("-m,--microinverters", microinvertersToGet, microinvertersToGetHelp)->delimiter(',')->group("Microinverters"); - bool microinvertersGetTodayProduction{false}; + bool microinvertersGetTodayProduction; std::string microinvertersGetTodayProductionHelp{"Show today production for microinverters"}; hoymilesClient.add_flag("-t,--today_production", microinvertersGetTodayProduction, microinvertersGetTodayProductionHelp)->group("Microinverters"); - bool microinvertersGetTotalProduction{false}; + bool microinvertersGetTotalProduction{}; std::string microinvertersGetTotalProductionHelp{"Show total production for microinverters"}; hoymilesClient.add_flag("-T,--total_production", microinvertersGetTotalProduction, microinvertersGetTotalProductionHelp)->group("Microinverters"); @@ -82,9 +82,6 @@ int main(int argc, char **argv) { dtu.printMicroinverters(parametersToGet, allParameters, microinvertersToGet, shortNames, microinvertersGetTodayProduction, microinvertersGetTotalProduction); std::cout << std::endl; } - // if(dtu.modbusError()) { - // std::cerr << dtu.modbusErrorMessage() << std::endl; - // } return 0; }