diff --git a/libnymea-modbus/tools/connectiontool/modbustcp.py b/libnymea-modbus/tools/connectiontool/modbustcp.py index a843a90..508bae5 100644 --- a/libnymea-modbus/tools/connectiontool/modbustcp.py +++ b/libnymea-modbus/tools/connectiontool/modbustcp.py @@ -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) diff --git a/libnymea-modbus/tools/connectiontool/toolcommon.py b/libnymea-modbus/tools/connectiontool/toolcommon.py index ea52f20..3e96702 100644 --- a/libnymea-modbus/tools/connectiontool/toolcommon.py +++ b/libnymea-modbus/tools/connectiontool/toolcommon.py @@ -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'] diff --git a/phoenixconnect/integrationpluginphoenixconnect.cpp b/phoenixconnect/integrationpluginphoenixconnect.cpp index 8487bbc..ddd2a4f 100644 --- a/phoenixconnect/integrationpluginphoenixconnect.cpp +++ b/phoenixconnect/integrationpluginphoenixconnect.cpp @@ -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); diff --git a/schrack/integrationpluginschrack.cpp b/schrack/integrationpluginschrack.cpp index a7e99fa..8ba80ca 100644 --- a/schrack/integrationpluginschrack.cpp +++ b/schrack/integrationpluginschrack.cpp @@ -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;