From 7bb000560dee5b6074f6eb7f0afe9f155d113e1d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20St=C3=BCrz?= Date: Fri, 13 May 2022 08:30:56 +0200 Subject: [PATCH] Update stiebeleltron plugin to libnyma-modbus --- .../integrationpluginstiebeleltron.cpp | 76 +- .../integrationpluginstiebeleltron.h | 9 +- stiebeleltron/stiebel-eltron-registers.json | 4 +- stiebeleltron/stiebeleltron.pro | 15 +- .../stiebeleltronmodbusconnection.cpp | 1051 ----------------- stiebeleltron/stiebeleltronmodbusconnection.h | 260 ---- 6 files changed, 52 insertions(+), 1363 deletions(-) delete mode 100644 stiebeleltron/stiebeleltronmodbusconnection.cpp delete mode 100644 stiebeleltron/stiebeleltronmodbusconnection.h diff --git a/stiebeleltron/integrationpluginstiebeleltron.cpp b/stiebeleltron/integrationpluginstiebeleltron.cpp index 7d58501..086538a 100644 --- a/stiebeleltron/integrationpluginstiebeleltron.cpp +++ b/stiebeleltron/integrationpluginstiebeleltron.cpp @@ -29,11 +29,11 @@ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #include "integrationpluginstiebeleltron.h" - -#include "hardwaremanager.h" -#include "network/networkdevicediscovery.h" #include "plugininfo.h" +#include +#include + IntegrationPluginStiebelEltron::IntegrationPluginStiebelEltron() {} void IntegrationPluginStiebelEltron::discoverThings(ThingDiscoveryInfo *info) { @@ -98,10 +98,10 @@ void IntegrationPluginStiebelEltron::setupThing(ThingSetupInfo *info) { quint16 port = thing->paramValue(stiebelEltronThingPortParamTypeId).toUInt(); quint16 slaveId = thing->paramValue(stiebelEltronThingSlaveIdParamTypeId).toUInt(); - StiebelEltronModbusConnection *connection = - new StiebelEltronModbusConnection(address, port, slaveId, this); + StiebelEltronModbusTcpConnection *connection = + new StiebelEltronModbusTcpConnection(address, port, slaveId, this); - connect(connection, &StiebelEltronModbusConnection::connectionStateChanged, thing, + connect(connection, &StiebelEltronModbusTcpConnection::connectionStateChanged, thing, [thing, connection](bool status) { qCDebug(dcStiebelEltron()) << "Connected changed to" << status << "for" << thing; if (status) { @@ -111,28 +111,28 @@ void IntegrationPluginStiebelEltron::setupThing(ThingSetupInfo *info) { thing->setStateValue(stiebelEltronConnectedStateTypeId, status); }); - connect(connection, &StiebelEltronModbusConnection::outdoorTemperatureChanged, thing, + connect(connection, &StiebelEltronModbusTcpConnection::outdoorTemperatureChanged, thing, [thing](float outdoorTemperature) { qCDebug(dcStiebelEltron()) << thing << "outdoor temperature changed" << outdoorTemperature << "°C"; thing->setStateValue(stiebelEltronOutdoorTemperatureStateTypeId, outdoorTemperature); }); - connect(connection, &StiebelEltronModbusConnection::flowTemperatureChanged, thing, + connect(connection, &StiebelEltronModbusTcpConnection::flowTemperatureChanged, thing, [thing](float flowTemperature) { qCDebug(dcStiebelEltron()) << thing << "flow temperature changed" << flowTemperature << "°C"; thing->setStateValue(stiebelEltronFlowTemperatureStateTypeId, flowTemperature); }); - connect(connection, &StiebelEltronModbusConnection::hotWaterTemperatureChanged, thing, + connect(connection, &StiebelEltronModbusTcpConnection::hotWaterTemperatureChanged, thing, [thing](float hotWaterTemperature) { qCDebug(dcStiebelEltron()) << thing << "hot water temperature changed" << hotWaterTemperature << "°C"; thing->setStateValue(stiebelEltronHotWaterTemperatureStateTypeId, hotWaterTemperature); }); - connect(connection, &StiebelEltronModbusConnection::storageTankTemperatureChanged, thing, + connect(connection, &StiebelEltronModbusTcpConnection::storageTankTemperatureChanged, thing, [thing](float storageTankTemperature) { qCDebug(dcStiebelEltron()) << thing << "Storage tank temperature changed" << storageTankTemperature << "°C"; @@ -140,14 +140,14 @@ void IntegrationPluginStiebelEltron::setupThing(ThingSetupInfo *info) { storageTankTemperature); }); - connect(connection, &StiebelEltronModbusConnection::returnTemperatureChanged, thing, + connect(connection, &StiebelEltronModbusTcpConnection::returnTemperatureChanged, thing, [thing](float returnTemperature) { qCDebug(dcStiebelEltron()) << thing << "return temperature changed" << returnTemperature << "°C"; thing->setStateValue(stiebelEltronReturnTemperatureStateTypeId, returnTemperature); }); - connect(connection, &StiebelEltronModbusConnection::heatingEnergyChanged, thing, + connect(connection, &StiebelEltronModbusTcpConnection::heatingEnergyChanged, thing, [thing](quint32 heatingEnergy) { // kWh and MWh of energy are stored in two registers an read as // an uint32. The following arithmetic splits the uint32 into @@ -158,7 +158,7 @@ void IntegrationPluginStiebelEltron::setupThing(ThingSetupInfo *info) { thing->setStateValue(stiebelEltronHeatingEnergyStateTypeId, correctedEnergy); }); - connect(connection, &StiebelEltronModbusConnection::hotWaterEnergyChanged, thing, + connect(connection, &StiebelEltronModbusTcpConnection::hotWaterEnergyChanged, thing, [thing](quint32 hotWaterEnergy) { // see comment in heatingEnergyChanged quint32 correctedEnergy = (hotWaterEnergy >> 16) + (hotWaterEnergy & 0xFFFF) * 1000; @@ -167,7 +167,7 @@ void IntegrationPluginStiebelEltron::setupThing(ThingSetupInfo *info) { thing->setStateValue(stiebelEltronHotWaterEnergyStateTypeId, correctedEnergy); }); - connect(connection, &StiebelEltronModbusConnection::consumedEnergyHeatingChanged, thing, + connect(connection, &StiebelEltronModbusTcpConnection::consumedEnergyHeatingChanged, thing, [thing](quint32 consumedEnergyHeatingEnergy) { // see comment in heatingEnergyChanged quint32 correctedEnergy = @@ -177,7 +177,7 @@ void IntegrationPluginStiebelEltron::setupThing(ThingSetupInfo *info) { thing->setStateValue(stiebelEltronConsumedEnergyHeatingStateTypeId, correctedEnergy); }); - connect(connection, &StiebelEltronModbusConnection::consumedEnergyHotWaterChanged, thing, + connect(connection, &StiebelEltronModbusTcpConnection::consumedEnergyHotWaterChanged, thing, [thing](quint32 consumedEnergyHotWaterEnergy) { // see comment in heatingEnergyChanged quint32 correctedEnergy = @@ -187,32 +187,32 @@ void IntegrationPluginStiebelEltron::setupThing(ThingSetupInfo *info) { thing->setStateValue(stiebelEltronConsumedEnergyHotWaterStateTypeId, correctedEnergy); }); - connect(connection, &StiebelEltronModbusConnection::operatingModeChanged, thing, - [thing](StiebelEltronModbusConnection::OperatingMode operatingMode) { + connect(connection, &StiebelEltronModbusTcpConnection::operatingModeChanged, thing, + [thing](StiebelEltronModbusTcpConnection::OperatingMode operatingMode) { qCDebug(dcStiebelEltron()) << thing << "operating mode changed " << operatingMode; switch (operatingMode) { - case StiebelEltronModbusConnection::OperatingModeEmergency: + case StiebelEltronModbusTcpConnection::OperatingModeEmergency: thing->setStateValue(stiebelEltronOperatingModeStateTypeId, "Emergency"); break; - case StiebelEltronModbusConnection::OperatingModeStandby: + case StiebelEltronModbusTcpConnection::OperatingModeStandby: thing->setStateValue(stiebelEltronOperatingModeStateTypeId, "Standby"); break; - case StiebelEltronModbusConnection::OperatingModeProgram: + case StiebelEltronModbusTcpConnection::OperatingModeProgram: thing->setStateValue(stiebelEltronOperatingModeStateTypeId, "Program"); break; - case StiebelEltronModbusConnection::OperatingModeComfort: + case StiebelEltronModbusTcpConnection::OperatingModeComfort: thing->setStateValue(stiebelEltronOperatingModeStateTypeId, "Comfort"); break; - case StiebelEltronModbusConnection::OperatingModeEco: + case StiebelEltronModbusTcpConnection::OperatingModeEco: thing->setStateValue(stiebelEltronOperatingModeStateTypeId, "Eco"); break; - case StiebelEltronModbusConnection::OperatingModeHotWater: + case StiebelEltronModbusTcpConnection::OperatingModeHotWater: thing->setStateValue(stiebelEltronOperatingModeStateTypeId, "Hot water"); break; } }); - connect(connection, &StiebelEltronModbusConnection::systemStatusChanged, thing, + connect(connection, &StiebelEltronModbusTcpConnection::systemStatusChanged, thing, [thing](uint16_t systemStatus) { qCDebug(dcStiebelEltron()) << thing << "System status changed " << systemStatus; thing->setStateValue(stiebelEltronPumpOneStateTypeId, systemStatus & (1 << 0)); @@ -229,25 +229,25 @@ void IntegrationPluginStiebelEltron::setupThing(ThingSetupInfo *info) { thing->setStateValue(stiebelEltronSilentMode2StateTypeId, systemStatus & (1 << 11)); }); - connect(connection, &StiebelEltronModbusConnection::sgReadyStateChanged, thing, - [thing](StiebelEltronModbusConnection::SmartGridState smartGridState) { + connect(connection, &StiebelEltronModbusTcpConnection::sgReadyStateChanged, thing, + [thing](StiebelEltronModbusTcpConnection::SmartGridState smartGridState) { qCDebug(dcStiebelEltron()) << thing << "SG Ready mode changed" << smartGridState; switch (smartGridState) { - case StiebelEltronModbusConnection::SmartGridStateModeOne: + case StiebelEltronModbusTcpConnection::SmartGridStateModeOne: thing->setStateValue(stiebelEltronSgReadyModeStateTypeId, "Off"); break; - case StiebelEltronModbusConnection::SmartGridStateModeTwo: + case StiebelEltronModbusTcpConnection::SmartGridStateModeTwo: thing->setStateValue(stiebelEltronSgReadyModeStateTypeId, "Low"); break; - case StiebelEltronModbusConnection::SmartGridStateModeThree: + case StiebelEltronModbusTcpConnection::SmartGridStateModeThree: thing->setStateValue(stiebelEltronSgReadyModeStateTypeId, "Standard"); break; - case StiebelEltronModbusConnection::SmartGridStateModeFour: + case StiebelEltronModbusTcpConnection::SmartGridStateModeFour: thing->setStateValue(stiebelEltronSgReadyModeStateTypeId, "High"); break; } }); - connect(connection, &StiebelEltronModbusConnection::sgReadyActiveChanged, thing, + connect(connection, &StiebelEltronModbusTcpConnection::sgReadyActiveChanged, thing, [thing](bool smartGridActive) { qCDebug(dcStiebelEltron()) << thing << "SG Ready activation changed" << smartGridActive; thing->setStateValue(stiebelEltronSgReadyActiveStateTypeId, smartGridActive); @@ -266,7 +266,7 @@ void IntegrationPluginStiebelEltron::postSetupThing(Thing *thing) { qCDebug(dcStiebelEltron()) << "Starting plugin timer..."; m_pluginTimer = hardwareManager()->pluginTimerManager()->registerTimer(10); connect(m_pluginTimer, &PluginTimer::timeout, this, [this] { - foreach (StiebelEltronModbusConnection *connection, m_connections) { + foreach (StiebelEltronModbusTcpConnection *connection, m_connections) { if (connection->connected()) { connection->update(); } @@ -291,7 +291,7 @@ void IntegrationPluginStiebelEltron::thingRemoved(Thing *thing) { void IntegrationPluginStiebelEltron::executeAction(ThingActionInfo *info) { Thing *thing = info->thing(); - StiebelEltronModbusConnection *connection = m_connections.value(thing); + StiebelEltronModbusTcpConnection *connection = m_connections.value(thing); if (!connection->connected()) { qCWarning(dcStiebelEltron()) << "Could not execute action. The modbus connection is currently " @@ -345,15 +345,15 @@ void IntegrationPluginStiebelEltron::executeAction(ThingActionInfo *info) { info->action().paramValue(stiebelEltronSgReadyModeActionSgReadyModeParamTypeId).toString(); qCDebug(dcStiebelEltron()) << "Execute action" << info->action().actionTypeId().toString() << info->action().params(); - StiebelEltronModbusConnection::SmartGridState sgReadyState; + StiebelEltronModbusTcpConnection::SmartGridState sgReadyState; if (sgReadyModeString == "Off") { - sgReadyState = StiebelEltronModbusConnection::SmartGridStateModeOne; + sgReadyState = StiebelEltronModbusTcpConnection::SmartGridStateModeOne; } else if (sgReadyModeString == "Low") { - sgReadyState = StiebelEltronModbusConnection::SmartGridStateModeTwo; + sgReadyState = StiebelEltronModbusTcpConnection::SmartGridStateModeTwo; } else if (sgReadyModeString == "Standard") { - sgReadyState = StiebelEltronModbusConnection::SmartGridStateModeThree; + sgReadyState = StiebelEltronModbusTcpConnection::SmartGridStateModeThree; } else if (sgReadyModeString == "High") { - sgReadyState = StiebelEltronModbusConnection::SmartGridStateModeFour; + sgReadyState = StiebelEltronModbusTcpConnection::SmartGridStateModeFour; } else { qCWarning(dcStiebelEltron()) << "Failed to set SG Ready mode. An unknown SG Ready mode was passed: " << sgReadyModeString; diff --git a/stiebeleltron/integrationpluginstiebeleltron.h b/stiebeleltron/integrationpluginstiebeleltron.h index 769b641..260253d 100644 --- a/stiebeleltron/integrationpluginstiebeleltron.h +++ b/stiebeleltron/integrationpluginstiebeleltron.h @@ -31,9 +31,10 @@ #ifndef INTEGRATIONPLUGINSTIEBELELTRON_H #define INTEGRATIONPLUGINSTIEBELELTRON_H -#include "plugintimer.h" -#include "integrations/integrationplugin.h" -#include "stiebeleltronmodbusconnection.h" +#include +#include + +#include "stiebeleltronmodbustcpconnection.h" class IntegrationPluginStiebelEltron: public IntegrationPlugin { @@ -55,7 +56,7 @@ public: private: PluginTimer *m_pluginTimer = nullptr; - QHash m_connections; + QHash m_connections; }; diff --git a/stiebeleltron/stiebel-eltron-registers.json b/stiebeleltron/stiebel-eltron-registers.json index ba53e04..771e95b 100644 --- a/stiebeleltron/stiebel-eltron-registers.json +++ b/stiebeleltron/stiebel-eltron-registers.json @@ -1,4 +1,5 @@ { + "className": "StiebelEltron", "protocol": "TCP", "endianness": "BigEndian", "enums": [ @@ -319,5 +320,6 @@ "defaultValue": "SmartGridStateModeThree", "access": "RW" } - ] + ], + "blocks": [ ] } diff --git a/stiebeleltron/stiebeleltron.pro b/stiebeleltron/stiebeleltron.pro index 78483b0..95e34d7 100644 --- a/stiebeleltron/stiebeleltron.pro +++ b/stiebeleltron/stiebeleltron.pro @@ -1,16 +1,13 @@ include(../plugins.pri) -QT += network serialbus +# Generate modbus connection +MODBUS_CONNECTIONS += stiebel-eltron-registers.json +#MODBUS_TOOLS_CONFIG += VERBOSE +include(../modbus.pri) HEADERS += \ - integrationpluginstiebeleltron.h \ - stiebeleltronmodbusconnection.h \ - ../modbus/modbustcpmaster.h \ - ../modbus/modbusdatautils.h + integrationpluginstiebeleltron.h SOURCES += \ - integrationpluginstiebeleltron.cpp \ - stiebeleltronmodbusconnection.cpp \ - ../modbus/modbustcpmaster.cpp \ - ../modbus/modbusdatautils.cpp + integrationpluginstiebeleltron.cpp diff --git a/stiebeleltron/stiebeleltronmodbusconnection.cpp b/stiebeleltron/stiebeleltronmodbusconnection.cpp deleted file mode 100644 index 9b518b6..0000000 --- a/stiebeleltron/stiebeleltronmodbusconnection.cpp +++ /dev/null @@ -1,1051 +0,0 @@ -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* -* Copyright 2013 - 2022, nymea GmbH -* Contact: contact@nymea.io -* -* This fileDescriptor is part of nymea. -* This project including source code and documentation is protected by -* copyright law, and remains the property of nymea GmbH. All rights, including -* reproduction, publication, editing and translation, are reserved. The use of -* this project is subject to the terms of a license agreement to be concluded -* with nymea GmbH in accordance with the terms of use of nymea GmbH, available -* under https://nymea.io/license -* -* GNU Lesser General Public License Usage -* Alternatively, this project may be redistributed and/or modified under the -* terms of the GNU Lesser General Public License as published by the Free -* Software Foundation; version 3. This project is distributed in the hope that -* it will be useful, but WITHOUT ANY WARRANTY; without even the implied -* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -* Lesser General Public License for more details. -* -* You should have received a copy of the GNU Lesser General Public License -* along with this project. If not, see . -* -* For any further details and any questions please contact us under -* contact@nymea.io or see our FAQ/Licensing Information on -* https://nymea.io/license/faq -* -* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - - -#include "stiebeleltronmodbusconnection.h" -#include "loggingcategories.h" - -NYMEA_LOGGING_CATEGORY(dcStiebelEltronModbusConnection, "StiebelEltronModbusConnection") - -StiebelEltronModbusConnection::StiebelEltronModbusConnection(const QHostAddress &hostAddress, uint port, quint16 slaveId, QObject *parent) : - ModbusTCPMaster(hostAddress, port, parent), - m_slaveId(slaveId) -{ - -} - -float StiebelEltronModbusConnection::outdoorTemperature() const -{ - return m_outdoorTemperature; -} - -float StiebelEltronModbusConnection::flowTemperature() const -{ - return m_flowTemperature; -} - -float StiebelEltronModbusConnection::hotWaterTemperature() const -{ - return m_hotWaterTemperature; -} - -float StiebelEltronModbusConnection::hotGasTemperature1() const -{ - return m_hotGasTemperature1; -} - -float StiebelEltronModbusConnection::hotGasTemperature2() const -{ - return m_hotGasTemperature2; -} - -float StiebelEltronModbusConnection::SourceTemperature() const -{ - return m_SourceTemperature; -} - -float StiebelEltronModbusConnection::roomTemperatureFEK() const -{ - return m_roomTemperatureFEK; -} - -float StiebelEltronModbusConnection::returnTemperature() const -{ - return m_returnTemperature; -} - -float StiebelEltronModbusConnection::solarCollectorTemperature() const -{ - return m_solarCollectorTemperature; -} - -float StiebelEltronModbusConnection::solarStorageTankTemperature() const -{ - return m_solarStorageTankTemperature; -} - -float StiebelEltronModbusConnection::storageTankTemperature() const -{ - return m_storageTankTemperature; -} - -float StiebelEltronModbusConnection::externalHeatSourceTemperature() const -{ - return m_externalHeatSourceTemperature; -} - -quint32 StiebelEltronModbusConnection::heatingEnergy() const -{ - return m_heatingEnergy; -} - -quint32 StiebelEltronModbusConnection::hotWaterEnergy() const -{ - return m_hotWaterEnergy; -} - -quint32 StiebelEltronModbusConnection::consumedEnergyHeating() const -{ - return m_consumedEnergyHeating; -} - -quint32 StiebelEltronModbusConnection::consumedEnergyHotWater() const -{ - return m_consumedEnergyHotWater; -} - -StiebelEltronModbusConnection::OperatingMode StiebelEltronModbusConnection::operatingMode() const -{ - return m_operatingMode; -} - -quint16 StiebelEltronModbusConnection::systemStatus() const -{ - return m_systemStatus; -} - -quint16 StiebelEltronModbusConnection::sgReadyStateRO() const -{ - return m_sgReadyStateRO; -} - -quint16 StiebelEltronModbusConnection::sgReadyActive() const -{ - return m_sgReadyActive; -} - -QModbusReply *StiebelEltronModbusConnection::setSgReadyActive(quint16 sgReadyActive) -{ - QVector values = ModbusDataUtils::convertFromUInt16(sgReadyActive); - qCDebug(dcStiebelEltronModbusConnection()) << "--> Write \"SG ready active\" register:" << 4000 << "size:" << 1 << values; - QModbusDataUnit request = QModbusDataUnit(QModbusDataUnit::RegisterType::HoldingRegisters, 4000, values.count()); - request.setValues(values); - return sendWriteRequest(request, m_slaveId); -} - -StiebelEltronModbusConnection::SmartGridState StiebelEltronModbusConnection::sgReadyState() const -{ - return m_sgReadyState; -} - -QModbusReply *StiebelEltronModbusConnection::setSgReadyState(SmartGridState sgReadyState) -{ - QVector values = ModbusDataUtils::convertFromUInt32(static_cast(sgReadyState), ModbusDataUtils::ByteOrderBigEndian); - qCDebug(dcStiebelEltronModbusConnection()) << "--> Write \"SG Ready mode\" register:" << 4001 << "size:" << 2 << values; - QModbusDataUnit request = QModbusDataUnit(QModbusDataUnit::RegisterType::HoldingRegisters, 4001, values.count()); - request.setValues(values); - return sendWriteRequest(request, m_slaveId); -} - -void StiebelEltronModbusConnection::initialize() -{ - // No init registers defined. Nothing to be done and we are finished. - emit initializationFinished(); -} - -void StiebelEltronModbusConnection::update() -{ - updateOutdoorTemperature(); - updateFlowTemperature(); - updateHotWaterTemperature(); - updateHotGasTemperature1(); - updateHotGasTemperature2(); - updateSourceTemperature(); - updateRoomTemperatureFEK(); - updateReturnTemperature(); - updateSolarCollectorTemperature(); - updateSolarStorageTankTemperature(); - updateStorageTankTemperature(); - updateExternalHeatSourceTemperature(); - updateHeatingEnergy(); - updateHotWaterEnergy(); - updateConsumedEnergyHeating(); - updateConsumedEnergyHotWater(); - updateOperatingMode(); - updateSystemStatus(); - updateSgReadyStateRO(); - updateSgReadyActive(); - updateSgReadyState(); -} - -void StiebelEltronModbusConnection::updateOutdoorTemperature() -{ - // Update registers from Outdoor temperature - qCDebug(dcStiebelEltronModbusConnection()) << "--> Read \"Outdoor temperature\" register:" << 506 << "size:" << 1; - QModbusReply *reply = readOutdoorTemperature(); - if (reply) { - if (!reply->isFinished()) { - connect(reply, &QModbusReply::finished, reply, &QModbusReply::deleteLater); - connect(reply, &QModbusReply::finished, this, [this, reply](){ - if (reply->error() == QModbusDevice::NoError) { - const QModbusDataUnit unit = reply->result(); - const QVector values = unit.values(); - qCDebug(dcStiebelEltronModbusConnection()) << "<-- Response from \"Outdoor temperature\" register" << 506 << "size:" << 1 << values; - float receivedOutdoorTemperature = ModbusDataUtils::convertToInt16(values) * 1.0 * pow(10, -1); - if (m_outdoorTemperature != receivedOutdoorTemperature) { - m_outdoorTemperature = receivedOutdoorTemperature; - emit outdoorTemperatureChanged(m_outdoorTemperature); - } - } - }); - - connect(reply, &QModbusReply::errorOccurred, this, [this, reply] (QModbusDevice::Error error){ - qCWarning(dcStiebelEltronModbusConnection()) << "Modbus reply error occurred while updating \"Outdoor temperature\" registers from" << hostAddress().toString() << error << reply->errorString(); - emit reply->finished(); // To make sure it will be deleted - }); - } else { - delete reply; // Broadcast reply returns immediatly - } - } else { - qCWarning(dcStiebelEltronModbusConnection()) << "Error occurred while reading \"Outdoor temperature\" registers from" << hostAddress().toString() << errorString(); - } -} - -void StiebelEltronModbusConnection::updateFlowTemperature() -{ - // Update registers from Flow temperature - qCDebug(dcStiebelEltronModbusConnection()) << "--> Read \"Flow temperature\" register:" << 514 << "size:" << 1; - QModbusReply *reply = readFlowTemperature(); - if (reply) { - if (!reply->isFinished()) { - connect(reply, &QModbusReply::finished, reply, &QModbusReply::deleteLater); - connect(reply, &QModbusReply::finished, this, [this, reply](){ - if (reply->error() == QModbusDevice::NoError) { - const QModbusDataUnit unit = reply->result(); - const QVector values = unit.values(); - qCDebug(dcStiebelEltronModbusConnection()) << "<-- Response from \"Flow temperature\" register" << 514 << "size:" << 1 << values; - float receivedFlowTemperature = ModbusDataUtils::convertToInt16(values) * 1.0 * pow(10, -1); - if (m_flowTemperature != receivedFlowTemperature) { - m_flowTemperature = receivedFlowTemperature; - emit flowTemperatureChanged(m_flowTemperature); - } - } - }); - - connect(reply, &QModbusReply::errorOccurred, this, [this, reply] (QModbusDevice::Error error){ - qCWarning(dcStiebelEltronModbusConnection()) << "Modbus reply error occurred while updating \"Flow temperature\" registers from" << hostAddress().toString() << error << reply->errorString(); - emit reply->finished(); // To make sure it will be deleted - }); - } else { - delete reply; // Broadcast reply returns immediatly - } - } else { - qCWarning(dcStiebelEltronModbusConnection()) << "Error occurred while reading \"Flow temperature\" registers from" << hostAddress().toString() << errorString(); - } -} - -void StiebelEltronModbusConnection::updateHotWaterTemperature() -{ - // Update registers from Hot water temperature - qCDebug(dcStiebelEltronModbusConnection()) << "--> Read \"Hot water temperature\" register:" << 521 << "size:" << 1; - QModbusReply *reply = readHotWaterTemperature(); - if (reply) { - if (!reply->isFinished()) { - connect(reply, &QModbusReply::finished, reply, &QModbusReply::deleteLater); - connect(reply, &QModbusReply::finished, this, [this, reply](){ - if (reply->error() == QModbusDevice::NoError) { - const QModbusDataUnit unit = reply->result(); - const QVector values = unit.values(); - qCDebug(dcStiebelEltronModbusConnection()) << "<-- Response from \"Hot water temperature\" register" << 521 << "size:" << 1 << values; - float receivedHotWaterTemperature = ModbusDataUtils::convertToUInt16(values) * 1.0 * pow(10, -1); - if (m_hotWaterTemperature != receivedHotWaterTemperature) { - m_hotWaterTemperature = receivedHotWaterTemperature; - emit hotWaterTemperatureChanged(m_hotWaterTemperature); - } - } - }); - - connect(reply, &QModbusReply::errorOccurred, this, [this, reply] (QModbusDevice::Error error){ - qCWarning(dcStiebelEltronModbusConnection()) << "Modbus reply error occurred while updating \"Hot water temperature\" registers from" << hostAddress().toString() << error << reply->errorString(); - emit reply->finished(); // To make sure it will be deleted - }); - } else { - delete reply; // Broadcast reply returns immediatly - } - } else { - qCWarning(dcStiebelEltronModbusConnection()) << "Error occurred while reading \"Hot water temperature\" registers from" << hostAddress().toString() << errorString(); - } -} - -void StiebelEltronModbusConnection::updateHotGasTemperature1() -{ - // Update registers from Hot gas temperature HP 1 - qCDebug(dcStiebelEltronModbusConnection()) << "--> Read \"Hot gas temperature HP 1\" register:" << 543 << "size:" << 1; - QModbusReply *reply = readHotGasTemperature1(); - if (reply) { - if (!reply->isFinished()) { - connect(reply, &QModbusReply::finished, reply, &QModbusReply::deleteLater); - connect(reply, &QModbusReply::finished, this, [this, reply](){ - if (reply->error() == QModbusDevice::NoError) { - const QModbusDataUnit unit = reply->result(); - const QVector values = unit.values(); - qCDebug(dcStiebelEltronModbusConnection()) << "<-- Response from \"Hot gas temperature HP 1\" register" << 543 << "size:" << 1 << values; - float receivedHotGasTemperature1 = ModbusDataUtils::convertToUInt16(values) * 1.0 * pow(10, -1); - if (m_hotGasTemperature1 != receivedHotGasTemperature1) { - m_hotGasTemperature1 = receivedHotGasTemperature1; - emit hotGasTemperature1Changed(m_hotGasTemperature1); - } - } - }); - - connect(reply, &QModbusReply::errorOccurred, this, [this, reply] (QModbusDevice::Error error){ - qCWarning(dcStiebelEltronModbusConnection()) << "Modbus reply error occurred while updating \"Hot gas temperature HP 1\" registers from" << hostAddress().toString() << error << reply->errorString(); - emit reply->finished(); // To make sure it will be deleted - }); - } else { - delete reply; // Broadcast reply returns immediatly - } - } else { - qCWarning(dcStiebelEltronModbusConnection()) << "Error occurred while reading \"Hot gas temperature HP 1\" registers from" << hostAddress().toString() << errorString(); - } -} - -void StiebelEltronModbusConnection::updateHotGasTemperature2() -{ - // Update registers from Hot gas temperature HP 2 - qCDebug(dcStiebelEltronModbusConnection()) << "--> Read \"Hot gas temperature HP 2\" register:" << 550 << "size:" << 1; - QModbusReply *reply = readHotGasTemperature2(); - if (reply) { - if (!reply->isFinished()) { - connect(reply, &QModbusReply::finished, reply, &QModbusReply::deleteLater); - connect(reply, &QModbusReply::finished, this, [this, reply](){ - if (reply->error() == QModbusDevice::NoError) { - const QModbusDataUnit unit = reply->result(); - const QVector values = unit.values(); - qCDebug(dcStiebelEltronModbusConnection()) << "<-- Response from \"Hot gas temperature HP 2\" register" << 550 << "size:" << 1 << values; - float receivedHotGasTemperature2 = ModbusDataUtils::convertToUInt16(values) * 1.0 * pow(10, -1); - if (m_hotGasTemperature2 != receivedHotGasTemperature2) { - m_hotGasTemperature2 = receivedHotGasTemperature2; - emit hotGasTemperature2Changed(m_hotGasTemperature2); - } - } - }); - - connect(reply, &QModbusReply::errorOccurred, this, [this, reply] (QModbusDevice::Error error){ - qCWarning(dcStiebelEltronModbusConnection()) << "Modbus reply error occurred while updating \"Hot gas temperature HP 2\" registers from" << hostAddress().toString() << error << reply->errorString(); - emit reply->finished(); // To make sure it will be deleted - }); - } else { - delete reply; // Broadcast reply returns immediatly - } - } else { - qCWarning(dcStiebelEltronModbusConnection()) << "Error occurred while reading \"Hot gas temperature HP 2\" registers from" << hostAddress().toString() << errorString(); - } -} - -void StiebelEltronModbusConnection::updateSourceTemperature() -{ - // Update registers from Source temperature - qCDebug(dcStiebelEltronModbusConnection()) << "--> Read \"Source temperature\" register:" << 562 << "size:" << 1; - QModbusReply *reply = readSourceTemperature(); - if (reply) { - if (!reply->isFinished()) { - connect(reply, &QModbusReply::finished, reply, &QModbusReply::deleteLater); - connect(reply, &QModbusReply::finished, this, [this, reply](){ - if (reply->error() == QModbusDevice::NoError) { - const QModbusDataUnit unit = reply->result(); - const QVector values = unit.values(); - qCDebug(dcStiebelEltronModbusConnection()) << "<-- Response from \"Source temperature\" register" << 562 << "size:" << 1 << values; - float receivedSourceTemperature = ModbusDataUtils::convertToUInt16(values) * 1.0 * pow(10, -1); - if (m_SourceTemperature != receivedSourceTemperature) { - m_SourceTemperature = receivedSourceTemperature; - emit SourceTemperatureChanged(m_SourceTemperature); - } - } - }); - - connect(reply, &QModbusReply::errorOccurred, this, [this, reply] (QModbusDevice::Error error){ - qCWarning(dcStiebelEltronModbusConnection()) << "Modbus reply error occurred while updating \"Source temperature\" registers from" << hostAddress().toString() << error << reply->errorString(); - emit reply->finished(); // To make sure it will be deleted - }); - } else { - delete reply; // Broadcast reply returns immediatly - } - } else { - qCWarning(dcStiebelEltronModbusConnection()) << "Error occurred while reading \"Source temperature\" registers from" << hostAddress().toString() << errorString(); - } -} - -void StiebelEltronModbusConnection::updateRoomTemperatureFEK() -{ - // Update registers from Room temperature FEK - qCDebug(dcStiebelEltronModbusConnection()) << "--> Read \"Room temperature FEK\" register:" << 502 << "size:" << 1; - QModbusReply *reply = readRoomTemperatureFEK(); - if (reply) { - if (!reply->isFinished()) { - connect(reply, &QModbusReply::finished, reply, &QModbusReply::deleteLater); - connect(reply, &QModbusReply::finished, this, [this, reply](){ - if (reply->error() == QModbusDevice::NoError) { - const QModbusDataUnit unit = reply->result(); - const QVector values = unit.values(); - qCDebug(dcStiebelEltronModbusConnection()) << "<-- Response from \"Room temperature FEK\" register" << 502 << "size:" << 1 << values; - float receivedRoomTemperatureFEK = ModbusDataUtils::convertToUInt16(values) * 1.0 * pow(10, -1); - if (m_roomTemperatureFEK != receivedRoomTemperatureFEK) { - m_roomTemperatureFEK = receivedRoomTemperatureFEK; - emit roomTemperatureFEKChanged(m_roomTemperatureFEK); - } - } - }); - - connect(reply, &QModbusReply::errorOccurred, this, [this, reply] (QModbusDevice::Error error){ - qCWarning(dcStiebelEltronModbusConnection()) << "Modbus reply error occurred while updating \"Room temperature FEK\" registers from" << hostAddress().toString() << error << reply->errorString(); - emit reply->finished(); // To make sure it will be deleted - }); - } else { - delete reply; // Broadcast reply returns immediatly - } - } else { - qCWarning(dcStiebelEltronModbusConnection()) << "Error occurred while reading \"Room temperature FEK\" registers from" << hostAddress().toString() << errorString(); - } -} - -void StiebelEltronModbusConnection::updateReturnTemperature() -{ - // Update registers from Return temperature - qCDebug(dcStiebelEltronModbusConnection()) << "--> Read \"Return temperature\" register:" << 515 << "size:" << 1; - QModbusReply *reply = readReturnTemperature(); - if (reply) { - if (!reply->isFinished()) { - connect(reply, &QModbusReply::finished, reply, &QModbusReply::deleteLater); - connect(reply, &QModbusReply::finished, this, [this, reply](){ - if (reply->error() == QModbusDevice::NoError) { - const QModbusDataUnit unit = reply->result(); - const QVector values = unit.values(); - qCDebug(dcStiebelEltronModbusConnection()) << "<-- Response from \"Return temperature\" register" << 515 << "size:" << 1 << values; - float receivedReturnTemperature = ModbusDataUtils::convertToInt16(values) * 1.0 * pow(10, -1); - if (m_returnTemperature != receivedReturnTemperature) { - m_returnTemperature = receivedReturnTemperature; - emit returnTemperatureChanged(m_returnTemperature); - } - } - }); - - connect(reply, &QModbusReply::errorOccurred, this, [this, reply] (QModbusDevice::Error error){ - qCWarning(dcStiebelEltronModbusConnection()) << "Modbus reply error occurred while updating \"Return temperature\" registers from" << hostAddress().toString() << error << reply->errorString(); - emit reply->finished(); // To make sure it will be deleted - }); - } else { - delete reply; // Broadcast reply returns immediatly - } - } else { - qCWarning(dcStiebelEltronModbusConnection()) << "Error occurred while reading \"Return temperature\" registers from" << hostAddress().toString() << errorString(); - } -} - -void StiebelEltronModbusConnection::updateSolarCollectorTemperature() -{ - // Update registers from Solar collector temperature - qCDebug(dcStiebelEltronModbusConnection()) << "--> Read \"Solar collector temperature\" register:" << 527 << "size:" << 1; - QModbusReply *reply = readSolarCollectorTemperature(); - if (reply) { - if (!reply->isFinished()) { - connect(reply, &QModbusReply::finished, reply, &QModbusReply::deleteLater); - connect(reply, &QModbusReply::finished, this, [this, reply](){ - if (reply->error() == QModbusDevice::NoError) { - const QModbusDataUnit unit = reply->result(); - const QVector values = unit.values(); - qCDebug(dcStiebelEltronModbusConnection()) << "<-- Response from \"Solar collector temperature\" register" << 527 << "size:" << 1 << values; - float receivedSolarCollectorTemperature = ModbusDataUtils::convertToUInt16(values) * 1.0 * pow(10, -1); - if (m_solarCollectorTemperature != receivedSolarCollectorTemperature) { - m_solarCollectorTemperature = receivedSolarCollectorTemperature; - emit solarCollectorTemperatureChanged(m_solarCollectorTemperature); - } - } - }); - - connect(reply, &QModbusReply::errorOccurred, this, [this, reply] (QModbusDevice::Error error){ - qCWarning(dcStiebelEltronModbusConnection()) << "Modbus reply error occurred while updating \"Solar collector temperature\" registers from" << hostAddress().toString() << error << reply->errorString(); - emit reply->finished(); // To make sure it will be deleted - }); - } else { - delete reply; // Broadcast reply returns immediatly - } - } else { - qCWarning(dcStiebelEltronModbusConnection()) << "Error occurred while reading \"Solar collector temperature\" registers from" << hostAddress().toString() << errorString(); - } -} - -void StiebelEltronModbusConnection::updateSolarStorageTankTemperature() -{ - // Update registers from Solar storage tank temperature - qCDebug(dcStiebelEltronModbusConnection()) << "--> Read \"Solar storage tank temperature\" register:" << 528 << "size:" << 1; - QModbusReply *reply = readSolarStorageTankTemperature(); - if (reply) { - if (!reply->isFinished()) { - connect(reply, &QModbusReply::finished, reply, &QModbusReply::deleteLater); - connect(reply, &QModbusReply::finished, this, [this, reply](){ - if (reply->error() == QModbusDevice::NoError) { - const QModbusDataUnit unit = reply->result(); - const QVector values = unit.values(); - qCDebug(dcStiebelEltronModbusConnection()) << "<-- Response from \"Solar storage tank temperature\" register" << 528 << "size:" << 1 << values; - float receivedSolarStorageTankTemperature = ModbusDataUtils::convertToUInt16(values) * 1.0 * pow(10, -1); - if (m_solarStorageTankTemperature != receivedSolarStorageTankTemperature) { - m_solarStorageTankTemperature = receivedSolarStorageTankTemperature; - emit solarStorageTankTemperatureChanged(m_solarStorageTankTemperature); - } - } - }); - - connect(reply, &QModbusReply::errorOccurred, this, [this, reply] (QModbusDevice::Error error){ - qCWarning(dcStiebelEltronModbusConnection()) << "Modbus reply error occurred while updating \"Solar storage tank temperature\" registers from" << hostAddress().toString() << error << reply->errorString(); - emit reply->finished(); // To make sure it will be deleted - }); - } else { - delete reply; // Broadcast reply returns immediatly - } - } else { - qCWarning(dcStiebelEltronModbusConnection()) << "Error occurred while reading \"Solar storage tank temperature\" registers from" << hostAddress().toString() << errorString(); - } -} - -void StiebelEltronModbusConnection::updateStorageTankTemperature() -{ - // Update registers from Storage tank temperature - qCDebug(dcStiebelEltronModbusConnection()) << "--> Read \"Storage tank temperature\" register:" << 517 << "size:" << 1; - QModbusReply *reply = readStorageTankTemperature(); - if (reply) { - if (!reply->isFinished()) { - connect(reply, &QModbusReply::finished, reply, &QModbusReply::deleteLater); - connect(reply, &QModbusReply::finished, this, [this, reply](){ - if (reply->error() == QModbusDevice::NoError) { - const QModbusDataUnit unit = reply->result(); - const QVector values = unit.values(); - qCDebug(dcStiebelEltronModbusConnection()) << "<-- Response from \"Storage tank temperature\" register" << 517 << "size:" << 1 << values; - float receivedStorageTankTemperature = ModbusDataUtils::convertToUInt16(values) * 1.0 * pow(10, -1); - if (m_storageTankTemperature != receivedStorageTankTemperature) { - m_storageTankTemperature = receivedStorageTankTemperature; - emit storageTankTemperatureChanged(m_storageTankTemperature); - } - } - }); - - connect(reply, &QModbusReply::errorOccurred, this, [this, reply] (QModbusDevice::Error error){ - qCWarning(dcStiebelEltronModbusConnection()) << "Modbus reply error occurred while updating \"Storage tank temperature\" registers from" << hostAddress().toString() << error << reply->errorString(); - emit reply->finished(); // To make sure it will be deleted - }); - } else { - delete reply; // Broadcast reply returns immediatly - } - } else { - qCWarning(dcStiebelEltronModbusConnection()) << "Error occurred while reading \"Storage tank temperature\" registers from" << hostAddress().toString() << errorString(); - } -} - -void StiebelEltronModbusConnection::updateExternalHeatSourceTemperature() -{ - // Update registers from External heat source temperature - qCDebug(dcStiebelEltronModbusConnection()) << "--> Read \"External heat source temperature\" register:" << 530 << "size:" << 1; - QModbusReply *reply = readExternalHeatSourceTemperature(); - if (reply) { - if (!reply->isFinished()) { - connect(reply, &QModbusReply::finished, reply, &QModbusReply::deleteLater); - connect(reply, &QModbusReply::finished, this, [this, reply](){ - if (reply->error() == QModbusDevice::NoError) { - const QModbusDataUnit unit = reply->result(); - const QVector values = unit.values(); - qCDebug(dcStiebelEltronModbusConnection()) << "<-- Response from \"External heat source temperature\" register" << 530 << "size:" << 1 << values; - float receivedExternalHeatSourceTemperature = ModbusDataUtils::convertToUInt16(values) * 1.0 * pow(10, -1); - if (m_externalHeatSourceTemperature != receivedExternalHeatSourceTemperature) { - m_externalHeatSourceTemperature = receivedExternalHeatSourceTemperature; - emit externalHeatSourceTemperatureChanged(m_externalHeatSourceTemperature); - } - } - }); - - connect(reply, &QModbusReply::errorOccurred, this, [this, reply] (QModbusDevice::Error error){ - qCWarning(dcStiebelEltronModbusConnection()) << "Modbus reply error occurred while updating \"External heat source temperature\" registers from" << hostAddress().toString() << error << reply->errorString(); - emit reply->finished(); // To make sure it will be deleted - }); - } else { - delete reply; // Broadcast reply returns immediatly - } - } else { - qCWarning(dcStiebelEltronModbusConnection()) << "Error occurred while reading \"External heat source temperature\" registers from" << hostAddress().toString() << errorString(); - } -} - -void StiebelEltronModbusConnection::updateHeatingEnergy() -{ - // Update registers from Heating energy - qCDebug(dcStiebelEltronModbusConnection()) << "--> Read \"Heating energy\" register:" << 3501 << "size:" << 2; - QModbusReply *reply = readHeatingEnergy(); - if (reply) { - if (!reply->isFinished()) { - connect(reply, &QModbusReply::finished, reply, &QModbusReply::deleteLater); - connect(reply, &QModbusReply::finished, this, [this, reply](){ - if (reply->error() == QModbusDevice::NoError) { - const QModbusDataUnit unit = reply->result(); - const QVector values = unit.values(); - qCDebug(dcStiebelEltronModbusConnection()) << "<-- Response from \"Heating energy\" register" << 3501 << "size:" << 2 << values; - quint32 receivedHeatingEnergy = ModbusDataUtils::convertToUInt32(values, ModbusDataUtils::ByteOrderBigEndian); - if (m_heatingEnergy != receivedHeatingEnergy) { - m_heatingEnergy = receivedHeatingEnergy; - emit heatingEnergyChanged(m_heatingEnergy); - } - } - }); - - connect(reply, &QModbusReply::errorOccurred, this, [this, reply] (QModbusDevice::Error error){ - qCWarning(dcStiebelEltronModbusConnection()) << "Modbus reply error occurred while updating \"Heating energy\" registers from" << hostAddress().toString() << error << reply->errorString(); - emit reply->finished(); // To make sure it will be deleted - }); - } else { - delete reply; // Broadcast reply returns immediatly - } - } else { - qCWarning(dcStiebelEltronModbusConnection()) << "Error occurred while reading \"Heating energy\" registers from" << hostAddress().toString() << errorString(); - } -} - -void StiebelEltronModbusConnection::updateHotWaterEnergy() -{ - // Update registers from Hot water energy - qCDebug(dcStiebelEltronModbusConnection()) << "--> Read \"Hot water energy\" register:" << 3504 << "size:" << 2; - QModbusReply *reply = readHotWaterEnergy(); - if (reply) { - if (!reply->isFinished()) { - connect(reply, &QModbusReply::finished, reply, &QModbusReply::deleteLater); - connect(reply, &QModbusReply::finished, this, [this, reply](){ - if (reply->error() == QModbusDevice::NoError) { - const QModbusDataUnit unit = reply->result(); - const QVector values = unit.values(); - qCDebug(dcStiebelEltronModbusConnection()) << "<-- Response from \"Hot water energy\" register" << 3504 << "size:" << 2 << values; - quint32 receivedHotWaterEnergy = ModbusDataUtils::convertToUInt32(values, ModbusDataUtils::ByteOrderBigEndian); - if (m_hotWaterEnergy != receivedHotWaterEnergy) { - m_hotWaterEnergy = receivedHotWaterEnergy; - emit hotWaterEnergyChanged(m_hotWaterEnergy); - } - } - }); - - connect(reply, &QModbusReply::errorOccurred, this, [this, reply] (QModbusDevice::Error error){ - qCWarning(dcStiebelEltronModbusConnection()) << "Modbus reply error occurred while updating \"Hot water energy\" registers from" << hostAddress().toString() << error << reply->errorString(); - emit reply->finished(); // To make sure it will be deleted - }); - } else { - delete reply; // Broadcast reply returns immediatly - } - } else { - qCWarning(dcStiebelEltronModbusConnection()) << "Error occurred while reading \"Hot water energy\" registers from" << hostAddress().toString() << errorString(); - } -} - -void StiebelEltronModbusConnection::updateConsumedEnergyHeating() -{ - // Update registers from Consumed energy heating - qCDebug(dcStiebelEltronModbusConnection()) << "--> Read \"Consumed energy heating\" register:" << 3511 << "size:" << 2; - QModbusReply *reply = readConsumedEnergyHeating(); - if (reply) { - if (!reply->isFinished()) { - connect(reply, &QModbusReply::finished, reply, &QModbusReply::deleteLater); - connect(reply, &QModbusReply::finished, this, [this, reply](){ - if (reply->error() == QModbusDevice::NoError) { - const QModbusDataUnit unit = reply->result(); - const QVector values = unit.values(); - qCDebug(dcStiebelEltronModbusConnection()) << "<-- Response from \"Consumed energy heating\" register" << 3511 << "size:" << 2 << values; - quint32 receivedConsumedEnergyHeating = ModbusDataUtils::convertToUInt32(values, ModbusDataUtils::ByteOrderBigEndian); - if (m_consumedEnergyHeating != receivedConsumedEnergyHeating) { - m_consumedEnergyHeating = receivedConsumedEnergyHeating; - emit consumedEnergyHeatingChanged(m_consumedEnergyHeating); - } - } - }); - - connect(reply, &QModbusReply::errorOccurred, this, [this, reply] (QModbusDevice::Error error){ - qCWarning(dcStiebelEltronModbusConnection()) << "Modbus reply error occurred while updating \"Consumed energy heating\" registers from" << hostAddress().toString() << error << reply->errorString(); - emit reply->finished(); // To make sure it will be deleted - }); - } else { - delete reply; // Broadcast reply returns immediatly - } - } else { - qCWarning(dcStiebelEltronModbusConnection()) << "Error occurred while reading \"Consumed energy heating\" registers from" << hostAddress().toString() << errorString(); - } -} - -void StiebelEltronModbusConnection::updateConsumedEnergyHotWater() -{ - // Update registers from Consumed energy hot water - qCDebug(dcStiebelEltronModbusConnection()) << "--> Read \"Consumed energy hot water\" register:" << 3514 << "size:" << 2; - QModbusReply *reply = readConsumedEnergyHotWater(); - if (reply) { - if (!reply->isFinished()) { - connect(reply, &QModbusReply::finished, reply, &QModbusReply::deleteLater); - connect(reply, &QModbusReply::finished, this, [this, reply](){ - if (reply->error() == QModbusDevice::NoError) { - const QModbusDataUnit unit = reply->result(); - const QVector values = unit.values(); - qCDebug(dcStiebelEltronModbusConnection()) << "<-- Response from \"Consumed energy hot water\" register" << 3514 << "size:" << 2 << values; - quint32 receivedConsumedEnergyHotWater = ModbusDataUtils::convertToUInt32(values, ModbusDataUtils::ByteOrderBigEndian); - if (m_consumedEnergyHotWater != receivedConsumedEnergyHotWater) { - m_consumedEnergyHotWater = receivedConsumedEnergyHotWater; - emit consumedEnergyHotWaterChanged(m_consumedEnergyHotWater); - } - } - }); - - connect(reply, &QModbusReply::errorOccurred, this, [this, reply] (QModbusDevice::Error error){ - qCWarning(dcStiebelEltronModbusConnection()) << "Modbus reply error occurred while updating \"Consumed energy hot water\" registers from" << hostAddress().toString() << error << reply->errorString(); - emit reply->finished(); // To make sure it will be deleted - }); - } else { - delete reply; // Broadcast reply returns immediatly - } - } else { - qCWarning(dcStiebelEltronModbusConnection()) << "Error occurred while reading \"Consumed energy hot water\" registers from" << hostAddress().toString() << errorString(); - } -} - -void StiebelEltronModbusConnection::updateOperatingMode() -{ - // Update registers from Operating mode - qCDebug(dcStiebelEltronModbusConnection()) << "--> Read \"Operating mode\" register:" << 1500 << "size:" << 1; - QModbusReply *reply = readOperatingMode(); - if (reply) { - if (!reply->isFinished()) { - connect(reply, &QModbusReply::finished, reply, &QModbusReply::deleteLater); - connect(reply, &QModbusReply::finished, this, [this, reply](){ - if (reply->error() == QModbusDevice::NoError) { - const QModbusDataUnit unit = reply->result(); - const QVector values = unit.values(); - qCDebug(dcStiebelEltronModbusConnection()) << "<-- Response from \"Operating mode\" register" << 1500 << "size:" << 1 << values; - OperatingMode receivedOperatingMode = static_cast(ModbusDataUtils::convertToUInt16(values)); - if (m_operatingMode != receivedOperatingMode) { - m_operatingMode = receivedOperatingMode; - emit operatingModeChanged(m_operatingMode); - } - } - }); - - connect(reply, &QModbusReply::errorOccurred, this, [this, reply] (QModbusDevice::Error error){ - qCWarning(dcStiebelEltronModbusConnection()) << "Modbus reply error occurred while updating \"Operating mode\" registers from" << hostAddress().toString() << error << reply->errorString(); - emit reply->finished(); // To make sure it will be deleted - }); - } else { - delete reply; // Broadcast reply returns immediatly - } - } else { - qCWarning(dcStiebelEltronModbusConnection()) << "Error occurred while reading \"Operating mode\" registers from" << hostAddress().toString() << errorString(); - } -} - -void StiebelEltronModbusConnection::updateSystemStatus() -{ - // Update registers from System status - qCDebug(dcStiebelEltronModbusConnection()) << "--> Read \"System status\" register:" << 2500 << "size:" << 1; - QModbusReply *reply = readSystemStatus(); - if (reply) { - if (!reply->isFinished()) { - connect(reply, &QModbusReply::finished, reply, &QModbusReply::deleteLater); - connect(reply, &QModbusReply::finished, this, [this, reply](){ - if (reply->error() == QModbusDevice::NoError) { - const QModbusDataUnit unit = reply->result(); - const QVector values = unit.values(); - qCDebug(dcStiebelEltronModbusConnection()) << "<-- Response from \"System status\" register" << 2500 << "size:" << 1 << values; - quint16 receivedSystemStatus = ModbusDataUtils::convertToUInt16(values); - if (m_systemStatus != receivedSystemStatus) { - m_systemStatus = receivedSystemStatus; - emit systemStatusChanged(m_systemStatus); - } - } - }); - - connect(reply, &QModbusReply::errorOccurred, this, [this, reply] (QModbusDevice::Error error){ - qCWarning(dcStiebelEltronModbusConnection()) << "Modbus reply error occurred while updating \"System status\" registers from" << hostAddress().toString() << error << reply->errorString(); - emit reply->finished(); // To make sure it will be deleted - }); - } else { - delete reply; // Broadcast reply returns immediatly - } - } else { - qCWarning(dcStiebelEltronModbusConnection()) << "Error occurred while reading \"System status\" registers from" << hostAddress().toString() << errorString(); - } -} - -void StiebelEltronModbusConnection::updateSgReadyStateRO() -{ - // Update registers from Smart grid status - qCDebug(dcStiebelEltronModbusConnection()) << "--> Read \"Smart grid status\" register:" << 5000 << "size:" << 1; - QModbusReply *reply = readSgReadyStateRO(); - if (reply) { - if (!reply->isFinished()) { - connect(reply, &QModbusReply::finished, reply, &QModbusReply::deleteLater); - connect(reply, &QModbusReply::finished, this, [this, reply](){ - if (reply->error() == QModbusDevice::NoError) { - const QModbusDataUnit unit = reply->result(); - const QVector values = unit.values(); - qCDebug(dcStiebelEltronModbusConnection()) << "<-- Response from \"Smart grid status\" register" << 5000 << "size:" << 1 << values; - quint16 receivedSgReadyStateRO = ModbusDataUtils::convertToUInt16(values); - if (m_sgReadyStateRO != receivedSgReadyStateRO) { - m_sgReadyStateRO = receivedSgReadyStateRO; - emit sgReadyStateROChanged(m_sgReadyStateRO); - } - } - }); - - connect(reply, &QModbusReply::errorOccurred, this, [this, reply] (QModbusDevice::Error error){ - qCWarning(dcStiebelEltronModbusConnection()) << "Modbus reply error occurred while updating \"Smart grid status\" registers from" << hostAddress().toString() << error << reply->errorString(); - emit reply->finished(); // To make sure it will be deleted - }); - } else { - delete reply; // Broadcast reply returns immediatly - } - } else { - qCWarning(dcStiebelEltronModbusConnection()) << "Error occurred while reading \"Smart grid status\" registers from" << hostAddress().toString() << errorString(); - } -} - -void StiebelEltronModbusConnection::updateSgReadyActive() -{ - // Update registers from SG ready active - qCDebug(dcStiebelEltronModbusConnection()) << "--> Read \"SG ready active\" register:" << 4000 << "size:" << 1; - QModbusReply *reply = readSgReadyActive(); - if (reply) { - if (!reply->isFinished()) { - connect(reply, &QModbusReply::finished, reply, &QModbusReply::deleteLater); - connect(reply, &QModbusReply::finished, this, [this, reply](){ - if (reply->error() == QModbusDevice::NoError) { - const QModbusDataUnit unit = reply->result(); - const QVector values = unit.values(); - qCDebug(dcStiebelEltronModbusConnection()) << "<-- Response from \"SG ready active\" register" << 4000 << "size:" << 1 << values; - quint16 receivedSgReadyActive = ModbusDataUtils::convertToUInt16(values); - if (m_sgReadyActive != receivedSgReadyActive) { - m_sgReadyActive = receivedSgReadyActive; - emit sgReadyActiveChanged(m_sgReadyActive); - } - } - }); - - connect(reply, &QModbusReply::errorOccurred, this, [this, reply] (QModbusDevice::Error error){ - qCWarning(dcStiebelEltronModbusConnection()) << "Modbus reply error occurred while updating \"SG ready active\" registers from" << hostAddress().toString() << error << reply->errorString(); - emit reply->finished(); // To make sure it will be deleted - }); - } else { - delete reply; // Broadcast reply returns immediatly - } - } else { - qCWarning(dcStiebelEltronModbusConnection()) << "Error occurred while reading \"SG ready active\" registers from" << hostAddress().toString() << errorString(); - } -} - -void StiebelEltronModbusConnection::updateSgReadyState() -{ - // Update registers from SG Ready mode - qCDebug(dcStiebelEltronModbusConnection()) << "--> Read \"SG Ready mode\" register:" << 4001 << "size:" << 2; - QModbusReply *reply = readSgReadyState(); - if (reply) { - if (!reply->isFinished()) { - connect(reply, &QModbusReply::finished, reply, &QModbusReply::deleteLater); - connect(reply, &QModbusReply::finished, this, [this, reply](){ - if (reply->error() == QModbusDevice::NoError) { - const QModbusDataUnit unit = reply->result(); - const QVector values = unit.values(); - qCDebug(dcStiebelEltronModbusConnection()) << "<-- Response from \"SG Ready mode\" register" << 4001 << "size:" << 2 << values; - SmartGridState receivedSgReadyState = static_cast(ModbusDataUtils::convertToUInt32(values, ModbusDataUtils::ByteOrderBigEndian)); - if (m_sgReadyState != receivedSgReadyState) { - m_sgReadyState = receivedSgReadyState; - emit sgReadyStateChanged(m_sgReadyState); - } - } - }); - - connect(reply, &QModbusReply::errorOccurred, this, [this, reply] (QModbusDevice::Error error){ - qCWarning(dcStiebelEltronModbusConnection()) << "Modbus reply error occurred while updating \"SG Ready mode\" registers from" << hostAddress().toString() << error << reply->errorString(); - emit reply->finished(); // To make sure it will be deleted - }); - } else { - delete reply; // Broadcast reply returns immediatly - } - } else { - qCWarning(dcStiebelEltronModbusConnection()) << "Error occurred while reading \"SG Ready mode\" registers from" << hostAddress().toString() << errorString(); - } -} - -QModbusReply *StiebelEltronModbusConnection::readOutdoorTemperature() -{ - QModbusDataUnit request = QModbusDataUnit(QModbusDataUnit::RegisterType::InputRegisters, 506, 1); - return sendReadRequest(request, m_slaveId); -} - -QModbusReply *StiebelEltronModbusConnection::readFlowTemperature() -{ - QModbusDataUnit request = QModbusDataUnit(QModbusDataUnit::RegisterType::InputRegisters, 514, 1); - return sendReadRequest(request, m_slaveId); -} - -QModbusReply *StiebelEltronModbusConnection::readHotWaterTemperature() -{ - QModbusDataUnit request = QModbusDataUnit(QModbusDataUnit::RegisterType::InputRegisters, 521, 1); - return sendReadRequest(request, m_slaveId); -} - -QModbusReply *StiebelEltronModbusConnection::readHotGasTemperature1() -{ - QModbusDataUnit request = QModbusDataUnit(QModbusDataUnit::RegisterType::InputRegisters, 543, 1); - return sendReadRequest(request, m_slaveId); -} - -QModbusReply *StiebelEltronModbusConnection::readHotGasTemperature2() -{ - QModbusDataUnit request = QModbusDataUnit(QModbusDataUnit::RegisterType::InputRegisters, 550, 1); - return sendReadRequest(request, m_slaveId); -} - -QModbusReply *StiebelEltronModbusConnection::readSourceTemperature() -{ - QModbusDataUnit request = QModbusDataUnit(QModbusDataUnit::RegisterType::InputRegisters, 562, 1); - return sendReadRequest(request, m_slaveId); -} - -QModbusReply *StiebelEltronModbusConnection::readRoomTemperatureFEK() -{ - QModbusDataUnit request = QModbusDataUnit(QModbusDataUnit::RegisterType::InputRegisters, 502, 1); - return sendReadRequest(request, m_slaveId); -} - -QModbusReply *StiebelEltronModbusConnection::readReturnTemperature() -{ - QModbusDataUnit request = QModbusDataUnit(QModbusDataUnit::RegisterType::InputRegisters, 515, 1); - return sendReadRequest(request, m_slaveId); -} - -QModbusReply *StiebelEltronModbusConnection::readSolarCollectorTemperature() -{ - QModbusDataUnit request = QModbusDataUnit(QModbusDataUnit::RegisterType::InputRegisters, 527, 1); - return sendReadRequest(request, m_slaveId); -} - -QModbusReply *StiebelEltronModbusConnection::readSolarStorageTankTemperature() -{ - QModbusDataUnit request = QModbusDataUnit(QModbusDataUnit::RegisterType::InputRegisters, 528, 1); - return sendReadRequest(request, m_slaveId); -} - -QModbusReply *StiebelEltronModbusConnection::readStorageTankTemperature() -{ - QModbusDataUnit request = QModbusDataUnit(QModbusDataUnit::RegisterType::InputRegisters, 517, 1); - return sendReadRequest(request, m_slaveId); -} - -QModbusReply *StiebelEltronModbusConnection::readExternalHeatSourceTemperature() -{ - QModbusDataUnit request = QModbusDataUnit(QModbusDataUnit::RegisterType::InputRegisters, 530, 1); - return sendReadRequest(request, m_slaveId); -} - -QModbusReply *StiebelEltronModbusConnection::readHeatingEnergy() -{ - QModbusDataUnit request = QModbusDataUnit(QModbusDataUnit::RegisterType::InputRegisters, 3501, 2); - return sendReadRequest(request, m_slaveId); -} - -QModbusReply *StiebelEltronModbusConnection::readHotWaterEnergy() -{ - QModbusDataUnit request = QModbusDataUnit(QModbusDataUnit::RegisterType::InputRegisters, 3504, 2); - return sendReadRequest(request, m_slaveId); -} - -QModbusReply *StiebelEltronModbusConnection::readConsumedEnergyHeating() -{ - QModbusDataUnit request = QModbusDataUnit(QModbusDataUnit::RegisterType::InputRegisters, 3511, 2); - return sendReadRequest(request, m_slaveId); -} - -QModbusReply *StiebelEltronModbusConnection::readConsumedEnergyHotWater() -{ - QModbusDataUnit request = QModbusDataUnit(QModbusDataUnit::RegisterType::InputRegisters, 3514, 2); - return sendReadRequest(request, m_slaveId); -} - -QModbusReply *StiebelEltronModbusConnection::readOperatingMode() -{ - QModbusDataUnit request = QModbusDataUnit(QModbusDataUnit::RegisterType::HoldingRegisters, 1500, 1); - return sendReadRequest(request, m_slaveId); -} - -QModbusReply *StiebelEltronModbusConnection::readSystemStatus() -{ - QModbusDataUnit request = QModbusDataUnit(QModbusDataUnit::RegisterType::InputRegisters, 2500, 1); - return sendReadRequest(request, m_slaveId); -} - -QModbusReply *StiebelEltronModbusConnection::readSgReadyStateRO() -{ - QModbusDataUnit request = QModbusDataUnit(QModbusDataUnit::RegisterType::InputRegisters, 5000, 1); - return sendReadRequest(request, m_slaveId); -} - -QModbusReply *StiebelEltronModbusConnection::readSgReadyActive() -{ - QModbusDataUnit request = QModbusDataUnit(QModbusDataUnit::RegisterType::HoldingRegisters, 4000, 1); - return sendReadRequest(request, m_slaveId); -} - -QModbusReply *StiebelEltronModbusConnection::readSgReadyState() -{ - QModbusDataUnit request = QModbusDataUnit(QModbusDataUnit::RegisterType::HoldingRegisters, 4001, 2); - return sendReadRequest(request, m_slaveId); -} - -void StiebelEltronModbusConnection::verifyInitFinished() -{ - if (m_pendingInitReplies.isEmpty()) { - qCDebug(dcStiebelEltronModbusConnection()) << "Initialization finished of StiebelEltronModbusConnection" << hostAddress().toString(); - emit initializationFinished(); - } -} - -QDebug operator<<(QDebug debug, StiebelEltronModbusConnection *stiebelEltronModbusConnection) -{ - debug.nospace().noquote() << "StiebelEltronModbusConnection(" << stiebelEltronModbusConnection->hostAddress().toString() << ":" << stiebelEltronModbusConnection->port() << ")" << "\n"; - debug.nospace().noquote() << " - Outdoor temperature:" << stiebelEltronModbusConnection->outdoorTemperature() << " [°C]" << "\n"; - debug.nospace().noquote() << " - Flow temperature:" << stiebelEltronModbusConnection->flowTemperature() << " [°C]" << "\n"; - debug.nospace().noquote() << " - Hot water temperature:" << stiebelEltronModbusConnection->hotWaterTemperature() << " [°C]" << "\n"; - debug.nospace().noquote() << " - Hot gas temperature HP 1:" << stiebelEltronModbusConnection->hotGasTemperature1() << " [°C]" << "\n"; - debug.nospace().noquote() << " - Hot gas temperature HP 2:" << stiebelEltronModbusConnection->hotGasTemperature2() << " [°C]" << "\n"; - debug.nospace().noquote() << " - Source temperature:" << stiebelEltronModbusConnection->SourceTemperature() << " [°C]" << "\n"; - debug.nospace().noquote() << " - Room temperature FEK:" << stiebelEltronModbusConnection->roomTemperatureFEK() << " [°C]" << "\n"; - debug.nospace().noquote() << " - Return temperature:" << stiebelEltronModbusConnection->returnTemperature() << " [°C]" << "\n"; - debug.nospace().noquote() << " - Solar collector temperature:" << stiebelEltronModbusConnection->solarCollectorTemperature() << " [°C]" << "\n"; - debug.nospace().noquote() << " - Solar storage tank temperature:" << stiebelEltronModbusConnection->solarStorageTankTemperature() << " [°C]" << "\n"; - debug.nospace().noquote() << " - Storage tank temperature:" << stiebelEltronModbusConnection->storageTankTemperature() << " [°C]" << "\n"; - debug.nospace().noquote() << " - External heat source temperature:" << stiebelEltronModbusConnection->externalHeatSourceTemperature() << " [°C]" << "\n"; - debug.nospace().noquote() << " - Heating energy:" << stiebelEltronModbusConnection->heatingEnergy() << " [kWh]" << "\n"; - debug.nospace().noquote() << " - Hot water energy:" << stiebelEltronModbusConnection->hotWaterEnergy() << " [kWh]" << "\n"; - debug.nospace().noquote() << " - Consumed energy heating:" << stiebelEltronModbusConnection->consumedEnergyHeating() << " [kWh]" << "\n"; - debug.nospace().noquote() << " - Consumed energy hot water:" << stiebelEltronModbusConnection->consumedEnergyHotWater() << " [kWh]" << "\n"; - debug.nospace().noquote() << " - Operating mode:" << stiebelEltronModbusConnection->operatingMode() << "\n"; - debug.nospace().noquote() << " - System status:" << stiebelEltronModbusConnection->systemStatus() << "\n"; - debug.nospace().noquote() << " - Smart grid status:" << stiebelEltronModbusConnection->sgReadyStateRO() << "\n"; - debug.nospace().noquote() << " - SG ready active:" << stiebelEltronModbusConnection->sgReadyActive() << "\n"; - debug.nospace().noquote() << " - SG Ready mode:" << stiebelEltronModbusConnection->sgReadyState() << "\n"; - return debug.quote().space(); -} - diff --git a/stiebeleltron/stiebeleltronmodbusconnection.h b/stiebeleltron/stiebeleltronmodbusconnection.h deleted file mode 100644 index e42c8b5..0000000 --- a/stiebeleltron/stiebeleltronmodbusconnection.h +++ /dev/null @@ -1,260 +0,0 @@ -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* -* Copyright 2013 - 2022, nymea GmbH -* Contact: contact@nymea.io -* -* This fileDescriptor is part of nymea. -* This project including source code and documentation is protected by -* copyright law, and remains the property of nymea GmbH. All rights, including -* reproduction, publication, editing and translation, are reserved. The use of -* this project is subject to the terms of a license agreement to be concluded -* with nymea GmbH in accordance with the terms of use of nymea GmbH, available -* under https://nymea.io/license -* -* GNU Lesser General Public License Usage -* Alternatively, this project may be redistributed and/or modified under the -* terms of the GNU Lesser General Public License as published by the Free -* Software Foundation; version 3. This project is distributed in the hope that -* it will be useful, but WITHOUT ANY WARRANTY; without even the implied -* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -* Lesser General Public License for more details. -* -* You should have received a copy of the GNU Lesser General Public License -* along with this project. If not, see . -* -* For any further details and any questions please contact us under -* contact@nymea.io or see our FAQ/Licensing Information on -* https://nymea.io/license/faq -* -* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - -#ifndef STIEBELELTRONMODBUSCONNECTION_H -#define STIEBELELTRONMODBUSCONNECTION_H - -#include - -#include "../modbus/modbusdatautils.h" -#include "../modbus/modbustcpmaster.h" - -class StiebelEltronModbusConnection : public ModbusTCPMaster -{ - Q_OBJECT -public: - enum Registers { - RegisterRoomTemperatureFEK = 502, - RegisterOutdoorTemperature = 506, - RegisterFlowTemperature = 514, - RegisterReturnTemperature = 515, - RegisterStorageTankTemperature = 517, - RegisterHotWaterTemperature = 521, - RegisterSolarCollectorTemperature = 527, - RegisterSolarStorageTankTemperature = 528, - RegisterExternalHeatSourceTemperature = 530, - RegisterHotGasTemperature1 = 543, - RegisterHotGasTemperature2 = 550, - RegisterSourceTemperature = 562, - RegisterOperatingMode = 1500, - RegisterSystemStatus = 2500, - RegisterHeatingEnergy = 3501, - RegisterHotWaterEnergy = 3504, - RegisterConsumedEnergyHeating = 3511, - RegisterConsumedEnergyHotWater = 3514, - RegisterSgReadyActive = 4000, - RegisterSgReadyState = 4001, - RegisterSgReadyStateRO = 5000 - }; - Q_ENUM(Registers) - - enum OperatingMode { - OperatingModeEmergency = 0, - OperatingModeStandby = 1, - OperatingModeProgram = 2, - OperatingModeComfort = 3, - OperatingModeEco = 4, - OperatingModeHotWater = 5 - }; - Q_ENUM(OperatingMode) - - enum SmartGridState { - SmartGridStateModeOne = 1, - SmartGridStateModeTwo = 0, - SmartGridStateModeThree = 65536, - SmartGridStateModeFour = 65537 - }; - Q_ENUM(SmartGridState) - - explicit StiebelEltronModbusConnection(const QHostAddress &hostAddress, uint port, quint16 slaveId, QObject *parent = nullptr); - ~StiebelEltronModbusConnection() = default; - - /* Outdoor temperature [°C] - Address: 506, Size: 1 */ - float outdoorTemperature() const; - - /* Flow temperature [°C] - Address: 514, Size: 1 */ - float flowTemperature() const; - - /* Hot water temperature [°C] - Address: 521, Size: 1 */ - float hotWaterTemperature() const; - - /* Hot gas temperature HP 1 [°C] - Address: 543, Size: 1 */ - float hotGasTemperature1() const; - - /* Hot gas temperature HP 2 [°C] - Address: 550, Size: 1 */ - float hotGasTemperature2() const; - - /* Source temperature [°C] - Address: 562, Size: 1 */ - float SourceTemperature() const; - - /* Room temperature FEK [°C] - Address: 502, Size: 1 */ - float roomTemperatureFEK() const; - - /* Return temperature [°C] - Address: 515, Size: 1 */ - float returnTemperature() const; - - /* Solar collector temperature [°C] - Address: 527, Size: 1 */ - float solarCollectorTemperature() const; - - /* Solar storage tank temperature [°C] - Address: 528, Size: 1 */ - float solarStorageTankTemperature() const; - - /* Storage tank temperature [°C] - Address: 517, Size: 1 */ - float storageTankTemperature() const; - - /* External heat source temperature [°C] - Address: 530, Size: 1 */ - float externalHeatSourceTemperature() const; - - /* Heating energy [kWh] - Address: 3501, Size: 2 */ - quint32 heatingEnergy() const; - - /* Hot water energy [kWh] - Address: 3504, Size: 2 */ - quint32 hotWaterEnergy() const; - - /* Consumed energy heating [kWh] - Address: 3511, Size: 2 */ - quint32 consumedEnergyHeating() const; - - /* Consumed energy hot water [kWh] - Address: 3514, Size: 2 */ - quint32 consumedEnergyHotWater() const; - - /* Operating mode - Address: 1500, Size: 1 */ - OperatingMode operatingMode() const; - - /* System status - Address: 2500, Size: 1 */ - quint16 systemStatus() const; - - /* Smart grid status - Address: 5000, Size: 1 */ - quint16 sgReadyStateRO() const; - - /* SG ready active - Address: 4000, Size: 1 */ - quint16 sgReadyActive() const; - QModbusReply *setSgReadyActive(quint16 sgReadyActive); - - /* SG Ready mode - Address: 4001, Size: 2 */ - SmartGridState sgReadyState() const; - QModbusReply *setSgReadyState(SmartGridState sgReadyState); - - virtual void initialize(); - virtual void update(); - - void updateOutdoorTemperature(); - void updateFlowTemperature(); - void updateHotWaterTemperature(); - void updateHotGasTemperature1(); - void updateHotGasTemperature2(); - void updateSourceTemperature(); - void updateRoomTemperatureFEK(); - void updateReturnTemperature(); - void updateSolarCollectorTemperature(); - void updateSolarStorageTankTemperature(); - void updateStorageTankTemperature(); - void updateExternalHeatSourceTemperature(); - void updateHeatingEnergy(); - void updateHotWaterEnergy(); - void updateConsumedEnergyHeating(); - void updateConsumedEnergyHotWater(); - void updateOperatingMode(); - void updateSystemStatus(); - void updateSgReadyStateRO(); - void updateSgReadyActive(); - void updateSgReadyState(); - -signals: - void initializationFinished(); - - void outdoorTemperatureChanged(float outdoorTemperature); - void flowTemperatureChanged(float flowTemperature); - void hotWaterTemperatureChanged(float hotWaterTemperature); - void hotGasTemperature1Changed(float hotGasTemperature1); - void hotGasTemperature2Changed(float hotGasTemperature2); - void SourceTemperatureChanged(float SourceTemperature); - void roomTemperatureFEKChanged(float roomTemperatureFEK); - void returnTemperatureChanged(float returnTemperature); - void solarCollectorTemperatureChanged(float solarCollectorTemperature); - void solarStorageTankTemperatureChanged(float solarStorageTankTemperature); - void storageTankTemperatureChanged(float storageTankTemperature); - void externalHeatSourceTemperatureChanged(float externalHeatSourceTemperature); - void heatingEnergyChanged(quint32 heatingEnergy); - void hotWaterEnergyChanged(quint32 hotWaterEnergy); - void consumedEnergyHeatingChanged(quint32 consumedEnergyHeating); - void consumedEnergyHotWaterChanged(quint32 consumedEnergyHotWater); - void operatingModeChanged(OperatingMode operatingMode); - void systemStatusChanged(quint16 systemStatus); - void sgReadyStateROChanged(quint16 sgReadyStateRO); - void sgReadyActiveChanged(quint16 sgReadyActive); - void sgReadyStateChanged(SmartGridState sgReadyState); - -protected: - QModbusReply *readOutdoorTemperature(); - QModbusReply *readFlowTemperature(); - QModbusReply *readHotWaterTemperature(); - QModbusReply *readHotGasTemperature1(); - QModbusReply *readHotGasTemperature2(); - QModbusReply *readSourceTemperature(); - QModbusReply *readRoomTemperatureFEK(); - QModbusReply *readReturnTemperature(); - QModbusReply *readSolarCollectorTemperature(); - QModbusReply *readSolarStorageTankTemperature(); - QModbusReply *readStorageTankTemperature(); - QModbusReply *readExternalHeatSourceTemperature(); - QModbusReply *readHeatingEnergy(); - QModbusReply *readHotWaterEnergy(); - QModbusReply *readConsumedEnergyHeating(); - QModbusReply *readConsumedEnergyHotWater(); - QModbusReply *readOperatingMode(); - QModbusReply *readSystemStatus(); - QModbusReply *readSgReadyStateRO(); - QModbusReply *readSgReadyActive(); - QModbusReply *readSgReadyState(); - - float m_outdoorTemperature = 0; - float m_flowTemperature = 0; - float m_hotWaterTemperature = 0; - float m_hotGasTemperature1 = 0; - float m_hotGasTemperature2 = 0; - float m_SourceTemperature = 0; - float m_roomTemperatureFEK = 0; - float m_returnTemperature = 0; - float m_solarCollectorTemperature = 0; - float m_solarStorageTankTemperature = 0; - float m_storageTankTemperature = 0; - float m_externalHeatSourceTemperature = 0; - quint32 m_heatingEnergy = 0; - quint32 m_hotWaterEnergy = 0; - quint32 m_consumedEnergyHeating = 0; - quint32 m_consumedEnergyHotWater = 0; - OperatingMode m_operatingMode = OperatingModeStandby; - quint16 m_systemStatus = 0; - quint16 m_sgReadyStateRO = 3; - quint16 m_sgReadyActive = 0; - SmartGridState m_sgReadyState = SmartGridStateModeThree; - -private: - quint16 m_slaveId = 1; - QVector m_pendingInitReplies; - - void verifyInitFinished(); - - -}; - -QDebug operator<<(QDebug debug, StiebelEltronModbusConnection *stiebelEltronModbusConnection); - -#endif // STIEBELELTRONMODBUSCONNECTION_H