Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

improvement: restructure powermeter providers #1573

Open
wants to merge 1 commit into
base: development
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 8 additions & 4 deletions include/PowerMeter.h → include/powermeter/Controller.h
Original file line number Diff line number Diff line change
@@ -1,12 +1,14 @@
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once

#include "PowerMeterProvider.h"
#include <powermeter/Provider.h>
#include <TaskSchedulerDeclarations.h>
#include <memory>
#include <mutex>

class PowerMeterClass {
namespace PowerMeters {

class Controller {
public:
void init(Scheduler& scheduler);

Expand All @@ -21,7 +23,9 @@ class PowerMeterClass {

Task _loopTask;
mutable std::mutex _mutex;
std::unique_ptr<PowerMeterProvider> _upProvider = nullptr;
std::unique_ptr<Provider> _upProvider = nullptr;
};

extern PowerMeterClass PowerMeter;
} // namespace PowerMeters

extern PowerMeters::Controller PowerMeter;
10 changes: 7 additions & 3 deletions include/PowerMeterProvider.h → include/powermeter/Provider.h
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,11 @@
#include <atomic>
#include "Configuration.h"

class PowerMeterProvider {
namespace PowerMeters {

class Provider {
public:
virtual ~PowerMeterProvider() { }
virtual ~Provider() { }

enum class Type : unsigned {
MQTT = 0,
Expand All @@ -29,7 +31,7 @@ class PowerMeterProvider {
void mqttLoop() const;

protected:
PowerMeterProvider() {
Provider() {
auto const& config = Configuration.get();
_verboseLogging = config.PowerMeter.VerboseLogging;
}
Expand All @@ -49,3 +51,5 @@ class PowerMeterProvider {

mutable uint32_t _lastMqttPublish = 0;
};

} // namespace PowerMeters
Original file line number Diff line number Diff line change
Expand Up @@ -8,19 +8,21 @@
#include <condition_variable>
#include <mutex>
#include <stdint.h>
#include "HttpGetter.h"
#include "Configuration.h"
#include "PowerMeterProvider.h"
#include <Configuration.h>
#include <HttpGetter.h>
#include <powermeter/Provider.h>

using Auth_t = HttpRequestConfig::Auth;
using Unit_t = PowerMeterHttpJsonValue::Unit;

class PowerMeterHttpJson : public PowerMeterProvider {
namespace PowerMeters::Json::Http {

class Provider : public ::PowerMeters::Provider {
public:
explicit PowerMeterHttpJson(PowerMeterHttpJsonConfig const& cfg)
explicit Provider(PowerMeterHttpJsonConfig const& cfg)
: _cfg(cfg) { }

~PowerMeterHttpJson();
~Provider();

bool init() final;
void loop() final;
Expand Down Expand Up @@ -51,3 +53,5 @@ class PowerMeterHttpJson : public PowerMeterProvider {
mutable std::mutex _pollingMutex;
std::condition_variable _cv;
};

} // namespace PowerMeters::Json::Http
14 changes: 9 additions & 5 deletions include/PowerMeterMqtt.h → include/powermeter/mqtt/Provider.h
Original file line number Diff line number Diff line change
@@ -1,19 +1,21 @@
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once

#include "Configuration.h"
#include "PowerMeterProvider.h"
#include <Configuration.h>
#include <powermeter/Provider.h>
#include <espMqttClient.h>
#include <vector>
#include <mutex>
#include <array>

class PowerMeterMqtt : public PowerMeterProvider {
namespace PowerMeters::Mqtt {

class Provider : public ::PowerMeters::Provider {
public:
explicit PowerMeterMqtt(PowerMeterMqttConfig const& cfg)
explicit Provider(PowerMeterMqttConfig const& cfg)
: _cfg(cfg) { }

~PowerMeterMqtt();
~Provider();

bool init() final;
void loop() final { }
Expand All @@ -37,3 +39,5 @@ class PowerMeterMqtt : public PowerMeterProvider {

mutable std::mutex _mutex;
};

} // namespace PowerMeters::Mqtt
Original file line number Diff line number Diff line change
Expand Up @@ -5,22 +5,24 @@
#include <mutex>
#include <condition_variable>
#include <SoftwareSerial.h>
#include "Configuration.h"
#include "PowerMeterProvider.h"
#include "SDM.h"
#include <Configuration.h>
#include <powermeter/Provider.h>
#include <SDM.h>

class PowerMeterSerialSdm : public PowerMeterProvider {
namespace PowerMeters::Sdm::Serial {

class Provider : public ::PowerMeters::Provider {
public:
enum class Phases {
One,
Three
};

PowerMeterSerialSdm(Phases phases, PowerMeterSerialSdmConfig const& cfg)
Provider(Phases phases, PowerMeterSerialSdmConfig const& cfg)
: _phases(phases)
, _cfg(cfg) { }

~PowerMeterSerialSdm();
~Provider();

bool init() final;
void loop() final;
Expand Down Expand Up @@ -58,3 +60,5 @@ class PowerMeterSerialSdm : public PowerMeterProvider {
mutable std::mutex _pollingMutex;
std::condition_variable _cv;
};

} // namespace PowerMeters::Sdm::Serial
14 changes: 9 additions & 5 deletions include/PowerMeterSml.h → include/powermeter/sml/Provider.h
Original file line number Diff line number Diff line change
Expand Up @@ -7,17 +7,19 @@
#include <stdint.h>
#include <Arduino.h>
#include <HTTPClient.h>
#include "Configuration.h"
#include "PowerMeterProvider.h"
#include "sml.h"
#include <Configuration.h>
#include <powermeter/Provider.h>
#include <sml.h>

class PowerMeterSml : public PowerMeterProvider {
namespace PowerMeters::Sml {

class Provider : public ::PowerMeters::Provider {
public:
float getPowerTotal() const final;
void doMqttPublish() const final;

protected:
explicit PowerMeterSml(char const* user)
explicit Provider(char const* user)
: _user(user) { }

void reset();
Expand Down Expand Up @@ -67,3 +69,5 @@ class PowerMeterSml : public PowerMeterProvider {
{{0x01, 0x00, 0x02, 0x08, 0x00, 0xff}, &smlOBISWh, &_cache.energyExport, "energy export"}
};
};

} // namespace PowerMeters::Sml
Original file line number Diff line number Diff line change
Expand Up @@ -7,17 +7,19 @@
#include <mutex>
#include <stdint.h>
#include <Arduino.h>
#include "HttpGetter.h"
#include "Configuration.h"
#include "PowerMeterSml.h"
#include <HttpGetter.h>
#include <Configuration.h>
#include <powermeter/sml/Provider.h>

class PowerMeterHttpSml : public PowerMeterSml {
namespace PowerMeters::Sml::Http {

class Provider : public ::PowerMeters::Sml::Provider {
public:
explicit PowerMeterHttpSml(PowerMeterHttpSmlConfig const& cfg)
: PowerMeterSml("PowerMeterHttpSml")
explicit Provider(PowerMeterHttpSmlConfig const& cfg)
: ::PowerMeters::Sml::Provider("PowerMeterHttpSml")
, _cfg(cfg) { }

~PowerMeterHttpSml();
~Provider();

bool init() final;
void loop() final;
Expand All @@ -43,3 +45,5 @@ class PowerMeterHttpSml : public PowerMeterSml {
mutable std::mutex _pollingMutex;
std::condition_variable _cv;
};

} // namespace PowerMeters::Sml::Http
Original file line number Diff line number Diff line change
@@ -1,15 +1,17 @@
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once

#include "PowerMeterSml.h"
#include <SoftwareSerial.h>
#include <powermeter/sml/Provider.h>

class PowerMeterSerialSml : public PowerMeterSml {
namespace PowerMeters::Sml::Serial {

class Provider : public ::PowerMeters::Sml::Provider {
public:
PowerMeterSerialSml()
: PowerMeterSml("PowerMeterSerialSml") { }
Provider()
: ::PowerMeters::Sml::Provider("PowerMeterSerialSml") { }

~PowerMeterSerialSml();
~Provider();

bool init() final;
void loop() final;
Expand Down Expand Up @@ -42,3 +44,5 @@ class PowerMeterSerialSml : public PowerMeterSml {

std::unique_ptr<SoftwareSerial> _upSmlSerial = nullptr;
};

} // namespace PowerMeters::Sml::Serial
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,13 @@
#pragma once

#include <cstdint>
#include "PowerMeterProvider.h"
#include <powermeter/Provider.h>

class PowerMeterUdpSmaHomeManager : public PowerMeterProvider {
namespace PowerMeters::Udp::SmaHM {

class Provider : public ::PowerMeters::Provider {
public:
~PowerMeterUdpSmaHomeManager();
~Provider();

bool init() final;
void loop() final;
Expand All @@ -29,3 +31,5 @@ class PowerMeterUdpSmaHomeManager : public PowerMeterProvider {
uint32_t _previousMillis = 0;
uint32_t _serial = 0;
};

} // namespace PowerMeters::Udp::SmaHM
2 changes: 1 addition & 1 deletion src/Display_Graphic.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
#include "Display_Graphic.h"
#include "Datastore.h"
#include "I18n.h"
#include "PowerMeter.h"
#include <powermeter/Controller.h>
#include "Configuration.h"
#include <NetworkSettings.h>
#include <map>
Expand Down
2 changes: 1 addition & 1 deletion src/PowerLimiter.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
*/

#include "Battery.h"
#include "PowerMeter.h"
#include <powermeter/Controller.h>
#include "PowerLimiter.h"
#include "Configuration.h"
#include "MqttSettings.h"
Expand Down
94 changes: 0 additions & 94 deletions src/PowerMeter.cpp

This file was deleted.

2 changes: 1 addition & 1 deletion src/WebApi_mqtt.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
#include "WebApi_errors.h"
#include "helper.h"
#include "PowerLimiter.h"
#include "PowerMeter.h"
#include <powermeter/Controller.h>
#include <AsyncJson.h>
#include <solarcharger/Controller.h>

Expand Down
Loading