diff --git a/inc/hoymiles/dtu.h b/inc/hoymiles/dtu.h index 294f4dd..3add57a 100644 --- a/inc/hoymiles/dtu.h +++ b/inc/hoymiles/dtu.h @@ -26,6 +26,8 @@ class Dtu { void updateMicroinverters(); + void printMicroinverters(); + ~Dtu(); }; diff --git a/inc/hoymiles/microinverter.h b/inc/hoymiles/microinverter.h index b6b9c58..3831438 100644 --- a/inc/hoymiles/microinverter.h +++ b/inc/hoymiles/microinverter.h @@ -29,6 +29,8 @@ class Microinverter { void updatePort(int i); Port getPort(int i); + + void printPorts(); }; #endif \ No newline at end of file diff --git a/inc/hoymiles/port.h b/inc/hoymiles/port.h index cd7cb79..012d5d5 100644 --- a/inc/hoymiles/port.h +++ b/inc/hoymiles/port.h @@ -19,14 +19,16 @@ class Port { uint16_t portStartAddress; - std::vector> parameters; - void populateParameters(); public: Port(std::shared_ptr modbus_context, std::mutex *modbus_context_mutex, uint16_t portStartAddress); + std::vector> parameters; + void updateParameters(); + + void printParameters(); }; #endif \ No newline at end of file diff --git a/src/hoymiles/dtu.cpp b/src/hoymiles/dtu.cpp index 2acd69a..28df702 100644 --- a/src/hoymiles/dtu.cpp +++ b/src/hoymiles/dtu.cpp @@ -84,7 +84,17 @@ void Dtu::updateMicroinverters() { std::vector::iterator updateThreadsIterator = updateThreads.begin(); while(updateThreadsIterator != updateThreads.end()) { - updateThreadsIterator->join(); - updateThreadsIterator++; + updateThreadsIterator->join(); updateThreadsIterator++; + } + std::cout << std::endl; +} + +void Dtu::printMicroinverters() { + std::cout << "DTU:" << std::endl; + std::vector::iterator microinvertersIterator = this->microinverters.begin(); + while(microinvertersIterator != this->microinverters.end()) { + microinvertersIterator->printPorts(); + std::cout << std::endl; + microinvertersIterator++; } } \ No newline at end of file diff --git a/src/hoymiles/microinverter.cpp b/src/hoymiles/microinverter.cpp index c336609..39182cd 100644 --- a/src/hoymiles/microinverter.cpp +++ b/src/hoymiles/microinverter.cpp @@ -1,4 +1,6 @@ #include +#include +#include #include "modbus.h" @@ -26,4 +28,15 @@ void Microinverter::updatePorts() { updateThreadsIterator->join(); updateThreadsIterator++; } +} + +void Microinverter::printPorts() { + std::cout << "Microinverter: " << this->serialNumber << std::endl; + + std::vector::iterator portsIterator = this->ports.begin(); + while(portsIterator != this->ports.end()) { + portsIterator->printParameters(); + std::cout << std::endl; + portsIterator++; + } } \ No newline at end of file diff --git a/src/hoymiles/port.cpp b/src/hoymiles/port.cpp index 66edaa7..2ba8914 100644 --- a/src/hoymiles/port.cpp +++ b/src/hoymiles/port.cpp @@ -55,6 +55,18 @@ void Port::updateParameters() { while (parametersIterator != this->parameters.end()) { parametersIterator->get()->updateValue(this->modbus_context, this->modbus_context_mutex, this->portStartAddress); parametersIterator++; - break; + } +} + +void Port::printParameters() { + std::vector>::iterator parametersIterator = this->parameters.begin(); + + if(parametersIterator != this->parameters.end()) { + std::cout << "|"; + } + + while(parametersIterator != this->parameters.end()) { + std::cout << " " << parametersIterator->get()->name << ": " << parametersIterator->get()->getOutputValue() << " |"; + parametersIterator++; } } \ No newline at end of file diff --git a/src/hoymiles/portParameters/portParameters.cpp b/src/hoymiles/portParameters/portParameters.cpp index 59c82e1..72be7c3 100644 --- a/src/hoymiles/portParameters/portParameters.cpp +++ b/src/hoymiles/portParameters/portParameters.cpp @@ -25,6 +25,9 @@ PortParameterPortNumber::PortParameterPortNumber() : PortParameterInt("portNumbe 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'; } } diff --git a/src/hoymiles/portParameters/portParametersGeneric.cpp b/src/hoymiles/portParameters/portParametersGeneric.cpp index 000da08..89169a1 100644 --- a/src/hoymiles/portParameters/portParametersGeneric.cpp +++ b/src/hoymiles/portParameters/portParametersGeneric.cpp @@ -60,7 +60,8 @@ void PortParameterFloat::setValueFromRegisters(uint16_t *readArray, int register } std::string PortParameterFloat::getOutputValue() { - return std::to_string(this->value.f); + std::string separator{"_age"}; + return std::to_string(this->value.f).append(separator.append(std::to_string(this->age))); } PortParameterInt::PortParameterInt(std::string name, uint16_t parameterAddressOffset, int registerSize) : PortParameter(name, parameterAddressOffset, registerSize) { @@ -81,5 +82,6 @@ void PortParameterInt::setValueFromRegisters(uint16_t *readArray, int registerCo } 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 395c494..032fe18 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -14,13 +14,14 @@ int main(){ auto startTime = std::chrono::high_resolution_clock::now(); Dtu dtu {ip_address.c_str(), port}; auto endTime = std::chrono::high_resolution_clock::now(); - std::cout << "Construction time: " << std::chrono::duration_cast(endTime - startTime).count() << "s" << std::endl; + std::cout << "Construction time: " << std::chrono::duration_cast(endTime - startTime).count() << "ms" << std::endl; while(true) { auto startTime = std::chrono::high_resolution_clock::now(); dtu.updateMicroinverters(); auto endTime = std::chrono::high_resolution_clock::now(); - std::cout << "Update time: " << std::chrono::duration_cast(endTime - startTime).count() << "s" << std::endl; + std::cout << "Update time: " << std::chrono::duration_cast(endTime - startTime).count() << "ms" << std::endl; + dtu.printMicroinverters(); } return 0;