* fix compiler warning in SerialPortManager.cpp: function must not return void * clean up and simplify implementation of usesHwPort2() * make const * overrides are final * default implementation returns false * implement in header, as the implementation is very simple * rename PortManager to SerialPortManager. as "PortManager" is too generic, the static instance of the serial port manager is renamed to "SerialPortManager". the class is therefore renamed to SerialPortManagerClass, which is in line with other (static) classes withing OpenDTU(-OnBattery). * implement separate data ages for MPPT charge controllers * make sure MPPT data and live data time out * do not use invalid data of MPPT controlers for calculations * add :key binding to v-for iterating over MPPT instances
61 lines
1.8 KiB
C++
61 lines
1.8 KiB
C++
// SPDX-License-Identifier: GPL-2.0-or-later
|
|
#pragma once
|
|
|
|
#include <mutex>
|
|
#include <memory>
|
|
|
|
#include "VeDirectMpptController.h"
|
|
#include "Configuration.h"
|
|
#include <TaskSchedulerDeclarations.h>
|
|
|
|
class VictronMpptClass {
|
|
public:
|
|
VictronMpptClass() = default;
|
|
~VictronMpptClass() = default;
|
|
|
|
void init(Scheduler& scheduler);
|
|
void updateSettings();
|
|
|
|
bool isDataValid() const;
|
|
bool isDataValid(size_t idx) const;
|
|
|
|
// returns the data age of all controllers,
|
|
// i.e, the youngest data's age is returned.
|
|
uint32_t getDataAgeMillis() const;
|
|
uint32_t getDataAgeMillis(size_t idx) const;
|
|
|
|
std::optional<VeDirectMpptController::spData_t> getData(size_t idx = 0) const;
|
|
|
|
// total output of all MPPT charge controllers in Watts
|
|
int32_t getPowerOutputWatts() const;
|
|
|
|
// total panel input power of all MPPT charge controllers in Watts
|
|
int32_t getPanelPowerWatts() const;
|
|
|
|
// sum of total yield of all MPPT charge controllers in kWh
|
|
double getYieldTotal() const;
|
|
|
|
// sum of today's yield of all MPPT charge controllers in kWh
|
|
double getYieldDay() const;
|
|
|
|
// minimum of all MPPT charge controllers' output voltages in V
|
|
double getOutputVoltage() const;
|
|
|
|
private:
|
|
void loop();
|
|
VictronMpptClass(VictronMpptClass const& other) = delete;
|
|
VictronMpptClass(VictronMpptClass&& other) = delete;
|
|
VictronMpptClass& operator=(VictronMpptClass const& other) = delete;
|
|
VictronMpptClass& operator=(VictronMpptClass&& other) = delete;
|
|
|
|
Task _loopTask;
|
|
|
|
mutable std::mutex _mutex;
|
|
using controller_t = std::unique_ptr<VeDirectMpptController>;
|
|
std::vector<controller_t> _controllers;
|
|
|
|
bool initController(int8_t rx, int8_t tx, bool logging, int hwSerialPort);
|
|
};
|
|
|
|
extern VictronMpptClass VictronMppt;
|