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
|
||||
#define MICROINVERTER_H
|
||||
|
||||
#include <vector>
|
||||
#include <memory>
|
||||
#include <string>
|
||||
// #include <mutex>
|
||||
#include <vector>
|
||||
|
||||
#include "port.h"
|
||||
#include "modbus.h"
|
||||
|
||||
// struct _modbus;
|
||||
// typedef _modbus modbus_t;
|
||||
#include "port.h"
|
||||
|
||||
class Microinverter {
|
||||
private:
|
||||
// std::shared_ptr<modbus_t*> modbus_context;
|
||||
|
||||
std::shared_ptr<class modbus> modbus;
|
||||
|
||||
// std::mutex *modbus_context_mutex;
|
||||
|
||||
|
||||
|
||||
public:
|
||||
Microinverter(
|
||||
std::shared_ptr<class modbus> modbus, long long serialNumber);
|
||||
Microinverter(std::shared_ptr<class modbus> modbus, long long serialNumber);
|
||||
|
||||
long long serialNumber;
|
||||
|
||||
std::vector<Port> ports;
|
||||
|
||||
// void updatePorts();
|
||||
|
||||
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);
|
||||
|
||||
long long getTodayProduction();
|
||||
|
||||
long long getTotalProduction();
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
@ -16,8 +16,6 @@ class Port {
|
|||
|
||||
void populateParameters();
|
||||
|
||||
std::pair<std::shared_ptr<PortParameter>, bool> getParameterByName(std::string name);
|
||||
|
||||
void fixCurrent();
|
||||
bool currentFixed;
|
||||
|
||||
|
|
@ -26,12 +24,10 @@ class Port {
|
|||
|
||||
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 printParameters();
|
||||
|
||||
void printParameters(std::vector<std::string> ¶metersToGet, bool allParameters);
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@
|
|||
#include "portParametersGeneric.h"
|
||||
|
||||
class PortParameterMicroinverterSerialNumber : public PortParameterInt {
|
||||
protected:
|
||||
private:
|
||||
void setValueFromRegisters(uint16_t *readArray, int registerCount);
|
||||
|
||||
public:
|
||||
|
|
|
|||
|
|
@ -1,10 +1,9 @@
|
|||
#ifndef PORTPARAMETERSGENERIC_H
|
||||
#define PORTPARAMETERSGENERIC_H
|
||||
|
||||
#include <memory>
|
||||
#include <stdint.h>
|
||||
#include <string>
|
||||
#include <memory>
|
||||
// #include <mutex>
|
||||
|
||||
struct _modbus;
|
||||
typedef _modbus modbus_t;
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
#include <vector>
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
#include "modbus.h"
|
||||
|
||||
|
|
@ -9,16 +9,16 @@
|
|||
|
||||
#include "portParameters.h"
|
||||
|
||||
|
||||
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);
|
||||
|
||||
if (!this->modbus.get()->modbus_connect()) {
|
||||
std::cerr << "conn_error" << std::endl;
|
||||
this->connected = false;
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
this->connected = true;
|
||||
}
|
||||
|
||||
|
|
@ -27,13 +27,9 @@ Dtu::Dtu(const char *ip_address, int port) {
|
|||
}
|
||||
}
|
||||
|
||||
bool Dtu::isConnected() {
|
||||
return this->connected;
|
||||
}
|
||||
bool Dtu::isConnected() { return this->connected; }
|
||||
|
||||
Dtu::~Dtu() {
|
||||
this->modbus.get()->modbus_close();
|
||||
}
|
||||
Dtu::~Dtu() { this->modbus.get()->modbus_close(); }
|
||||
|
||||
void Dtu::populateMicroinverters() {
|
||||
uint16_t portStartAddress = 0x1000;
|
||||
|
|
@ -51,8 +47,7 @@ void Dtu::populateMicroinverters() {
|
|||
std::pair<bool, Microinverter *> getMicroinverterBySerialNumber = this->getMicroinverterBySerialNumber(serialNumber);
|
||||
if (getMicroinverterBySerialNumber.first) {
|
||||
getMicroinverterBySerialNumber.second->ports.push_back(port);
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
Microinverter microinverter{this->modbus, serialNumber};
|
||||
this->microinverters.push_back(microinverter);
|
||||
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()) {
|
||||
if (microinvertersIterator->serialNumber == serialNumber) {
|
||||
return std::pair<bool, Microinverter *>(true, &*microinvertersIterator);
|
||||
}
|
||||
else{
|
||||
} else {
|
||||
microinvertersIterator++;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,4 +1,3 @@
|
|||
// #include <thread>
|
||||
#include <iostream>
|
||||
#include <memory>
|
||||
#include <string>
|
||||
|
|
@ -10,8 +9,6 @@
|
|||
|
||||
Microinverter::Microinverter(std::shared_ptr<class modbus> modbus, long long serialNumber) {
|
||||
this->modbus = modbus;
|
||||
// this->modbus_context_mutex = modbus_context_mutex;
|
||||
|
||||
this->serialNumber = serialNumber;
|
||||
}
|
||||
|
||||
|
|
@ -33,3 +30,27 @@ void Microinverter::printPorts(std::vector<std::string> ¶metersToGet, bool a
|
|||
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("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));
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
this->parameters.erase(std::find(this->parameters.begin(), this->parameters.end(), this->getParameterByName("pvCurrentM").first));
|
||||
}
|
||||
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(SIGABRT, sigHandler);
|
||||
|
||||
std::string version{"v1.0a"};
|
||||
std::string version{"v1.0h"};
|
||||
std::cout << version << std::endl;
|
||||
|
||||
CLI::App hoymilesClient{"Client for DTU-Pro/DTU-ProS"};
|
||||
|
||||
std::string ipAddress{"127.0.0.1"};
|
||||
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};
|
||||
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::string parametersToGetHelp{"List of parameters to fetch, delimited by ',', example[par1,par2,par3]"};
|
||||
hoymilesClient.add_option<std::vector<std::string>>("-P,--parameters", parametersToGet, parametersToGetHelp)->delimiter(',');
|
||||
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(',')->group("Parameters");
|
||||
|
||||
bool allParameters = false;
|
||||
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::string microinvertersToGetHelp{"List of microinverters to fetch, if omitted all are fetched, delimited by ','"};
|
||||
hoymilesClient.add_option<std::vector<long long>>("-m,--microinverters", microinvertersToGet, microinvertersToGetHelp)->delimiter(',');
|
||||
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(',')->group("Microinverters");
|
||||
|
||||
bool ignoreNotConnected = false;
|
||||
std::string ignoreNotConnectedHelp{"Ignore conn_error"};
|
||||
hoymilesClient.add_flag<bool>("-I,--ignore_conn_error", ignoreNotConnected, ignoreNotConnectedHelp)->group("Debug");
|
||||
|
||||
try {
|
||||
hoymilesClient.parse(argc, argv);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue