Projet Bee-Honey't  0.2
BTS SNIR LaSalle Avignon 2020
Référence de la classe Communication

Permet de recevoir les données. Plus de détails...

#include <communication.h>

Graphe de collaboration de Communication:
Collaboration graph

Connecteurs publics

void changerEtatConnexion ()
 Méthode pour notifier un changement d'état de la connexion TTN. Plus de détails...
 
void decoderJson (const QByteArray &json)
 Méthode pour décoder le JSON reçu. Plus de détails...
 

Signaux

void nouvelEtatConnexion (int etat)
 
void nouvelleValeurCharge (QString nomDeLaRuche, int charge, QString horodatage)
 
void nouvelleValeurEnsoleillement (QString nomDeLaRuche, int ensoleillement, QString horodatage)
 
void nouvelleValeurHumiditeExterieure (QString nomDeLaRuche, double humiditeExterieure, QString horodatage)
 
void nouvelleValeurHumiditeInterieure (QString nomDeLaRuche, double humiditeInterieure, QString horodatage)
 
void nouvelleValeurPoids (QString nomDeLaRuche, double poids, QString horodatage)
 
void nouvelleValeurPression (QString nomDeLaRuche, int pression, QString horodatage)
 
void nouvelleValeurTemperatureExterieure (QString nomDeLaRuche, double temperatureExterieure, QString horodatage)
 
void nouvelleValeurTemperatureInterieure (QString nomDeLaRuche, double temperatureInterieure, QString horodatage)
 

Fonctions membres publiques

 Communication (QObject *parent=nullptr)
 Constructeur de la classe Communication. Plus de détails...
 
void connecterTTN (QString hostname, int port, QString username, QString password)
 Méthode pour se connecter à TTN. Plus de détails...
 
void desabonnerTopic (QString topic)
 Méthode pour se désabonner d'un topic TTN. Plus de détails...
 
void souscrireTopic (QString topic)
 Méthode pour s'abonner à un topic TTN. Plus de détails...
 
 ~Communication ()
 Destructeur de la classe Communication. Plus de détails...
 

Fonctions membres privées

int extraireCharge (QJsonObject objetJSON)
 Méthode pour extraire la charge de la batterie le l'objet JSON. Plus de détails...
 
QString extraireDeviceID (QJsonObject objetJSON, QStringList listeCles, int position)
 Méthode pour extraire le device ID de l'objet JSON. Plus de détails...
 
int extraireEnsoleillement (QJsonObject objetJSON)
 Méthode pour extraire l'ensoleillement de l'objet JSON. Plus de détails...
 
QString extraireHorodatage (QJsonObject objetJSON)
 Méthode pour extraire le temps de l'objet JSON. Plus de détails...
 
double extraireHumiditeExterieure (QJsonObject objetJSON)
 Méthode pour extraire l'humidité extérieure de l'objet JSON. Plus de détails...
 
double extraireHumiditeInterieure (QJsonObject objetJSON)
 Méthode pour extraire l'humidité intérieure de l'objet JSON. Plus de détails...
 
double extrairePoids (QJsonObject objetJSON)
 Méthode pour extraire le poids le l'objet JSON. Plus de détails...
 
int extrairePression (QJsonObject objetJSON)
 Méthode pour extraire la pression de l'objet JSON. Plus de détails...
 
double extraireTemperatureExterieure (QJsonObject objetJSON)
 Méthode pour extraire la température extérieure de l'objet JSON. Plus de détails...
 
double extraireTemperatureInterieure (QJsonObject objetJSON)
 Méthode pour extraire la température intérieure de l'objet JSON. Plus de détails...
 
QString formaterHorodatage (QString horodatageBrut)
 Méthode pour mettre dans le bon format l'horodatage reçu. Plus de détails...
 

Attributs privés

QMqttClient * client
 
Ihmihm
 interface utilisateur Plus de détails...
 
QMqttSubscription * subscription
 

Description détaillée

Permet de recevoir les données.

