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