Reconnexion automatique au serveur MQTT lors d'une déconnexion

This commit is contained in:
jfmartel 2023-06-17 06:57:49 -04:00
parent 2d6edd0769
commit 428cec7c29
14 changed files with 1849 additions and 70 deletions

Binary file not shown.

File diff suppressed because it is too large Load Diff

View File

@ -3,16 +3,16 @@
# Generated by qmake (3.1) (Qt 5.14.2)
# Project: Otarcik_CAN.pro
# Template: app
# Command: C:\Qt\Qt5.14.2\5.14.2\mingw73_64\bin\qmake.exe -o Makefile Otarcik_CAN.pro -spec win32-g++ "CONFIG+=qtquickcompiler"
# Command: C:\Qt\Qt5.14.2\5.14.2\mingw73_64\bin\qmake.exe -o Makefile Otarcik_CAN.pro -spec win32-g++ "CONFIG+=debug" "CONFIG+=qml_debug"
#############################################################################
MAKEFILE = Makefile
EQ = =
first: release
install: release-install
uninstall: release-uninstall
first: debug
install: debug-install
uninstall: debug-uninstall
QMAKE = C:\Qt\Qt5.14.2\5.14.2\mingw73_64\bin\qmake.exe
DEL_FILE = del
CHK_DIR_EXISTS= if not exist
@ -37,24 +37,10 @@ RES_FILE =
SED = $(QMAKE) -install sed
MOVE = move
SUBTARGETS = \
release \
debug
debug \
release
release: FORCE
$(MAKE) -f $(MAKEFILE).Release
release-make_first: FORCE
$(MAKE) -f $(MAKEFILE).Release
release-all: FORCE
$(MAKE) -f $(MAKEFILE).Release all
release-clean: FORCE
$(MAKE) -f $(MAKEFILE).Release clean
release-distclean: FORCE
$(MAKE) -f $(MAKEFILE).Release distclean
release-install: FORCE
$(MAKE) -f $(MAKEFILE).Release install
release-uninstall: FORCE
$(MAKE) -f $(MAKEFILE).Release uninstall
debug: FORCE
$(MAKE) -f $(MAKEFILE).Debug
debug-make_first: FORCE
@ -69,6 +55,20 @@ debug-install: FORCE
$(MAKE) -f $(MAKEFILE).Debug install
debug-uninstall: FORCE
$(MAKE) -f $(MAKEFILE).Debug uninstall
release: FORCE
$(MAKE) -f $(MAKEFILE).Release
release-make_first: FORCE
$(MAKE) -f $(MAKEFILE).Release
release-all: FORCE
$(MAKE) -f $(MAKEFILE).Release all
release-clean: FORCE
$(MAKE) -f $(MAKEFILE).Release clean
release-distclean: FORCE
$(MAKE) -f $(MAKEFILE).Release distclean
release-install: FORCE
$(MAKE) -f $(MAKEFILE).Release install
release-uninstall: FORCE
$(MAKE) -f $(MAKEFILE).Release uninstall
Makefile: Otarcik_CAN.pro C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/win32-g++/qmake.conf C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/features/spec_pre.prf \
C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/qdevice.pri \
@ -237,11 +237,11 @@ Makefile: Otarcik_CAN.pro C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/win32-g++/qma
C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/features/resolve_config.prf \
C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/features/exclusive_builds_post.prf \
C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/features/default_post.prf \
C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/features/resources_functions.prf \
C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/features/qtquickcompiler.prf \
C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/features/qml_debug.prf \
C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/features/precompile_header.prf \
C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/features/warn_on.prf \
C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/features/qt.prf \
C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/features/resources_functions.prf \
C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/features/resources.prf \
C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/features/moc.prf \
C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/features/win32/opengl.prf \
@ -262,7 +262,7 @@ Makefile: Otarcik_CAN.pro C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/win32-g++/qma
C:/Qt/Qt5.14.2/5.14.2/mingw73_64/lib/Qt5Core.prl \
C:/Qt/Qt5.14.2/5.14.2/mingw73_64/lib/qtmain.prl \
C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/features/build_pass.prf
$(QMAKE) -o Makefile Otarcik_CAN.pro -spec win32-g++ "CONFIG+=qtquickcompiler"
$(QMAKE) -o Makefile Otarcik_CAN.pro -spec win32-g++ "CONFIG+=debug" "CONFIG+=qml_debug"
C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/features/spec_pre.prf:
C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/qdevice.pri:
C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/features/device_config.prf:
@ -430,11 +430,11 @@ C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/features/win32/default_pre.prf:
C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/features/resolve_config.prf:
C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/features/exclusive_builds_post.prf:
C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/features/default_post.prf:
C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/features/resources_functions.prf:
C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/features/qtquickcompiler.prf:
C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/features/qml_debug.prf:
C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/features/precompile_header.prf:
C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/features/warn_on.prf:
C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/features/qt.prf:
C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/features/resources_functions.prf:
C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/features/resources.prf:
C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/features/moc.prf:
C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/features/win32/opengl.prf:
@ -456,32 +456,32 @@ C:/Qt/Qt5.14.2/5.14.2/mingw73_64/lib/Qt5Core.prl:
C:/Qt/Qt5.14.2/5.14.2/mingw73_64/lib/qtmain.prl:
C:/Qt/Qt5.14.2/5.14.2/mingw73_64/mkspecs/features/build_pass.prf:
qmake: FORCE
@$(QMAKE) -o Makefile Otarcik_CAN.pro -spec win32-g++ "CONFIG+=qtquickcompiler"
@$(QMAKE) -o Makefile Otarcik_CAN.pro -spec win32-g++ "CONFIG+=debug" "CONFIG+=qml_debug"
qmake_all: FORCE
make_first: release-make_first debug-make_first FORCE
all: release-all debug-all FORCE
clean: release-clean debug-clean FORCE
distclean: release-distclean debug-distclean FORCE
make_first: debug-make_first release-make_first FORCE
all: debug-all release-all FORCE
clean: debug-clean release-clean FORCE
distclean: debug-distclean release-distclean FORCE
-$(DEL_FILE) Makefile
release-mocclean:
$(MAKE) -f $(MAKEFILE).Release mocclean
debug-mocclean:
$(MAKE) -f $(MAKEFILE).Debug mocclean
mocclean: release-mocclean debug-mocclean
release-mocclean:
$(MAKE) -f $(MAKEFILE).Release mocclean
mocclean: debug-mocclean release-mocclean
release-mocables:
$(MAKE) -f $(MAKEFILE).Release mocables
debug-mocables:
$(MAKE) -f $(MAKEFILE).Debug mocables
mocables: release-mocables debug-mocables
release-mocables:
$(MAKE) -f $(MAKEFILE).Release mocables
mocables: debug-mocables release-mocables
check: first
benchmark: first
FORCE:
$(MAKEFILE).Release: Makefile
$(MAKEFILE).Debug: Makefile
$(MAKEFILE).Release: Makefile

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,92 @@
VERSION ""
NS_ :
NS_DESC_
CM_
BA_DEF_
BA_
VAL_
CAT_DEF_
CAT_
FILTER
BA_DEF_DEF_
EV_DATA_
ENVVAR_DATA_
SGTYPE_
SGTYPE_VAL_
BA_DEF_SGTYPE_
BA_SGTYPE_
SIG_TYPE_REF_
VAL_TABLE_
SIG_GROUP_
SIG_VALTYPE_
SIGTYPE_VALTYPE_
BO_TX_BU_
BA_DEF_REL_
BA_REL_
BA_DEF_DEF_REL_
BU_SG_REL_
BU_EV_REL_
BU_BO_REL_
SG_MUL_VAL_
BS_:
BU_: Parker_watchdog Parker_master PC
BO_ 1280 AC_chargers: 8 Parker_master
SG_ AC_chargers_power : 0|8@1+ (0.25,0) [0|0] "kW" Vector__XXX
BO_ 1024 Power_Inverter: 8 Parker_master
SG_ power_inverter_DC_power : 0|16@1- (0.1,0) [0|0] "kW" Vector__XXX
BO_ 263 stationESS3: 8 Parker_master
SG_ ESS_total_power : 0|16@1- (0.1,0) [0|0] "kW" Vector__XXX
BO_ 288 LowVoltageStatus: 8 Parker_master
SG_ DCDC2outputCurrent : 32|8@1+ (1,0) [0|0] "A" Vector__XXX
SG_ DCDC1outputCurrent : 24|8@1+ (1,0) [0|0] "A" Vector__XXX
SG_ ESS2_12VBatteryVoltage : 16|8@1+ (0.1,0) [0|25.5] "V" Vector__XXX
SG_ ESS1_12VBatteryVoltage : 8|8@1+ (0.1,0) [0|25.5] "V" Vector__XXX
SG_ HouseBatteryVoltage : 0|8@1+ (0.1,0) [0|0] "V" Vector__XXX
BO_ 262 stationESS2: 8 Parker_master
SG_ batt4_low_cell_t : 56|8@1- (1,0) [0|0] "°C" Vector__XXX
SG_ batt3_low_cell_t : 48|8@1- (1,0) [0|0] "°C" Vector__XXX
SG_ batt2_low_cell_t : 40|8@1- (1,0) [0|0] "°C" Vector__XXX
SG_ batt1_low_cell_t : 32|8@1- (1,0) [0|0] "°C" Vector__XXX
SG_ batt4_high_cell_t : 24|8@1- (1,0) [0|0] "°C" Vector__XXX
SG_ batt3_high_cell_t : 16|8@1- (1,0) [0|0] "°C" Vector__XXX
SG_ batt2_high_cell_t : 8|8@1- (1,0) [0|0] "°C" Vector__XXX
SG_ batt1_high_cell_t : 0|8@1- (1,0) [0|0] "°C" Vector__XXX
BO_ 768 PC_dateTime: 8 PC
BO_ 512 WDT_state: 8 Parker_watchdog
BO_ 277 station_state1: 8 Parker_master
BO_ 272 station_ver: 8 Parker_master
BO_ 261 stationESS1: 8 Parker_master
SG_ DC_bus_voltage : 48|16@1+ (0.1,0) [0|0] "V" Vector__XXX
SG_ summed_ESS_current : 32|16@1- (0.1,0) [0|0] "A" Vector__XXX
SG_ SOC_battery4 : 24|8@1+ (0.5,0) [0|127.5] "%" Vector__XXX
SG_ SOC_battery3 : 16|8@1+ (0.5,0) [0|127.5] "%" Vector__XXX
SG_ SOC_battery2 : 8|8@1+ (0.5,0) [0|127.5] "%" Vector__XXX
SG_ SOC_battery1 : 0|8@1+ (0.5,0) [0|127.5] "%" Vector__XXX
BO_ 256 parker_dateTime: 8 Parker_master
SG_ parker_time : 16|16@1+ (0.001,0) [0|0] "h" Vector__XXX
SG_ parker_date : 0|16@1+ (1,0) [0|0] "d" Vector__XXX
CM_ SG_ 263 ESS_total_power "positive values = battery charging";
CM_ SG_ 256 parker_time "hours elapsed since midnight, for example 18.25";
CM_ SG_ 256 parker_date "number of days that have passed since 1899-12-30";
BA_DEF_ "BusType" STRING ;
BA_DEF_DEF_ "BusType" "";

