Allow creating multiple connections on one ModbusTcpMaster
This commit is contained in:
parent
ba922c7e7e
commit
1b423186bb
@ -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;
|
||||
|
||||
@ -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();
|
||||
}
|
||||
});
|
||||
|
||||
BIN
debs_1.8.2+202308081314~dc23d1b~buster.tar
Normal file
BIN
debs_1.8.2+202308081314~dc23d1b~buster.tar
Normal file
Binary file not shown.
@ -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;
|
||||
|
||||
@ -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()
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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."));
|
||||
|
||||
@ -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."));
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -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<quint16> &values)
|
||||
QUuid ModbusTcpMaster::writeHoldingRegisters(uint slaveAddress, uint registerAddress, const QVector<quint16> &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<quint16>() << static_cast<quint16>(value));
|
||||
}
|
||||
|
||||
QUuid ModbusTCPMaster::writeCoils(uint slaveAddress, uint registerAddress, const QVector<quint16> &values)
|
||||
QUuid ModbusTcpMaster::writeCoils(uint slaveAddress, uint registerAddress, const QVector<quint16> &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<quint16>() << 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);
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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<quint16> &values)' % (className, propertyName[0].upper() + propertyName[1:]))
|
||||
writeLine(fileDescriptor, '{')
|
||||
|
||||
@ -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']:
|
||||
|
||||
@ -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."));
|
||||
|
||||
@ -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<ModbusTCPMaster *>(modbus))) {
|
||||
Thing *thing = m_modbusTCPMasters.key(static_cast<ModbusTCPMaster *>(modbus));
|
||||
if (m_modbusTCPMasters.values().contains(static_cast<ModbusTcpMaster *>(modbus))) {
|
||||
Thing *thing = m_modbusTCPMasters.key(static_cast<ModbusTcpMaster *>(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<quint16> &values)
|
||||
{
|
||||
auto modbus = sender();
|
||||
if (m_modbusTCPMasters.values().contains(static_cast<ModbusTCPMaster *>(modbus))) {
|
||||
Thing *parent = m_modbusTCPMasters.key(static_cast<ModbusTCPMaster *>(modbus));
|
||||
if (m_modbusTCPMasters.values().contains(static_cast<ModbusTcpMaster *>(modbus))) {
|
||||
Thing *parent = m_modbusTCPMasters.key(static_cast<ModbusTcpMaster *>(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<ModbusTCPMaster *>(modbus))) {
|
||||
Thing *parent = m_modbusTCPMasters.key(static_cast<ModbusTCPMaster *>(modbus));
|
||||
if (m_modbusTCPMasters.values().contains(static_cast<ModbusTcpMaster *>(modbus))) {
|
||||
Thing *parent = m_modbusTCPMasters.key(static_cast<ModbusTcpMaster *>(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<ModbusTCPMaster *>(modbus))) {
|
||||
Thing *parent = m_modbusTCPMasters.key(static_cast<ModbusTCPMaster *>(modbus));
|
||||
if (m_modbusTCPMasters.values().contains(static_cast<ModbusTcpMaster *>(modbus))) {
|
||||
Thing *parent = m_modbusTCPMasters.key(static_cast<ModbusTcpMaster *>(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<ModbusTCPMaster *>(modbus))) {
|
||||
Thing *parent = m_modbusTCPMasters.key(static_cast<ModbusTCPMaster *>(modbus));
|
||||
if (m_modbusTCPMasters.values().contains(static_cast<ModbusTcpMaster *>(modbus))) {
|
||||
Thing *parent = m_modbusTCPMasters.key(static_cast<ModbusTcpMaster *>(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);
|
||||
|
||||
@ -61,7 +61,7 @@ public:
|
||||
private:
|
||||
PluginTimer *m_refreshTimer = nullptr;
|
||||
|
||||
QHash<Thing*, ModbusTCPMaster*> m_modbusTCPMasters;
|
||||
QHash<Thing*, ModbusTcpMaster*> m_modbusTCPMasters;
|
||||
QHash<Thing *, ModbusRtuMaster *> m_modbusRtuMasters;
|
||||
QHash<QUuid, ThingActionInfo*> m_asyncActions;
|
||||
QHash<QUuid, Thing*> m_readRequests;
|
||||
|
||||
@ -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()
|
||||
|
||||
@ -123,7 +123,7 @@ private:
|
||||
};
|
||||
|
||||
QHostAddress m_hostAddress;
|
||||
ModbusTCPMaster *m_modbusMaster = nullptr;
|
||||
ModbusTcpMaster *m_modbusMaster = nullptr;
|
||||
|
||||
double m_roomTemperature = 0;
|
||||
double m_targetRoomTemperature = 0;
|
||||
|
||||
@ -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<ModbusTCPMaster *>(sender());
|
||||
ModbusTcpMaster *modbusTcpMaster = static_cast<ModbusTcpMaster *>(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<quint16> &value)
|
||||
{
|
||||
Q_UNUSED(slaveAddress)
|
||||
ModbusTCPMaster *modbusTcpMaster = static_cast<ModbusTCPMaster *>(sender());
|
||||
ModbusTcpMaster *modbusTcpMaster = static_cast<ModbusTcpMaster *>(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);
|
||||
|
||||
@ -80,7 +80,7 @@ private:
|
||||
};
|
||||
|
||||
PluginTimer *m_refreshTimer = nullptr;
|
||||
QHash<Thing *, ModbusTCPMaster *> m_modbusTcpMasters;
|
||||
QHash<Thing *, ModbusTcpMaster *> m_modbusTcpMasters;
|
||||
QHash<QUuid, ThingActionInfo *> m_asyncActions;
|
||||
|
||||
void update(Thing *thing);
|
||||
|
||||
@ -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){
|
||||
|
||||
@ -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."));
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -131,7 +131,7 @@ public:
|
||||
|
||||
private:
|
||||
|
||||
ModbusTCPMaster *m_modbusConnection = nullptr;
|
||||
ModbusTcpMaster *m_modbusConnection = nullptr;
|
||||
QHostAddress m_address;
|
||||
uint m_unitId = 255;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user