BeeHoneyt  1.1
BTS SNIR LaSalle Avignon 2021
Référence de la classe Communication

#include <communication.h>

Graphe de collaboration de Communication:
Collaboration graph

Connecteurs publics

void changerEtat ()
 Méthode qui signal l'état du client Mqtt à l'IHM. Plus de détails...
 
void recevoirMessage (const QByteArray &message, const QMqttTopicName &topic)
 Méthode qui reçoit et traite le message du topic, et signal les nouvelles mesures à l'IHM. Plus de détails...
 

Signaux

void messageJournal (QString message)
 
void nouvellesMesures (MesureRuche mesure)
 
void ttnConnecte ()
 
void ttnDeconnecte ()
 

Fonctions membres publiques

bool abonner (QString deviceID)
 Méthode qui abonne le client Mqtt à un topic , à partir du deviceID. Plus de détails...
 
 Communication (QObject *parent=nullptr)
 Constructeur de la classe Communication. Plus de détails...
 
void connecter ()
 Méthode qui connecte le client Mqtt (par défaut) et permet la récupération du message (à l'aide de la connection) Plus de détails...
 
void connecter (QString hostname, int port, QString username, QString password)
 
void deconnecter ()
 Méthode qui déconnecte le client Mqtt. Plus de détails...
 
void desabonner (QString deviceID)
 Méthode qui désabonne le client Mqtt , à partir du deviceID. Plus de détails...
 
bool estConnecte () const
 Méthode qui retourne une valeur booléene true si le client Mqtt est connecté Plus de détails...
 
QString getHostname () const
 Methode qui retourne le nom d'hote. Plus de détails...
 
QString getPassword () const
 Methode qui retourne le mot de passe. Plus de détails...
 
QString getUsername () const
 Methode qui retourne le nom d'utilisateur. Plus de détails...
 
void reconnecter ()
 Méthode qui déconnecte puis connecte le client Mqtt. Plus de détails...
 
void reconnecter (QString hostname, int port, QString username, QString password)
 
 ~Communication ()
 Destructeur de la classe Communication. Plus de détails...
 

Fonctions membres privées

void configurer ()
 Méthode qui configure le client Mqtt , à partir du fichier beehoneyt.ini. Plus de détails...
 
void sauvegarder ()
 Méthode qui sauvegarde la configuration du client Mqtt , dans le fichier beehoneyt.ini. Plus de détails...
 

Attributs privés

QMqttSubscription * abonnementMqtt
 
QMqttClient * clientMqtt
 
QString hostname
 
MesureRuche mesure
 
QString password
 
int port
 
QString username
 

Description détaillée

Définition à la ligne 19 du fichier communication.h.

Documentation des constructeurs et destructeur

◆ Communication()

Communication::Communication ( QObject parent = nullptr)

Constructeur de la classe Communication.

Paramètres
parent

Définition à la ligne 23 du fichier communication.cpp.

Références configurer().

23  : QObject(parent), clientMqtt(new QMqttClient(this)), abonnementMqtt(nullptr)
24 {
25  qDebug() << Q_FUNC_INFO;
26 
27  configurer();
28 }
void configurer()
Méthode qui configure le client Mqtt , à partir du fichier beehoneyt.ini.
QMqttSubscription * abonnementMqtt
Definition: communication.h:40
QMqttClient * clientMqtt
Definition: communication.h:39

◆ ~Communication()

Communication::~Communication ( )

Destructeur de la classe Communication.

Définition à la ligne 34 du fichier communication.cpp.

Références deconnecter(), et sauvegarder().

35 {
36  this->deconnecter();
37  this->sauvegarder();
38  qDebug() << Q_FUNC_INFO;
39 }
void deconnecter()
Méthode qui déconnecte le client Mqtt.
void sauvegarder()
Méthode qui sauvegarde la configuration du client Mqtt , dans le fichier beehoneyt.ini.

Documentation des fonctions membres

◆ abonner()

bool Communication::abonner ( QString  deviceID)

Méthode qui abonne le client Mqtt à un topic , à partir du deviceID.

Paramètres
deviceID
Renvoie
bool : une valeur booléene true ou false , et un message dans le journal

Définition à la ligne 149 du fichier communication.cpp.

Références abonnementMqtt, clientMqtt, MesureRuche::initialiser(), messageJournal(), mesure, et username.

Référencé par IHMPc::afficherEtatConnecte(), et IHMPc::selectionnerRuche().

150 {
151  if(clientMqtt->state() != QMqttClient::Connected)
152  return false;
153 
154  // Exemple de deviceID : ruche-1-sim, ruche-2-sim
155  // Format de topic TTN : ApplicationID/devices/DeviceID/up
156  // Exemple de topic : rucher/devices/ruche-1-sim/up
157 
158  QString topic = username + "/devices/" + deviceID + "/up";
159  qDebug() << Q_FUNC_INFO << deviceID << topic;
160  QMqttTopicFilter topicFilter(topic.toLatin1());
161  abonnementMqtt = clientMqtt->subscribe(topicFilter);
162  QString message = "Abonnement " + deviceID;
163  emit messageJournal(message);
164 
165  if (!abonnementMqtt)
166  {
167  QMessageBox::critical(0, "Erreur", "Impossible de s'abonner !");
168  return false;
169  }
170 
172 
173  return true;
174 }
QString username
Definition: communication.h:43
MesureRuche mesure
Definition: communication.h:45
QMqttSubscription * abonnementMqtt
Definition: communication.h:40
void initialiser()
Methode qui intialise les attributs.
Definition: mesureruche.cpp:69
void messageJournal(QString message)
QMqttClient * clientMqtt
Definition: communication.h:39

◆ changerEtat

void Communication::changerEtat ( )
slot

Méthode qui signal l'état du client Mqtt à l'IHM.

Renvoie
void : un etat connecté ou deconnecté dans l'IHM, et un message dans le journal

Définition à la ligne 269 du fichier communication.cpp.

Références clientMqtt, hostname, messageJournal(), sauvegarder(), ttnConnecte(), et ttnDeconnecte().

Référencé par configurer().

270 {
271  qDebug() << Q_FUNC_INFO << clientMqtt->state();
272  QString message;
273  switch (clientMqtt->state())
274  {
275  case QMqttClient::Disconnected:
276  qDebug() << Q_FUNC_INFO << "Déconnecté";
277  emit ttnDeconnecte();
278  message = "Déconnecté " + hostname;
279  emit messageJournal(message);
280  break;
281  case QMqttClient::Connecting:
282  qDebug() << Q_FUNC_INFO << "En cours de connexion";
283  break;
284  case QMqttClient::Connected:
285  qDebug() << Q_FUNC_INFO << "Connecté";
286  emit ttnConnecte();
287  sauvegarder();
288  message = "Connecté " + hostname;
289  emit messageJournal(message);
290  break;
291  default:
292  break;
293  }
294 }
QString hostname
Definition: communication.h:41
void ttnConnecte()
void ttnDeconnecte()
void messageJournal(QString message)
QMqttClient * clientMqtt
Definition: communication.h:39
void sauvegarder()
Méthode qui sauvegarde la configuration du client Mqtt , dans le fichier beehoneyt.ini.

◆ configurer()

void Communication::configurer ( )
private

Méthode qui configure le client Mqtt , à partir du fichier beehoneyt.ini.

Renvoie
void

Définition à la ligne 229 du fichier communication.cpp.

Références changerEtat(), clientMqtt, hostname, password, port, et username.

Référencé par Communication().

230 {
231  QSettings settings(QDir::currentPath() + "/beehoneyt.ini", QSettings::IniFormat);
232 
233  settings.beginGroup("TTN");
234  hostname = settings.value("Hostname").toString();
235  port = settings.value("Port").toInt();
236  username = settings.value("Username").toString();
237  password = settings.value("Password").toString();
238  settings.endGroup();
239  settings.sync();
240  //qDebug() << Q_FUNC_INFO << hostname << port << username << password;
241 
242  connect(clientMqtt, SIGNAL(stateChanged(ClientState)), this, SLOT(changerEtat()));
243 }
QString username
Definition: communication.h:43
QString hostname
Definition: communication.h:41
void changerEtat()
Méthode qui signal l&#39;état du client Mqtt à l&#39;IHM.
QString password
Definition: communication.h:44
QMqttClient * clientMqtt
Definition: communication.h:39

◆ connecter() [1/2]

Communication::connecter ( )

Méthode qui connecte le client Mqtt (par défaut) et permet la récupération du message (à l'aide de la connection)

Méthode qui connecte le client Mqtt à partir des paramètres (surcharge de connecter())

Renvoie
void : un message dans le journal
Paramètres
hostname
port
username
password
Renvoie
void

Définition à la ligne 59 du fichier communication.cpp.

Références clientMqtt, hostname, messageJournal(), password, port, recevoirMessage(), et username.

Référencé par connecter(), IHMPc::gererConnexionTTN(), IHMPc::IHMPc(), et reconnecter().

60 {
61  if(clientMqtt->state() != QMqttClient::Connected)
62  {
63  qDebug() << Q_FUNC_INFO << hostname << port << username << password;
64 
65  clientMqtt->setHostname(hostname);
66  clientMqtt->setPort(port);
67  clientMqtt->setUsername(username);
68  clientMqtt->setPassword(password);
69 
70  QString message = "Connexion " + hostname;
71  emit messageJournal(message);
72  clientMqtt->connectToHost();
73 
74  connect(clientMqtt, SIGNAL(messageReceived(QByteArray,QMqttTopicName)), this, SLOT(recevoirMessage(QByteArray,QMqttTopicName)));
75  }
76 }
void recevoirMessage(const QByteArray &message, const QMqttTopicName &topic)
Méthode qui reçoit et traite le message du topic, et signal les nouvelles mesures à l&#39;IHM...
QString username
Definition: communication.h:43
QString hostname
Definition: communication.h:41
QString password
Definition: communication.h:44
void messageJournal(QString message)
QMqttClient * clientMqtt
Definition: communication.h:39

◆ connecter() [2/2]

void Communication::connecter ( QString  hostname,
int  port,
QString  username,
QString  password 
)

Définition à la ligne 87 du fichier communication.cpp.

Références clientMqtt, connecter(), hostname, password, port, et username.

88 {
89  if(clientMqtt->state() != QMqttClient::Connected)
90  {
91  this->hostname = hostname;
92  this->port = port;
93  this->username = username;
94  this->password = password;
95 
96  this->connecter();
97  }
98 }
QString username
Definition: communication.h:43
QString hostname
Definition: communication.h:41
QString password
Definition: communication.h:44
void connecter()
Méthode qui connecte le client Mqtt (par défaut) et permet la récupération du message (à l&#39;aide de la...
QMqttClient * clientMqtt
Definition: communication.h:39

◆ deconnecter()

void Communication::deconnecter ( )

Méthode qui déconnecte le client Mqtt.

Renvoie
void : un message dans le journal

Définition à la ligne 132 du fichier communication.cpp.

Références clientMqtt, hostname, messageJournal(), et recevoirMessage().

Référencé par IHMPc::gererConnexionTTN(), reconnecter(), et ~Communication().

133 {
134  if(clientMqtt->state() != QMqttClient::Connected)
135  return;
136  clientMqtt->disconnectFromHost();
137  QString message = "Déconnexion " + hostname;
138  emit messageJournal(message);
139  disconnect(clientMqtt, SIGNAL(messageReceived(QByteArray,QMqttTopicName)), this, SLOT(recevoirMessage(QByteArray,QMqttTopicName)));
140  qDebug() << Q_FUNC_INFO;
141 }
void recevoirMessage(const QByteArray &message, const QMqttTopicName &topic)
Méthode qui reçoit et traite le message du topic, et signal les nouvelles mesures à l&#39;IHM...
QString hostname
Definition: communication.h:41
void messageJournal(QString message)
QMqttClient * clientMqtt
Definition: communication.h:39

◆ desabonner()

void Communication::desabonner ( QString  deviceID)

Méthode qui désabonne le client Mqtt , à partir du deviceID.

Paramètres
deviceID
Renvoie
void : un message dans le journal
Avertissement
Si un client se déconnecte sans se désabonner, le serveur MQTT stockera tous les messages et les publiera lors de la prochaine reconnexion.

Définition à la ligne 182 du fichier communication.cpp.

Références clientMqtt, messageJournal(), et username.

Référencé par IHMPc::gererConnexionTTN(), IHMPc::selectionnerRuche(), IHMPc::supprimerRuche(), et IHMPc::~IHMPc().

183 {
184  if(clientMqtt->state() != QMqttClient::Connected)
185  return;
189  QString topic = username + "/devices/" + deviceID + "/up";
190  qDebug() << Q_FUNC_INFO << deviceID << topic;
191  QMqttTopicFilter topicFilter(topic.toLatin1());
192  clientMqtt->unsubscribe(topicFilter);
193  QString message = "Désabonnement " + deviceID;
194  emit messageJournal(message);
195 }
QString username
Definition: communication.h:43
void messageJournal(QString message)
QMqttClient * clientMqtt
Definition: communication.h:39

◆ estConnecte()

bool Communication::estConnecte ( ) const

Méthode qui retourne une valeur booléene true si le client Mqtt est connecté

Renvoie
bool : une valeur booléene true ou false

Définition à la ligne 47 du fichier communication.cpp.

Références clientMqtt.

Référencé par IHMPc::gererConnexionTTN().

48 {
49  if(clientMqtt->state() == QMqttClient::Connected)
50  return true;
51  return false;
52 }
QMqttClient * clientMqtt
Definition: communication.h:39

◆ getHostname()

QString Communication::getHostname ( ) const

Methode qui retourne le nom d'hote.

Renvoie
QString

Définition à la ligne 201 du fichier communication.cpp.

Références hostname.

Référencé par IHMPc::configurerConnexionTTN().

202 {
203  return this->hostname;
204 }
QString hostname
Definition: communication.h:41

◆ getPassword()

QString Communication::getPassword ( ) const

Methode qui retourne le mot de passe.

Renvoie

Définition à la ligne 219 du fichier communication.cpp.

Références password.

Référencé par IHMPc::IHMPc().

220 {
221  return this->password;
222 }
QString password
Definition: communication.h:44

◆ getUsername()

QString Communication::getUsername ( ) const

Methode qui retourne le nom d'utilisateur.

Renvoie
QString

Définition à la ligne 210 du fichier communication.cpp.

Références username.

Référencé par IHMPc::IHMPc().

211 {
212  return this->username;
213 }
QString username
Definition: communication.h:43

◆ messageJournal

void Communication::messageJournal ( QString  message)
signal

◆ nouvellesMesures

void Communication::nouvellesMesures ( MesureRuche  mesure)
signal

Référencé par recevoirMessage().

◆ recevoirMessage

void Communication::recevoirMessage ( const QByteArray &  message,
const QMqttTopicName &  topic 
)
slot

Méthode qui reçoit et traite le message du topic, et signal les nouvelles mesures à l'IHM.

Paramètres
messageRecu,topic
Renvoie
void : des nouvelles mesures dans l'IHM, et un message dans le journal

{ "app_id":"rucher", "dev_id":"ruche-1-sim", ..., "port":2, "payload_fields": { "humiditeExt":32, "humiditeInt":32, "pression":1003, "temperatureExt":17.4, "temperatureInt":23.1 }, "metadata": { "time":"2021-04-18T08:11:35.714925102Z", "frequency":868.3, "modulation":"LORA", ... "gateways": [ { "gtw_id":"btssn-lasalle-84", "timestamp":3459190155, "time":"2021-04-18T08:11:35Z", ... } ] } }

Définition à la ligne 302 du fichier communication.cpp.

Références messageJournal(), mesure, nouvellesMesures(), port, PORT_TTN_ENVIRONNEMENT, PORT_TTN_POIDS, MesureRuche::setHorodatage(), MesureRuche::setHumiditeExterieure(), MesureRuche::setHumiditeInterieure(), MesureRuche::setPoids(), MesureRuche::setPression(), MesureRuche::setTemperatureExterieure(), et MesureRuche::setTemperatureInterieure().

Référencé par connecter(), et deconnecter().

303 {
304  QJsonDocument documentJSON = QJsonDocument::fromJson(messageRecu);
305  QJsonObject objetJSON = documentJSON.object();
306 
307  // Extraction du deviceID et du port
308  QString deviceID = objetJSON.value(QString("dev_id")).toString();
309  int port = objetJSON.value(QString("port")).toInt();
310 
311  qDebug() << Q_FUNC_INFO << "topic" << topic;
312  qDebug() << Q_FUNC_INFO << "DeviceID " << deviceID;
313  //qDebug() << Q_FUNC_INFO << "message" << messageRecu;
314  qDebug() << Q_FUNC_INFO << "port" << port;
315 
316  // Journalisation
317 
318  QString message = "Message reçu de " + deviceID + " :\n" + messageRecu;
319  emit messageJournal(message); // Extrait d'un message reçu
320  // messageRecu contient du JSON
321  // les clés à extraire :
322  // - port : 1, 2 ou 3 précise ce que contient le payload_fields
323  // - payload_fields : données du port
324  // - horodatage (timestamp - nombre de secondes depuis le 1 janvier 1970)
325  // Exemple :
326  // "port":2
327  // "payload_fields":{"humiditeExt":32,"humiditeInt":32,"pression":1003,"temperatureExt":17.4,"temperatureInt":23.1}
328  // "timestamp":3459190155,"time":"2021-04-18T08:11:35Z"
329 
363  // Extraction de l'horodatage
364  QJsonObject messageMetadata = objetJSON.value(QString("metadata")).toObject();
365  QString valeurHorodatage = messageMetadata.value(QString("time")).toString();
366  //qDebug() << Q_FUNC_INFO << "valeurHorodatage" << valeurHorodatage;
367  QDateTime horodatage = QDateTime::fromString(valeurHorodatage, Qt::ISODate).toLocalTime();
368  qDebug() << Q_FUNC_INFO << "horodatage" << horodatage.toString("dd/MM/yyyy HH:mm:ss");
369  mesure.setHorodatage(horodatage.toString("dd/MM/yyyy HH:mm:ss"));
370 
371  // Extraction des mesures
372  QJsonObject messageMesures = objetJSON.value(QString("payload_fields")).toObject();
373  QJsonValue valeurPoids, valeurHumiditeExt, valeurHumiditeInt, valeurTemperatureExt, valeurTemperatureInt, valeurPression;
374 
375  switch (port)
376  {
377  case PORT_TTN_POIDS:
378  valeurPoids = messageMesures.value(QString("poids")).toDouble();
379 
380  mesure.setPoids(valeurPoids.toDouble());
381 
382  emit nouvellesMesures(mesure);
383  break;
385  valeurHumiditeExt = messageMesures.value(QString("humiditeExt")).toDouble();
386  valeurHumiditeInt = messageMesures.value(QString("humiditeInt")).toDouble();
387  valeurTemperatureExt = messageMesures.value(QString("temperatureExt")).toDouble();
388  valeurTemperatureInt = messageMesures.value(QString("temperatureInt")).toDouble();
389  valeurPression = messageMesures.value(QString("pression")).toDouble();
390 
391  mesure.setHumiditeExterieure(valeurHumiditeExt.toDouble());
392  mesure.setHumiditeInterieure(valeurHumiditeInt.toDouble());
393  mesure.setTemperatureExterieure(valeurTemperatureExt.toDouble());
394  mesure.setTemperatureInterieure(valeurTemperatureInt.toDouble());
395  mesure.setPression(valeurPression.toDouble());
396  //qDebug() << Q_FUNC_INFO << "mesure" << mesure.getTemperatureInterieure() << mesure.getTemperatureExterieure() << mesure.getHumiditeInterieure() << mesure.getHumiditeExterieure() << mesure.getPression();
397 
398  emit nouvellesMesures(mesure);
399  break;
400  default:
401  break;
402  }
403 }
#define PORT_TTN_POIDS
Definition: communication.h:16
void setTemperatureExterieure(double temperatureExterieure)
Methode qui change la valeur de la temperature exterieure.
Definition: mesureruche.cpp:98
void setTemperatureInterieure(double temperatureInterieure)
Methode qui change la valeur de la temperature interieure.
Definition: mesureruche.cpp:87
MesureRuche mesure
Definition: communication.h:45
void setHumiditeExterieure(double humiditeExterieure)
Methode qui change la valeur de l&#39;humidite exterieure.
void setPression(double pression)
Methode qui change la valeur de la pression.
void setHumiditeInterieure(double humiditeInterieure)
Methode qui change la valeur de l&#39;humidite interieure.
void nouvellesMesures(MesureRuche mesure)
void messageJournal(QString message)
#define PORT_TTN_ENVIRONNEMENT
Definition: communication.h:17
void setHorodatage(QString horodatage)
Methode qui change la valeur de l&#39;horodatage.
void setPoids(double poids)
Methode qui change la valeur du poids.

◆ reconnecter() [1/2]

Communication::reconnecter ( )

Méthode qui déconnecte puis connecte le client Mqtt.

Méthode qui déconnecte puis connecte le client Mqtt à partir des paramètres (surcharge de reconnecter())

Renvoie
void
Paramètres
hostname
port
username
password
Renvoie
void

Définition à la ligne 105 du fichier communication.cpp.

Références connecter(), et deconnecter().

Référencé par IHMPc::configurerConnexionTTN().

106 {
107  qDebug() << Q_FUNC_INFO;
108  this->deconnecter();
109  this->connecter();
110 }
void deconnecter()
Méthode qui déconnecte le client Mqtt.
void connecter()
Méthode qui connecte le client Mqtt (par défaut) et permet la récupération du message (à l&#39;aide de la...

◆ reconnecter() [2/2]

void Communication::reconnecter ( QString  hostname,
int  port,
QString  username,
QString  password 
)

Définition à la ligne 121 du fichier communication.cpp.

Références connecter(), et deconnecter().

122 {
123  this->deconnecter();
125 }
void deconnecter()
Méthode qui déconnecte le client Mqtt.
QString username
Definition: communication.h:43
QString hostname
Definition: communication.h:41
QString password
Definition: communication.h:44
void connecter()
Méthode qui connecte le client Mqtt (par défaut) et permet la récupération du message (à l&#39;aide de la...

◆ sauvegarder()

void Communication::sauvegarder ( )
private

Méthode qui sauvegarde la configuration du client Mqtt , dans le fichier beehoneyt.ini.

Renvoie
void : sauvegarde des parametres dans beehoneyt.ini

Définition à la ligne 250 du fichier communication.cpp.

Références hostname, password, port, et username.

Référencé par changerEtat(), et ~Communication().

251 {
252  QSettings settings(QDir::currentPath() + "/beehoneyt.ini", QSettings::IniFormat);
253 
254  settings.beginGroup("TTN");
255  settings.setValue("Hostname" , hostname);
256  settings.setValue("Port" , port);
257  settings.setValue("Username" , username);
258  settings.setValue("Password" , password);
259  settings.sync();
260 
261  //qDebug() << Q_FUNC_INFO << hostname << port << username << password;
262 }
QString username
Definition: communication.h:43
QString hostname
Definition: communication.h:41
QString password
Definition: communication.h:44

◆ ttnConnecte

void Communication::ttnConnecte ( )
signal

Référencé par changerEtat().

◆ ttnDeconnecte

void Communication::ttnDeconnecte ( )
signal

Référencé par changerEtat().

Documentation des données membres

◆ abonnementMqtt

QMqttSubscription* Communication::abonnementMqtt
private

Définition à la ligne 40 du fichier communication.h.

Référencé par abonner().

◆ clientMqtt

QMqttClient* Communication::clientMqtt
private

Définition à la ligne 39 du fichier communication.h.

Référencé par abonner(), changerEtat(), configurer(), connecter(), deconnecter(), desabonner(), et estConnecte().

◆ hostname

QString Communication::hostname
private

Définition à la ligne 41 du fichier communication.h.

Référencé par changerEtat(), configurer(), connecter(), deconnecter(), getHostname(), et sauvegarder().

◆ mesure

MesureRuche Communication::mesure
private

Définition à la ligne 45 du fichier communication.h.

Référencé par abonner(), et recevoirMessage().

◆ password

QString Communication::password
private

Définition à la ligne 44 du fichier communication.h.

Référencé par configurer(), connecter(), getPassword(), et sauvegarder().

◆ port

int Communication::port
private

Définition à la ligne 42 du fichier communication.h.

Référencé par configurer(), connecter(), recevoirMessage(), et sauvegarder().

◆ username

QString Communication::username
private

Définition à la ligne 43 du fichier communication.h.

Référencé par abonner(), configurer(), connecter(), desabonner(), getUsername(), et sauvegarder().


La documentation de cette classe a été générée à partir des fichiers suivants :