View File

@ -145,19 +145,23 @@ CMQTTMessage CCANDataLogger::GetMQTTMessage(CCANMessage *Msg, bool Format )
{
QString SignalData;
CCANSignal Signal = Msg->mSignalsList.at(signal);
if(Signal.mValueType == CCANSignal::CAN_SIGNAL_TYPE_UNSIGNED_INT)
{
SignalData = QString("\"%1\":%2").arg(Signal.mSignalName).arg((quint64)Signal.mPhysicalValue);
}
else if(Signal.mValueType == CCANSignal::CAN_SIGNAL_TYPE_SIGNED_INT)
{
SignalData = QString("\"%1\":%2").arg(Signal.mSignalName).arg((qint64)Signal.mPhysicalValue);
}
else if(Signal.mValueType == CCANSignal::CAN_SIGNAL_TYPE_32_BIT_FLOAT ||
Signal.mValueType == CCANSignal::CAN_SIGNAL_TYPE_64_BIT_DOUBLE)
{
SignalData = QString("\"%1\":%2").arg(Signal.mSignalName).arg(Signal.mPhysicalValue,0,'f',1);
}
//JFM 2023-06-16 changé pour forcer toujours à float
SignalData = QString("\"%1\":%2").arg(Signal.mSignalName).arg(Signal.mPhysicalValue,0,'f',1);
// if(Signal.mValueType == CCANSignal::CAN_SIGNAL_TYPE_UNSIGNED_INT)
// {
// SignalData = QString("\"%1\":%2").arg(Signal.mSignalName).arg((quint64)Signal.mPhysicalValue);
// }
// else if(Signal.mValueType == CCANSignal::CAN_SIGNAL_TYPE_SIGNED_INT)
// {
// SignalData = QString("\"%1\":%2").arg(Signal.mSignalName).arg((qint64)Signal.mPhysicalValue);
// }
// else if(Signal.mValueType == CCANSignal::CAN_SIGNAL_TYPE_32_BIT_FLOAT ||
// Signal.mValueType == CCANSignal::CAN_SIGNAL_TYPE_64_BIT_DOUBLE)
// {
// SignalData = QString("\"%1\":%2").arg(Signal.mSignalName).arg(Signal.mPhysicalValue,0,'f',1);
// }
MsgPayload.append(SignalData);
if(signal < Msg->mSignalsList.size()-1)

View File

@ -8,6 +8,10 @@ CMQTTClientWrapper::CMQTTClientWrapper()
mMQTTRefreshTimer = new QTimer;
mMQTTRefreshTimer->setSingleShot(true);
connect(mMQTTRefreshTimer,&QTimer::timeout,this,&CMQTTClientWrapper::MQTTSendTimerExpired);
mMQTTReconnectTimer = new QTimer;
mMQTTReconnectTimer->setSingleShot(true);
connect(mMQTTReconnectTimer,&QTimer::timeout,this,&CMQTTClientWrapper::MQTTReconnectTimerExpired);
mProgramPtr = 0;
}
@ -84,12 +88,14 @@ void CMQTTClientWrapper::StateChanged()
qDebug("MQTT client Disconnected");
mProgramPtr->SetMQTTConnectionSatusRequest(false);
mMQTTRefreshTimer->stop();
mMQTTReconnectTimer->start(MQTT_CLIENT_RECONNECT_TIMEOUT);
break;
}
case QMqttClient::Connected:
{
mProgramPtr->SetMQTTConnectionSatusRequest(true);
mMQTTRefreshTimer->start(mMQTTParams.mMQTTTransmitTimeout);
mMQTTReconnectTimer->stop();
qDebug("MQTT client Connected");
break;
}
@ -136,8 +142,8 @@ void CMQTTClientWrapper::MQTTSendTimerExpired()
{
qint32 res = mMQTTClient.publish(MessagesList->at(i).mMessageTopic,MessagesList->at(i).mMessagePayload.toLocal8Bit(),0,true);
qDebug("%s : %s",qPrintable(MessagesList->at(i).mMessageTopic), qPrintable(MessagesList->at(i).mMessagePayload));
QString LogMsg = QString("Envoi d'un message MQTT. Topic: %1. Payload: %2").arg(MessagesList->at(i).mMessageTopic).arg(MessagesList->at(i).mMessagePayload);
// CGeneralMessagesLogDispatcher::instance()->AddLogMessage(LogMsg,false);
QString LogMsg = QString("Envoi d'un message MQTT. Topic: %1 Payload: %2").arg(MessagesList->at(i).mMessageTopic).arg(MessagesList->at(i).mMessagePayload);
CGeneralMessagesLogDispatcher::instance()->AddLogMessage(LogMsg,false);
}
qDebug("Sent %d MQTT messages",MessagesList->size());
@ -147,3 +153,8 @@ void CMQTTClientWrapper::MQTTSendTimerExpired()
mMQTTRefreshTimer->start(mMQTTParams.mMQTTTransmitTimeout);
}
void CMQTTClientWrapper::MQTTReconnectTimerExpired()
{
ConnectToBroker();
}