Auteur
ACKERMANN Théo
Version
0.2

Définition à la ligne 24 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 16 du fichier communication.cpp.

Références changerEtatConnexion(), client, et decoderJson().

16  : QObject(parent), client(new QMqttClient(this))
17 {
18  qDebug() << Q_FUNC_INFO;
19  connect(client, SIGNAL(stateChanged(ClientState)), this, SLOT(changerEtatConnexion()));
20  connect(client, SIGNAL(messageReceived(const QByteArray &, const QMqttTopicName &)), this, SLOT(decoderJson(const QByteArray &)));
21 }
void changerEtatConnexion()
Méthode pour notifier un changement d&#39;état de la connexion TTN.
void decoderJson(const QByteArray &json)
Méthode pour décoder le JSON reçu.
QMqttClient * client
Definition: communication.h:37

◆ ~Communication()

Communication::~Communication ( )

Destructeur de la classe Communication.

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

Références client.

27 {
28  if(client->state() == QMqttClient::Connected)
29  {
30  client->disconnectFromHost();
31  }
32  qDebug() << Q_FUNC_INFO;
33 }
QMqttClient * client
Definition: communication.h:37

Documentation des fonctions membres

◆ changerEtatConnexion

void Communication::changerEtatConnexion ( )
slot

Méthode pour notifier un changement d'état de la connexion TTN.

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

Références client, et nouvelEtatConnexion().

Référencé par Communication().

283 {
284  QString message;
285  switch(client->state())
286  {
287  case 0:
288  message = "Déconnecté";
289  break;
290  case 1:
291  message = "En cours de connexion";
292  break;
293  case 2:
294  message = "Connecté";
295  break;
296  }
297  qDebug()<< Q_FUNC_INFO << client->state() << message;
298  emit nouvelEtatConnexion(client->state());
299 }
QMqttClient * client
Definition: communication.h:37
void nouvelEtatConnexion(int etat)

◆ connecterTTN()

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

Méthode pour se connecter à TTN.

Paramètres
hostname
port
username
password

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

Références client.

Référencé par Ihm::demarrerTTN(), et Ihm::on_pushButton_connexion_ttn_clicked().

44 {
45  qDebug() << Q_FUNC_INFO << hostname << port << username << password;
46  if(client->state() == QMqttClient::Disconnected)
47  {
48  client->setHostname(hostname);
49  client->setPort(port);
50  client->setUsername(username);
51  client->setPassword(password);
52  client->connectToHost();
53  }
54  else if(client->state() == QMqttClient::Connected)
55  {
56  client->disconnectFromHost();
57  }
58 }
QMqttClient * client
Definition: communication.h:37

◆ decoderJson

void Communication::decoderJson ( const QByteArray &  json)
slot

Méthode pour décoder le JSON reçu.

Paramètres
json

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

Références extraireCharge(), extraireDeviceID(), extraireEnsoleillement(), extraireHorodatage(), extraireHumiditeExterieure(), extraireHumiditeInterieure(), extrairePoids(), extrairePression(), extraireTemperatureExterieure(), extraireTemperatureInterieure(), formaterHorodatage(), nouvelleValeurCharge(), nouvelleValeurEnsoleillement(), nouvelleValeurHumiditeExterieure(), nouvelleValeurHumiditeInterieure(), nouvelleValeurPoids(), nouvelleValeurPression(), nouvelleValeurTemperatureExterieure(), et nouvelleValeurTemperatureInterieure().

Référencé par Communication().

