Initialize modbus manager and clean up class hirarchy

pull/390/head
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();
}
bool ModbusRtuHardwareResourceImplementation::hasModbusRtuMaster(const QUuid &modbusUuid)
bool ModbusRtuHardwareResourceImplementation::hasModbusRtuMaster(const QUuid &modbusUuid) const
{
return m_modbusRtuManager->hasModbusRtuMaster(modbusUuid);
}
ModbusRtuMaster *ModbusRtuHardwareResourceImplementation::getModbusRtuMaster(const QUuid &modbusUuid)
ModbusRtuMaster *ModbusRtuHardwareResourceImplementation::getModbusRtuMaster(const QUuid &modbusUuid) const
{
return m_modbusRtuManager->getModbusRtuMaster(modbusUuid);
}

View File

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

View File

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

View File

@ -43,13 +43,15 @@ class Platform;
class MqttBroker;
class ZigbeeManager;
class ZigbeeHardwareResourceImplementation;
class ModbusRtuManager;
class ModbusRtuHardwareResourceImplementation;
class HardwareManagerImplementation : public HardwareManager
{
Q_OBJECT
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;
Radio433 *radio433() override;
@ -61,7 +63,7 @@ public:
MqttProvider *mqttProvider() override;
I2CManager *i2cManager() override;
ZigbeeHardwareResource *zigbeeResource() override;
ModbusRtuHardwareResouce *modbusRtuResource() override;
ModbusRtuHardwareResource *modbusRtuResource() override;
public slots:
void thingsLoaded();
@ -80,7 +82,7 @@ private:
MqttProvider *m_mqttProvider = nullptr;
I2CManager *m_i2cManager = 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
packagesExist(Qt5SerialBus) {
message("Building with QtSerialBus support.")
Qt += serialbus
# Qt += serialbus
PKGCONFIG += Qt5SerialBus
DEFINES += WITH_QTSERIALBUS
} else {
message("Qt5SerialBus package not found. Building without QtSerialBus support.")

View File

@ -31,6 +31,7 @@
#include "modbusrtumanager.h"
#include "nymeasettings.h"
#include "loggingcategories.h"
#include "modbusrtumasterimpl.h"
NYMEA_LOGGING_CATEGORY(dcModbusRtu, "ModbusRtu")
@ -39,6 +40,12 @@ namespace nymeaserver {
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;
}
void ModbusRtuManager::init()
void ModbusRtuManager::loadRtuMasters()
{
// Load uart configurations
NymeaSettings settings(NymeaSettings::SettingsRoleModbusRtu);
qCDebug(dcModbusRtu()) << "Loading modbus RTU resources from" << settings.fileName();
@ -85,11 +91,6 @@ void ModbusRtuManager::init()
}
settings.endGroup(); // ModbusRtuMasters
// Connect signals
// Enable autoconnect for each modbus rtu master
}
void ModbusRtuManager::saveModbusRtuMaster(ModbusRtuMaster *modbusRtuMaster)

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -2,6 +2,18 @@ QT += dbus testlib network sql websockets
CONFIG += testcase
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 \
$$top_srcdir/libnymea-core \
$$top_srcdir/tests/testlib/ \

View File

@ -5,6 +5,14 @@ include(../../nymea.pri)
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 \
$$top_srcdir/libnymea-core