diff --git a/config/inverter.conf b/config/inverter.conf index 5d45fb4..b59d8dc 100644 --- a/config/inverter.conf +++ b/config/inverter.conf @@ -21,3 +21,7 @@ amperage_factor=1.0 # This allos you to modify the wattage in case the inverter is giving an incorrect # reading compared to measurement tools. Normally this will remain '1' watt_factor=1.01 + +# This allows you to modify the buffersize for the qpiri command +# as mentioned in https://github.com/ned-kelly/docker-voltronic-homeassistant/issues/5 +qpiri=97 diff --git a/sources/inverter-cli/inverter.conf b/sources/inverter-cli/inverter.conf index 5d45fb4..e90ba86 100644 --- a/sources/inverter-cli/inverter.conf +++ b/sources/inverter-cli/inverter.conf @@ -21,3 +21,5 @@ amperage_factor=1.0 # This allos you to modify the wattage in case the inverter is giving an incorrect # reading compared to measurement tools. Normally this will remain '1' watt_factor=1.01 + +qpiri=97 diff --git a/sources/inverter-cli/inverter.cpp b/sources/inverter-cli/inverter.cpp index 97a5ebc..c5240dd 100644 --- a/sources/inverter-cli/inverter.cpp +++ b/sources/inverter-cli/inverter.cpp @@ -9,12 +9,13 @@ #include #include -cInverter::cInverter(std::string devicename) { +cInverter::cInverter(std::string devicename, int qpiri) { device = devicename; status1[0] = 0; status2[0] = 0; warnings[0] = 0; mode = 0; + qpiri = qpiri; } string *cInverter::GetQpigsStatus() { @@ -153,6 +154,7 @@ bool cInverter::query(const char *cmd, int replysize) { void cInverter::poll() { int n,j; + extern const int qpiri; while (true) { @@ -176,7 +178,7 @@ void cInverter::poll() { // Reading QPIRI status if (!ups_qpiri_changed) { - if (query("QPIRI", 97)) { + if (query("QPIRI", qpiri)) { m.lock(); strcpy(status2, (const char*)buf+1); m.unlock(); diff --git a/sources/inverter-cli/inverter.h b/sources/inverter-cli/inverter.h index 8e3d52b..125f2da 100644 --- a/sources/inverter-cli/inverter.h +++ b/sources/inverter-cli/inverter.h @@ -23,7 +23,7 @@ class cInverter { uint16_t cal_crc_half(uint8_t *pin, uint8_t len); public: - cInverter(std::string devicename); + cInverter(std::string devicename, int qpiri); void poll(); void runMultiThread() { std::thread t1(&cInverter::poll, this); diff --git a/sources/inverter-cli/main.cpp b/sources/inverter-cli/main.cpp index 8802e87..e54c741 100644 --- a/sources/inverter-cli/main.cpp +++ b/sources/inverter-cli/main.cpp @@ -43,6 +43,7 @@ string devicename; int runinterval; float ampfactor; float wattfactor; +int qpiri; // --------------------------------------- @@ -90,6 +91,8 @@ void getSettingsFile(string filename) { attemptAddSetting(&wattfactor, linepart2); else if(linepart1 == "watt_factor") attemptAddSetting(&wattfactor, linepart2); + else if(linepart1 == "qpiri") + attemptAddSetting(&qpiri, linepart2); else continue; } @@ -171,7 +174,7 @@ int main(int argc, char* argv[]) { } bool ups_status_changed(false); - ups = new cInverter(devicename); + ups = new cInverter(devicename,qpiri); // Logic to send 'raw commands' to the inverter.. if (!rawcmd.empty()) {