diff --git a/alphainnotec/integrationpluginalphainnotec.cpp b/alphainnotec/integrationpluginalphainnotec.cpp index e53bb20..cbdafcf 100644 --- a/alphainnotec/integrationpluginalphainnotec.cpp +++ b/alphainnotec/integrationpluginalphainnotec.cpp @@ -110,13 +110,13 @@ void IntegrationPluginAlphaInnotec::setupThing(ThingSetupInfo *info) quint16 slaveId = thing->paramValue(alphaConnectThingSlaveIdParamTypeId).toUInt(); AlphaInnotecModbusTcpConnection *alphaConnectTcpConnection = new AlphaInnotecModbusTcpConnection(hostAddress, port, slaveId, this); - connect(alphaConnectTcpConnection, &AlphaInnotecModbusTcpConnection::connectionStateChanged, this, [thing, alphaConnectTcpConnection](bool status){ - qCDebug(dcAlphaInnotec()) << "Connected changed to" << status << "for" << thing; - if (status) { + connect(alphaConnectTcpConnection, &AlphaInnotecModbusTcpConnection::reachableChanged, this, [thing, alphaConnectTcpConnection](bool reachable){ + qCDebug(dcAlphaInnotec()) << "Reachable changed to" << reachable << "for" << thing; + if (reachable) { alphaConnectTcpConnection->update(); } - thing->setStateValue(alphaConnectConnectedStateTypeId, status); + thing->setStateValue(alphaConnectConnectedStateTypeId, reachable); }); @@ -311,7 +311,7 @@ void IntegrationPluginAlphaInnotec::postSetupThing(Thing *thing) m_pluginTimer = hardwareManager()->pluginTimerManager()->registerTimer(10); connect(m_pluginTimer, &PluginTimer::timeout, this, [this] { foreach (AlphaInnotecModbusTcpConnection *connection, m_connections) { - if (connection->connected()) { + if (connection->reachable()) { connection->update(); } } @@ -340,7 +340,7 @@ void IntegrationPluginAlphaInnotec::executeAction(ThingActionInfo *info) Thing *thing = info->thing(); AlphaInnotecModbusTcpConnection *connection = m_connections.value(thing); - if (!connection->connected()) { + if (!connection->reachable()) { qCWarning(dcAlphaInnotec()) << "Could not execute action. The modbus connection is currently not available."; info->finish(Thing::ThingErrorHardwareNotAvailable); return; diff --git a/amperfied/integrationpluginamperfied.cpp b/amperfied/integrationpluginamperfied.cpp index 6e6121b..02e2182 100644 --- a/amperfied/integrationpluginamperfied.cpp +++ b/amperfied/integrationpluginamperfied.cpp @@ -169,7 +169,7 @@ void IntegrationPluginAmperfied::postSetupThing(Thing *thing) connection->update(); } foreach(AmperfiedModbusTcpConnection *connection, m_tcpConnections) { - qCDebug(dcAmperfied()) << "Updating connection" << connection->hostAddress(); + qCDebug(dcAmperfied()) << "Updating connection" << connection->modbusTcpMaster()->hostAddress(); connection->update(); } }); diff --git a/debs_1.8.2+202308081314~dc23d1b~buster.tar b/debs_1.8.2+202308081314~dc23d1b~buster.tar new file mode 100644 index 0000000..b0e9127 Binary files /dev/null and b/debs_1.8.2+202308081314~dc23d1b~buster.tar differ diff --git a/huawei/huaweifusionsolar.cpp b/huawei/huaweifusionsolar.cpp index 49194bb..d8ae56e 100644 --- a/huawei/huaweifusionsolar.cpp +++ b/huawei/huaweifusionsolar.cpp @@ -42,7 +42,7 @@ HuaweiFusionSolar::HuaweiFusionSolar(const QHostAddress &hostAddress, uint port, // this is a very slow or busy device since it returns quiet often that error. Don't faile with the first busy error... setCheckReachableRetries(3); - connect(this, &HuaweiFusionModbusTcpConnection::connectionStateChanged, this, [=](bool connected){ + connect(modbusTcpMaster(), &ModbusTcpMaster::connectionStateChanged, this, [=](bool connected){ if (!connected) { m_registersQueue.clear(); } @@ -114,7 +114,7 @@ void HuaweiFusionSolar::readNextRegister() qCDebug(dcHuaweiFusionSolar()) << "--> Read \"Inverter active power\" register:" << 32080 << "size:" << 2; QModbusReply *reply = readInverterActivePower(); if (!reply) { - qCWarning(dcHuaweiFusionSolar()) << "Error occurred while reading \"Inverter active power\" registers from" << hostAddress().toString() << errorString(); + qCWarning(dcHuaweiFusionSolar()) << "Error occurred while reading \"Inverter active power\" registers from" << modbusTcpMaster()->hostAddress().toString() << modbusTcpMaster()->errorString(); finishRequest(); return; } @@ -145,10 +145,10 @@ void HuaweiFusionSolar::readNextRegister() if (reply->error() == QModbusDevice::ProtocolError) { QModbusResponse response = reply->rawResult(); if (response.isException()) { - qCDebug(dcHuaweiFusionSolar()) << "Modbus reply error occurred while updating \"Inverter active power\" registers from" << hostAddress().toString() << exceptionToString(response.exceptionCode()); + qCDebug(dcHuaweiFusionSolar()) << "Modbus reply error occurred while updating \"Inverter active power\" registers from" << modbusTcpMaster()->hostAddress().toString() << exceptionToString(response.exceptionCode()); } } else { - qCWarning(dcHuaweiFusionSolar()) << "Modbus reply error occurred while updating \"Inverter active power\" registers from" << hostAddress().toString() << error << reply->errorString(); + qCWarning(dcHuaweiFusionSolar()) << "Modbus reply error occurred while updating \"Inverter active power\" registers from" << modbusTcpMaster()->hostAddress().toString() << error << reply->errorString(); } }); @@ -159,7 +159,7 @@ void HuaweiFusionSolar::readNextRegister() qCDebug(dcHuaweiFusionSolar()) << "--> Read \"Inverter input power\" register:" << 32064 << "size:" << 2; QModbusReply *reply = readInverterInputPower(); if (!reply) { - qCWarning(dcHuaweiFusionSolar()) << "Error occurred while reading \"Inverter input power\" registers from" << hostAddress().toString() << errorString(); + qCWarning(dcHuaweiFusionSolar()) << "Error occurred while reading \"Inverter input power\" registers from" << modbusTcpMaster()->hostAddress().toString() << modbusTcpMaster()->errorString(); finishRequest(); return; } @@ -190,10 +190,10 @@ void HuaweiFusionSolar::readNextRegister() if (reply->error() == QModbusDevice::ProtocolError) { QModbusResponse response = reply->rawResult(); if (response.isException()) { - qCDebug(dcHuaweiFusionSolar()) << "Modbus reply error occurred while updating \"Inverter input power\" registers from" << hostAddress().toString() << exceptionToString(response.exceptionCode()); + qCDebug(dcHuaweiFusionSolar()) << "Modbus reply error occurred while updating \"Inverter input power\" registers from" << modbusTcpMaster()->hostAddress().toString() << exceptionToString(response.exceptionCode()); } } else { - qCWarning(dcHuaweiFusionSolar()) << "Modbus reply error occurred while updating \"Inverter input power\" registers from" << hostAddress().toString() << error << reply->errorString(); + qCWarning(dcHuaweiFusionSolar()) << "Modbus reply error occurred while updating \"Inverter input power\" registers from" << modbusTcpMaster()->hostAddress().toString() << error << reply->errorString(); } }); @@ -204,7 +204,7 @@ void HuaweiFusionSolar::readNextRegister() qCDebug(dcHuaweiFusionSolar()) << "--> Read \"Inverter device status\" register:" << 32089 << "size:" << 1; QModbusReply *reply = readInverterDeviceStatus(); if (!reply) { - qCWarning(dcHuaweiFusionSolar()) << "Error occurred while reading \"Inverter device status\" registers from" << hostAddress().toString() << errorString(); + qCWarning(dcHuaweiFusionSolar()) << "Error occurred while reading \"Inverter device status\" registers from" << modbusTcpMaster()->hostAddress().toString() << modbusTcpMaster()->errorString(); finishRequest(); return; } @@ -234,10 +234,10 @@ void HuaweiFusionSolar::readNextRegister() if (reply->error() == QModbusDevice::ProtocolError) { QModbusResponse response = reply->rawResult(); if (response.isException()) { - qCDebug(dcHuaweiFusionSolar()) << "Modbus reply error occurred while updating \"Inverter device status\" registers from" << hostAddress().toString() << exceptionToString(response.exceptionCode()); + qCDebug(dcHuaweiFusionSolar()) << "Modbus reply error occurred while updating \"Inverter device status\" registers from" << modbusTcpMaster()->hostAddress().toString() << exceptionToString(response.exceptionCode()); } } else { - qCWarning(dcHuaweiFusionSolar()) << "Modbus reply error occurred while updating \"Inverter device status\" registers from" << hostAddress().toString() << error << reply->errorString(); + qCWarning(dcHuaweiFusionSolar()) << "Modbus reply error occurred while updating \"Inverter device status\" registers from" << modbusTcpMaster()->hostAddress().toString() << error << reply->errorString(); } }); @@ -248,7 +248,7 @@ void HuaweiFusionSolar::readNextRegister() qCDebug(dcHuaweiFusionSolar()) << "--> Read \"Inverter energy produced\" register:" << 32106 << "size:" << 2; QModbusReply *reply = readInverterEnergyProduced(); if (!reply) { - qCWarning(dcHuaweiFusionSolar()) << "Error occurred while reading \"Inverter energy produced\" registers from" << hostAddress().toString() << errorString(); + qCWarning(dcHuaweiFusionSolar()) << "Error occurred while reading \"Inverter energy produced\" registers from" << modbusTcpMaster()->hostAddress().toString() << modbusTcpMaster()->errorString(); finishRequest(); return; } @@ -278,10 +278,10 @@ void HuaweiFusionSolar::readNextRegister() if (reply->error() == QModbusDevice::ProtocolError) { QModbusResponse response = reply->rawResult(); if (response.isException()) { - qCDebug(dcHuaweiFusionSolar()) << "Modbus reply error occurred while updating \"Inverter energy produced\" registers from" << hostAddress().toString() << exceptionToString(response.exceptionCode()); + qCDebug(dcHuaweiFusionSolar()) << "Modbus reply error occurred while updating \"Inverter energy produced\" registers from" << modbusTcpMaster()->hostAddress().toString() << exceptionToString(response.exceptionCode()); } } else { - qCWarning(dcHuaweiFusionSolar()) << "Modbus reply error occurred while updating \"Inverter energy produced\" registers from" << hostAddress().toString() << error << reply->errorString(); + qCWarning(dcHuaweiFusionSolar()) << "Modbus reply error occurred while updating \"Inverter energy produced\" registers from" << modbusTcpMaster()->hostAddress().toString() << error << reply->errorString(); } }); break; @@ -291,7 +291,7 @@ void HuaweiFusionSolar::readNextRegister() qCDebug(dcHuaweiFusionSolar()) << "--> Read \"Power meter active power\" register:" << 37113 << "size:" << 2; QModbusReply *reply = readPowerMeterActivePower(); if (!reply) { - qCWarning(dcHuaweiFusionSolar()) << "Error occurred while reading \"Power meter active power\" registers from" << hostAddress().toString() << errorString(); + qCWarning(dcHuaweiFusionSolar()) << "Error occurred while reading \"Power meter active power\" registers from" << modbusTcpMaster()->hostAddress().toString() << modbusTcpMaster()->errorString(); finishRequest(); return; } @@ -321,10 +321,10 @@ void HuaweiFusionSolar::readNextRegister() if (reply->error() == QModbusDevice::ProtocolError) { QModbusResponse response = reply->rawResult(); if (response.isException()) { - qCDebug(dcHuaweiFusionSolar()) << "Modbus reply error occurred while updating \"Power meter active power\" registers from" << hostAddress().toString() << exceptionToString(response.exceptionCode()); + qCDebug(dcHuaweiFusionSolar()) << "Modbus reply error occurred while updating \"Power meter active power\" registers from" << modbusTcpMaster()->hostAddress().toString() << exceptionToString(response.exceptionCode()); } } else { - qCWarning(dcHuaweiFusionSolar()) << "Modbus reply error occurred while updating \"Power meter active power\" registers from" << hostAddress().toString() << error << reply->errorString(); + qCWarning(dcHuaweiFusionSolar()) << "Modbus reply error occurred while updating \"Power meter active power\" registers from" << modbusTcpMaster()->hostAddress().toString() << error << reply->errorString(); } }); @@ -335,7 +335,7 @@ void HuaweiFusionSolar::readNextRegister() qCDebug(dcHuaweiFusionSolar()) << "--> Read \"Luna 2000 Battery 1 status\" register:" << 37000 << "size:" << 1; QModbusReply *reply = readLunaBattery1Status(); if (!reply) { - qCWarning(dcHuaweiFusionSolar()) << "Error occurred while reading \"Luna 2000 Battery 1 status\" registers from" << hostAddress().toString() << errorString(); + qCWarning(dcHuaweiFusionSolar()) << "Error occurred while reading \"Luna 2000 Battery 1 status\" registers from" << modbusTcpMaster()->hostAddress().toString() << modbusTcpMaster()->errorString(); finishRequest(); return; } @@ -365,10 +365,10 @@ void HuaweiFusionSolar::readNextRegister() if (reply->error() == QModbusDevice::ProtocolError) { QModbusResponse response = reply->rawResult(); if (response.isException()) { - qCDebug(dcHuaweiFusionSolar()) << "Modbus reply error occurred while updating \"Luna 2000 Battery 1 status\" registers from" << hostAddress().toString() << exceptionToString(response.exceptionCode()); + qCDebug(dcHuaweiFusionSolar()) << "Modbus reply error occurred while updating \"Luna 2000 Battery 1 status\" registers from" << modbusTcpMaster()->hostAddress().toString() << exceptionToString(response.exceptionCode()); } } else { - qCWarning(dcHuaweiFusionSolar()) << "Modbus reply error occurred while updating \"Luna 2000 Battery 1 status\" registers from" << hostAddress().toString() << error << reply->errorString(); + qCWarning(dcHuaweiFusionSolar()) << "Modbus reply error occurred while updating \"Luna 2000 Battery 1 status\" registers from" << modbusTcpMaster()->hostAddress().toString() << error << reply->errorString(); } }); break; @@ -378,7 +378,7 @@ void HuaweiFusionSolar::readNextRegister() qCDebug(dcHuaweiFusionSolar()) << "--> Read \"Luna 2000 Battery 1 power\" register:" << 37001 << "size:" << 2; QModbusReply *reply = readLunaBattery1Power(); if (!reply) { - qCWarning(dcHuaweiFusionSolar()) << "Error occurred while reading \"Luna 2000 Battery 1 power\" registers from" << hostAddress().toString() << errorString(); + qCWarning(dcHuaweiFusionSolar()) << "Error occurred while reading \"Luna 2000 Battery 1 power\" registers from" << modbusTcpMaster()->hostAddress().toString() << modbusTcpMaster()->errorString(); finishRequest(); return; } @@ -408,10 +408,10 @@ void HuaweiFusionSolar::readNextRegister() if (reply->error() == QModbusDevice::ProtocolError) { QModbusResponse response = reply->rawResult(); if (response.isException()) { - qCDebug(dcHuaweiFusionSolar()) << "Modbus reply error occurred while updating \"Luna 2000 Battery 1 power\" registers from" << hostAddress().toString() << exceptionToString(response.exceptionCode()); + qCDebug(dcHuaweiFusionSolar()) << "Modbus reply error occurred while updating \"Luna 2000 Battery 1 power\" registers from" << modbusTcpMaster()->hostAddress().toString() << exceptionToString(response.exceptionCode()); } } else { - qCWarning(dcHuaweiFusionSolar()) << "Modbus reply error occurred while updating \"Luna 2000 Battery 1 power\" registers from" << hostAddress().toString() << error << reply->errorString(); + qCWarning(dcHuaweiFusionSolar()) << "Modbus reply error occurred while updating \"Luna 2000 Battery 1 power\" registers from" << modbusTcpMaster()->hostAddress().toString() << error << reply->errorString(); } }); break; @@ -421,7 +421,7 @@ void HuaweiFusionSolar::readNextRegister() qCDebug(dcHuaweiFusionSolar()) << "--> Read \"Luna 2000 Battery 1 state of charge\" register:" << 37004 << "size:" << 1; QModbusReply *reply = readLunaBattery1Soc(); if (!reply) { - qCWarning(dcHuaweiFusionSolar()) << "Error occurred while reading \"Luna 2000 Battery 1 state of charge\" registers from" << hostAddress().toString() << errorString(); + qCWarning(dcHuaweiFusionSolar()) << "Error occurred while reading \"Luna 2000 Battery 1 state of charge\" registers from" << modbusTcpMaster()->hostAddress().toString() << modbusTcpMaster()->errorString(); finishRequest(); return; } @@ -451,10 +451,10 @@ void HuaweiFusionSolar::readNextRegister() if (reply->error() == QModbusDevice::ProtocolError) { QModbusResponse response = reply->rawResult(); if (response.isException()) { - qCDebug(dcHuaweiFusionSolar()) << "Modbus reply error occurred while updating \"Luna 2000 Battery 1 state of charge\" registers from" << hostAddress().toString() << exceptionToString(response.exceptionCode()); + qCDebug(dcHuaweiFusionSolar()) << "Modbus reply error occurred while updating \"Luna 2000 Battery 1 state of charge\" registers from" << modbusTcpMaster()->hostAddress().toString() << exceptionToString(response.exceptionCode()); } } else { - qCWarning(dcHuaweiFusionSolar()) << "Modbus reply error occurred while updating \"Luna 2000 Battery 1 state of charge\" registers from" << hostAddress().toString() << error << reply->errorString(); + qCWarning(dcHuaweiFusionSolar()) << "Modbus reply error occurred while updating \"Luna 2000 Battery 1 state of charge\" registers from" << modbusTcpMaster()->hostAddress().toString() << error << reply->errorString(); } }); break; @@ -465,7 +465,7 @@ void HuaweiFusionSolar::readNextRegister() qCDebug(dcHuaweiFusionSolar()) << "--> Read \"Luna 2000 Battery 2 status\" register:" << 37741 << "size:" << 1; QModbusReply *reply = readLunaBattery2Status(); if (!reply) { - qCWarning(dcHuaweiFusionSolar()) << "Error occurred while reading \"Luna 2000 Battery 2 status\" registers from" << hostAddress().toString() << errorString(); + qCWarning(dcHuaweiFusionSolar()) << "Error occurred while reading \"Luna 2000 Battery 2 status\" registers from" << modbusTcpMaster()->hostAddress().toString() << modbusTcpMaster()->errorString(); finishRequest(); return; } @@ -495,10 +495,10 @@ void HuaweiFusionSolar::readNextRegister() if (reply->error() == QModbusDevice::ProtocolError) { QModbusResponse response = reply->rawResult(); if (response.isException()) { - qCDebug(dcHuaweiFusionSolar()) << "Modbus reply error occurred while updating \"Luna 2000 Battery 2 status\" registers from" << hostAddress().toString() << exceptionToString(response.exceptionCode()); + qCDebug(dcHuaweiFusionSolar()) << "Modbus reply error occurred while updating \"Luna 2000 Battery 2 status\" registers from" << modbusTcpMaster()->hostAddress().toString() << exceptionToString(response.exceptionCode()); } } else { - qCWarning(dcHuaweiFusionSolar()) << "Modbus reply error occurred while updating \"Luna 2000 Battery 2 status\" registers from" << hostAddress().toString() << error << reply->errorString(); + qCWarning(dcHuaweiFusionSolar()) << "Modbus reply error occurred while updating \"Luna 2000 Battery 2 status\" registers from" << modbusTcpMaster()->hostAddress().toString() << error << reply->errorString(); } }); break; @@ -508,7 +508,7 @@ void HuaweiFusionSolar::readNextRegister() qCDebug(dcHuaweiFusionSolar()) << "--> Read \"Luna 2000 Battery 2 power\" register:" << 37743 << "size:" << 2; QModbusReply *reply = readLunaBattery2Power(); if (!reply) { - qCWarning(dcHuaweiFusionSolar()) << "Error occurred while reading \"Luna 2000 Battery 2 power\" registers from" << hostAddress().toString() << errorString(); + qCWarning(dcHuaweiFusionSolar()) << "Error occurred while reading \"Luna 2000 Battery 2 power\" registers from" << modbusTcpMaster()->hostAddress().toString() << modbusTcpMaster()->errorString(); finishRequest(); return; } @@ -538,10 +538,10 @@ void HuaweiFusionSolar::readNextRegister() if (reply->error() == QModbusDevice::ProtocolError) { QModbusResponse response = reply->rawResult(); if (response.isException()) { - qCDebug(dcHuaweiFusionSolar()) << "Modbus reply error occurred while updating \"Luna 2000 Battery 2 power\" registers from" << hostAddress().toString() << exceptionToString(response.exceptionCode()); + qCDebug(dcHuaweiFusionSolar()) << "Modbus reply error occurred while updating \"Luna 2000 Battery 2 power\" registers from" << modbusTcpMaster()->hostAddress().toString() << exceptionToString(response.exceptionCode()); } } else { - qCWarning(dcHuaweiFusionSolar()) << "Modbus reply error occurred while updating \"Luna 2000 Battery 2 power\" registers from" << hostAddress().toString() << error << reply->errorString(); + qCWarning(dcHuaweiFusionSolar()) << "Modbus reply error occurred while updating \"Luna 2000 Battery 2 power\" registers from" << modbusTcpMaster()->hostAddress().toString() << error << reply->errorString(); } }); break; @@ -551,7 +551,7 @@ void HuaweiFusionSolar::readNextRegister() qCDebug(dcHuaweiFusionSolar()) << "--> Read \"Luna 2000 Battery 2 state of charge\" register:" << 37738 << "size:" << 1; QModbusReply *reply = readLunaBattery2Soc(); if (!reply) { - qCWarning(dcHuaweiFusionSolar()) << "Error occurred while reading \"Luna 2000 Battery 2 state of charge\" registers from" << hostAddress().toString() << errorString(); + qCWarning(dcHuaweiFusionSolar()) << "Error occurred while reading \"Luna 2000 Battery 2 state of charge\" registers from" << modbusTcpMaster()->hostAddress().toString() << modbusTcpMaster()->errorString(); finishRequest(); return; } @@ -581,10 +581,10 @@ void HuaweiFusionSolar::readNextRegister() if (reply->error() == QModbusDevice::ProtocolError) { QModbusResponse response = reply->rawResult(); if (response.isException()) { - qCDebug(dcHuaweiFusionSolar()) << "Modbus reply error occurred while updating \"Luna 2000 Battery 2 state of charge\" registers from" << hostAddress().toString() << exceptionToString(response.exceptionCode()); + qCDebug(dcHuaweiFusionSolar()) << "Modbus reply error occurred while updating \"Luna 2000 Battery 2 state of charge\" registers from" << modbusTcpMaster()->hostAddress().toString() << exceptionToString(response.exceptionCode()); } } else { - qCWarning(dcHuaweiFusionSolar()) << "Modbus reply error occurred while updating \"Luna 2000 Battery 2 state of charge\" registers from" << hostAddress().toString() << error << reply->errorString(); + qCWarning(dcHuaweiFusionSolar()) << "Modbus reply error occurred while updating \"Luna 2000 Battery 2 state of charge\" registers from" << modbusTcpMaster()->hostAddress().toString() << error << reply->errorString(); } }); break; diff --git a/huawei/huaweifusionsolardiscovery.cpp b/huawei/huaweifusionsolardiscovery.cpp index 35e6c6d..ca9316a 100644 --- a/huawei/huaweifusionsolardiscovery.cpp +++ b/huawei/huaweifusionsolardiscovery.cpp @@ -74,10 +74,10 @@ void HuaweiFusionSolarDiscovery::testNextConnection(const QHostAddress &address) // but retry only once to communicate with the device for reachability check... connection->setCheckReachableRetries(1); - qCDebug(dcHuawei()) << "Discovery: Start searching on" << QString("%1:%2").arg(address.toString()).arg(connection->port()) << "slave ID:" << connection->slaveId(); + qCDebug(dcHuawei()) << "Discovery: Start searching on" << QString("%1:%2").arg(address.toString()).arg(connection->modbusTcpMaster()->port()) << "slave ID:" << connection->slaveId(); // Try to connect, maybe it works, maybe not... if (!connection->connectDevice()) { - qCDebug(dcHuawei()) << "Discovery: Failed to connect to" << QString("%1:%2").arg(address.toString()).arg(connection->port()) << "slave ID:" << connection->slaveId() << "Continue...";; + qCDebug(dcHuawei()) << "Discovery: Failed to connect to" << QString("%1:%2").arg(address.toString()).arg(connection->modbusTcpMaster()->port()) << "slave ID:" << connection->slaveId() << "Continue...";; cleanupConnection(connection); } } @@ -117,7 +117,7 @@ void HuaweiFusionSolarDiscovery::checkNetworkDevice(const NetworkDeviceInfo &net }); // If we get any error...skip this host... - connect(connection, &HuaweiFusionSolar::connectionErrorOccurred, this, [=](QModbusDevice::Error error){ + connect(connection->modbusTcpMaster(), &ModbusTcpMaster::connectionErrorOccurred, this, [=](QModbusDevice::Error error){ if (error != QModbusDevice::NoError) { qCDebug(dcHuawei()) << "Discovery: Connection error on" << networkDeviceInfo.address().toString() << "Continue...";; cleanupConnection(connection); @@ -144,7 +144,7 @@ void HuaweiFusionSolarDiscovery::cleanupConnection(HuaweiFusionSolar *connection connection->deleteLater(); } - testNextConnection(connection->hostAddress()); + testNextConnection(connection->modbusTcpMaster()->hostAddress()); } void HuaweiFusionSolarDiscovery::finishDiscovery() diff --git a/huawei/integrationpluginhuawei.cpp b/huawei/integrationpluginhuawei.cpp index 013c848..28760bb 100644 --- a/huawei/integrationpluginhuawei.cpp +++ b/huawei/integrationpluginhuawei.cpp @@ -431,7 +431,7 @@ void IntegrationPluginHuawei::setupFusionSolar(ThingSetupInfo *info) connect(info, &ThingSetupInfo::aborted, connection, &HuaweiFusionSolar::deleteLater); connect(connection, &HuaweiFusionSolar::reachableChanged, info, [=](bool reachable){ if (!reachable) { - qCWarning(dcHuawei()) << "Connection init finished with errors" << thing->name() << connection->hostAddress().toString(); + qCWarning(dcHuawei()) << "Connection init finished with errors" << thing->name() << connection->modbusTcpMaster()->hostAddress().toString(); hardwareManager()->networkDeviceDiscovery()->unregisterMonitor(monitor); connection->disconnectDevice(); connection->deleteLater(); @@ -486,7 +486,7 @@ void IntegrationPluginHuawei::setupFusionSolar(ThingSetupInfo *info) qCDebug(dcHuawei()) << "Network device monitor for" << thing->name() << (reachable ? "is now reachable" : "is not reachable any more" ); if (reachable && !thing->stateValue("connected").toBool()) { - connection->setHostAddress(monitor->networkDeviceInfo().address()); + connection->modbusTcpMaster()->setHostAddress(monitor->networkDeviceInfo().address()); connection->connectDevice(); } else if (!reachable) { // Note: We disable autoreconnect explicitly and we will diff --git a/idm/integrationpluginidm.cpp b/idm/integrationpluginidm.cpp index b613895..2a43837 100644 --- a/idm/integrationpluginidm.cpp +++ b/idm/integrationpluginidm.cpp @@ -201,7 +201,7 @@ void IntegrationPluginIdm::executeAction(ThingActionInfo *info) return; } - if (!connection->connected()) + if (!connection->reachable()) info->finish(Thing::ThingErrorHardwareNotAvailable); @@ -251,7 +251,7 @@ void IntegrationPluginIdm::setupConnection(ThingSetupInfo *info) return; if (reachable && !thing->stateValue("connected").toBool()) { - connection->setHostAddress(monitor->networkDeviceInfo().address()); + connection->modbusTcpMaster()->setHostAddress(monitor->networkDeviceInfo().address()); connection->connectDevice(); } else if (!reachable) { // Note: We disable autoreconnect explicitly and we will @@ -290,7 +290,7 @@ void IntegrationPluginIdm::setupConnection(ThingSetupInfo *info) connect(connection, &IdmModbusTcpConnection::initializationFinished, info, [=](bool success){ if (!success) { - qCWarning(dcIdm()) << "Connection init finished with errors" << thing->name() << connection->hostAddress().toString(); + qCWarning(dcIdm()) << "Connection init finished with errors" << thing->name() << connection->modbusTcpMaster()->hostAddress().toString(); hardwareManager()->networkDeviceDiscovery()->unregisterMonitor(monitor); connection->deleteLater(); info->finish(Thing::ThingErrorHardwareFailure, QT_TR_NOOP("Could not initialize the communication with the device.")); diff --git a/kostal/integrationpluginkostal.cpp b/kostal/integrationpluginkostal.cpp index 3acd738..4715277 100644 --- a/kostal/integrationpluginkostal.cpp +++ b/kostal/integrationpluginkostal.cpp @@ -195,7 +195,7 @@ void IntegrationPluginKostal::postSetupThing(Thing *thing) m_pluginTimer = hardwareManager()->pluginTimerManager()->registerTimer(2); connect(m_pluginTimer, &PluginTimer::timeout, this, [this] { foreach(KostalModbusTcpConnection *connection, m_kostalConnections) { - qCDebug(dcKostal()) << "Update connection" << connection->hostAddress().toString(); + qCDebug(dcKostal()) << "Update connection" << connection->modbusTcpMaster()->hostAddress().toString(); connection->update(); } }); @@ -319,7 +319,7 @@ void IntegrationPluginKostal::setupKostalConnection(ThingSetupInfo *info) return; if (reachable && !thing->stateValue("connected").toBool()) { - kostalConnection->setHostAddress(monitor->networkDeviceInfo().address()); + kostalConnection->modbusTcpMaster()->setHostAddress(monitor->networkDeviceInfo().address()); kostalConnection->connectDevice(); } else if (!reachable) { // Note: We disable autoreconnect explicitly and we will @@ -358,7 +358,7 @@ void IntegrationPluginKostal::setupKostalConnection(ThingSetupInfo *info) connect(kostalConnection, &KostalModbusTcpConnection::initializationFinished, info, [=](bool success){ if (!success) { - qCWarning(dcKostal()) << "Connection init finished with errors" << thing->name() << kostalConnection->hostAddress().toString(); + qCWarning(dcKostal()) << "Connection init finished with errors" << thing->name() << kostalConnection->modbusTcpMaster()->hostAddress().toString(); hardwareManager()->networkDeviceDiscovery()->unregisterMonitor(monitor); kostalConnection->deleteLater(); info->finish(Thing::ThingErrorHardwareFailure, QT_TR_NOOP("Could not initialize the communication with the inverter.")); diff --git a/kostal/kostaldiscovery.cpp b/kostal/kostaldiscovery.cpp index c581525..a272532 100644 --- a/kostal/kostaldiscovery.cpp +++ b/kostal/kostaldiscovery.cpp @@ -133,7 +133,7 @@ void KostalDiscovery::checkNetworkDevice(const NetworkDeviceInfo &networkDeviceI }); // If we get any error...skip this host... - connect(connection, &KostalModbusTcpConnection::connectionErrorOccurred, this, [=](QModbusDevice::Error error){ + connect(connection->modbusTcpMaster(), &ModbusTcpMaster::connectionErrorOccurred, this, [=](QModbusDevice::Error error){ if (error != QModbusDevice::NoError) { qCDebug(dcKostal()) << "Discovery: Connection error on" << networkDeviceInfo.address().toString() << "Continue...";; cleanupConnection(connection); diff --git a/libnymea-modbus/modbustcpmaster.cpp b/libnymea-modbus/modbustcpmaster.cpp index 94096f1..27ff535 100644 --- a/libnymea-modbus/modbustcpmaster.cpp +++ b/libnymea-modbus/modbustcpmaster.cpp @@ -32,7 +32,7 @@ Q_LOGGING_CATEGORY(dcModbusTcpMaster, "ModbusTcpMaster") -ModbusTCPMaster::ModbusTCPMaster(const QHostAddress &hostAddress, uint port, QObject *parent) : +ModbusTcpMaster::ModbusTcpMaster(const QHostAddress &hostAddress, uint port, QObject *parent) : QObject(parent), m_hostAddress(hostAddress), m_port(port) @@ -43,16 +43,16 @@ ModbusTCPMaster::ModbusTCPMaster(const QHostAddress &hostAddress, uint port, QOb m_modbusTcpClient->setTimeout(m_timeout); m_modbusTcpClient->setNumberOfRetries(m_numberOfRetries); - connect(m_modbusTcpClient, &QModbusTcpClient::stateChanged, this, &ModbusTCPMaster::onModbusStateChanged); - connect(m_modbusTcpClient, &QModbusRtuSerialMaster::errorOccurred, this, &ModbusTCPMaster::onModbusErrorOccurred); + connect(m_modbusTcpClient, &QModbusTcpClient::stateChanged, this, &ModbusTcpMaster::onModbusStateChanged); + connect(m_modbusTcpClient, &QModbusRtuSerialMaster::errorOccurred, this, &ModbusTcpMaster::onModbusErrorOccurred); m_reconnectTimer = new QTimer(this); m_reconnectTimer->setSingleShot(true); m_reconnectTimer->setInterval(4000); - connect(m_reconnectTimer, &QTimer::timeout, this, &ModbusTCPMaster::connectDevice); + connect(m_reconnectTimer, &QTimer::timeout, this, &ModbusTcpMaster::connectDevice); } -ModbusTCPMaster::~ModbusTCPMaster() +ModbusTcpMaster::~ModbusTcpMaster() { if (m_reconnectTimer) { m_reconnectTimer->stop(); @@ -63,27 +63,27 @@ ModbusTCPMaster::~ModbusTCPMaster() } } -QHostAddress ModbusTCPMaster::hostAddress() const +QHostAddress ModbusTcpMaster::hostAddress() const { return m_hostAddress; } -uint ModbusTCPMaster::port() const +uint ModbusTcpMaster::port() const { return m_port; } -void ModbusTCPMaster::setPort(uint port) +void ModbusTcpMaster::setPort(uint port) { m_port = port; } -void ModbusTCPMaster::setHostAddress(const QHostAddress &hostAddress) +void ModbusTcpMaster::setHostAddress(const QHostAddress &hostAddress) { m_hostAddress = hostAddress; } -bool ModbusTCPMaster::connectDevice() { +bool ModbusTcpMaster::connectDevice() { // TCP connection to target device if (!m_modbusTcpClient) return false; @@ -106,7 +106,7 @@ bool ModbusTCPMaster::connectDevice() { return false; } -void ModbusTCPMaster::disconnectDevice() +void ModbusTcpMaster::disconnectDevice() { if (!m_modbusTcpClient) return; @@ -116,7 +116,7 @@ void ModbusTCPMaster::disconnectDevice() m_modbusTcpClient->disconnectDevice(); } -bool ModbusTCPMaster::reconnectDevice() +bool ModbusTcpMaster::reconnectDevice() { qCWarning(dcModbusTcpMaster()) << "Reconnecting modbus TCP device" << QString("%1:%2").arg(m_hostAddress.toString()).arg(m_port); if (!m_modbusTcpClient) @@ -126,44 +126,44 @@ bool ModbusTCPMaster::reconnectDevice() return connectDevice(); } -bool ModbusTCPMaster::connected() const +bool ModbusTcpMaster::connected() const { return m_connected; } -int ModbusTCPMaster::numberOfRetries() const +int ModbusTcpMaster::numberOfRetries() const { return m_modbusTcpClient->numberOfRetries(); } -void ModbusTCPMaster::setNumberOfRetries(int number) +void ModbusTcpMaster::setNumberOfRetries(int number) { m_numberOfRetries = number; m_modbusTcpClient->setNumberOfRetries(number); } -int ModbusTCPMaster::timeout() const +int ModbusTcpMaster::timeout() const { return m_modbusTcpClient->timeout(); } -void ModbusTCPMaster::setTimeout(int timeout) +void ModbusTcpMaster::setTimeout(int timeout) { m_timeout = timeout; m_modbusTcpClient->setTimeout(timeout); } -QString ModbusTCPMaster::errorString() const +QString ModbusTcpMaster::errorString() const { return m_modbusTcpClient->errorString(); } -QModbusDevice::Error ModbusTCPMaster::error() const +QModbusDevice::Error ModbusTcpMaster::error() const { return m_modbusTcpClient->error(); } -QUuid ModbusTCPMaster::readCoil(uint slaveAddress, uint registerAddress, uint size) +QUuid ModbusTcpMaster::readCoil(uint slaveAddress, uint registerAddress, uint size) { if (!m_modbusTcpClient) { return QUuid(); @@ -204,7 +204,7 @@ QUuid ModbusTCPMaster::readCoil(uint slaveAddress, uint registerAddress, uint si return requestId; } -QUuid ModbusTCPMaster::writeHoldingRegisters(uint slaveAddress, uint registerAddress, const QVector &values) +QUuid ModbusTcpMaster::writeHoldingRegisters(uint slaveAddress, uint registerAddress, const QVector &values) { if (!m_modbusTcpClient) { return QUuid(); @@ -246,27 +246,27 @@ QUuid ModbusTCPMaster::writeHoldingRegisters(uint slaveAddress, uint registerAdd return requestId; } -QModbusReply *ModbusTCPMaster::sendRawRequest(const QModbusRequest &request, int serverAddress) +QModbusReply *ModbusTcpMaster::sendRawRequest(const QModbusRequest &request, int serverAddress) { return m_modbusTcpClient->sendRawRequest(request, serverAddress); } -QModbusReply *ModbusTCPMaster::sendReadRequest(const QModbusDataUnit &read, int serverAddress) +QModbusReply *ModbusTcpMaster::sendReadRequest(const QModbusDataUnit &read, int serverAddress) { return m_modbusTcpClient->sendReadRequest(read, serverAddress); } -QModbusReply *ModbusTCPMaster::sendReadWriteRequest(const QModbusDataUnit &read, const QModbusDataUnit &write, int serverAddress) +QModbusReply *ModbusTcpMaster::sendReadWriteRequest(const QModbusDataUnit &read, const QModbusDataUnit &write, int serverAddress) { return m_modbusTcpClient->sendReadWriteRequest(read, write, serverAddress); } -QModbusReply *ModbusTCPMaster::sendWriteRequest(const QModbusDataUnit &write, int serverAddress) +QModbusReply *ModbusTcpMaster::sendWriteRequest(const QModbusDataUnit &write, int serverAddress) { return m_modbusTcpClient->sendWriteRequest(write, serverAddress); } -QUuid ModbusTCPMaster::readDiscreteInput(uint slaveAddress, uint registerAddress, uint size) +QUuid ModbusTcpMaster::readDiscreteInput(uint slaveAddress, uint registerAddress, uint size) { if (!m_modbusTcpClient) { return QUuid(); @@ -307,7 +307,7 @@ QUuid ModbusTCPMaster::readDiscreteInput(uint slaveAddress, uint registerAddress return requestId; } -QUuid ModbusTCPMaster::readInputRegister(uint slaveAddress, uint registerAddress, uint size) +QUuid ModbusTcpMaster::readInputRegister(uint slaveAddress, uint registerAddress, uint size) { if (!m_modbusTcpClient) { return QUuid(); @@ -350,7 +350,7 @@ QUuid ModbusTCPMaster::readInputRegister(uint slaveAddress, uint registerAddress return requestId; } -QUuid ModbusTCPMaster::readHoldingRegister(uint slaveAddress, uint registerAddress, uint size) +QUuid ModbusTcpMaster::readHoldingRegister(uint slaveAddress, uint registerAddress, uint size) { if (!m_modbusTcpClient) { return QUuid(); @@ -396,12 +396,12 @@ QUuid ModbusTCPMaster::readHoldingRegister(uint slaveAddress, uint registerAddre return requestId; } -QUuid ModbusTCPMaster::writeCoil(uint slaveAddress, uint registerAddress, bool value) +QUuid ModbusTcpMaster::writeCoil(uint slaveAddress, uint registerAddress, bool value) { return writeCoils(slaveAddress, registerAddress, QVector() << static_cast(value)); } -QUuid ModbusTCPMaster::writeCoils(uint slaveAddress, uint registerAddress, const QVector &values) +QUuid ModbusTcpMaster::writeCoils(uint slaveAddress, uint registerAddress, const QVector &values) { if (!m_modbusTcpClient) { return QUuid(); @@ -446,18 +446,18 @@ QUuid ModbusTCPMaster::writeCoils(uint slaveAddress, uint registerAddress, const return requestId; } -QUuid ModbusTCPMaster::writeHoldingRegister(uint slaveAddress, uint registerAddress, quint16 value) +QUuid ModbusTcpMaster::writeHoldingRegister(uint slaveAddress, uint registerAddress, quint16 value) { return writeHoldingRegisters(slaveAddress, registerAddress, QVector() << value); } -void ModbusTCPMaster::onModbusErrorOccurred(QModbusDevice::Error error) +void ModbusTcpMaster::onModbusErrorOccurred(QModbusDevice::Error error) { qCWarning(dcModbusTcpMaster()) << "An error occurred for device" << m_hostAddress.toString() << ":" << error; emit connectionErrorOccurred(error); } -void ModbusTCPMaster::onModbusStateChanged(QModbusDevice::State state) +void ModbusTcpMaster::onModbusStateChanged(QModbusDevice::State state) { qCDebug(dcModbusTcpMaster()) << "Connection state changed for" << m_hostAddress << state; bool connected = (state == QModbusDevice::ConnectedState); diff --git a/libnymea-modbus/modbustcpmaster.h b/libnymea-modbus/modbustcpmaster.h index ef2bc9b..33f2780 100644 --- a/libnymea-modbus/modbustcpmaster.h +++ b/libnymea-modbus/modbustcpmaster.h @@ -40,12 +40,12 @@ Q_DECLARE_LOGGING_CATEGORY(dcModbusTcpMaster) -class ModbusTCPMaster : public QObject +class ModbusTcpMaster : public QObject { Q_OBJECT public: - explicit ModbusTCPMaster(const QHostAddress &hostAddress, uint port, QObject *parent = nullptr); - ~ModbusTCPMaster(); + explicit ModbusTcpMaster(const QHostAddress &hostAddress, uint port, QObject *parent = nullptr); + ~ModbusTcpMaster(); // If you change the hostaddress, make sure to reconnectDevice afterwards QHostAddress hostAddress() const; diff --git a/libnymea-modbus/tools/connectiontool/modbustcp.py b/libnymea-modbus/tools/connectiontool/modbustcp.py index 93d3a7c..95a25bc 100644 --- a/libnymea-modbus/tools/connectiontool/modbustcp.py +++ b/libnymea-modbus/tools/connectiontool/modbustcp.py @@ -71,7 +71,7 @@ def writePropertyGetSetMethodImplementationsTcp(fileDescriptor, className, regis exit(1) writeLine(fileDescriptor, ' request.setValues(values);') - writeLine(fileDescriptor, ' return sendWriteRequest(request, m_slaveId);') + writeLine(fileDescriptor, ' return m_modbusTcpMaster->sendWriteRequest(request, m_slaveId);') writeLine(fileDescriptor, '}') writeLine(fileDescriptor) @@ -90,7 +90,7 @@ def writePropertyUpdateMethodImplementationsTcp(fileDescriptor, className, regis writeLine(fileDescriptor, ' qCDebug(dc%s()) << "--> Read \\"%s\\" register:" << %s << "size:" << %s;' % (className, registerDefinition['description'], registerDefinition['address'], registerDefinition['size'])) writeLine(fileDescriptor, ' QModbusReply *reply = read%s();' % (propertyName[0].upper() + propertyName[1:])) writeLine(fileDescriptor, ' if (!reply) {') - writeLine(fileDescriptor, ' qCWarning(dc%s()) << "Error occurred while reading \\"%s\\" registers from" << hostAddress().toString() << errorString();' % (className, registerDefinition['description'])) + writeLine(fileDescriptor, ' qCWarning(dc%s()) << "Error occurred while reading \\"%s\\" registers from" << m_modbusTcpMaster->hostAddress().toString() << m_modbusTcpMaster->errorString();' % (className, registerDefinition['description'])) writeLine(fileDescriptor, ' return;') writeLine(fileDescriptor, ' }') writeLine(fileDescriptor) @@ -114,7 +114,7 @@ def writePropertyUpdateMethodImplementationsTcp(fileDescriptor, className, regis writeLine(fileDescriptor, ' });') writeLine(fileDescriptor) writeLine(fileDescriptor, ' connect(reply, &QModbusReply::errorOccurred, this, [this, reply] (QModbusDevice::Error error){') - writeLine(fileDescriptor, ' qCWarning(dc%s()) << "Modbus reply error occurred while updating \\"%s\\" registers from" << hostAddress().toString() << error << reply->errorString();' % (className, registerDefinition['description'])) + writeLine(fileDescriptor, ' qCWarning(dc%s()) << "Modbus reply error occurred while updating \\"%s\\" registers from" << m_modbusTcpMaster->hostAddress().toString() << error << reply->errorString();' % (className, registerDefinition['description'])) writeLine(fileDescriptor, ' });') writeLine(fileDescriptor, '}') writeLine(fileDescriptor) @@ -207,7 +207,7 @@ def writeInternalPropertyReadMethodImplementationsTcp(fileDescriptor, className, #Default to holdingRegister writeLine(fileDescriptor, ' QModbusDataUnit request = QModbusDataUnit(QModbusDataUnit::RegisterType::HoldingRegisters, %s, %s);' % (registerDefinition['address'], registerDefinition['size'])) - writeLine(fileDescriptor, ' return sendReadRequest(request, m_slaveId);') + writeLine(fileDescriptor, ' return m_modbusTcpMaster->sendReadRequest(request, m_slaveId);') writeLine(fileDescriptor, '}') writeLine(fileDescriptor) @@ -274,7 +274,7 @@ def writeInternalBlockReadMethodImplementationsTcp(fileDescriptor, className, bl #Default to holdingRegister writeLine(fileDescriptor, ' QModbusDataUnit request = QModbusDataUnit(QModbusDataUnit::RegisterType::HoldingRegisters, %s, %s);' % (blockStartAddress, blockSize)) - writeLine(fileDescriptor, ' return sendReadRequest(request, m_slaveId);') + writeLine(fileDescriptor, ' return m_modbusTcpMaster->sendReadRequest(request, m_slaveId);') writeLine(fileDescriptor, '}') writeLine(fileDescriptor) @@ -367,7 +367,7 @@ def writeInitMethodImplementationTcp(fileDescriptor, className, registerDefiniti writeLine(fileDescriptor, ' qCDebug(dc%s()) << "--> Read init \\"%s\\" register:" << %s << "size:" << %s;' % (className, registerDefinition['description'], registerDefinition['address'], registerDefinition['size'])) writeLine(fileDescriptor, ' reply = read%s();' % (propertyName[0].upper() + propertyName[1:])) writeLine(fileDescriptor, ' if (!reply) {') - writeLine(fileDescriptor, ' qCWarning(dc%s()) << "Error occurred while reading \\"%s\\" registers from" << hostAddress().toString() << errorString();' % (className, registerDefinition['description'])) + writeLine(fileDescriptor, ' qCWarning(dc%s()) << "Error occurred while reading \\"%s\\" registers from" << m_modbusTcpMaster->hostAddress().toString() << m_modbusTcpMaster->errorString();' % (className, registerDefinition['description'])) writeLine(fileDescriptor, ' finishInitialization(false);') writeLine(fileDescriptor, ' return false;') writeLine(fileDescriptor, ' }') @@ -398,7 +398,7 @@ def writeInitMethodImplementationTcp(fileDescriptor, className, registerDefiniti writeLine(fileDescriptor, ' });') writeLine(fileDescriptor) writeLine(fileDescriptor, ' connect(reply, &QModbusReply::errorOccurred, m_initObject, [this, reply] (QModbusDevice::Error error){') - writeLine(fileDescriptor, ' qCWarning(dc%s()) << "Modbus reply error occurred while reading \\"%s\\" registers from" << hostAddress().toString() << error << reply->errorString();' % (className, registerDefinition['description'])) + writeLine(fileDescriptor, ' qCWarning(dc%s()) << "Modbus reply error occurred while reading \\"%s\\" registers from" << m_modbusTcpMaster->hostAddress().toString() << error << reply->errorString();' % (className, registerDefinition['description'])) writeLine(fileDescriptor, ' });') # Read init blocks @@ -495,7 +495,7 @@ def writeUpdateMethodTcp(fileDescriptor, className, registerDefinitions, blockDe break if updateRequired: - writeLine(fileDescriptor, ' if (!connected())') + writeLine(fileDescriptor, ' if (!m_modbusTcpMaster->connected())') writeLine(fileDescriptor, ' return false;') writeLine(fileDescriptor) writeLine(fileDescriptor, ' if (!m_pendingUpdateReplies.isEmpty()) {') @@ -516,7 +516,7 @@ def writeUpdateMethodTcp(fileDescriptor, className, registerDefinitions, blockDe writeLine(fileDescriptor, ' qCDebug(dc%s()) << "--> Read \\"%s\\" register:" << %s << "size:" << %s;' % (className, registerDefinition['description'], registerDefinition['address'], registerDefinition['size'])) writeLine(fileDescriptor, ' reply = read%s();' % (propertyName[0].upper() + propertyName[1:])) writeLine(fileDescriptor, ' if (!reply) {') - writeLine(fileDescriptor, ' qCWarning(dc%s()) << "Error occurred while reading \\"%s\\" registers from" << hostAddress().toString() << errorString();' % (className, registerDefinition['description'])) + writeLine(fileDescriptor, ' qCWarning(dc%s()) << "Error occurred while reading \\"%s\\" registers from" << m_modbusTcpMaster->hostAddress().toString() << m_modbusTcpMaster->errorString();' % (className, registerDefinition['description'])) writeLine(fileDescriptor, ' return false;') writeLine(fileDescriptor, ' }') writeLine(fileDescriptor) @@ -546,7 +546,7 @@ def writeUpdateMethodTcp(fileDescriptor, className, registerDefinitions, blockDe writeLine(fileDescriptor, ' });') writeLine(fileDescriptor) writeLine(fileDescriptor, ' connect(reply, &QModbusReply::errorOccurred, this, [this, reply] (QModbusDevice::Error error){') - writeLine(fileDescriptor, ' qCWarning(dc%s()) << "Modbus reply error occurred while reading \\"%s\\" registers from" << hostAddress().toString() << error << reply->errorString();' % (className, registerDefinition['description'])) + writeLine(fileDescriptor, ' qCWarning(dc%s()) << "Modbus reply error occurred while reading \\"%s\\" registers from" << m_modbusTcpMaster->hostAddress().toString() << error << reply->errorString();' % (className, registerDefinition['description'])) writeLine(fileDescriptor, ' });') # Read init blocks diff --git a/libnymea-modbus/tools/connectiontool/toolcommon.py b/libnymea-modbus/tools/connectiontool/toolcommon.py index 37d8bcf..9de1eda 100644 --- a/libnymea-modbus/tools/connectiontool/toolcommon.py +++ b/libnymea-modbus/tools/connectiontool/toolcommon.py @@ -484,8 +484,8 @@ def writePropertyProcessMethodImplementations(fileDescriptor, className, registe if not 'R' in registerDefinition['access']: continue - propertyName = registerDefinition['id'] propertyTyp = getCppDataType(registerDefinition) + propertyName = registerDefinition['id'] writeLine(fileDescriptor, 'void %s::process%sRegisterValues(const QVector &values)' % (className, propertyName[0].upper() + propertyName[1:])) writeLine(fileDescriptor, '{') diff --git a/libnymea-modbus/tools/generate-connection.py b/libnymea-modbus/tools/generate-connection.py index b31fefc..0d40dfd 100644 --- a/libnymea-modbus/tools/generate-connection.py +++ b/libnymea-modbus/tools/generate-connection.py @@ -47,7 +47,7 @@ def writeTcpHeaderFile(): writeLine(headerFile) # Begin of class - writeLine(headerFile, 'class %s : public ModbusTCPMaster' % className) + writeLine(headerFile, 'class %s : public QObject' % className) writeLine(headerFile, '{') writeLine(headerFile, ' Q_OBJECT') @@ -64,8 +64,12 @@ def writeTcpHeaderFile(): # Constructor writeLine(headerFile, ' explicit %s(const QHostAddress &hostAddress, uint port, quint16 slaveId, QObject *parent = nullptr);' % className) + writeLine(headerFile, ' explicit %s(ModbusTcpMaster *modbusTcpMaster, quint16 slaveId, QObject *parent = nullptr);' % className) writeLine(headerFile, ' ~%s() = default;' % className) writeLine(headerFile) + writeLine(headerFile, ' ModbusTcpMaster *modbusTcpMaster() const;') + writeLine(headerFile, ' quint16 slaveId() const;') + writeLine(headerFile) writeLine(headerFile, ' bool reachable() const;') writeLine(headerFile) writeLine(headerFile, ' ModbusDataUtils::ByteOrder endianness() const;') @@ -110,6 +114,12 @@ def writeTcpHeaderFile(): writeLine(headerFile, ' virtual bool update();') writeLine(headerFile) + writeLine(headerFile, 'public slots:') + writeLine(headerFile, ' bool connectDevice();') + writeLine(headerFile, ' void disconnectDevice();') + writeLine(headerFile, ' bool reconnectDevice();') + writeLine(headerFile) + # Write registers value changed signals writeLine(headerFile, 'signals:') writeLine(headerFile, ' void reachableChanged(bool reachable);') @@ -151,6 +161,7 @@ def writeTcpHeaderFile(): # Private members writeLine(headerFile, 'private:') + writeLine(headerFile, ' ModbusTcpMaster *m_modbusTcpMaster = nullptr;') writeLine(headerFile, ' ModbusDataUtils::ByteOrder m_endianness = ModbusDataUtils::ByteOrder%s;' % endianness) writeLine(headerFile, ' ModbusDataUtils::ByteOrder m_stringEndianness = ModbusDataUtils::ByteOrder%s;' % stringEndianness) writeLine(headerFile, ' quint16 m_slaveId = 1;') @@ -170,6 +181,8 @@ def writeTcpHeaderFile(): writeLine(headerFile, ' void verifyInitFinished();') writeLine(headerFile, ' void finishInitialization(bool success);') writeLine(headerFile) + writeLine(headerFile, ' void setupConnection();') + writeLine(headerFile) writeLine(headerFile, ' void verifyUpdateFinished();') writeLine(headerFile) writeLine(headerFile, ' void onReachabilityCheckFailed();') @@ -201,28 +214,32 @@ def writeTcpSourceFile(): # Constructor writeLine(sourceFile, '%s::%s(const QHostAddress &hostAddress, uint port, quint16 slaveId, QObject *parent) :' % (className, className)) - writeLine(sourceFile, ' ModbusTCPMaster(hostAddress, port, parent),') + writeLine(sourceFile, ' QObject(parent),') + writeLine(sourceFile, ' m_modbusTcpMaster(new ModbusTcpMaster(hostAddress, port, this)),') writeLine(sourceFile, ' m_slaveId(slaveId)') writeLine(sourceFile, '{') - writeLine(sourceFile, ' connect(this, &ModbusTCPMaster::connectionStateChanged, this, [this](bool status){') - writeLine(sourceFile, ' if (status) {') - writeLine(sourceFile, ' qCDebug(dc%s()) << "Modbus TCP connection" << m_hostAddress.toString() << "connected. Start testing if the connection is reachable...";' % (className)) - writeLine(sourceFile, ' // Cleanup before starting to initialize') - writeLine(sourceFile, ' m_pendingInitReplies.clear();') - writeLine(sourceFile, ' m_pendingUpdateReplies.clear();') - writeLine(sourceFile, ' m_communicationWorking = false;') - writeLine(sourceFile, ' m_communicationFailedCounter = 0;') - writeLine(sourceFile, ' m_checkReachableRetriesCount = 0;') - writeLine(sourceFile, ' testReachability();') - writeLine(sourceFile, ' } else {') - writeLine(sourceFile, ' qCWarning(dc%s()) << "Modbus TCP connection diconnected from" << m_hostAddress.toString() << ". The connection is not reachable any more.";' % (className)) - writeLine(sourceFile, ' m_communicationWorking = false;') - writeLine(sourceFile, ' m_communicationFailedCounter = 0;') - writeLine(sourceFile, ' m_checkReachableRetriesCount = 0;') - writeLine(sourceFile, ' }') + writeLine(sourceFile, ' setupConnection();') + writeLine(sourceFile, '}') writeLine(sourceFile) - writeLine(sourceFile, ' evaluateReachableState();') - writeLine(sourceFile, ' });') + + writeLine(sourceFile, '%s::%s(ModbusTcpMaster *modbusTcpMaster, quint16 slaveId, QObject *parent) :' % (className, className)) + writeLine(sourceFile, ' QObject(parent),') + writeLine(sourceFile, ' m_modbusTcpMaster(modbusTcpMaster),') + writeLine(sourceFile, ' m_slaveId(slaveId)') + writeLine(sourceFile, '{') + writeLine(sourceFile, ' setupConnection();') + writeLine(sourceFile, '}') + writeLine(sourceFile) + + writeLine(sourceFile, 'ModbusTcpMaster *%s::modbusTcpMaster() const' % (className)) + writeLine(sourceFile, '{') + writeLine(sourceFile, ' return m_modbusTcpMaster;') + writeLine(sourceFile, '}') + writeLine(sourceFile) + + writeLine(sourceFile, 'quint16 %s::slaveId() const' % (className)) + writeLine(sourceFile, '{') + writeLine(sourceFile, ' return m_slaveId;') writeLine(sourceFile, '}') writeLine(sourceFile) @@ -294,6 +311,24 @@ def writeTcpSourceFile(): writeInitMethodImplementationTcp(sourceFile, className, registerJson['registers'], blocks) writeUpdateMethodTcp(sourceFile, className, registerJson['registers'], blocks) + writeLine(sourceFile, 'bool %s::connectDevice()' % (className)) + writeLine(sourceFile, '{') + writeLine(sourceFile, ' return m_modbusTcpMaster->connectDevice();') + writeLine(sourceFile, '}') + writeLine(sourceFile) + + writeLine(sourceFile, 'void %s::disconnectDevice()' % (className)) + writeLine(sourceFile, '{') + writeLine(sourceFile, ' m_modbusTcpMaster->disconnectDevice();') + writeLine(sourceFile, '}') + writeLine(sourceFile) + + writeLine(sourceFile, 'bool %s::reconnectDevice()' % (className)) + writeLine(sourceFile, '{') + writeLine(sourceFile, ' return m_modbusTcpMaster->reconnectDevice();') + writeLine(sourceFile, '}') + writeLine(sourceFile) + # Write update methods writePropertyUpdateMethodImplementationsTcp(sourceFile, className, registerJson['registers']) if 'blocks' in registerJson: @@ -351,9 +386,9 @@ def writeTcpSourceFile(): writeLine(sourceFile, 'void %s::finishInitialization(bool success)' % (className)) writeLine(sourceFile, '{') writeLine(sourceFile, ' if (success) {') - writeLine(sourceFile, ' qCDebug(dc%s()) << "Initialization finished of %s" << hostAddress().toString() << "finished successfully";' % (className, className)) + writeLine(sourceFile, ' qCDebug(dc%s()) << "Initialization finished of %s" << m_modbusTcpMaster->hostAddress().toString() << "finished successfully";' % (className, className)) writeLine(sourceFile, ' } else {') - writeLine(sourceFile, ' qCWarning(dc%s()) << "Initialization finished of %s" << hostAddress().toString() << "failed.";' % (className, className)) + writeLine(sourceFile, ' qCWarning(dc%s()) << "Initialization finished of %s" << m_modbusTcpMaster->hostAddress().toString() << "failed.";' % (className, className)) writeLine(sourceFile, ' }') writeLine(sourceFile) writeLine(sourceFile, ' // Cleanup init') @@ -365,6 +400,30 @@ def writeTcpSourceFile(): writeLine(sourceFile, '}') writeLine(sourceFile) + writeLine(sourceFile, 'void %s::setupConnection()' % (className)) + writeLine(sourceFile, '{') + writeLine(sourceFile, ' connect(m_modbusTcpMaster, &ModbusTcpMaster::connectionStateChanged, this, [this](bool status){') + writeLine(sourceFile, ' if (status) {') + writeLine(sourceFile, ' qCDebug(dc%s()) << "Modbus TCP connection" << m_modbusTcpMaster->hostAddress().toString() << "connected. Start testing if the connection is reachable...";' % (className)) + writeLine(sourceFile, ' // Cleanup before starting to initialize') + writeLine(sourceFile, ' m_pendingInitReplies.clear();') + writeLine(sourceFile, ' m_pendingUpdateReplies.clear();') + writeLine(sourceFile, ' m_communicationWorking = false;') + writeLine(sourceFile, ' m_communicationFailedCounter = 0;') + writeLine(sourceFile, ' m_checkReachableRetriesCount = 0;') + writeLine(sourceFile, ' testReachability();') + writeLine(sourceFile, ' } else {') + writeLine(sourceFile, ' qCWarning(dc%s()) << "Modbus TCP connection diconnected from" << m_modbusTcpMaster->hostAddress().toString() << ". The connection is not reachable any more.";' % (className)) + writeLine(sourceFile, ' m_communicationWorking = false;') + writeLine(sourceFile, ' m_communicationFailedCounter = 0;') + writeLine(sourceFile, ' m_checkReachableRetriesCount = 0;') + writeLine(sourceFile, ' }') + writeLine(sourceFile) + writeLine(sourceFile, ' evaluateReachableState();') + writeLine(sourceFile, ' });') + writeLine(sourceFile, '}') + writeLine(sourceFile) + writeLine(sourceFile, 'void %s::verifyUpdateFinished()' % (className)) writeLine(sourceFile, '{') writeLine(sourceFile, ' if (m_pendingUpdateReplies.isEmpty()) {') @@ -390,7 +449,7 @@ def writeTcpSourceFile(): writeLine(sourceFile, 'void %s::evaluateReachableState()' % (className)) writeLine(sourceFile, '{') - writeLine(sourceFile, ' bool reachable = m_communicationWorking && connected();') + writeLine(sourceFile, ' bool reachable = m_communicationWorking && m_modbusTcpMaster->connected();') writeLine(sourceFile, ' if (m_reachable == reachable)') writeLine(sourceFile, ' return;') writeLine(sourceFile) @@ -406,7 +465,7 @@ def writeTcpSourceFile(): debugObjectParamName = className[0].lower() + className[1:] writeLine(sourceFile, 'QDebug operator<<(QDebug debug, %s *%s)' % (className, debugObjectParamName)) writeLine(sourceFile, '{') - writeLine(sourceFile, ' debug.nospace().noquote() << "%s(" << %s->hostAddress().toString() << ":" << %s->port() << ")" << "\\n";' % (className, debugObjectParamName, debugObjectParamName)) + writeLine(sourceFile, ' debug.nospace().noquote() << "%s(" << %s->modbusTcpMaster()->hostAddress().toString() << ":" << %s->modbusTcpMaster()->port() << ")" << "\\n";' % (className, debugObjectParamName, debugObjectParamName)) writeRegistersDebugLine(sourceFile, debugObjectParamName, registerJson['registers']) if 'blocks' in registerJson: for blockDefinition in registerJson['blocks']: diff --git a/mennekes/integrationpluginmennekes.cpp b/mennekes/integrationpluginmennekes.cpp index f8c18c0..ada6cf1 100644 --- a/mennekes/integrationpluginmennekes.cpp +++ b/mennekes/integrationpluginmennekes.cpp @@ -282,11 +282,11 @@ void IntegrationPluginMennekes::postSetupThing(Thing *thing) m_pluginTimer = hardwareManager()->pluginTimerManager()->registerTimer(2); connect(m_pluginTimer, &PluginTimer::timeout, this, [this] { foreach(AmtronECUModbusTcpConnection *connection, m_amtronECUConnections) { - qCDebug(dcMennekes()) << "Updating connection" << connection->hostAddress().toString(); + qCDebug(dcMennekes()) << "Updating connection" << connection->modbusTcpMaster()->hostAddress().toString(); connection->update(); } foreach(AmtronHCC3ModbusTcpConnection *connection, m_amtronHCC3Connections) { - qCDebug(dcMennekes()) << "Updating connection" << connection->hostAddress().toString(); + qCDebug(dcMennekes()) << "Updating connection" << connection->modbusTcpMaster()->hostAddress().toString(); connection->update(); } foreach(AmtronCompact20ModbusRtuConnection *connection, m_amtronCompact20Connections) { @@ -517,7 +517,7 @@ void IntegrationPluginMennekes::setupAmtronECUConnection(ThingSetupInfo *info) qCDebug(dcMennekes()) << "Setting up amtron wallbox on" << address.toString(); AmtronECUModbusTcpConnection *amtronECUConnection = new AmtronECUModbusTcpConnection(address, 502, 0xff, this); - connect(info, &ThingSetupInfo::aborted, amtronECUConnection, &ModbusTCPMaster::deleteLater); + connect(info, &ThingSetupInfo::aborted, amtronECUConnection, &ModbusTcpMaster::deleteLater); // Reconnect on monitor reachable changed NetworkDeviceMonitor *monitor = m_monitors.value(thing); @@ -527,7 +527,7 @@ void IntegrationPluginMennekes::setupAmtronECUConnection(ThingSetupInfo *info) return; if (reachable && !thing->stateValue("connected").toBool()) { - amtronECUConnection->setHostAddress(monitor->networkDeviceInfo().address()); + amtronECUConnection->modbusTcpMaster()->setHostAddress(monitor->networkDeviceInfo().address()); amtronECUConnection->connectDevice(); } else if (!reachable) { // Note: We disable autoreconnect explicitly and we will @@ -560,7 +560,7 @@ void IntegrationPluginMennekes::setupAmtronECUConnection(ThingSetupInfo *info) connect(amtronECUConnection, &AmtronECUModbusTcpConnection::initializationFinished, info, [=](bool success){ if (!success) { - qCWarning(dcMennekes()) << "Connection init finished with errors" << thing->name() << amtronECUConnection->hostAddress().toString(); + qCWarning(dcMennekes()) << "Connection init finished with errors" << thing->name() << amtronECUConnection->modbusTcpMaster()->hostAddress().toString(); hardwareManager()->networkDeviceDiscovery()->unregisterMonitor(monitor); amtronECUConnection->deleteLater(); info->finish(Thing::ThingErrorHardwareFailure, QT_TR_NOOP("Error communicating with the wallbox.")); @@ -649,7 +649,7 @@ void IntegrationPluginMennekes::setupAmtronHCC3Connection(ThingSetupInfo *info) qCDebug(dcMennekes()) << "Setting up amtron wallbox on" << address.toString(); AmtronHCC3ModbusTcpConnection *amtronHCC3Connection = new AmtronHCC3ModbusTcpConnection(address, 502, 0xff, this); - connect(info, &ThingSetupInfo::aborted, amtronHCC3Connection, &ModbusTCPMaster::deleteLater); + connect(info, &ThingSetupInfo::aborted, amtronHCC3Connection, &ModbusTcpMaster::deleteLater); // Reconnect on monitor reachable changed NetworkDeviceMonitor *monitor = m_monitors.value(thing); @@ -659,7 +659,7 @@ void IntegrationPluginMennekes::setupAmtronHCC3Connection(ThingSetupInfo *info) return; if (reachable && !thing->stateValue("connected").toBool()) { - amtronHCC3Connection->setHostAddress(monitor->networkDeviceInfo().address()); + amtronHCC3Connection->modbusTcpMaster()->setHostAddress(monitor->networkDeviceInfo().address()); amtronHCC3Connection->connectDevice(); } else if (!reachable) { // Note: We disable autoreconnect explicitly and we will @@ -692,7 +692,7 @@ void IntegrationPluginMennekes::setupAmtronHCC3Connection(ThingSetupInfo *info) connect(amtronHCC3Connection, &AmtronHCC3ModbusTcpConnection::initializationFinished, info, [=](bool success){ if (!success) { - qCWarning(dcMennekes()) << "Connection init finished with errors" << thing->name() << amtronHCC3Connection->hostAddress().toString(); + qCWarning(dcMennekes()) << "Connection init finished with errors" << thing->name() << amtronHCC3Connection->modbusTcpMaster()->hostAddress().toString(); hardwareManager()->networkDeviceDiscovery()->unregisterMonitor(monitor); amtronHCC3Connection->deleteLater(); info->finish(Thing::ThingErrorHardwareFailure, QT_TR_NOOP("Error communicating with the wallbox.")); diff --git a/modbuscommander/integrationpluginmodbuscommander.cpp b/modbuscommander/integrationpluginmodbuscommander.cpp index 1527675..12b5597 100644 --- a/modbuscommander/integrationpluginmodbuscommander.cpp +++ b/modbuscommander/integrationpluginmodbuscommander.cpp @@ -236,7 +236,7 @@ void IntegrationPluginModbusCommander::setupThing(ThingSetupInfo *info) m_modbusTCPMasters.take(thing)->deleteLater(); } - foreach (ModbusTCPMaster *modbusTCPMaster, m_modbusTCPMasters.values()) { + foreach (ModbusTcpMaster *modbusTCPMaster, m_modbusTCPMasters.values()) { if ((modbusTCPMaster->hostAddress() == hostAddress) && (modbusTCPMaster->port() == port)) { m_modbusTCPMasters.insert(thing, modbusTCPMaster); return info->finish(Thing::ThingErrorNoError); @@ -249,15 +249,15 @@ void IntegrationPluginModbusCommander::setupThing(ThingSetupInfo *info) qCDebug(dcModbusCommander()) << " number of retries:" << numberOfRetries; qCDebug(dcModbusCommander()) << " timeout:" << timeout; - ModbusTCPMaster *modbusTCPMaster = new ModbusTCPMaster(hostAddress, port, this); - connect(modbusTCPMaster, &ModbusTCPMaster::connectionStateChanged, this, &IntegrationPluginModbusCommander::onConnectionStateChanged); - connect(modbusTCPMaster, &ModbusTCPMaster::writeRequestExecuted, this, &IntegrationPluginModbusCommander::onRequestExecuted); - connect(modbusTCPMaster, &ModbusTCPMaster::writeRequestError, this, &IntegrationPluginModbusCommander::onRequestError); - connect(modbusTCPMaster, &ModbusTCPMaster::receivedCoil, this, &IntegrationPluginModbusCommander::onReceivedCoil); - connect(modbusTCPMaster, &ModbusTCPMaster::receivedDiscreteInput, this, &IntegrationPluginModbusCommander::onReceivedDiscreteInput); - connect(modbusTCPMaster, &ModbusTCPMaster::receivedHoldingRegister, this, &IntegrationPluginModbusCommander::onReceivedHoldingRegister); - connect(modbusTCPMaster, &ModbusTCPMaster::receivedInputRegister, this, &IntegrationPluginModbusCommander::onReceivedInputRegister); - connect(modbusTCPMaster, &ModbusTCPMaster::connectionStateChanged, info, [info, modbusTCPMaster, this] (bool connected) { + ModbusTcpMaster *modbusTCPMaster = new ModbusTcpMaster(hostAddress, port, this); + connect(modbusTCPMaster, &ModbusTcpMaster::connectionStateChanged, this, &IntegrationPluginModbusCommander::onConnectionStateChanged); + connect(modbusTCPMaster, &ModbusTcpMaster::writeRequestExecuted, this, &IntegrationPluginModbusCommander::onRequestExecuted); + connect(modbusTCPMaster, &ModbusTcpMaster::writeRequestError, this, &IntegrationPluginModbusCommander::onRequestError); + connect(modbusTCPMaster, &ModbusTcpMaster::receivedCoil, this, &IntegrationPluginModbusCommander::onReceivedCoil); + connect(modbusTCPMaster, &ModbusTcpMaster::receivedDiscreteInput, this, &IntegrationPluginModbusCommander::onReceivedDiscreteInput); + connect(modbusTCPMaster, &ModbusTcpMaster::receivedHoldingRegister, this, &IntegrationPluginModbusCommander::onReceivedHoldingRegister); + connect(modbusTCPMaster, &ModbusTcpMaster::receivedInputRegister, this, &IntegrationPluginModbusCommander::onReceivedInputRegister); + connect(modbusTCPMaster, &ModbusTcpMaster::connectionStateChanged, info, [info, modbusTCPMaster, this] (bool connected) { if (connected) { info->finish(Thing::ThingErrorNoError); m_modbusTCPMasters.insert(info->thing(), modbusTCPMaster); @@ -416,8 +416,8 @@ void IntegrationPluginModbusCommander::onPluginConfigurationChanged(const ParamT void IntegrationPluginModbusCommander::onConnectionStateChanged(bool status) { auto modbus = sender(); - if (m_modbusTCPMasters.values().contains(static_cast(modbus))) { - Thing *thing = m_modbusTCPMasters.key(static_cast(modbus)); + if (m_modbusTCPMasters.values().contains(static_cast(modbus))) { + Thing *thing = m_modbusTCPMasters.key(static_cast(modbus)); qCDebug(dcModbusCommander()) << "Connections state changed" << thing->name() << status; thing->setStateValue(modbusTCPClientConnectedStateTypeId, status); } @@ -458,8 +458,8 @@ void IntegrationPluginModbusCommander::onRequestError(QUuid requestId, const QSt void IntegrationPluginModbusCommander::onReceivedCoil(quint32 slaveAddress, quint32 modbusRegister, const QVector &values) { auto modbus = sender(); - if (m_modbusTCPMasters.values().contains(static_cast(modbus))) { - Thing *parent = m_modbusTCPMasters.key(static_cast(modbus)); + if (m_modbusTCPMasters.values().contains(static_cast(modbus))) { + Thing *parent = m_modbusTCPMasters.key(static_cast(modbus)); foreach (Thing *thing, myThings().filterByParentId(parent->id())) { if (thing->thingClassId() == coilThingClassId) { if ((thing->paramValue(m_slaveAddressParamTypeId.value(thing->thingClassId())) == slaveAddress) @@ -477,8 +477,8 @@ void IntegrationPluginModbusCommander::onReceivedDiscreteInput(quint32 slaveAddr { auto modbus = sender(); - if (m_modbusTCPMasters.values().contains(static_cast(modbus))) { - Thing *parent = m_modbusTCPMasters.key(static_cast(modbus)); + if (m_modbusTCPMasters.values().contains(static_cast(modbus))) { + Thing *parent = m_modbusTCPMasters.key(static_cast(modbus)); foreach (Thing *thing, myThings().filterByParentId(parent->id())) { if (thing->thingClassId() == discreteInputThingClassId) { if ((thing->paramValue(m_slaveAddressParamTypeId.value(thing->thingClassId())) == slaveAddress) @@ -496,8 +496,8 @@ void IntegrationPluginModbusCommander::onReceivedHoldingRegister(uint slaveAddre { auto modbus = sender(); - if (m_modbusTCPMasters.values().contains(static_cast(modbus))) { - Thing *parent = m_modbusTCPMasters.key(static_cast(modbus)); + if (m_modbusTCPMasters.values().contains(static_cast(modbus))) { + Thing *parent = m_modbusTCPMasters.key(static_cast(modbus)); foreach (Thing *thing, myThings().filterByParentId(parent->id())) { if (thing->thingClassId() == holdingRegisterThingClassId) { if ((thing->paramValue(m_slaveAddressParamTypeId.value(thing->thingClassId())) == slaveAddress) @@ -515,8 +515,8 @@ void IntegrationPluginModbusCommander::onReceivedInputRegister(uint slaveAddress { auto modbus = sender(); - if (m_modbusTCPMasters.values().contains(static_cast(modbus))) { - Thing *parent = m_modbusTCPMasters.key(static_cast(modbus)); + if (m_modbusTCPMasters.values().contains(static_cast(modbus))) { + Thing *parent = m_modbusTCPMasters.key(static_cast(modbus)); foreach (Thing *thing, myThings().filterByParentId(parent->id())) { if (thing->thingClassId() == inputRegisterThingClassId) { if ((thing->paramValue(m_slaveAddressParamTypeId.value(thing->thingClassId())) == slaveAddress) @@ -544,7 +544,7 @@ void IntegrationPluginModbusCommander::readRegister(Thing *thing) QUuid requestId; if (parent->thingClassId() == modbusTCPClientThingClassId) { - ModbusTCPMaster *modbus = m_modbusTCPMasters.value(parent); + ModbusTcpMaster *modbus = m_modbusTCPMasters.value(parent); if (!modbus) return; @@ -657,7 +657,7 @@ void IntegrationPluginModbusCommander::writeRegister(Thing *thing, ThingActionIn Action action = info->action(); if (parent->thingClassId() == modbusTCPClientThingClassId) { - ModbusTCPMaster *modbus = m_modbusTCPMasters.value(parent); + ModbusTcpMaster *modbus = m_modbusTCPMasters.value(parent); if (!modbus) { qCWarning(dcModbusCommander()) << "Could not find modbus TCP master for" << thing; info->finish(Thing::ThingErrorHardwareNotAvailable); diff --git a/modbuscommander/integrationpluginmodbuscommander.h b/modbuscommander/integrationpluginmodbuscommander.h index 5736bdf..956f835 100644 --- a/modbuscommander/integrationpluginmodbuscommander.h +++ b/modbuscommander/integrationpluginmodbuscommander.h @@ -61,7 +61,7 @@ public: private: PluginTimer *m_refreshTimer = nullptr; - QHash m_modbusTCPMasters; + QHash m_modbusTCPMasters; QHash m_modbusRtuMasters; QHash m_asyncActions; QHash m_readRequests; diff --git a/mtec/mtec.cpp b/mtec/mtec.cpp index ac953c5..ed94152 100644 --- a/mtec/mtec.cpp +++ b/mtec/mtec.cpp @@ -35,15 +35,15 @@ MTec::MTec(const QHostAddress &address, QObject *parent) : QObject(parent), m_hostAddress(address) { - m_modbusMaster = new ModbusTCPMaster(address, 502, this); + m_modbusMaster = new ModbusTcpMaster(address, 502, this); m_modbusMaster->setTimeout(2000); m_modbusMaster->setNumberOfRetries(5); - qCDebug(dcMTec()) << "Created ModbusTCPMaster for" << address.toString(); - connect(m_modbusMaster, &ModbusTCPMaster::connectionStateChanged, this, &MTec::connectedChanged); - connect(m_modbusMaster, &ModbusTCPMaster::receivedHoldingRegister, this, &MTec::onReceivedHoldingRegister); - connect(m_modbusMaster, &ModbusTCPMaster::readRequestError, this, &MTec::onModbusError); - connect(m_modbusMaster, &ModbusTCPMaster::writeRequestError, this, &MTec::onModbusError); + qCDebug(dcMTec()) << "Created ModbusTcpMaster for" << address.toString(); + connect(m_modbusMaster, &ModbusTcpMaster::connectionStateChanged, this, &MTec::connectedChanged); + connect(m_modbusMaster, &ModbusTcpMaster::receivedHoldingRegister, this, &MTec::onReceivedHoldingRegister); + connect(m_modbusMaster, &ModbusTcpMaster::readRequestError, this, &MTec::onModbusError); + connect(m_modbusMaster, &ModbusTcpMaster::writeRequestError, this, &MTec::onModbusError); } MTec::~MTec() diff --git a/mtec/mtec.h b/mtec/mtec.h index 197ec5f..20ce064 100644 --- a/mtec/mtec.h +++ b/mtec/mtec.h @@ -123,7 +123,7 @@ private: }; QHostAddress m_hostAddress; - ModbusTCPMaster *m_modbusMaster = nullptr; + ModbusTcpMaster *m_modbusMaster = nullptr; double m_roomTemperature = 0; double m_targetRoomTemperature = 0; diff --git a/mypv/integrationpluginmypv.cpp b/mypv/integrationpluginmypv.cpp index f779210..5e6c0ac 100644 --- a/mypv/integrationpluginmypv.cpp +++ b/mypv/integrationpluginmypv.cpp @@ -120,11 +120,11 @@ void IntegrationPluginMyPv::setupThing(ThingSetupInfo *info) if(thing->thingClassId() == elwaThingClassId) { QHostAddress address = QHostAddress(thing->paramValue(elwaThingIpAddressParamTypeId).toString()); - ModbusTCPMaster *modbusTcpMaster = new ModbusTCPMaster(address, 502, this); - connect(modbusTcpMaster, &ModbusTCPMaster::connectionStateChanged, this, &IntegrationPluginMyPv::onConnectionStateChanged); - connect(modbusTcpMaster, &ModbusTCPMaster::receivedHoldingRegister, this, &IntegrationPluginMyPv::onReceivedHoldingRegister); - connect(modbusTcpMaster, &ModbusTCPMaster::writeRequestExecuted, this, &IntegrationPluginMyPv::onWriteRequestExecuted); - connect(modbusTcpMaster, &ModbusTCPMaster::writeRequestError, this, &IntegrationPluginMyPv::onWriteRequestError); + ModbusTcpMaster *modbusTcpMaster = new ModbusTcpMaster(address, 502, this); + connect(modbusTcpMaster, &ModbusTcpMaster::connectionStateChanged, this, &IntegrationPluginMyPv::onConnectionStateChanged); + connect(modbusTcpMaster, &ModbusTcpMaster::receivedHoldingRegister, this, &IntegrationPluginMyPv::onReceivedHoldingRegister); + connect(modbusTcpMaster, &ModbusTcpMaster::writeRequestExecuted, this, &IntegrationPluginMyPv::onWriteRequestExecuted); + connect(modbusTcpMaster, &ModbusTcpMaster::writeRequestError, this, &IntegrationPluginMyPv::onWriteRequestError); m_modbusTcpMasters.insert(thing, modbusTcpMaster); } else { @@ -147,7 +147,7 @@ void IntegrationPluginMyPv::postSetupThing(Thing *thing) void IntegrationPluginMyPv::thingRemoved(Thing *thing) { if (thing->thingClassId() == elwaThingClassId) { - ModbusTCPMaster *modbusTCPMaster = m_modbusTcpMasters.take(thing); + ModbusTcpMaster *modbusTCPMaster = m_modbusTcpMasters.take(thing); modbusTCPMaster->deleteLater(); } @@ -164,7 +164,7 @@ void IntegrationPluginMyPv::executeAction(ThingActionInfo *info) if (thing->thingClassId() == elwaThingClassId) { - ModbusTCPMaster *modbusTCPMaster = m_modbusTcpMasters.value(thing); + ModbusTcpMaster *modbusTCPMaster = m_modbusTcpMasters.value(thing); if (action.actionTypeId() == elwaHeatingPowerActionTypeId) { int heatingPower = action.param(elwaHeatingPowerActionHeatingPowerParamTypeId).value().toInt(); QUuid requestId = modbusTCPMaster->writeHoldingRegister(0xff, ElwaModbusRegisters::Power, heatingPower); @@ -202,7 +202,7 @@ void IntegrationPluginMyPv::onRefreshTimer() void IntegrationPluginMyPv::onConnectionStateChanged(bool status) { - ModbusTCPMaster *modbusTcpMaster = static_cast(sender()); + ModbusTcpMaster *modbusTcpMaster = static_cast(sender()); Thing *thing = m_modbusTcpMasters.key(modbusTcpMaster); if (!thing) return; @@ -230,7 +230,7 @@ void IntegrationPluginMyPv::onWriteRequestError(QUuid requestId, const QString & void IntegrationPluginMyPv::onReceivedHoldingRegister(quint32 slaveAddress, quint32 modbusRegister, const QVector &value) { Q_UNUSED(slaveAddress) - ModbusTCPMaster *modbusTcpMaster = static_cast(sender()); + ModbusTcpMaster *modbusTcpMaster = static_cast(sender()); Thing *thing = m_modbusTcpMasters.key(modbusTcpMaster); if (!thing) return; @@ -299,7 +299,7 @@ void IntegrationPluginMyPv::onReceivedHoldingRegister(quint32 slaveAddress, quin void IntegrationPluginMyPv::update(Thing *thing) { if (thing->thingClassId() == elwaThingClassId) { - ModbusTCPMaster *modbusTCPMaster = m_modbusTcpMasters.value(thing); + ModbusTcpMaster *modbusTCPMaster = m_modbusTcpMasters.value(thing); modbusTCPMaster->readHoldingRegister(0xff, ElwaModbusRegisters::Status); modbusTCPMaster->readHoldingRegister(0xff, ElwaModbusRegisters::WaterTemperature); diff --git a/mypv/integrationpluginmypv.h b/mypv/integrationpluginmypv.h index d5959cd..11cd8b3 100644 --- a/mypv/integrationpluginmypv.h +++ b/mypv/integrationpluginmypv.h @@ -80,7 +80,7 @@ private: }; PluginTimer *m_refreshTimer = nullptr; - QHash m_modbusTcpMasters; + QHash m_modbusTcpMasters; QHash m_asyncActions; void update(Thing *thing); diff --git a/phoenixconnect/integrationpluginphoenixconnect.cpp b/phoenixconnect/integrationpluginphoenixconnect.cpp index 5c435cd..9e37ee9 100644 --- a/phoenixconnect/integrationpluginphoenixconnect.cpp +++ b/phoenixconnect/integrationpluginphoenixconnect.cpp @@ -115,7 +115,7 @@ void IntegrationPluginPhoenixConnect::setupThing(ThingSetupInfo *info) }); connect(monitor, &NetworkDeviceMonitor::networkDeviceInfoChanged, this, [=](const NetworkDeviceInfo &networkDeviceInfo){ - connection->setHostAddress(networkDeviceInfo.address()); + connection->modbusTcpMaster()->setHostAddress(networkDeviceInfo.address()); }); connect(connection, &PhoenixModbusTcpConnection::reachableChanged, thing, [connection, thing](bool reachable){ diff --git a/sma/integrationpluginsma.cpp b/sma/integrationpluginsma.cpp index 93a82d6..765cc0e 100644 --- a/sma/integrationpluginsma.cpp +++ b/sma/integrationpluginsma.cpp @@ -705,7 +705,7 @@ void IntegrationPluginSma::setupModbusInverterConnection(ThingSetupInfo *info) return; if (reachable && !thing->stateValue("connected").toBool()) { - connection->setHostAddress(monitor->networkDeviceInfo().address()); + connection->modbusTcpMaster()->setHostAddress(monitor->networkDeviceInfo().address()); connection->connectDevice(); } else if (!reachable) { // Note: We disable autoreconnect explicitly and we will @@ -747,7 +747,7 @@ void IntegrationPluginSma::setupModbusInverterConnection(ThingSetupInfo *info) connect(connection, &SmaInverterModbusTcpConnection::initializationFinished, info, [=](bool success){ if (!success) { - qCWarning(dcSma()) << "Connection init finished with errors" << thing->name() << connection->hostAddress().toString(); + qCWarning(dcSma()) << "Connection init finished with errors" << thing->name() << connection->modbusTcpMaster()->hostAddress().toString(); hardwareManager()->networkDeviceDiscovery()->unregisterMonitor(monitor); connection->deleteLater(); info->finish(Thing::ThingErrorHardwareFailure, QT_TR_NOOP("Could not initialize the communication with the inverter.")); diff --git a/sma/modbus/smamodbusdiscovery.cpp b/sma/modbus/smamodbusdiscovery.cpp index c2621d8..22c7d2b 100644 --- a/sma/modbus/smamodbusdiscovery.cpp +++ b/sma/modbus/smamodbusdiscovery.cpp @@ -139,7 +139,7 @@ void SmaModbusDiscovery::checkNetworkDevice(const NetworkDeviceInfo &networkDevi }); // If we get any error...skip this host... - connect(connection, &SmaInverterModbusTcpConnection::connectionErrorOccurred, this, [=](QModbusDevice::Error error){ + connect(connection->modbusTcpMaster(), &ModbusTcpMaster::connectionErrorOccurred, this, [=](QModbusDevice::Error error){ if (error != QModbusDevice::NoError) { qCDebug(dcSma()) << "Discovery: Connection error on" << networkDeviceInfo.address().toString() << "Continue...";; cleanupConnection(connection); diff --git a/stiebeleltron/integrationpluginstiebeleltron.cpp b/stiebeleltron/integrationpluginstiebeleltron.cpp index 3980d9b..9d1705d 100644 --- a/stiebeleltron/integrationpluginstiebeleltron.cpp +++ b/stiebeleltron/integrationpluginstiebeleltron.cpp @@ -102,14 +102,14 @@ void IntegrationPluginStiebelEltron::setupThing(ThingSetupInfo *info) { StiebelEltronModbusTcpConnection *connection = new StiebelEltronModbusTcpConnection(address, port, slaveId, this); - connect(connection, &StiebelEltronModbusTcpConnection::connectionStateChanged, thing, - [thing, connection](bool status) { - qCDebug(dcStiebelEltron()) << "Connected changed to" << status << "for" << thing; - if (status) { + connect(connection, &StiebelEltronModbusTcpConnection::reachableChanged, thing, + [thing, connection](bool reachable) { + qCDebug(dcStiebelEltron()) << "Reachable changed to" << reachable << "for" << thing; + if (reachable) { connection->update(); } - thing->setStateValue(stiebelEltronConnectedStateTypeId, status); + thing->setStateValue(stiebelEltronConnectedStateTypeId, reachable); }); connect(connection, &StiebelEltronModbusTcpConnection::outdoorTemperatureChanged, thing, @@ -268,7 +268,7 @@ void IntegrationPluginStiebelEltron::postSetupThing(Thing *thing) { m_pluginTimer = hardwareManager()->pluginTimerManager()->registerTimer(10); connect(m_pluginTimer, &PluginTimer::timeout, this, [this] { foreach (StiebelEltronModbusTcpConnection *connection, m_connections) { - if (connection->connected()) { + if (connection->reachable()) { connection->update(); } } @@ -294,7 +294,7 @@ void IntegrationPluginStiebelEltron::executeAction(ThingActionInfo *info) { Thing *thing = info->thing(); StiebelEltronModbusTcpConnection *connection = m_connections.value(thing); - if (!connection->connected()) { + if (!connection->reachable()) { qCWarning(dcStiebelEltron()) << "Could not execute action. The modbus connection is currently " "not available."; info->finish(Thing::ThingErrorHardwareNotAvailable); diff --git a/webasto/webasto.cpp b/webasto/webasto.cpp index 94c6d77..a89a1e0 100644 --- a/webasto/webasto.cpp +++ b/webasto/webasto.cpp @@ -35,13 +35,13 @@ Webasto::Webasto(const QHostAddress &address, uint port, QObject *parent) : QObject(parent) { qCDebug(dcWebasto()) << "Webasto: Webasto connection created" << address.toString() << port; - m_modbusConnection = new ModbusTCPMaster(address, port, this); + m_modbusConnection = new ModbusTcpMaster(address, port, this); m_modbusConnection->setNumberOfRetries(3); m_modbusConnection->setTimeout(1000); - connect(m_modbusConnection, &ModbusTCPMaster::receivedHoldingRegister, this, &Webasto::onReceivedHoldingRegister); - connect(m_modbusConnection, &ModbusTCPMaster::writeRequestExecuted, this, &Webasto::writeRequestExecuted); - connect(m_modbusConnection, &ModbusTCPMaster::writeRequestError, this, &Webasto::writeRequestError); + connect(m_modbusConnection, &ModbusTcpMaster::receivedHoldingRegister, this, &Webasto::onReceivedHoldingRegister); + connect(m_modbusConnection, &ModbusTcpMaster::writeRequestExecuted, this, &Webasto::writeRequestExecuted); + connect(m_modbusConnection, &ModbusTcpMaster::writeRequestError, this, &Webasto::writeRequestError); m_lifeBitTimer = new QTimer(this); m_lifeBitTimer->start(10000); diff --git a/webasto/webasto.h b/webasto/webasto.h index 0beb557..e79b5d6 100644 --- a/webasto/webasto.h +++ b/webasto/webasto.h @@ -131,7 +131,7 @@ public: private: - ModbusTCPMaster *m_modbusConnection = nullptr; + ModbusTcpMaster *m_modbusConnection = nullptr; QHostAddress m_address; uint m_unitId = 255;