Multi brokers MQTT semble fonctionner

This commit is contained in:
2025-05-03 15:01:06 -04:00
parent 9e43e9c748
commit e298577c2f
17 changed files with 780 additions and 558 deletions
+69 -13
View File
@@ -23,7 +23,7 @@ COtarcikCan::COtarcikCan(QObject *parent) : QObject(parent)
{
mGPTimer = new QTimer;
connect(mGPTimer,SIGNAL(timeout()),this,SLOT(GPTimerExpired()));
mCANBusMQTTClient.mProgramPtr = this;
// mCANBusMQTTClient.mProgramPtr = this;
mWatchdogTimer = new QTimer;
connect(mWatchdogTimer,&QTimer::timeout,this,&COtarcikCan::WatchdogUpdateTimerExpired);
mWatchdogTimer->setSingleShot(false);
@@ -41,7 +41,14 @@ COtarcikCan::~COtarcikCan()
}
mCANDevicesList.clear();
mCANBusMQTTClient.DisconnectFromBroker();
while(!mCANBusMQTTClientList.isEmpty())
{
mCANBusMQTTClientList.first()->DisconnectFromBroker();
delete mCANBusMQTTClientList.takeFirst();
}
// mCANBusMQTTClient.DisconnectFromBroker();
delete mGPTimer;
@@ -84,12 +91,21 @@ int COtarcikCan::Start()
mCloudLoggingParamsList = mSystemConfig.GetCloudParams();
mMainWindow.mDataLoggingSettingsPage->SetCloudParams(mCloudLoggingParamsList);
mCANBusMQTTClient.SetMQTTParams(mCloudLoggingParamsList->at(0)); //TODO: Fix that
mCANBusMQTTClient.SetCANDevicesList(&mCANDevicesList);
for(int i = 0; i < mCloudLoggingParamsList->size(); i++)
{
CMQTTClientWrapper *NewMQTTWrapper = new CMQTTClientWrapper;
NewMQTTWrapper->mProgramPtr = this;
NewMQTTWrapper->SetMQTTParams(mCloudLoggingParamsList->at(i));
NewMQTTWrapper->SetCANDevicesList(&mCANDevicesList);
#ifdef ENABLE_CHIPSET_DRIVER
mCANBusMQTTClient.SetCPUInterface(&mCPUInterface);
NewMQTTWrapper->SetCPUInterface(&mCPUInterface);
#endif
mCANBusMQTTClient.SetMQTTServerPresenceCANBit(mSystemConfig.GetDeviceDetectionConfig()->mMQTTDetectionCANStatusBit);
NewMQTTWrapper->SetMQTTServerPresenceCANBit(mSystemConfig.GetDeviceDetectionConfig()->mMQTTDetectionCANStatusBit);
mCANBusMQTTClientList.append(NewMQTTWrapper);
}
// mCANBusMQTTClient.SetMQTTParams(mCloudLoggingParamsList->at(0)); //TODO: Fix that
// mCANBusMQTTClient.SetCANDevicesList(&mCANDevicesList);
mGeneralSystemParams = *mSystemConfig.GetGeneralSystemSettings();
mMainWindow.mDataLoggingSettingsPage->SetGeneralSettingsParams(&mGeneralSystemParams);
@@ -107,7 +123,8 @@ int COtarcikCan::Start()
mInternetMonitor.Start(mSystemConfig.GetDeviceDetectionConfig()->mInternetDetectionCANStatusBit);
mLANDevicesPresenceMonitor.Start(mSystemConfig.GetDeviceDetectionConfig()->GetLANDevicesConfigList());
mSystemConfig.mDeviceDetectionParams.SetCANPresenceMonitors(&mCANBusMQTTClient,&mLANDevicesPresenceMonitor,&mInternetMonitor);
//mSystemConfig.mDeviceDetectionParams.SetCANPresenceMonitors(&mCANBusMQTTClient,&mLANDevicesPresenceMonitor,&mInternetMonitor); TODO: Add a bit for each MQTT client?
mSystemConfig.mDeviceDetectionParams.SetCANPresenceMonitors(mCANBusMQTTClientList.at(0),&mLANDevicesPresenceMonitor,&mInternetMonitor);
for(int i = 0; i < mCANDevicesList.size(); i++)
{
mCANDevicesList.at(i)->StartWatchdog(mSystemConfig.GetDeviceDetectionConfig());
@@ -140,7 +157,11 @@ int COtarcikCan::Start()
CGeneralMessagesLogDispatcher::instance()->AddLogMessage(QString("Démarrage du logiciel OtarcikCAN"),"CPCANInterface");
// mCANBusMQTTClient.ConnectToBroker();
mCANBusMQTTClient.StartMQTTClient();
//mCANBusMQTTClient.StartMQTTClient();
for(int i = 0; i < mCANBusMQTTClientList.size(); i++)
{
mCANBusMQTTClientList.at(i)->StartMQTTClient();
}
mMainWindow.mCANbusSettingsPage->SetDevicesList(&mCANDevicesList);
connect(&mInternetMonitor,&CInternetMonitor::InternetStateChanged,mMainWindow.mGeneralStatusPage,&CGeneralStatusPage::InternetStatusChanged);
@@ -206,7 +227,7 @@ int COtarcikCan::PopulateCANDevicesList(QList<CCANDeviceConfig *> *CANDeviceConf
for(int i = 0; i < CANDeviceConfigList->size(); i++)
{
CCANDevice *NewDevice = new CCANDevice(*CANDeviceConfigList->at(i),&mCANBusMQTTClient,mSystemConfig.mCloudLoggingParamsList[0]->mMQTTTopicPrefix); //TODO fix the cloud
CCANDevice *NewDevice = new CCANDevice(*CANDeviceConfigList->at(i),mSystemConfig.mCloudLoggingParamsList[0]->mMQTTTopicPrefix); //TODO fix the cloud
NewDevice->mProgramPtr = this;
NewDevice->Init();
mCANDevicesList.append(NewDevice);
@@ -227,7 +248,28 @@ int COtarcikCan::SaveCloudLoggingConfigRequest(QList<CCloudParams *> *CloudParam
mSystemConfig.SetCloudParamsList(CloudParams);
mCloudLoggingParamsList = mSystemConfig.GetCloudParams();
mCANBusMQTTClient.SetMQTTParams(mCloudLoggingParamsList->at(0)); //TODO: Fix
while(!mCANBusMQTTClientList.isEmpty())
{
mCANBusMQTTClientList.first()->DisconnectFromBroker();
delete mCANBusMQTTClientList.takeFirst();
}
for(int i = 0; i < CloudParams->size(); i++)
{
CMQTTClientWrapper *NewMQTTWrapper = new CMQTTClientWrapper;
NewMQTTWrapper->mProgramPtr = this;
NewMQTTWrapper->SetMQTTParams(CloudParams->at(i));
NewMQTTWrapper->SetCANDevicesList(&mCANDevicesList);
#ifdef ENABLE_CHIPSET_DRIVER
NewMQTTWrapper->SetCPUInterface(&mCPUInterface);
#endif
NewMQTTWrapper->SetMQTTServerPresenceCANBit(mSystemConfig.GetDeviceDetectionConfig()->mMQTTDetectionCANStatusBit);
mCANBusMQTTClientList.append(NewMQTTWrapper);
NewMQTTWrapper->StartMQTTClient();
}
mSystemConfig.mDeviceDetectionParams.SetCANPresenceMonitors(mCANBusMQTTClientList.at(0),&mLANDevicesPresenceMonitor,&mInternetMonitor);
//mCANBusMQTTClient.SetMQTTParams(mCloudLoggingParamsList->at(0)); //TODO: Fix
if(mSystemConfig.SaveConfig() == RET_OK)
{
@@ -284,7 +326,11 @@ int COtarcikCan::SaveDeviceDetectionSettingsRequest(CDeviceDetectionConfig *Devi
mLANDevicesPresenceMonitor.Stop();
mLANDevicesPresenceMonitor.Start(DeviceDetectconfig->GetLANDevicesConfigList());
mInternetMonitor.UpdateCANReportingBit(DeviceDetectconfig->mInternetDetectionCANStatusBit);
mCANBusMQTTClient.SetMQTTServerPresenceCANBit(DeviceDetectconfig->mMQTTDetectionCANStatusBit);
for(int i = 0; i < mCANBusMQTTClientList.size(); i++)
{
mCANBusMQTTClientList.at(i)->SetMQTTServerPresenceCANBit(DeviceDetectconfig->mMQTTDetectionCANStatusBit);
}
// mCANBusMQTTClient.SetMQTTServerPresenceCANBit(DeviceDetectconfig->mMQTTDetectionCANStatusBit);
return RET_OK;
}
@@ -300,8 +346,18 @@ int COtarcikCan::SetCANConnectionStatusRequest(bool Connected)
int COtarcikCan::SetMQTTConnectionSatusRequest(bool Connected)
{
QString MQTTStates("Clients MQTT:\n");
for(int i = 0; i < mCANBusMQTTClientList.size(); i++)
{
CMQTTClientWrapper *Wrapper = mCANBusMQTTClientList.at(i);
MQTTStates.append(Wrapper->GetMQTTClientConnectionState());
MQTTStates.append("\n");
}
mMainWindow.mDataLoggingSettingsPage->SetMQTTPresenceStatus(Connected);
return mMainWindow.mGeneralStatusPage->SetMQTTConnectionStatus(Connected);
mMainWindow.mGeneralStatusPage->SetMQTTConnectionStatus(MQTTStates);
return RET_OK;
}
int COtarcikCan::UpdateCANModuleStatusRequest(QString ModuleName, QString ModuleStatus, QString Buffer)
@@ -350,7 +406,7 @@ void COtarcikCan::QuitApplicationRequest()
int COtarcikCan::ForceMQTTDisconnect(bool Disconnect)
{
mCANBusMQTTClient.ForceMQTTClientDisconnection(Disconnect);
// mCANBusMQTTClient.ForceMQTTClientDisconnection(Disconnect);
}
#endif