View File

@ -1,6 +1,7 @@
#ifndef MQTTCLIENTWRAPPER_H
#define MQTTCLIENTWRAPPER_H
#include "defines.h"
#include <QtMqtt/QtMqtt>
#include <QMqttClient>
@ -28,6 +29,7 @@ public:
COtarcikCan *mProgramPtr;
QString mMQTTClientID;
QTimer *mMQTTRefreshTimer;
QTimer *mMQTTReconnectTimer;
private:
@ -38,6 +40,7 @@ private:
public slots:
void StateChanged();
void MQTTSendTimerExpired();
void MQTTReconnectTimerExpired();
};

View File

@ -4,7 +4,7 @@
#define GENERAL_MESSAGES_MAX_LOG_LINES 5000 //The number of lines of general status log we keep in the general status window (avoids fucking up because you know.... RAM)
#define MQTT_CLIENT_RECONNECT_TIMEOUT 5000 //Time in ms between reconnect attemps to MQTT broker when connection is lost
enum eOtarcikGeneralReturns
{
RET_OK = 0,

Binary file not shown.

View File

@ -5425,3 +5425,13 @@ Démarrage du logiciel Otarcik CAN le 2023-06-16 à 07:18:17
2023-06-16 07:18:17 Configuration système chargée avec succès!
2023-06-16 07:18:29 Déinitialisation du module PCAN USB ID 81
2023-06-16 07:18:29 Impossible de déinitialiser un module USB PCAN.. Error:The transmit buffer in CAN controller is full
********************************************************************
Démarrage du logiciel Otarcik CAN le 2023-06-16 à 10:55:41
********************************************************************
2023-06-16 10:55:41 Démarrage du logiciel OtarcikCAN
2023-06-16 10:55:41 Chargement de la configuration système...
2023-06-16 10:55:41 Configuration système chargée avec succès!
2023-06-16 10:55:45 Déinitialisation du module PCAN USB ID 81
2023-06-16 10:55:45 Impossible de déinitialiser un module USB PCAN.. Error:The transmit buffer in CAN controller is full

Binary file not shown.

View File

@ -8,8 +8,9 @@ x Implémenter une liste de messages MQTT non envoyés pour ne pas perdre de mes
- Ajouter la gestion du Client ID MQTT
- Implémenter le watchdog CAN
- Valider pourquoi le MQTT ne se connecte pas au reboot
- Valider pourquoi le MQTT ne se reconnecte pas après une déconnexion
x Valider pourquoi le MQTT ne se reconnecte pas après une déconnexion
- Corriger le UTF pour l'affichage des degrés dans le tableau
- Ajouter une indication du nombre de secondes depuis la dernière lecture
- Ajouter un affichage des payloads JSON
- Contrôler le niveau de log
- Assurer de ne pas avoir à redémarrer le soft quand on change un paramètre CAN (CAN data repopulate)