94 {
95  QJsonDocument documentJSON = QJsonDocument::fromJson(json);
96  QString nomDeLaRuche;
97  QString horodatage;
98 
99  qDebug() << Q_FUNC_INFO << json;
100  if(!documentJSON.isNull())
101  {
102  QJsonObject objetJSON = documentJSON.object();
103  QStringList listeCles = objetJSON.keys();
104  // les clés sont triés alphabétiquement
105  for(int i = 0; i < listeCles.count()-1; i++)
106  {
107  if(listeCles.at(i) == "dev_id")
108  {
109  nomDeLaRuche = extraireDeviceID(objetJSON, listeCles, i);
110  }
111  if(listeCles.at(i) == "metadata")
112  {
113  horodatage = formaterHorodatage(extraireHorodatage(objetJSON[listeCles.at(i)].toObject()));
114  }
115  if(listeCles.at(i) == "payload_fields")
116  {
117  QJsonObject objet = objetJSON[listeCles.at(i)].toObject();
118 
119  if(objet.contains("temperatureInt"))
120  {
121  emit nouvelleValeurTemperatureInterieure(nomDeLaRuche, extraireTemperatureInterieure(objet), horodatage);
122  }
123  if(objet.contains("temperatureExt"))
124  {
125  emit nouvelleValeurTemperatureExterieure(nomDeLaRuche, extraireTemperatureExterieure(objet), horodatage);
126  }
127  if(objet.contains("humiditeInt"))
128  {
129  emit nouvelleValeurHumiditeInterieure(nomDeLaRuche, extraireHumiditeInterieure(objet), horodatage);
130  }
131  if(objet.contains("humiditeExt"))
132  {
133  emit nouvelleValeurHumiditeExterieure(nomDeLaRuche, extraireHumiditeExterieure(objet), horodatage);
134  }
135  if(objet.contains("ensoleillement"))
136  {
137  emit nouvelleValeurEnsoleillement(nomDeLaRuche, extraireEnsoleillement(objet), horodatage);
138  }
139  if(objet.contains("pression"))
140  {
141  emit nouvelleValeurPression(nomDeLaRuche, extrairePression(objet), horodatage);
142  }
143  if(objet.contains("poids"))
144  {
145  emit nouvelleValeurPoids(nomDeLaRuche, extrairePoids(objet), horodatage);
146  }
147  if(objet.contains("charge"))
148  {
149  emit nouvelleValeurCharge(nomDeLaRuche, extraireCharge(objet), horodatage);
150  }
151  }
152  }
153  }
154 }
int extraireEnsoleillement(QJsonObject objetJSON)
Méthode pour extraire l&#39;ensoleillement de l&#39;objet JSON.
void nouvelleValeurPression(QString nomDeLaRuche, int pression, QString horodatage)
double extraireTemperatureInterieure(QJsonObject objetJSON)
Méthode pour extraire la température intérieure de l&#39;objet JSON.
double extraireHumiditeExterieure(QJsonObject objetJSON)
Méthode pour extraire l&#39;humidité extérieure de l&#39;objet JSON.
void nouvelleValeurTemperatureExterieure(QString nomDeLaRuche, double temperatureExterieure, QString horodatage)
void nouvelleValeurCharge(QString nomDeLaRuche, int charge, QString horodatage)
QString extraireDeviceID(QJsonObject objetJSON, QStringList listeCles, int position)
Méthode pour extraire le device ID de l&#39;objet JSON.
void nouvelleValeurPoids(QString nomDeLaRuche, double poids, QString horodatage)
int extraireCharge(QJsonObject objetJSON)
Méthode pour extraire la charge de la batterie le l&#39;objet JSON.
QString formaterHorodatage(QString horodatageBrut)
Méthode pour mettre dans le bon format l&#39;horodatage reçu.
void nouvelleValeurHumiditeExterieure(QString nomDeLaRuche, double humiditeExterieure, QString horodatage)
int extrairePression(QJsonObject objetJSON)
Méthode pour extraire la pression de l&#39;objet JSON.
void nouvelleValeurEnsoleillement(QString nomDeLaRuche, int ensoleillement, QString horodatage)
QString extraireHorodatage(QJsonObject objetJSON)
Méthode pour extraire le temps de l&#39;objet JSON.
double extrairePoids(QJsonObject objetJSON)
Méthode pour extraire le poids le l&#39;objet JSON.
void nouvelleValeurTemperatureInterieure(QString nomDeLaRuche, double temperatureInterieure, QString horodatage)
double extraireHumiditeInterieure(QJsonObject objetJSON)
Méthode pour extraire l&#39;humidité intérieure de l&#39;objet JSON.
double extraireTemperatureExterieure(QJsonObject objetJSON)
Méthode pour extraire la température extérieure de l&#39;objet JSON.
void nouvelleValeurHumiditeInterieure(QString nomDeLaRuche, double humiditeInterieure, QString horodatage)

◆ desabonnerTopic()

void Communication::desabonnerTopic ( QString  topic)

Méthode pour se désabonner d'un topic TTN.

Paramètres
topic

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

Références client.

Référencé par Ihm::on_pushButton_supprimer_ruche_clicked().

80 {
81  if(client->state() == QMqttClient::Connected)
82  {
83  client->unsubscribe(topic);
84  qDebug() << Q_FUNC_INFO << topic;
85  }
86 }
QMqttClient * client
Definition: communication.h:37

◆ extraireCharge()

int Communication::extraireCharge ( QJsonObject  objetJSON)
private

Méthode pour extraire la charge de la batterie le l'objet JSON.

Paramètres
objetJSON
Renvoie
int

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

Référencé par decoderJson().

263 {
264  return objetJSON.value(QString("charge")).toInt();
265 }

◆ extraireDeviceID()

QString Communication::extraireDeviceID ( QJsonObject  objetJSON,
QStringList  listeCles,
int  position 
)
private

Méthode pour extraire le device ID de l'objet JSON.

Paramètres
objetJSON
listeCles
position
Renvoie
QString

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

Référencé par decoderJson().

176 {
177  return objetJSON[listeCles.at(position)].toString();
178 }

◆ extraireEnsoleillement()

int Communication::extraireEnsoleillement ( QJsonObject  objetJSON)
private

Méthode pour extraire l'ensoleillement de l'objet JSON.

Paramètres
objetJSON
Renvoie
int

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

Référencé par decoderJson().

230 {
231  return objetJSON.value(QString("ensoleillement")).toInt();
232 }

◆ extraireHorodatage()

QString Communication::extraireHorodatage ( QJsonObject  objetJSON)
private

Méthode pour extraire le temps de l'objet JSON.

Paramètres
objetJSON
Renvoie
QString

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

Référencé par decoderJson().

163 {
164  return objetJSON.value(QString("time")).toString();
165 }

◆ extraireHumiditeExterieure()

double Communication::extraireHumiditeExterieure ( QJsonObject  objetJSON)
private

Méthode pour extraire l'humidité extérieure de l'objet JSON.

Paramètres
objetJSON
Renvoie
double

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

Référencé par decoderJson().

220 {
221  return objetJSON.value(QString("humiditeExt")).toDouble();
222 }

◆ extraireHumiditeInterieure()

double Communication::extraireHumiditeInterieure ( QJsonObject  objetJSON)
private

Méthode pour extraire l'humidité intérieure de l'objet JSON.

Paramètres
objetJSON
Renvoie
double

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

Référencé par decoderJson().

209 {
210  return objetJSON.value(QString("humiditeInt")).toDouble();
211 }

◆ extrairePoids()

double Communication::extrairePoids ( QJsonObject  objetJSON)
private

Méthode pour extraire le poids le l'objet JSON.

Paramètres
objetJSON
Renvoie
double

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

Référencé par decoderJson().

252 {
253  return objetJSON.value(QString("poids")).toDouble();
254 }

◆ extrairePression()

int Communication::extrairePression ( QJsonObject  objetJSON)
private

Méthode pour extraire la pression de l'objet JSON.

Paramètres
objetJSON
Renvoie
int

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

Référencé par decoderJson().

241 {
242  return objetJSON.value(QString("pression")).toInt();
243 }

◆ extraireTemperatureExterieure()

double Communication::extraireTemperatureExterieure ( QJsonObject  objetJSON)
private

Méthode pour extraire la température extérieure de l'objet JSON.

Paramètres
objetJSON
Renvoie
double

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

Référencé par decoderJson().

198 {
199  return objetJSON.value(QString("temperatureExt")).toDouble();
200 }

◆ extraireTemperatureInterieure()

double Communication::extraireTemperatureInterieure ( QJsonObject  objetJSON)
private

Méthode pour extraire la température intérieure de l'objet JSON.

Paramètres
objetJSON
Renvoie
double

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

Référencé par decoderJson().

187 {
188  return objetJSON.value(QString("temperatureInt")).toDouble();
189 }

◆ formaterHorodatage()

QString Communication::formaterHorodatage ( QString  horodatageBrut)
private

Méthode pour mettre dans le bon format l'horodatage reçu.

Paramètres
horodatageBrut
Renvoie
QString

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

Référencé par decoderJson().

274 {
275  QDateTime horodatage = QDateTime::fromString(horodatageBrut, Qt::ISODate).toLocalTime();
276  return horodatage.toString("dd/MM/yyyy HH:mm:ss");
277 }

◆ nouvelEtatConnexion

void Communication::nouvelEtatConnexion ( int  etat)
signal

Référencé par changerEtatConnexion().

◆ nouvelleValeurCharge

void Communication::nouvelleValeurCharge ( QString  nomDeLaRuche,
int  charge,
QString  horodatage 
)
signal

Référencé par decoderJson().

◆ nouvelleValeurEnsoleillement

void Communication::nouvelleValeurEnsoleillement ( QString  nomDeLaRuche,
int  ensoleillement,
QString  horodatage 
)
signal

Référencé par decoderJson().

◆ nouvelleValeurHumiditeExterieure

void Communication::nouvelleValeurHumiditeExterieure ( QString  nomDeLaRuche,
double  humiditeExterieure,
QString  horodatage 
)
signal

Référencé par decoderJson().

◆ nouvelleValeurHumiditeInterieure

void Communication::nouvelleValeurHumiditeInterieure ( QString  nomDeLaRuche,
double  humiditeInterieure,
QString  horodatage 
)
signal

Référencé par decoderJson().

◆ nouvelleValeurPoids

void Communication::nouvelleValeurPoids ( QString  nomDeLaRuche,
double  poids,
QString  horodatage 
)
signal

Référencé par decoderJson().

◆ nouvelleValeurPression

void Communication::nouvelleValeurPression ( QString  nomDeLaRuche,
int  pression,
QString  horodatage 
)
signal

Référencé par decoderJson().

◆ nouvelleValeurTemperatureExterieure

void Communication::nouvelleValeurTemperatureExterieure ( QString  nomDeLaRuche,
double  temperatureExterieure,
QString  horodatage 
)
signal

Référencé par decoderJson().

◆ nouvelleValeurTemperatureInterieure

void Communication::nouvelleValeurTemperatureInterieure ( QString  nomDeLaRuche,
double  temperatureInterieure,
QString  horodatage 
)
signal

Référencé par decoderJson().

◆ souscrireTopic()

void Communication::souscrireTopic ( QString  topic)

Méthode pour s'abonner à un topic TTN.

Paramètres
topic

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

Références client, et subscription.

Référencé par Ihm::ajouterNouvelleRuche(), et Ihm::connecterRuches().

66 {
67  if(client->state() == QMqttClient::Connected)
68  {
69  subscription = client->subscribe(QMqttTopicFilter(topic));
70  qDebug() << Q_FUNC_INFO << topic;
71  }
72 }
QMqttSubscription * subscription
Definition: communication.h:38
QMqttClient * client
Definition: communication.h:37

Documentation des données membres

◆ client

QMqttClient* Communication::client
private

◆ ihm

Ihm* Communication::ihm
private

interface utilisateur

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

◆ subscription

QMqttSubscription* Communication::subscription
private

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

Référencé par souscrireTopic().


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