diff --git a/src/hoymiles/dtu.cpp b/src/hoymiles/dtu.cpp index c7d659b..a19fec1 100644 --- a/src/hoymiles/dtu.cpp +++ b/src/hoymiles/dtu.cpp @@ -43,9 +43,10 @@ void Dtu::populateMicroinverters() { int portStartAddress = 0x4000; uint16_t registers[19]; - while (portStartAddress <= (0x4000 + 0x0019 * 99)) { + while (portStartAddress <= (0x4000 + (0x0019 * 99))) { int registerCount; registerCount = modbus_read_registers(this->modbus, portStartAddress, 19, registers); + portStartAddress += 0x0019; if (registers[0] == 12) { Port port{portStartAddress}; port.setParametersFromMicroinverterArray(registers, 0); @@ -58,8 +59,6 @@ void Dtu::populateMicroinverters() { this->getMicroinverterBySerialNumber(port.getParameterByName("microinverterSerialNumber").first.get()->getValue().first.i).first->ports.push_back(port); } - portStartAddress += 0x0019; - std::this_thread::sleep_for(std::chrono::milliseconds(10)); } } diff --git a/src/hoymiles/portParameters/portParameters.cpp b/src/hoymiles/portParameters/portParameters.cpp index d7bbb43..d614ec8 100644 --- a/src/hoymiles/portParameters/portParameters.cpp +++ b/src/hoymiles/portParameters/portParameters.cpp @@ -11,8 +11,9 @@ void PortParameterMicroinverterSerialNumber::getValueFromRegisters(uint16_t *reg std::string readValueString = ""; for (int i{0}; i < this->registerSize; i++) { std::stringstream readValueStringStream; - readValueStringStream << std::hex << (int) ((registers[addressOffset + this->parameterAddressOffset + i] & 0xff00) >> 8); - readValueStringStream << std::hex << (int) (registers[addressOffset + this->parameterAddressOffset + i] & 0x00ff); + readValueStringStream.fill('0'); + readValueStringStream << std::setw(2) << std::hex << (int) ((registers[addressOffset + this->parameterAddressOffset + i] & 0xff00) >> 8); + readValueStringStream << std::setw(2) << std::hex << (int) (registers[addressOffset + this->parameterAddressOffset + i] & 0x00ff); readValueString.append(readValueStringStream.str()); } this->value.i = std::stoll(readValueString);