Fix tcp update method and update related plugins

pull/75/head
Simon Stürz 2022-07-29 11:53:35 +02:00
parent 86c730a0da
commit 5bff288ec6
4 changed files with 25 additions and 27 deletions

View File

@ -454,7 +454,7 @@ def writeUpdateMethodTcp(fileDescriptor, className, registerDefinitions, blockDe
writeLine(fileDescriptor)
writeLine(fileDescriptor, ' m_pendingUpdateReplies.append(reply);')
writeLine(fileDescriptor, ' connect(reply, &QModbusReply::finished, reply, &QModbusReply::deleteLater);')
writeLine(fileDescriptor, ' connect(reply, &QModbusReply::finished, m_initObject, [this, reply](){')
writeLine(fileDescriptor, ' connect(reply, &QModbusReply::finished, this, [this, reply](){')
writeLine(fileDescriptor, ' m_pendingUpdateReplies.removeAll(reply);')
writeLine(fileDescriptor, ' if (reply->error() != QModbusDevice::NoError) {')
writeLine(fileDescriptor, ' verifyUpdateFinished();')
@ -467,7 +467,7 @@ def writeUpdateMethodTcp(fileDescriptor, className, registerDefinitions, blockDe
writeLine(fileDescriptor, ' verifyUpdateFinished();')
writeLine(fileDescriptor, ' });')
writeLine(fileDescriptor)
writeLine(fileDescriptor, ' connect(reply, &QModbusReply::errorOccurred, m_initObject, [this, reply] (QModbusDevice::Error error){')
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, ' });')
@ -506,7 +506,7 @@ def writeUpdateMethodTcp(fileDescriptor, className, registerDefinitions, blockDe
writeLine(fileDescriptor)
writeLine(fileDescriptor, ' m_pendingUpdateReplies.append(reply);')
writeLine(fileDescriptor, ' connect(reply, &QModbusReply::finished, reply, &QModbusReply::deleteLater);')
writeLine(fileDescriptor, ' connect(reply, &QModbusReply::finished, m_initObject, [this, reply](){')
writeLine(fileDescriptor, ' connect(reply, &QModbusReply::finished, this, [this, reply](){')
writeLine(fileDescriptor, ' m_pendingUpdateReplies.removeAll(reply);')
writeLine(fileDescriptor, ' if (reply->error() != QModbusDevice::NoError) {')
writeLine(fileDescriptor, ' verifyUpdateFinished();')
@ -528,7 +528,7 @@ def writeUpdateMethodTcp(fileDescriptor, className, registerDefinitions, blockDe
writeLine(fileDescriptor, ' verifyUpdateFinished();')
writeLine(fileDescriptor, ' });')
writeLine(fileDescriptor)
writeLine(fileDescriptor, ' connect(reply, &QModbusReply::errorOccurred, m_initObject, [reply] (QModbusDevice::Error error){')
writeLine(fileDescriptor, ' connect(reply, &QModbusReply::errorOccurred, this, [reply] (QModbusDevice::Error error){')
writeLine(fileDescriptor, ' qCWarning(dc%s()) << "Modbus reply error occurred while updating block \\"%s\\" registers" << error << reply->errorString();' % (className, blockName))
writeLine(fileDescriptor, ' });')
writeLine(fileDescriptor)

View File

@ -429,31 +429,12 @@ def writeRegistersDebugLine(fileDescriptor, debugObjectParamName, registerDefini
for registerDefinition in registerDefinitions:
propertyName = registerDefinition['id']
propertyTyp = getCppDataType(registerDefinition)
line = ('" - %s:" << %s->%s()' % (registerDefinition['description'], debugObjectParamName, propertyName))
line = ('" - %s: " << %s->%s()' % (registerDefinition['description'], debugObjectParamName, propertyName))
if 'unit' in registerDefinition and registerDefinition['unit'] != '':
line += (' << " [%s]"' % registerDefinition['unit'])
writeLine(fileDescriptor, ' debug.nospace().noquote() << %s << "\\n";' % (line))
# def writeUpdateMethod(fileDescriptor, className, registerDefinitions, blockDefinitions):
# writeLine(fileDescriptor, 'bool %s::update()' % (className))
# writeLine(fileDescriptor, '{')
# for registerDefinition in registerDefinitions:
# propertyName = registerDefinition['id']
# if 'readSchedule' in registerDefinition and registerDefinition['readSchedule'] == 'update':
# writeLine(fileDescriptor, ' update%s();' % (propertyName[0].upper() + propertyName[1:]))
# # Add the update block methods
# for blockDefinition in blockDefinitions:
# blockName = blockDefinition['id']
# if 'readSchedule' in blockDefinition and blockDefinition['readSchedule'] == 'update':
# writeLine(fileDescriptor, ' update%sBlock();' % (blockName[0].upper() + blockName[1:]))
# writeLine(fileDescriptor, ' return true;')
# writeLine(fileDescriptor, '}')
# writeLine(fileDescriptor)
def writePropertyChangedSignals(fileDescriptor, registerDefinitions):
for registerDefinition in registerDefinitions:
propertyName = registerDefinition['id']

View File

@ -128,6 +128,10 @@ void IntegrationPluginPhoenixConnect::setupThing(ThingSetupInfo *info)
}
});
connect(connection, &PhoenixModbusTcpConnection::updateFinished, thing, [connection, thing](){
qCDebug(dcPhoenixContact()) << "Update finished:" << thing->name() << connection;
});
connect(connection, &PhoenixModbusTcpConnection::initializationFinished, info, [this, thing, connection, monitor, info](bool success){
if (success) {
qCDebug(dcPhoenixContact()) << "Phoenix wallbox initialized. Firmware version:" << connection->firmwareVersion();
@ -141,11 +145,15 @@ void IntegrationPluginPhoenixConnect::setupThing(ThingSetupInfo *info)
}
});
connect(connection, &PhoenixModbusTcpConnection::initializationFinished, thing, [thing, connection]{
thing->setStateValue("connected", true);
thing->setStateValue("firmwareVersion", connection->firmwareVersion());
connect(connection, &PhoenixModbusTcpConnection::initializationFinished, thing, [thing, connection](bool success){
if (success) {
thing->setStateValue("connected", true);
thing->setStateValue("firmwareVersion", connection->firmwareVersion());
}
});
// Handle property changed signals
connect(connection, &PhoenixModbusTcpConnection::cpStatusChanged, thing, [thing, connection](quint16 cpStatus){
qCDebug(dcPhoenixContact()) << "CP Signal state changed:" << (char)cpStatus;
thing->setStateValue("pluggedIn", cpStatus >= 66);

View File

@ -96,6 +96,15 @@ void IntegrationPluginSchrack::setupThing(ThingSetupInfo *info)
CionModbusRtuConnection *cionConnection = new CionModbusRtuConnection(hardwareManager()->modbusRtuResource()->getModbusRtuMaster(uuid), address, this);
connect(cionConnection, &CionModbusRtuConnection::updateFinished, thing, [cionConnection, thing](){
qCDebug(dcSchrack()) << "Update finished:" << thing->name() << cionConnection;
});
connect(cionConnection, &CionModbusRtuConnection::reachableChanged, thing, [thing](bool reachable){
qCDebug(dcSchrack()) << "Reachable changed:" << thing->name() << reachable;
});
// Note: This register really only tells us if we can control anything... i.e. if the wallbox is unlocked via RFID
connect(cionConnection, &CionModbusRtuConnection::chargingEnabledChanged, thing, [=](quint16 charging){
qCDebug(dcSchrack()) << "Charging enabled changed:" << charging;