From 34313ef4bc871c92707cde3e45f06dbb1965e2b3 Mon Sep 17 00:00:00 2001 From: trabus322 Date: Sat, 6 Apr 2024 00:32:49 +0200 Subject: [PATCH] sadge but more worky --- inc/hoymiles/dtu.h | 4 +- inc/hoymiles/microinverter.h | 6 +++ inc/hoymiles/port.h | 13 +++++ inc/hoymiles/portParameters/portParameters.h | 12 ++++- .../portParameters/portParametersGeneric.h | 8 +-- .../sunspecParameters/sunspecParameters.h | 2 +- .../sunspecParametersGeneric.h | 20 +++---- src/hoymiles/dtu.cpp | 1 + src/hoymiles/microinverter.cpp | 37 +++++++++++++ src/hoymiles/port.cpp | 53 ++++++++++++++++--- .../portParameters/portParameters.cpp | 36 +++++++------ .../portParameters/portParametersGeneric.cpp | 29 +++------- src/hoymiles/sunspec.cpp | 2 +- .../sunspecParameters/sunspecParameters.cpp | 2 +- .../sunspecParametersGeneric.cpp | 4 +- src/main.cpp | 5 +- 16 files changed, 169 insertions(+), 65 deletions(-) diff --git a/inc/hoymiles/dtu.h b/inc/hoymiles/dtu.h index b4a3ccd..135e4a4 100644 --- a/inc/hoymiles/dtu.h +++ b/inc/hoymiles/dtu.h @@ -16,11 +16,11 @@ class Dtu { void populateMicroinverters(); - std::pair getMicroinverterBySerialNumber(long long serialNumber); - public: Dtu(const char *ip_address, int port); + std::pair getMicroinverterBySerialNumber(long long serialNumber); + bool isConnected(); bool modbusError(); diff --git a/inc/hoymiles/microinverter.h b/inc/hoymiles/microinverter.h index 5e817cb..1172db8 100644 --- a/inc/hoymiles/microinverter.h +++ b/inc/hoymiles/microinverter.h @@ -17,6 +17,8 @@ class Microinverter { int startAddress; + int statusStartAddress; + public: Microinverter(std::shared_ptr modbus, int startAddress, long long serialNumber); @@ -30,11 +32,15 @@ class Microinverter { void updateParameters(std::vector ¶metersToGet, bool allParameters); + void updateStatusParameters(); + void printPorts(std::vector ¶metersToGet, bool allParameters, bool shortNames); long long getTodayProduction(); long long getTotalProduction(); + + void setStatus(std::vector> portsToSet, std::string statusName); }; #endif \ No newline at end of file diff --git a/inc/hoymiles/port.h b/inc/hoymiles/port.h index 6cb1d62..df37dd5 100644 --- a/inc/hoymiles/port.h +++ b/inc/hoymiles/port.h @@ -6,6 +6,7 @@ #include #include "portParametersGeneric.h" +#include "portParameters.h" #include "modbus.h" class Port { @@ -22,15 +23,27 @@ class Port { int portStartAddress; + int statusPortStartAddress; + std::vector> parameters; + std::vector> statusParameters; + std::pair, bool> getParameterByName(std::string name); + std::pair, bool> getStatusByName(std::string name); + // void updateParameters(std::vector ¶metersToGet, bool allParameters); void setParametersFromMicroinverterArray(uint16_t *registers, int addressOffset); + void setStatusesFromMicroinverterArray(uint16_t *registers, int addressOffset); + void printParameters(std::vector ¶metersToGet, bool allParameters, bool shortNames); + + void turnOff(class modbus &modbus); + + bool isOff(class modbus &modbus); }; #endif \ No newline at end of file diff --git a/inc/hoymiles/portParameters/portParameters.h b/inc/hoymiles/portParameters/portParameters.h index 93d1a8b..cd15028 100644 --- a/inc/hoymiles/portParameters/portParameters.h +++ b/inc/hoymiles/portParameters/portParameters.h @@ -5,7 +5,7 @@ class PortParameterMicroinverterSerialNumber : public PortParameterInt { private: - void setValueFromRegisters(uint16_t *registers, int addressOffset); + void getValueFromRegisters(uint16_t *registers, int addressOffset); public: PortParameterMicroinverterSerialNumber(); @@ -81,4 +81,14 @@ class PortParameterLinkStatus : public PortParameterInt { PortParameterLinkStatus(); }; +class PortParameterOnOff : public PortParameterInt { + public: + PortParameterOnOff(); +}; + +class PortParameterLimitActivePower : public PortParameterInt { + public: + PortParameterLimitActivePower(); +}; + #endif \ No newline at end of file diff --git a/inc/hoymiles/portParameters/portParametersGeneric.h b/inc/hoymiles/portParameters/portParametersGeneric.h index b9ba714..23f3856 100644 --- a/inc/hoymiles/portParameters/portParametersGeneric.h +++ b/inc/hoymiles/portParameters/portParametersGeneric.h @@ -42,9 +42,11 @@ class PortParameter { std::pair getValue(); + PortParameter& writeValue(uint16_t value, class modbus& modbus, int portStartAddress); + virtual std::string getOutputValue(); - virtual void setValueFromRegisters(uint16_t *registers, int addressOffset); + virtual void getValueFromRegisters(uint16_t *registers, int addressOffset); // void updateValue(std::shared_ptr modubs, uint16_t portStartAddress); }; @@ -58,7 +60,7 @@ class PortParameterFloat : public PortParameter { std::string getOutputValue(); - virtual void setValueFromRegisters(uint16_t *registers, int addressOffset); + virtual void getValueFromRegisters(uint16_t *registers, int addressOffset); }; class PortParameterInt : public PortParameter { @@ -69,7 +71,7 @@ class PortParameterInt : public PortParameter { std::string getOutputValue(); - virtual void setValueFromRegisters(uint16_t *registers, int addressOffset); + virtual void getValueFromRegisters(uint16_t *registers, int addressOffset); }; #endif \ No newline at end of file diff --git a/inc/hoymiles/sunspecParameters/sunspecParameters.h b/inc/hoymiles/sunspecParameters/sunspecParameters.h index 745d47c..cdf4bed 100644 --- a/inc/hoymiles/sunspecParameters/sunspecParameters.h +++ b/inc/hoymiles/sunspecParameters/sunspecParameters.h @@ -9,7 +9,7 @@ class SunspecParameterManufacturer : public SunspecParameterString32 { public: SunspecParameterManufacturer(); - void setValueFromRegisters(uint16_t *registers, int addressOffset); + void getValueFromRegisters(uint16_t *registers, int addressOffset); }; #endif \ No newline at end of file diff --git a/inc/hoymiles/sunspecParameters/sunspecParametersGeneric.h b/inc/hoymiles/sunspecParameters/sunspecParametersGeneric.h index ab916a6..aba5e8d 100644 --- a/inc/hoymiles/sunspecParameters/sunspecParametersGeneric.h +++ b/inc/hoymiles/sunspecParameters/sunspecParametersGeneric.h @@ -33,7 +33,7 @@ class SunspecParameter { public: - virtual void setValueFromRegisters(uint16_t *registers, int addressOffset); + virtual void getValueFromRegisters(uint16_t *registers, int addressOffset); std::pair getValue(); }; @@ -44,7 +44,7 @@ class SunspecParameter { // public: // SunspecParameterUint32(std::string name, int registerAddressOffset, int registerSize); -// virtual void setValueFromRegisters(uint16_t *registers, int addressOffset); +// virtual void getValueFromRegisters(uint16_t *registers, int addressOffset); // }; // class SunspecParameterUint16 : public SunspecParameter { @@ -53,7 +53,7 @@ class SunspecParameter { // public: // SunspecParameterUint16(std::string name, int registerAddressOffset, int registerSize); -// virtual void setValueFromRegisters(uint16_t *registers, int addressOffset); +// virtual void getValueFromRegisters(uint16_t *registers, int addressOffset); // }; class SunspecParameterString32 : public SunspecParameter { @@ -63,7 +63,7 @@ class SunspecParameterString32 : public SunspecParameter { public: SunspecParameterString32(std::string name, int registerAddressOffset, int registerSize); - virtual void setValueFromRegisters(uint16_t *registers, int addressOffset); + virtual void getValueFromRegisters(uint16_t *registers, int addressOffset); }; // class SunspecParameterString16 : public SunspecParameter { @@ -73,7 +73,7 @@ class SunspecParameterString32 : public SunspecParameter { // public: // SunspecParameterString16(std::string name, int registerAddressOffset, int registerSize); -// virtual void setValueFromRegisters(uint16_t *registers, int addressOffset); +// virtual void getValueFromRegisters(uint16_t *registers, int addressOffset); // }; // class SunspecParameterSunssf : public SunspecParameter { @@ -82,7 +82,7 @@ class SunspecParameterString32 : public SunspecParameter { // public: // SunspecParameterSunssf(std::string name, int registerAddressOffset, int registerSize); -// virtual void setValueFromRegisters(uint16_t *registers, int addressOffset); +// virtual void getValueFromRegisters(uint16_t *registers, int addressOffset); // }; // class SunspecParameterInt16 : public SunspecParameter { @@ -91,7 +91,7 @@ class SunspecParameterString32 : public SunspecParameter { // public: // SunspecParameterInt16(std::string name, int registerAddressOffset, int registerSize); -// virtual void setValueFromRegisters(uint16_t *registers, int addressOffset); +// virtual void getValueFromRegisters(uint16_t *registers, int addressOffset); // }; // class SunspecParameterAcc32 : public SunspecParameter { @@ -100,7 +100,7 @@ class SunspecParameterString32 : public SunspecParameter { // public: // SunspecParameterAcc32(std::string name, int registerAddressOffset, int registerSize); -// virtual void setValueFromRegisters(uint16_t *registers, int addressOffset); +// virtual void getValueFromRegisters(uint16_t *registers, int addressOffset); // }; // class SunspecParameterFloat32 : public SunspecParameter { @@ -109,7 +109,7 @@ class SunspecParameterString32 : public SunspecParameter { // public: // SunspecParameterFloat32(std::string name, int registerAddressOffset, int registerSize); -// virtual void setValueFromRegisters(uint16_t *registers, int addressOffset); +// virtual void getValueFromRegisters(uint16_t *registers, int addressOffset); // }; // class SunspecParameterEnum16 : public SunspecParameter { @@ -118,7 +118,7 @@ class SunspecParameterString32 : public SunspecParameter { // public: // SunspecParameterEnum16(std::string name, int registerAddressOffset, int registerSize); -// virtual void setValueFromRegisters(uint16_t *registers, int addressOffset); +// virtual void getValueFromRegisters(uint16_t *registers, int addressOffset); // }; #endif \ No newline at end of file diff --git a/src/hoymiles/dtu.cpp b/src/hoymiles/dtu.cpp index 4f2f9bc..ec51a3c 100644 --- a/src/hoymiles/dtu.cpp +++ b/src/hoymiles/dtu.cpp @@ -90,6 +90,7 @@ void Dtu::updateMicroinverters(std::vector ¶metersToGet, bool a std::pair microinverterPair = this->getMicroinverterBySerialNumber(*microinvertersToGetIterator); if (microinverterPair.second) { microinverterPair.first->updateParameters(parametersToGet, allParameters); + microinverterPair.first->updateStatusParameters(); } microinvertersToGetIterator++; } diff --git a/src/hoymiles/microinverter.cpp b/src/hoymiles/microinverter.cpp index c36cc40..858b11a 100644 --- a/src/hoymiles/microinverter.cpp +++ b/src/hoymiles/microinverter.cpp @@ -13,6 +13,8 @@ Microinverter::Microinverter(std::shared_ptr modbus, int startAddr this->startAddress = startAddress; this->serialNumber = serialNumber; + this->statusStartAddress = (((this->startAddress - 0x4000) / 0x0019) * 6) + 0xd006; + this->age = 0; } @@ -50,6 +52,33 @@ void Microinverter::updateParameters(std::vector ¶metersToGet, } } +void Microinverter::updateStatusParameters() { + int portsRead = 0; + while (portsRead < this->ports.size()) { + int portsToRead = 0; + while (portsToRead * 6 < (10 - 6) && (portsToRead + portsRead) < this->ports.size()) { + portsToRead++; + } + + int registersToRead = (portsToRead * 6); + uint16_t registers[registersToRead]; + + int registerCount; + registerCount = this->modbus.get()->modbus_read_holding_registers(this->statusStartAddress + (portsRead * 6), registersToRead, registers); + + if (registerCount != 0) { + this->age++; + return; + } + + for (int i{0}; i < portsToRead; i++) { + this->ports.at(i + portsRead).setStatusesFromMicroinverterArray(registers, i * 6); + } + + portsRead += portsToRead; + } +} + void Microinverter::printPorts(std::vector ¶metersToGet, bool allParameters, bool shortNames) { std::vector::iterator portsIterator = this->ports.begin(); while (portsIterator != this->ports.end()) { @@ -81,4 +110,12 @@ long long Microinverter::getTotalProduction() { } return result; +} + +void Microinverter::setStatus(std::vector> portsToSet, std::string statusName) { + std::vector>::iterator portsToSetIterator = portsToSet.begin(); + while(portsToSetIterator != portsToSet.end()) { + this->ports.at(portsToSetIterator->first).getStatusByName(statusName).first.get()->writeValue(portsToSetIterator->second, *this->modbus, this->ports.at(portsToSetIterator->first).statusPortStartAddress); + portsToSetIterator++; + } } \ No newline at end of file diff --git a/src/hoymiles/port.cpp b/src/hoymiles/port.cpp index 069acf6..6a9c7d0 100644 --- a/src/hoymiles/port.cpp +++ b/src/hoymiles/port.cpp @@ -12,6 +12,8 @@ Port::Port(int portStartAddress) { this->portStartAddress = portStartAddress; + this->statusPortStartAddress = (((this->portStartAddress - 0x4000) / 0x0019) * 6) + 0xd006; + this->currentFixed = false; this->populateParameters(); @@ -47,6 +49,11 @@ void Port::populateParameters() { this->parameters.push_back(std::make_shared()); this->parameters.push_back(std::make_shared()); + + + this->statusParameters.push_back(std::make_shared()); + + this->statusParameters.push_back(std::make_shared()); } std::pair, bool> Port::getParameterByName(std::string name) { @@ -65,6 +72,22 @@ std::pair, bool> Port::getParameterByName(std::st return result; } +std::pair, bool> Port::getStatusByName(std::string name) { + std::pair, bool> result; + result.second = false; + + std::vector>::iterator parametersIterator = this->statusParameters.begin(); + while (parametersIterator != this->statusParameters.end() && !result.second) { + if (parametersIterator->get()->name == name) { + result.first = *parametersIterator; + result.second = true; + } + parametersIterator++; + } + + return result; +} + void Port::fixCurrent() { if (this->currentFixed) { return; @@ -125,13 +148,21 @@ void Port::fixCurrent() { void Port::setParametersFromMicroinverterArray(uint16_t *registers, int addressOffset) { std::vector>::iterator parametersIterator = this->parameters.begin(); - while(parametersIterator != this->parameters.end()) { - parametersIterator->get()->setValueFromRegisters(registers, addressOffset); + while (parametersIterator != this->parameters.end()) { + parametersIterator->get()->getValueFromRegisters(registers, addressOffset); parametersIterator++; } this->fixCurrent(); } +void Port::setStatusesFromMicroinverterArray(uint16_t *registers, int addressOffset) { + std::vector>::iterator parametersIterator = this->statusParameters.begin(); + while (parametersIterator != this->statusParameters.end()) { + parametersIterator->get()->getValueFromRegisters(registers, addressOffset); + parametersIterator++; + } +} + void Port::printParameters(std::vector ¶metersToGet, bool allParameters, bool shortNames) { if (allParameters && parametersToGet.size() < this->parameters.size()) { std::vector>::iterator parametersIterator = this->parameters.begin(); @@ -150,7 +181,7 @@ void Port::printParameters(std::vector ¶metersToGet, bool allPa } while (parametersToGetIterator != parametersToGet.end()) { - if(*parametersToGetIterator == "microinverterSerialNumber") { + if (*parametersToGetIterator == "microinverterSerialNumber") { parametersToGetIterator++; continue; } @@ -159,14 +190,24 @@ void Port::printParameters(std::vector ¶metersToGet, bool allPa parameterPair = this->getParameterByName(*parametersToGetIterator); if (parameterPair.second) { std::cout << " "; - if(shortNames) { + if (shortNames) { std::cout << parameterPair.first->shortName; - } - else { + } else { std::cout << parameterPair.first->name; } std::cout << ": " << parameterPair.first->getOutputValue() << " |"; } parametersToGetIterator++; } +} + +void Port::turnOff(class modbus &modbus) { this->getStatusByName("onOff").first.get()->writeValue(0, modbus, this->statusPortStartAddress); } + +bool Port::isOff(class modbus &modbus) { + if(this->getStatusByName("onOff").first.get()->getValue().first.i == 1) { + return true; + } + else { + return false; + } } \ No newline at end of file diff --git a/src/hoymiles/portParameters/portParameters.cpp b/src/hoymiles/portParameters/portParameters.cpp index 478f6b8..1b404ec 100644 --- a/src/hoymiles/portParameters/portParameters.cpp +++ b/src/hoymiles/portParameters/portParameters.cpp @@ -5,9 +5,9 @@ #include "portParameters.h" -PortParameterMicroinverterSerialNumber::PortParameterMicroinverterSerialNumber() : PortParameterInt("microinverterSerialNumber", "mSN", "", false, false, 0x0001, 3) {} +PortParameterMicroinverterSerialNumber::PortParameterMicroinverterSerialNumber() : PortParameterInt("microinverterSerialNumber", "mSN", "", true, false, 0x0001, 3) {} -void PortParameterMicroinverterSerialNumber::setValueFromRegisters(uint16_t *registers, int addressOffset) { +void PortParameterMicroinverterSerialNumber::getValueFromRegisters(uint16_t *registers, int addressOffset) { std::string readValueString = ""; for (int i{0}; i < this->registerSize; i++) { std::stringstream readValueStringStream; @@ -18,30 +18,34 @@ void PortParameterMicroinverterSerialNumber::setValueFromRegisters(uint16_t *reg this->value.i = std::stoll(readValueString); } -PortParameterPortNumber::PortParameterPortNumber() : PortParameterInt("portNumber", "pN", "", false, false, 0x0004, 1) {} +PortParameterPortNumber::PortParameterPortNumber() : PortParameterInt("portNumber", "pN", "", true, false, 0x0004, 1) {} -PortParameterPvVoltage::PortParameterPvVoltage() : PortParameterFloat("pvVoltage", "pvU", "V", false, false, 1, 0x0005, 1) {} +PortParameterPvVoltage::PortParameterPvVoltage() : PortParameterFloat("pvVoltage", "pvU", "V", true, false, 1, 0x0005, 1) {} -PortParameterPvCurrentMi::PortParameterPvCurrentMi() : PortParameterFloat("pvCurrentMI", "pvIMI", "A", false, false, 1, 0x0006, 1) {} +PortParameterPvCurrentMi::PortParameterPvCurrentMi() : PortParameterFloat("pvCurrentMI", "pvIMI", "A", true, false, 1, 0x0006, 1) {} -PortParameterPvCurrentHm::PortParameterPvCurrentHm() : PortParameterFloat("pvCurrentHM", "pvIHM", "A", false, false, 2, 0x0006, 1) {} +PortParameterPvCurrentHm::PortParameterPvCurrentHm() : PortParameterFloat("pvCurrentHM", "pvIHM", "A", true, false, 2, 0x0006, 1) {} -PortParameterGridVoltage::PortParameterGridVoltage() : PortParameterFloat("gridVoltage", "gU", "V", false, false, 1, 0x0007, 1) {} +PortParameterGridVoltage::PortParameterGridVoltage() : PortParameterFloat("gridVoltage", "gU", "V", true, false, 1, 0x0007, 1) {} -PortParameterGridFrequency::PortParameterGridFrequency() : PortParameterFloat("gridFrequency", "gF", "Hz", false, false, 2, 0x0008, 1) {} +PortParameterGridFrequency::PortParameterGridFrequency() : PortParameterFloat("gridFrequency", "gF", "Hz", true, false, 2, 0x0008, 1) {} -PortParameterPvPower::PortParameterPvPower() : PortParameterFloat("pvPower", "pvP", "W", false, false, 1, 0x0009, 1) {} +PortParameterPvPower::PortParameterPvPower() : PortParameterFloat("pvPower", "pvP", "W", true, false, 1, 0x0009, 1) {} -PortParameterTodayProduction::PortParameterTodayProduction() : PortParameterInt("todayProduction", "tdP", "Wh", false, false, 0x000A, 1) {} +PortParameterTodayProduction::PortParameterTodayProduction() : PortParameterInt("todayProduction", "tdP", "Wh", true, false, 0x000A, 1) {} -PortParameterTotalProduction::PortParameterTotalProduction() : PortParameterInt("totalProduction", "ttP", "Wh", false, false, 0x000B, 2) {} +PortParameterTotalProduction::PortParameterTotalProduction() : PortParameterInt("totalProduction", "ttP", "Wh", true, false, 0x000B, 2) {} -PortParameterTemperature::PortParameterTemperature() : PortParameterFloat("temperature", "t", "C", false, false, 1, 0x000D, 1) {} +PortParameterTemperature::PortParameterTemperature() : PortParameterFloat("temperature", "t", "C", true, false, 1, 0x000D, 1) {} -PortParameterOperatingStatus::PortParameterOperatingStatus() : PortParameterInt("operatingStatus", "oS", "", false, false, 0x000e, 1) {} +PortParameterOperatingStatus::PortParameterOperatingStatus() : PortParameterInt("operatingStatus", "oS", "", true, false, 0x000e, 1) {} -PortParameterAlarmCode::PortParameterAlarmCode() : PortParameterInt("alarmCode", "aC", "", false, false, 0x000f, 1) {} +PortParameterAlarmCode::PortParameterAlarmCode() : PortParameterInt("alarmCode", "aC", "", true, false, 0x000f, 1) {} -PortParameterAlarmCount::PortParameterAlarmCount() : PortParameterInt("alarmCount", "aCnt", "", false, false, 0x0010, 1) {} +PortParameterAlarmCount::PortParameterAlarmCount() : PortParameterInt("alarmCount", "aCnt", "", true, false, 0x0010, 1) {} -PortParameterLinkStatus::PortParameterLinkStatus() : PortParameterInt("linkStatus", "lS", "", false, false, 0x011, 1) {} \ No newline at end of file +PortParameterLinkStatus::PortParameterLinkStatus() : PortParameterInt("linkStatus", "lS", "", true, false, 0x011, 1) {} + +PortParameterOnOff::PortParameterOnOff() : PortParameterInt("onOff", "of", "", true, true, 0x0000, 1) {} + +PortParameterLimitActivePower::PortParameterLimitActivePower() : PortParameterInt("limitActivePower", "lAP", "", true, true, 0x0001, 1) {} \ No newline at end of file diff --git a/src/hoymiles/portParameters/portParametersGeneric.cpp b/src/hoymiles/portParameters/portParametersGeneric.cpp index c8b0a81..502d148 100644 --- a/src/hoymiles/portParameters/portParametersGeneric.cpp +++ b/src/hoymiles/portParameters/portParametersGeneric.cpp @@ -18,38 +18,25 @@ PortParameter::PortParameter(std::string name, std::string shortName, std::strin this->parameterAddressOffset = parameterAddressOffset; this->registerSize = registerSize; - - // this->age = 0; } PortParameter::~PortParameter() {} -void PortParameter::setValueFromRegisters(uint16_t *readArray, int portOffset) {} +void PortParameter::getValueFromRegisters(uint16_t *readArray, int portOffset) {} std::pair PortParameter::getValue() { return std::pair(this->value, this->valueType); } +PortParameter& PortParameter::writeValue(uint16_t value, class modbus& modbus, int portStartAddress) { + modbus.modbus_write_register(this->parameterAddressOffset + portStartAddress, value); + return *this; +} + std::string PortParameter::getOutputValue() { return "yeet"; } -// 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); - -// if(registerCount != 0){ -// this->age++; -// } -// else{ -// registerCount = this->registerSize; -// this->setValueFromRegisters(readArray, registerCount); -// this->age = 0; -// } -// } - PortParameterFloat::PortParameterFloat(std::string name, std::string shortName, std::string unit, bool r, bool w, int decimalPlaces, uint16_t parameterAddressOffset, int registerSize) : PortParameter(name, shortName, unit, r, w, parameterAddressOffset, registerSize) { this->decimalPlaces = decimalPlaces; @@ -58,7 +45,7 @@ PortParameterFloat::PortParameterFloat(std::string name, std::string shortName, this->value.f = 0; } -void PortParameterFloat::setValueFromRegisters(uint16_t *registers, int addressOffset) { +void PortParameterFloat::getValueFromRegisters(uint16_t *registers, int addressOffset) { std::string readValueString{""}; for(int i{0}; iregisterSize; i++) { std::stringstream readValueStringStream; @@ -80,7 +67,7 @@ PortParameterInt::PortParameterInt(std::string name, std::string shortName, std: this->value.i = 0; } -void PortParameterInt::setValueFromRegisters(uint16_t *registers, int addressOffset) { +void PortParameterInt::getValueFromRegisters(uint16_t *registers, int addressOffset) { std::string readValueString{""}; for (int i{0}; i < this->registerSize; i++) { std::stringstream readValueStringStream; diff --git a/src/hoymiles/sunspec.cpp b/src/hoymiles/sunspec.cpp index d50cd50..3a94b0c 100644 --- a/src/hoymiles/sunspec.cpp +++ b/src/hoymiles/sunspec.cpp @@ -23,7 +23,7 @@ void Sunspec::setValues() { std::vector>::iterator parametersIterator = this->parameters.begin(); while(parametersIterator != this->parameters.end()) { - parametersIterator->get()->setValueFromRegisters(registers, 0); + parametersIterator->get()->getValueFromRegisters(registers, 0); parametersIterator++; } } diff --git a/src/hoymiles/sunspecParameters/sunspecParameters.cpp b/src/hoymiles/sunspecParameters/sunspecParameters.cpp index 1312b08..1b68bdd 100644 --- a/src/hoymiles/sunspecParameters/sunspecParameters.cpp +++ b/src/hoymiles/sunspecParameters/sunspecParameters.cpp @@ -8,7 +8,7 @@ SunspecParameterManufacturer::SunspecParameterManufacturer() : SunspecParameterS this->valueType = string32; } -void SunspecParameterManufacturer::setValueFromRegisters(uint16_t *registers, int addressOffset) { +void SunspecParameterManufacturer::getValueFromRegisters(uint16_t *registers, int addressOffset) { std::string readValue; for(int i{0}; iregisterSize; i++) { diff --git a/src/hoymiles/sunspecParameters/sunspecParametersGeneric.cpp b/src/hoymiles/sunspecParameters/sunspecParametersGeneric.cpp index c825428..93186e5 100644 --- a/src/hoymiles/sunspecParameters/sunspecParametersGeneric.cpp +++ b/src/hoymiles/sunspecParameters/sunspecParametersGeneric.cpp @@ -8,10 +8,10 @@ SunspecParameter::SunspecParameter(std::string name, int registerAddressOffset, this->registerSize = registerSize; } -void SunspecParameter::setValueFromRegisters(uint16_t *registers, int addressOffset) {} +void SunspecParameter::getValueFromRegisters(uint16_t *registers, int addressOffset) {} std::pair SunspecParameter::getValue() {} SunspecParameterString32::SunspecParameterString32(std::string name, int registerAddressOffset, int registerSize) : SunspecParameter(name, registerAddressOffset, registerSize) {} -void SunspecParameterString32::setValueFromRegisters(uint16_t *registers, int addressOffset) {} \ No newline at end of file +void SunspecParameterString32::getValueFromRegisters(uint16_t *registers, int addressOffset) {} \ No newline at end of file diff --git a/src/main.cpp b/src/main.cpp index 5052c0d..4df0ebb 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -82,12 +82,15 @@ int main(int argc, char **argv) { startTime = std::chrono::high_resolution_clock::now(); dtu.updateMicroinverters(parametersToGet, allParameters, microinvertersToGet); endTime = std::chrono::high_resolution_clock::now(); - + std::cout << "Pass time: " << std::put_time(localtime(&now), "%F %T") << std::endl; std::cout << "DTU update time: " << std::chrono::duration_cast(endTime - startTime).count() << "ms" << std::endl; dtu.printMicroinverters(parametersToGet, allParameters, microinvertersToGet, shortNames, microinvertersGetTodayProduction, microinvertersGetTotalProduction); std::cout << std::endl; + + std::vector> portsToLimitActivePower{std::pair(0, 69), std::pair(1, 38), std::pair(3, 3)}; + dtu.getMicroinverterBySerialNumber(138273312349).first->setStatus(portsToLimitActivePower, "limitActivePower"); } // if(dtu.modbusError()) { // std::cerr << dtu.modbusErrorMessage() << std::endl;