Release with more helpful help message
This commit is contained in:
parent
3b79dc94f4
commit
a0d06edf7b
8 changed files with 105 additions and 110 deletions
|
|
@ -1,46 +1,31 @@
|
||||||
#ifndef MICROINVERTER_H
|
#ifndef MICROINVERTER_H
|
||||||
#define MICROINVERTER_H
|
#define MICROINVERTER_H
|
||||||
|
|
||||||
#include <vector>
|
|
||||||
#include <memory>
|
#include <memory>
|
||||||
#include <string>
|
#include <string>
|
||||||
// #include <mutex>
|
#include <vector>
|
||||||
|
|
||||||
#include "port.h"
|
|
||||||
#include "modbus.h"
|
#include "modbus.h"
|
||||||
|
#include "port.h"
|
||||||
// struct _modbus;
|
|
||||||
// typedef _modbus modbus_t;
|
|
||||||
|
|
||||||
class Microinverter {
|
class Microinverter {
|
||||||
private:
|
private:
|
||||||
// std::shared_ptr<modbus_t*> modbus_context;
|
|
||||||
|
|
||||||
std::shared_ptr<class modbus> modbus;
|
std::shared_ptr<class modbus> modbus;
|
||||||
|
|
||||||
// std::mutex *modbus_context_mutex;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
Microinverter(
|
Microinverter(std::shared_ptr<class modbus> modbus, long long serialNumber);
|
||||||
std::shared_ptr<class modbus> modbus, long long serialNumber);
|
|
||||||
|
|
||||||
long long serialNumber;
|
long long serialNumber;
|
||||||
|
|
||||||
std::vector<Port> ports;
|
std::vector<Port> ports;
|
||||||
|
|
||||||
// void updatePorts();
|
|
||||||
|
|
||||||
void updatePorts(std::vector<std::string> ¶metersToGet, bool allParameters);
|
void updatePorts(std::vector<std::string> ¶metersToGet, bool allParameters);
|
||||||
|
|
||||||
void updatePort(int i);
|
|
||||||
|
|
||||||
Port getPort(int i);
|
|
||||||
|
|
||||||
// void printPorts();
|
|
||||||
|
|
||||||
void printPorts(std::vector<std::string> ¶metersToGet, bool allParameters);
|
void printPorts(std::vector<std::string> ¶metersToGet, bool allParameters);
|
||||||
|
|
||||||
|
long long getTodayProduction();
|
||||||
|
|
||||||
|
long long getTotalProduction();
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
@ -16,8 +16,6 @@ class Port {
|
||||||
|
|
||||||
void populateParameters();
|
void populateParameters();
|
||||||
|
|
||||||
std::pair<std::shared_ptr<PortParameter>, bool> getParameterByName(std::string name);
|
|
||||||
|
|
||||||
void fixCurrent();
|
void fixCurrent();
|
||||||
bool currentFixed;
|
bool currentFixed;
|
||||||
|
|
||||||
|
|
@ -26,12 +24,10 @@ class Port {
|
||||||
|
|
||||||
std::vector<std::shared_ptr<PortParameter>> parameters;
|
std::vector<std::shared_ptr<PortParameter>> parameters;
|
||||||
|
|
||||||
// void updateParameters();
|
std::pair<std::shared_ptr<PortParameter>, bool> getParameterByName(std::string name);
|
||||||
|
|
||||||
void updateParameters(std::vector<std::string> ¶metersToGet, bool allParameters);
|
void updateParameters(std::vector<std::string> ¶metersToGet, bool allParameters);
|
||||||
|
|
||||||
// void printParameters();
|
|
||||||
|
|
||||||
void printParameters(std::vector<std::string> ¶metersToGet, bool allParameters);
|
void printParameters(std::vector<std::string> ¶metersToGet, bool allParameters);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@
|
||||||
#include "portParametersGeneric.h"
|
#include "portParametersGeneric.h"
|
||||||
|
|
||||||
class PortParameterMicroinverterSerialNumber : public PortParameterInt {
|
class PortParameterMicroinverterSerialNumber : public PortParameterInt {
|
||||||
protected:
|
private:
|
||||||
void setValueFromRegisters(uint16_t *readArray, int registerCount);
|
void setValueFromRegisters(uint16_t *readArray, int registerCount);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,9 @@
|
||||||
#ifndef PORTPARAMETERSGENERIC_H
|
#ifndef PORTPARAMETERSGENERIC_H
|
||||||
#define PORTPARAMETERSGENERIC_H
|
#define PORTPARAMETERSGENERIC_H
|
||||||
|
|
||||||
|
#include <memory>
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <memory>
|
|
||||||
// #include <mutex>
|
|
||||||
|
|
||||||
struct _modbus;
|
struct _modbus;
|
||||||
typedef _modbus modbus_t;
|
typedef _modbus modbus_t;
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
#include <vector>
|
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
#include "modbus.h"
|
#include "modbus.h"
|
||||||
|
|
||||||
|
|
@ -9,16 +9,16 @@
|
||||||
|
|
||||||
#include "portParameters.h"
|
#include "portParameters.h"
|
||||||
|
|
||||||
|
|
||||||
Dtu::Dtu(const char *ip_address, int port) {
|
Dtu::Dtu(const char *ip_address, int port) {
|
||||||
class modbus modbus{ip_address, (uint16_t) port};
|
class modbus modbus {
|
||||||
|
ip_address, (uint16_t)port
|
||||||
|
};
|
||||||
this->modbus = std::make_shared<class modbus>(modbus);
|
this->modbus = std::make_shared<class modbus>(modbus);
|
||||||
|
|
||||||
if (!this->modbus.get()->modbus_connect()) {
|
if (!this->modbus.get()->modbus_connect()) {
|
||||||
std::cerr << "conn_error" << std::endl;
|
std::cerr << "conn_error" << std::endl;
|
||||||
this->connected = false;
|
this->connected = false;
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
this->connected = true;
|
this->connected = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -27,13 +27,9 @@ Dtu::Dtu(const char *ip_address, int port) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Dtu::isConnected() {
|
bool Dtu::isConnected() { return this->connected; }
|
||||||
return this->connected;
|
|
||||||
}
|
|
||||||
|
|
||||||
Dtu::~Dtu() {
|
Dtu::~Dtu() { this->modbus.get()->modbus_close(); }
|
||||||
this->modbus.get()->modbus_close();
|
|
||||||
}
|
|
||||||
|
|
||||||
void Dtu::populateMicroinverters() {
|
void Dtu::populateMicroinverters() {
|
||||||
uint16_t portStartAddress = 0x1000;
|
uint16_t portStartAddress = 0x1000;
|
||||||
|
|
@ -51,8 +47,7 @@ void Dtu::populateMicroinverters() {
|
||||||
std::pair<bool, Microinverter *> getMicroinverterBySerialNumber = this->getMicroinverterBySerialNumber(serialNumber);
|
std::pair<bool, Microinverter *> getMicroinverterBySerialNumber = this->getMicroinverterBySerialNumber(serialNumber);
|
||||||
if (getMicroinverterBySerialNumber.first) {
|
if (getMicroinverterBySerialNumber.first) {
|
||||||
getMicroinverterBySerialNumber.second->ports.push_back(port);
|
getMicroinverterBySerialNumber.second->ports.push_back(port);
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
Microinverter microinverter{this->modbus, serialNumber};
|
Microinverter microinverter{this->modbus, serialNumber};
|
||||||
this->microinverters.push_back(microinverter);
|
this->microinverters.push_back(microinverter);
|
||||||
this->microinverters.back().ports.push_back(port);
|
this->microinverters.back().ports.push_back(port);
|
||||||
|
|
@ -69,8 +64,7 @@ std::pair<bool, Microinverter*> Dtu::getMicroinverterBySerialNumber(long long se
|
||||||
while (microinvertersIterator != this->microinverters.end()) {
|
while (microinvertersIterator != this->microinverters.end()) {
|
||||||
if (microinvertersIterator->serialNumber == serialNumber) {
|
if (microinvertersIterator->serialNumber == serialNumber) {
|
||||||
return std::pair<bool, Microinverter *>(true, &*microinvertersIterator);
|
return std::pair<bool, Microinverter *>(true, &*microinvertersIterator);
|
||||||
}
|
} else {
|
||||||
else{
|
|
||||||
microinvertersIterator++;
|
microinvertersIterator++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,3 @@
|
||||||
// #include <thread>
|
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
@ -10,8 +9,6 @@
|
||||||
|
|
||||||
Microinverter::Microinverter(std::shared_ptr<class modbus> modbus, long long serialNumber) {
|
Microinverter::Microinverter(std::shared_ptr<class modbus> modbus, long long serialNumber) {
|
||||||
this->modbus = modbus;
|
this->modbus = modbus;
|
||||||
// this->modbus_context_mutex = modbus_context_mutex;
|
|
||||||
|
|
||||||
this->serialNumber = serialNumber;
|
this->serialNumber = serialNumber;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -33,3 +30,27 @@ void Microinverter::printPorts(std::vector<std::string> ¶metersToGet, bool a
|
||||||
portsIterator++;
|
portsIterator++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
long long Microinverter::getTodayProduction() {
|
||||||
|
long long result{0};
|
||||||
|
|
||||||
|
std::vector<Port>::iterator portsIterator = this->ports.begin();
|
||||||
|
while(portsIterator != this->ports.end()) {
|
||||||
|
result += portsIterator->getParameterByName("todayProduction").first->getValue().first.i;
|
||||||
|
portsIterator++;
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
long long Microinverter::getTotalProduction() {
|
||||||
|
long long result{0};
|
||||||
|
|
||||||
|
std::vector<Port>::iterator portsIterator = this->ports.begin();
|
||||||
|
while(portsIterator != this->ports.end()) {
|
||||||
|
result += portsIterator->getParameterByName("totalProduction").first->getValue().first.i;
|
||||||
|
portsIterator++;
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
@ -79,8 +79,7 @@ void Port::fixCurrent() {
|
||||||
if (this->getParameterByName("pvCurrentMI").second && this->getParameterByName("pvCurrentHM").second) {
|
if (this->getParameterByName("pvCurrentMI").second && this->getParameterByName("pvCurrentHM").second) {
|
||||||
if (this->getParameterByName("pvPower").first->getValue().first.f > this->getParameterByName("pvVoltage").first->getValue().first.f * this->getParameterByName("pvCurrentMI").first->getValue().first.f) {
|
if (this->getParameterByName("pvPower").first->getValue().first.f > this->getParameterByName("pvVoltage").first->getValue().first.f * this->getParameterByName("pvCurrentMI").first->getValue().first.f) {
|
||||||
this->parameters.erase(std::find(this->parameters.begin(), this->parameters.end(), this->getParameterByName("pvCurrentHM").first));
|
this->parameters.erase(std::find(this->parameters.begin(), this->parameters.end(), this->getParameterByName("pvCurrentHM").first));
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
this->parameters.erase(std::find(this->parameters.begin(), this->parameters.end(), this->getParameterByName("pvCurrentM").first));
|
this->parameters.erase(std::find(this->parameters.begin(), this->parameters.end(), this->getParameterByName("pvCurrentM").first));
|
||||||
}
|
}
|
||||||
this->currentFixed = true;
|
this->currentFixed = true;
|
||||||
|
|
|
||||||
23
src/main.cpp
23
src/main.cpp
|
|
@ -19,34 +19,35 @@ int main(int argc, char **argv) {
|
||||||
signal(SIGTERM, sigHandler);
|
signal(SIGTERM, sigHandler);
|
||||||
signal(SIGABRT, sigHandler);
|
signal(SIGABRT, sigHandler);
|
||||||
|
|
||||||
std::string version{"v1.0a"};
|
std::string version{"v1.0h"};
|
||||||
std::cout << version << std::endl;
|
std::cout << version << std::endl;
|
||||||
|
|
||||||
CLI::App hoymilesClient{"Client for DTU-Pro/DTU-ProS"};
|
CLI::App hoymilesClient{"Client for DTU-Pro/DTU-ProS"};
|
||||||
|
|
||||||
std::string ipAddress{"127.0.0.1"};
|
std::string ipAddress{"127.0.0.1"};
|
||||||
std::string ipAddressHelp{"ipv4 address of DTU {default: " + ipAddress + "}"};
|
std::string ipAddressHelp{"ipv4 address of DTU {default: " + ipAddress + "}"};
|
||||||
hoymilesClient.add_option<std::string>("-i,--ip_address", ipAddress, ipAddressHelp)->required();
|
hoymilesClient.add_option<std::string>("-i,--ip_address", ipAddress, ipAddressHelp)->required()->group("Networking");
|
||||||
|
|
||||||
int port{502};
|
int port{502};
|
||||||
std::string portHelp{"Port of DTU {default: " + std::to_string(port) + "}"};
|
std::string portHelp{"Port of DTU {default: " + std::to_string(port) + "}"};
|
||||||
hoymilesClient.add_option<int>("-p,--port", port, portHelp);
|
hoymilesClient.add_option<int>("-p,--port", port, portHelp)->group("Networking");
|
||||||
|
|
||||||
std::vector<std::string> parametersToGet{};
|
std::vector<std::string> parametersToGet{};
|
||||||
std::string parametersToGetHelp{"List of parameters to fetch, delimited by ',', example[par1,par2,par3]"};
|
std::string parametersToGetHelp{"List of parameters to fetch, delimited by ','; possible parameters:\n - pvVoltage\n - pvCurrentMI\n - pvCurrentHM\n - gridVoltage\n - gridFrequency\n - pvPower\n - todayProduction\n - totalProduction\n - temperature\n - operatingStatus\n - alarmCode\n - alarmCount\n - linkStatus"};
|
||||||
hoymilesClient.add_option<std::vector<std::string>>("-P,--parameters", parametersToGet, parametersToGetHelp)->delimiter(',');
|
hoymilesClient.add_option<std::vector<std::string>>("-P,--parameters", parametersToGet, parametersToGetHelp)->delimiter(',')->group("Parameters");
|
||||||
|
|
||||||
bool allParameters = false;
|
bool allParameters = false;
|
||||||
std::string allParametersHelp{"Fetch all parameters"};
|
std::string allParametersHelp{"Fetch all parameters"};
|
||||||
hoymilesClient.add_flag<bool>("-a,--all_parameters", allParameters, allParametersHelp);
|
hoymilesClient.add_flag<bool>("-a,--all_parameters", allParameters, allParametersHelp)->group("Parameters");
|
||||||
|
|
||||||
bool ignoreNotConnected = false;
|
|
||||||
std::string ignoreNotConnectedHelp{"Ignore connection errors"};
|
|
||||||
hoymilesClient.add_flag<bool>("-I,--ignore_conn_error", ignoreNotConnected, ignoreNotConnectedHelp);
|
|
||||||
|
|
||||||
std::vector<long long> microinvertersToGet{};
|
std::vector<long long> microinvertersToGet{};
|
||||||
std::string microinvertersToGetHelp{"List of microinverters to fetch, if omitted all are fetched, delimited by ','"};
|
std::string microinvertersToGetHelp{"List of microinverters to fetch, delimited by ','; if omitted, all are fetched"};
|
||||||
hoymilesClient.add_option<std::vector<long long>>("-m,--microinverters", microinvertersToGet, microinvertersToGetHelp)->delimiter(',');
|
hoymilesClient.add_option<std::vector<long long>>("-m,--microinverters", microinvertersToGet, microinvertersToGetHelp)->delimiter(',')->group("Microinverters");
|
||||||
|
|
||||||
|
bool ignoreNotConnected = false;
|
||||||
|
std::string ignoreNotConnectedHelp{"Ignore conn_error"};
|
||||||
|
hoymilesClient.add_flag<bool>("-I,--ignore_conn_error", ignoreNotConnected, ignoreNotConnectedHelp)->group("Debug");
|
||||||
|
|
||||||
try {
|
try {
|
||||||
hoymilesClient.parse(argc, argv);
|
hoymilesClient.parse(argc, argv);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue