Initialize modbus manager and clean up class hirarchy

This commit is contained in:
Simon Stürz 2021-02-08 16:20:51 +01:00
parent fc9c030ebc
commit 673bce61ff
14 changed files with 68 additions and 25 deletions

View File

@ -49,12 +49,12 @@ QList<ModbusRtuMaster *> ModbusRtuHardwareResourceImplementation::modbusRtuMaste
return m_modbusRtuManager->modbusRtuMasters(); return m_modbusRtuManager->modbusRtuMasters();
} }
bool ModbusRtuHardwareResourceImplementation::hasModbusRtuMaster(const QUuid &modbusUuid) bool ModbusRtuHardwareResourceImplementation::hasModbusRtuMaster(const QUuid &modbusUuid) const
{ {
return m_modbusRtuManager->hasModbusRtuMaster(modbusUuid); return m_modbusRtuManager->hasModbusRtuMaster(modbusUuid);
} }
ModbusRtuMaster *ModbusRtuHardwareResourceImplementation::getModbusRtuMaster(const QUuid &modbusUuid) ModbusRtuMaster *ModbusRtuHardwareResourceImplementation::getModbusRtuMaster(const QUuid &modbusUuid) const
{ {
return m_modbusRtuManager->getModbusRtuMaster(modbusUuid); return m_modbusRtuManager->getModbusRtuMaster(modbusUuid);
} }

View File

@ -34,6 +34,7 @@
#include <QObject> #include <QObject>
#include "modbus/modbusrtumanager.h" #include "modbus/modbusrtumanager.h"
#include "hardware/modbus/modbusrtumaster.h"
#include "hardware/modbus/modbusrtuhardwareresource.h" #include "hardware/modbus/modbusrtuhardwareresource.h"
namespace nymeaserver { namespace nymeaserver {
@ -43,10 +44,11 @@ class ModbusRtuHardwareResourceImplementation : public ModbusRtuHardwareResource
Q_OBJECT Q_OBJECT
public: public:
explicit ModbusRtuHardwareResourceImplementation(ModbusRtuManager *modbusRtuManager, QObject *parent = nullptr); explicit ModbusRtuHardwareResourceImplementation(ModbusRtuManager *modbusRtuManager, QObject *parent = nullptr);
~ModbusRtuHardwareResourceImplementation() override = default;
QList<ModbusRtuMaster *> modbusRtuMasters() const override; QList<ModbusRtuMaster *> modbusRtuMasters() const override;
bool hasModbusRtuMaster(const QUuid &modbusUuid) override; bool hasModbusRtuMaster(const QUuid &modbusUuid) const override;
ModbusRtuMaster *getModbusRtuMaster(const QUuid &modbusUuid) override; ModbusRtuMaster *getModbusRtuMaster(const QUuid &modbusUuid) const override;
bool available() const override; bool available() const override;
bool enabled() const override; bool enabled() const override;

View File

@ -43,11 +43,13 @@
#include "hardware/network/mqtt/mqttproviderimplementation.h" #include "hardware/network/mqtt/mqttproviderimplementation.h"
#include "hardware/i2c/i2cmanagerimplementation.h" #include "hardware/i2c/i2cmanagerimplementation.h"
#include "hardware/zigbee/zigbeehardwareresourceimplementation.h" #include "hardware/zigbee/zigbeehardwareresourceimplementation.h"
#include "modbus/modbusrtumanager.h"
#include "hardware/modbus/modbusrtuhardwareresourceimplementation.h" #include "hardware/modbus/modbusrtuhardwareresourceimplementation.h"
namespace nymeaserver { namespace nymeaserver {
HardwareManagerImplementation::HardwareManagerImplementation(Platform *platform, MqttBroker *mqttBroker, ZigbeeManager *zigbeeManager, QObject *parent) : HardwareManagerImplementation::HardwareManagerImplementation(Platform *platform, MqttBroker *mqttBroker, ZigbeeManager *zigbeeManager, ModbusRtuManager *modbusRtuManager, QObject *parent) :
HardwareManager(parent), HardwareManager(parent),
m_platform(platform) m_platform(platform)
{ {
@ -74,6 +76,8 @@ HardwareManagerImplementation::HardwareManagerImplementation(Platform *platform,
m_zigbeeResource = new ZigbeeHardwareResourceImplementation(zigbeeManager, this); m_zigbeeResource = new ZigbeeHardwareResourceImplementation(zigbeeManager, this);
m_modbusRtuResource = new ModbusRtuHardwareResourceImplementation(modbusRtuManager, this);
// Enable all the resources // Enable all the resources
setResourceEnabled(m_pluginTimerManager, true); setResourceEnabled(m_pluginTimerManager, true);
setResourceEnabled(m_radio433, true); setResourceEnabled(m_radio433, true);
@ -143,7 +147,7 @@ ZigbeeHardwareResource *HardwareManagerImplementation::zigbeeResource()
return m_zigbeeResource; return m_zigbeeResource;
} }
ModbusRtuHardwareResouce *HardwareManagerImplementation::modbusRtuResource() ModbusRtuHardwareResource *HardwareManagerImplementation::modbusRtuResource()
{ {
return m_modbusRtuResource; return m_modbusRtuResource;
} }

View File

@ -43,13 +43,15 @@ class Platform;
class MqttBroker; class MqttBroker;
class ZigbeeManager; class ZigbeeManager;
class ZigbeeHardwareResourceImplementation; class ZigbeeHardwareResourceImplementation;
class ModbusRtuManager;
class ModbusRtuHardwareResourceImplementation;
class HardwareManagerImplementation : public HardwareManager class HardwareManagerImplementation : public HardwareManager
{ {
Q_OBJECT Q_OBJECT
public: public:
explicit HardwareManagerImplementation(Platform *platform, MqttBroker *mqttBroker, ZigbeeManager *zigbeeManager, QObject *parent = nullptr); explicit HardwareManagerImplementation(Platform *platform, MqttBroker *mqttBroker, ZigbeeManager *zigbeeManager, ModbusRtuManager *modbusRtuManager, QObject *parent = nullptr);
~HardwareManagerImplementation() override; ~HardwareManagerImplementation() override;
Radio433 *radio433() override; Radio433 *radio433() override;
@ -61,7 +63,7 @@ public:
MqttProvider *mqttProvider() override; MqttProvider *mqttProvider() override;
I2CManager *i2cManager() override; I2CManager *i2cManager() override;
ZigbeeHardwareResource *zigbeeResource() override; ZigbeeHardwareResource *zigbeeResource() override;
ModbusRtuHardwareResouce *modbusRtuResource() override; ModbusRtuHardwareResource *modbusRtuResource() override;
public slots: public slots:
void thingsLoaded(); void thingsLoaded();
@ -80,7 +82,7 @@ private:
MqttProvider *m_mqttProvider = nullptr; MqttProvider *m_mqttProvider = nullptr;
I2CManager *m_i2cManager = nullptr; I2CManager *m_i2cManager = nullptr;
ZigbeeHardwareResourceImplementation *m_zigbeeResource = nullptr; ZigbeeHardwareResourceImplementation *m_zigbeeResource = nullptr;
ModbusRtuHardwareResouce *m_modbusRtuResource = nullptr; ModbusRtuHardwareResourceImplementation *m_modbusRtuResource = nullptr;
}; };
} }

View File

@ -40,7 +40,8 @@ CONFIG(withoutpython) {
# Let's check if the package exists, not the qt version # Let's check if the package exists, not the qt version
packagesExist(Qt5SerialBus) { packagesExist(Qt5SerialBus) {
message("Building with QtSerialBus support.") message("Building with QtSerialBus support.")
Qt += serialbus # Qt += serialbus
PKGCONFIG += Qt5SerialBus
DEFINES += WITH_QTSERIALBUS DEFINES += WITH_QTSERIALBUS
} else { } else {
message("Qt5SerialBus package not found. Building without QtSerialBus support.") message("Qt5SerialBus package not found. Building without QtSerialBus support.")

View File

@ -31,6 +31,7 @@
#include "modbusrtumanager.h" #include "modbusrtumanager.h"
#include "nymeasettings.h" #include "nymeasettings.h"
#include "loggingcategories.h" #include "loggingcategories.h"
#include "modbusrtumasterimpl.h" #include "modbusrtumasterimpl.h"
NYMEA_LOGGING_CATEGORY(dcModbusRtu, "ModbusRtu") NYMEA_LOGGING_CATEGORY(dcModbusRtu, "ModbusRtu")
@ -39,6 +40,12 @@ namespace nymeaserver {
ModbusRtuManager::ModbusRtuManager(QObject *parent) : QObject(parent) ModbusRtuManager::ModbusRtuManager(QObject *parent) : QObject(parent)
{ {
// Load uart configurations
loadRtuMasters();
// Connect signals
// Enable autoconnect for each modbus rtu master
} }
@ -61,9 +68,8 @@ ModbusRtuMaster *ModbusRtuManager::getModbusRtuMaster(const QUuid &modbusUuid)
return nullptr; return nullptr;
} }
void ModbusRtuManager::init() void ModbusRtuManager::loadRtuMasters()
{ {
// Load uart configurations
NymeaSettings settings(NymeaSettings::SettingsRoleModbusRtu); NymeaSettings settings(NymeaSettings::SettingsRoleModbusRtu);
qCDebug(dcModbusRtu()) << "Loading modbus RTU resources from" << settings.fileName(); qCDebug(dcModbusRtu()) << "Loading modbus RTU resources from" << settings.fileName();
@ -85,11 +91,6 @@ void ModbusRtuManager::init()
} }
settings.endGroup(); // ModbusRtuMasters settings.endGroup(); // ModbusRtuMasters
// Connect signals
// Enable autoconnect for each modbus rtu master
} }
void ModbusRtuManager::saveModbusRtuMaster(ModbusRtuMaster *modbusRtuMaster) void ModbusRtuManager::saveModbusRtuMaster(ModbusRtuMaster *modbusRtuMaster)

View File

@ -50,8 +50,6 @@ public:
bool hasModbusRtuMaster(const QUuid &modbusUuid) const; bool hasModbusRtuMaster(const QUuid &modbusUuid) const;
ModbusRtuMaster *getModbusRtuMaster(const QUuid &modbusUuid); ModbusRtuMaster *getModbusRtuMaster(const QUuid &modbusUuid);
void init();
signals: signals:
void modbusRtuMasterAdded(const QUuid &modbusUuid); void modbusRtuMasterAdded(const QUuid &modbusUuid);
void modbusRtuMasterRemoved(const QUuid &modbusUuid); void modbusRtuMasterRemoved(const QUuid &modbusUuid);
@ -60,6 +58,7 @@ signals:
private: private:
QHash<QUuid, ModbusRtuMaster *> m_modbusRtuMasters; QHash<QUuid, ModbusRtuMaster *> m_modbusRtuMasters;
void loadRtuMasters();
void saveModbusRtuMaster(ModbusRtuMaster *modbusRtuMaster); void saveModbusRtuMaster(ModbusRtuMaster *modbusRtuMaster);
}; };

View File

@ -53,6 +53,8 @@
#include "zigbee/zigbeemanager.h" #include "zigbee/zigbeemanager.h"
#include "modbus/modbusrtumanager.h"
#include <networkmanager.h> #include <networkmanager.h>
#include <QDir> #include <QDir>
@ -108,8 +110,11 @@ void NymeaCore::init(const QStringList &additionalInterfaces) {
qCDebug(dcCore()) << "Create Zigbee Manager"; qCDebug(dcCore()) << "Create Zigbee Manager";
m_zigbeeManager = new ZigbeeManager(this); m_zigbeeManager = new ZigbeeManager(this);
qCDebug(dcCore()) << "Create Modbus RTU Manager";
m_modbusRtuManager = new ModbusRtuManager(this);
qCDebug(dcCore) << "Creating Hardware Manager"; qCDebug(dcCore) << "Creating Hardware Manager";
m_hardwareManager = new HardwareManagerImplementation(m_platform, m_serverManager->mqttBroker(), m_zigbeeManager, this); m_hardwareManager = new HardwareManagerImplementation(m_platform, m_serverManager->mqttBroker(), m_zigbeeManager, m_modbusRtuManager, this);
qCDebug(dcCore) << "Creating Thing Manager (locale:" << m_configuration->locale() << ")"; qCDebug(dcCore) << "Creating Thing Manager (locale:" << m_configuration->locale() << ")";
m_thingManager = new ThingManagerImplementation(m_hardwareManager, m_configuration->locale(), this); m_thingManager = new ThingManagerImplementation(m_hardwareManager, m_configuration->locale(), this);
@ -645,6 +650,11 @@ ZigbeeManager *NymeaCore::zigbeeManager() const
return m_zigbeeManager; return m_zigbeeManager;
} }
ModbusRtuManager *NymeaCore::modbusRtuManager() const
{
return m_modbusRtuManager;
}
void NymeaCore::gotEvent(const Event &event) void NymeaCore::gotEvent(const Event &event)
{ {
emit eventTriggered(event); emit eventTriggered(event);

View File

@ -67,6 +67,7 @@ class ExperienceManager;
class ScriptEngine; class ScriptEngine;
class CloudManager; class CloudManager;
class ZigbeeManager; class ZigbeeManager;
class ModbusRtuManager;
class NymeaCore : public QObject class NymeaCore : public QObject
{ {
@ -107,6 +108,7 @@ public:
TagsStorage *tagsStorage() const; TagsStorage *tagsStorage() const;
Platform *platform() const; Platform *platform() const;
ZigbeeManager *zigbeeManager() const; ZigbeeManager *zigbeeManager() const;
ModbusRtuManager *modbusRtuManager() const;
static QStringList getAvailableLanguages(); static QStringList getAvailableLanguages();
static QStringList loggingFilters(); static QStringList loggingFilters();
@ -151,6 +153,7 @@ private:
System *m_system; System *m_system;
ExperienceManager *m_experienceManager; ExperienceManager *m_experienceManager;
ZigbeeManager *m_zigbeeManager; ZigbeeManager *m_zigbeeManager;
ModbusRtuManager *m_modbusRtuManager;
QList<RuleId> m_executingRules; QList<RuleId> m_executingRules;

View File

@ -29,6 +29,7 @@
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
#include "modbusrtuhardwareresource.h" #include "modbusrtuhardwareresource.h"
#include "modbusrtumaster.h"
ModbusRtuHardwareResource::ModbusRtuHardwareResource(QObject *parent) : ModbusRtuHardwareResource::ModbusRtuHardwareResource(QObject *parent) :
HardwareResource("Modbus RTU resource", parent) HardwareResource("Modbus RTU resource", parent)

View File

@ -34,16 +34,16 @@
#include <QList> #include <QList>
#include <QObject> #include <QObject>
#include "modbusrtumaster.h"
#include "hardwareresource.h" #include "hardwareresource.h"
#include "modbusrtumaster.h"
class ModbusRtuHardwareResource : public HardwareResource class ModbusRtuHardwareResource : public HardwareResource
{ {
Q_OBJECT Q_OBJECT
public: public:
virtual QList<ModbusRtuMaster *> modbusRtuMasters() const = 0; virtual QList<ModbusRtuMaster *> modbusRtuMasters() const = 0;
virtual bool hasModbusRtuMaster(const QUuid &modbusUuid) = 0; virtual bool hasModbusRtuMaster(const QUuid &modbusUuid) const = 0;
virtual ModbusRtuMaster *getModbusRtuMaster(const QUuid &modbusUuid) = 0; virtual ModbusRtuMaster *getModbusRtuMaster(const QUuid &modbusUuid) const = 0;
protected: protected:
explicit ModbusRtuHardwareResource(QObject *parent = nullptr); explicit ModbusRtuHardwareResource(QObject *parent = nullptr);

View File

@ -44,7 +44,7 @@ class MqttProvider;
class I2CManager; class I2CManager;
class ZigbeeHardwareResource; class ZigbeeHardwareResource;
class HardwareResource; class HardwareResource;
class ModbusRtuHardwareResouce; class ModbusRtuHardwareResource;
class HardwareManager : public QObject class HardwareManager : public QObject
{ {
@ -64,7 +64,7 @@ public:
virtual MqttProvider *mqttProvider() = 0; virtual MqttProvider *mqttProvider() = 0;
virtual I2CManager *i2cManager() = 0; virtual I2CManager *i2cManager() = 0;
virtual ZigbeeHardwareResource *zigbeeResource() = 0; virtual ZigbeeHardwareResource *zigbeeResource() = 0;
virtual ModbusRtuHardwareResouce *modbusRtuResource() = 0; virtual ModbusRtuHardwareResource *modbusRtuResource() = 0;
protected: protected:
void setResourceEnabled(HardwareResource* resource, bool enabled); void setResourceEnabled(HardwareResource* resource, bool enabled);

View File

@ -2,6 +2,18 @@ QT += dbus testlib network sql websockets
CONFIG += testcase CONFIG += testcase
CONFIG += link_pkgconfig CONFIG += link_pkgconfig
# Qt serial bus module is officially available since Qt 5.8
# but not all platforms host the qt serialbus package.
# Let's check if the package exists, not the qt version
packagesExist(Qt5SerialBus) {
message("Building with QtSerialBus support.")
# Qt += serialbus
PKGCONFIG += Qt5SerialBus
DEFINES += WITH_QTSERIALBUS
} else {
message("Qt5SerialBus package not found. Building without QtSerialBus support.")
}
INCLUDEPATH += $$top_srcdir/libnymea \ INCLUDEPATH += $$top_srcdir/libnymea \
$$top_srcdir/libnymea-core \ $$top_srcdir/libnymea-core \
$$top_srcdir/tests/testlib/ \ $$top_srcdir/tests/testlib/ \

View File

@ -5,6 +5,14 @@ include(../../nymea.pri)
QT += testlib dbus network sql websockets QT += testlib dbus network sql websockets
# Qt serial bus module is officially available since Qt 5.8
# but not all platforms host the qt serialbus package.
# Let's check if the package exists, not the qt version
packagesExist(Qt5SerialBus) {
Qt += serialbus
DEFINES += WITH_QTSERIALBUS
}
INCLUDEPATH += $$top_srcdir/libnymea \ INCLUDEPATH += $$top_srcdir/libnymea \
$$top_srcdir/libnymea-core $$top_srcdir/libnymea-core