Add initialized property
parent
4d54c662cb
commit
eae2cbe0ee
|
|
@ -590,6 +590,8 @@ def writeInitMethodImplementationTcp(fileDescriptor, className, registerDefiniti
|
|||
writeLine(fileDescriptor, ' return false;')
|
||||
writeLine(fileDescriptor, ' }')
|
||||
writeLine(fileDescriptor)
|
||||
writeLine(fileDescriptor, ' m_initializing = true;')
|
||||
writeLine(fileDescriptor)
|
||||
|
||||
# Read individual registers
|
||||
for registerDefinition in registerDefinitions:
|
||||
|
|
@ -614,6 +616,8 @@ def writeInitMethodImplementationTcp(fileDescriptor, className, registerDefiniti
|
|||
writeLine(fileDescriptor, ' return false;')
|
||||
writeLine(fileDescriptor, ' }')
|
||||
writeLine(fileDescriptor)
|
||||
writeLine(fileDescriptor, ' m_initializing = true;')
|
||||
writeLine(fileDescriptor)
|
||||
writeLine(fileDescriptor, ' // Parent object for the init process')
|
||||
writeLine(fileDescriptor, ' m_initObject = new QObject(this);')
|
||||
writeLine(fileDescriptor)
|
||||
|
|
@ -744,6 +748,7 @@ def writeInitMethodImplementationTcp(fileDescriptor, className, registerDefiniti
|
|||
|
||||
else:
|
||||
writeLine(fileDescriptor, ' // No init registers defined. Nothing to be done and we are finished.')
|
||||
writeLine(fileDescriptor, ' m_initializing = false;')
|
||||
writeLine(fileDescriptor, ' emit initializationFinished(true);')
|
||||
|
||||
writeLine(fileDescriptor, ' return true;')
|
||||
|
|
|
|||
|
|
@ -75,6 +75,7 @@ def writeTcpHeaderFile():
|
|||
writeLine(headerFile, ' quint16 slaveId() const;')
|
||||
writeLine(headerFile)
|
||||
writeLine(headerFile, ' bool reachable() const;')
|
||||
writeLine(headerFile, ' bool initializing() const;')
|
||||
writeLine(headerFile)
|
||||
|
||||
# Write init and update method declarations
|
||||
|
|
@ -180,6 +181,7 @@ def writeTcpHeaderFile():
|
|||
writeLine(headerFile)
|
||||
|
||||
writeLine(headerFile, ' bool m_reachable = false;')
|
||||
writeLine(headerFile, ' bool m_initializing = false;')
|
||||
writeLine(headerFile, ' QModbusReply *m_checkRechableReply = nullptr;')
|
||||
writeLine(headerFile, ' uint m_checkReachableRetries = 0;')
|
||||
writeLine(headerFile, ' uint m_checkReachableRetriesCount = 0;')
|
||||
|
|
@ -273,6 +275,12 @@ def writeTcpSourceFile():
|
|||
writeLine(sourceFile, '}')
|
||||
writeLine(sourceFile)
|
||||
|
||||
writeLine(sourceFile, 'bool %s::initializing() const' % (className))
|
||||
writeLine(sourceFile, '{')
|
||||
writeLine(sourceFile, ' return m_initializing;')
|
||||
writeLine(sourceFile, '}')
|
||||
writeLine(sourceFile)
|
||||
|
||||
writeLine(sourceFile, 'uint %s::checkReachableRetries() const' % (className))
|
||||
writeLine(sourceFile, '{')
|
||||
writeLine(sourceFile, ' return m_checkReachableRetries;')
|
||||
|
|
@ -423,6 +431,7 @@ def writeTcpSourceFile():
|
|||
writeLine(sourceFile, ' qCWarning(dc%s()) << "Initialization finished of %s" << m_modbusTcpMaster->hostAddress().toString() << "failed.";' % (className, className))
|
||||
writeLine(sourceFile, ' }')
|
||||
writeLine(sourceFile)
|
||||
writeLine(sourceFile, ' m_initializing = false;')
|
||||
|
||||
if queuedRequests:
|
||||
writeLine(sourceFile, ' m_initRequestQueue.clear();')
|
||||
|
|
@ -460,6 +469,7 @@ def writeTcpSourceFile():
|
|||
writeLine(sourceFile, ' m_communicationWorking = false;')
|
||||
writeLine(sourceFile, ' m_communicationFailedCounter = 0;')
|
||||
writeLine(sourceFile, ' m_checkReachableRetriesCount = 0;')
|
||||
writeLine(sourceFile, ' m_initializing = false;')
|
||||
|
||||
if queuedRequests:
|
||||
writeLine(sourceFile, ' m_updateRequestQueue.clear();')
|
||||
|
|
|
|||
|
|
@ -197,7 +197,7 @@ void IntegrationPluginSolax::setupThing(ThingSetupInfo *info)
|
|||
// Try once to reconnect the device
|
||||
solaxConnection->reconnectDevice();
|
||||
} else {
|
||||
// Start update cycle
|
||||
qCInfo(dcSolax()) << "Connection initialized successfully for" << thing;
|
||||
solaxConnection->update();
|
||||
}
|
||||
});
|
||||
|
|
@ -309,9 +309,6 @@ void IntegrationPluginSolax::setupThing(ThingSetupInfo *info)
|
|||
batteryThing->setStateValue(solaxBatteryChargingStateStateTypeId, "charging");
|
||||
}
|
||||
}
|
||||
|
||||
// Run the next update cycle
|
||||
solaxConnection->update();
|
||||
});
|
||||
|
||||
connect(thing, &Thing::settingChanged, solaxConnection, [this, thing](const ParamTypeId ¶mTypeId, const QVariant &value){
|
||||
|
|
@ -410,6 +407,28 @@ void IntegrationPluginSolax::setupThing(ThingSetupInfo *info)
|
|||
|
||||
void IntegrationPluginSolax::postSetupThing(Thing *thing)
|
||||
{
|
||||
|
||||
if (thing->thingClassId() == solaxInverterTcpThingClassId) {
|
||||
|
||||
// Create the update timer if not already set up
|
||||
if (!m_refreshTimer) {
|
||||
qCDebug(dcSolax()) << "Starting plugin timer...";
|
||||
m_refreshTimer = hardwareManager()->pluginTimerManager()->registerTimer(2);
|
||||
connect(m_refreshTimer, &PluginTimer::timeout, this, [this] {
|
||||
foreach(SolaxModbusTcpConnection *connection, m_tcpConnections) {
|
||||
if (connection->initializing())
|
||||
continue;
|
||||
|
||||
//qCDebug(dcSolax()) << "Update connection" << connection->modbusTcpMaster()->hostAddress().toString();
|
||||
connection->update();
|
||||
}
|
||||
});
|
||||
|
||||
m_refreshTimer->start();
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
if (thing->thingClassId() == solaxMeterThingClassId || thing->thingClassId() == solaxBatteryThingClassId || thing->thingClassId() == solaxInverterChildThingClassId) {
|
||||
Thing *connectionThing = myThings().findById(thing->parentId());
|
||||
if (connectionThing) {
|
||||
|
|
@ -432,6 +451,11 @@ void IntegrationPluginSolax::thingRemoved(Thing *thing)
|
|||
if (m_monitors.contains(thing))
|
||||
hardwareManager()->networkDeviceDiscovery()->unregisterMonitor(m_monitors.take(thing));
|
||||
|
||||
if (myThings().isEmpty() && m_refreshTimer) {
|
||||
qCDebug(dcSolax()) << "Stopping refresh timer";
|
||||
hardwareManager()->pluginTimerManager()->unregisterTimer(m_refreshTimer);
|
||||
m_refreshTimer = nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
Thing *IntegrationPluginSolax::getMeterThing(Thing *parentThing, uint meterId)
|
||||
|
|
|
|||
|
|
@ -56,6 +56,8 @@ public:
|
|||
void thingRemoved(Thing *thing) override;
|
||||
|
||||
private:
|
||||
PluginTimer *m_refreshTimer = nullptr;
|
||||
|
||||
QHash<Thing *, NetworkDeviceMonitor *> m_monitors;
|
||||
QHash<Thing *, SolaxModbusTcpConnection *> m_tcpConnections;
|
||||
QHash<Thing *, SolaxModbusRtuConnection *> m_rtuConnections;
|
||||
|
|
|
|||
Loading…
Reference in New Issue