Skip to content

Commit

Permalink
improvement: restructure powermeter providers
Browse files Browse the repository at this point in the history
  • Loading branch information
AndreasBoehm committed Jan 31, 2025
1 parent ab95aa3 commit 49964b1
Show file tree
Hide file tree
Showing 26 changed files with 328 additions and 256 deletions.
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

0 comments on commit 49964b1

Please sign in to comment.