BeeHoneyt  1.1
BTS SNIR LaSalle Avignon 2021
historique.cpp
Aller à la documentation de ce fichier.
1 #include "historique.h"
2 #include <QJsonDocument>
3 #include <QJsonObject>
4 #include <QJsonArray>
5 #include <QDateTime>
6 
24 {
25  manager = new QNetworkAccessManager(this);
26  connect(manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(replyFinished(QNetworkReply*)));
27 }
34 void Historique::setAuthentification(QString url, QString cle)
35 {
36  this->url = url;
37  this->cle = cle;
38  qDebug() << Q_FUNC_INFO << url << cle;
39 }
46 void Historique::recupererDonnees(QString deviceID, QString duree)
47 {
48  if(url.isEmpty() || cle.isEmpty())
49  return;
50 
51  this->deviceID = deviceID;
52 
53  QString strURL;
54  if(deviceID.isEmpty())
55  strURL = url + "/api/v2/query";
56  else
57  strURL = url + "/api/v2/query/" + deviceID;
58  if(!duree.isEmpty()) // par défaut 1 heure
59  strURL += "?last=" + duree;
60 
61  QUrl URL(strURL);
62  QNetworkRequest request;
63 
64  //"https://rucher.data.thethingsnetwork.org/api/v2/query"
65  request.setUrl(URL);
66  //--header 'Accept: application/json'
67  request.setRawHeader("Accept", "application/json");
68  //--header 'Authorization: key ttn-account-v2.vC-aqMRnLLzGkNjODWgy81kLqzxBPAT8_mE-L7U2C_w'
69  request.setRawHeader("Authorization", "key " + cle.toLatin1());
70  //qDebug() << Q_FUNC_INFO << request.url();
71 
72  manager->get(request);
73 }
79 QVector<QStringList> Historique::getMesuresPoids() const
80 {
81  return mesuresPoids;
82 }
88 QVector<QStringList> Historique::getMesuresPression() const
89 {
90  return mesuresPression;
91 }
97 QVector<QStringList> Historique::getMesuresTemperatureExterieure() const
98 {
100 }
107 {
109 }
115 QVector<QStringList> Historique::getMesuresHumiditeExterieure() const
116 {
118 }
124 QVector<QStringList> Historique::getMesuresHumiditeInterieure() const
125 {
127 }
133 void Historique::replyFinished(QNetworkReply *reply)
134 {
135  QByteArray datas = reply->readAll();
136  //QString donneesRecuperees(datas);
137  //qDebug() << Q_FUNC_INFO << donneesRecuperees;
138 
144  //emit messageJournal(donneesRecuperees);
145 
146  QJsonDocument documentJSON = QJsonDocument::fromJson(datas);
147  if(documentJSON.isArray())
148  {
149  QJsonArray tableauJSON = documentJSON.array();
150  //qDebug() << Q_FUNC_INFO << "deviceID" << deviceID;
151  //qDebug() << Q_FUNC_INFO << "Nb valeurs récupérées" << tableauJSON.size();
152 
153  QString message("Nombre de valeurs récupérées : ");
154  int valeursRecuperees = tableauJSON.size();
155  message.append(QString::number(valeursRecuperees));
156  emit messageJournal(message);
157 
158  QJsonValue poids, pression, temperatureExt, temperatureInt, humiditeExt, humiditeInt;
159  QStringList donnees;
160 
161  donneesPoids.clear();
162  donneesPression.clear();
167  for(int i = 0; i < tableauJSON.count(); i++)
168  {
169  QJsonValue valeur = tableauJSON.at(i);
170  if(valeur.isObject())
171  {
172  QJsonObject objet = valeur.toObject();
173  /* {
174  "device_id":"ruche-1-sim",
175  "humiditeExt":null,
176  "humiditeInt":null,
177  "poids":22.4,
178  "pression":null,
179  "temperatureExt":null,
180  "temperatureInt":null,
181  "time":"2021-05-26T08:26:53.789498119Z"
182  }
183  */
184  if(objet.value(QString("device_id")).toString() == deviceID)
185  {
186  poids = objet.value(QString("poids"));
187  pression = objet.value(QString("pression"));
188  temperatureExt = objet.value(QString("temperatureExt"));
189  temperatureInt = objet.value(QString("temperatureInt"));
190  humiditeExt = objet.value(QString("humiditeExt"));
191  humiditeInt = objet.value(QString("humiditeInt"));
192 
193  //qDebug() << Q_FUNC_INFO << "temperature Ext = " << temperatureExt;
194 
195  if(!poids.isNull())
196  {
197  donnees.clear();
198  QDateTime horodatage = QDateTime::fromString(objet.value(QString("time")).toString(), Qt::ISODate).toLocalTime();
199  donnees << horodatage.toString("HH") << QString::number(poids.toDouble()) << horodatage.toString("dd/MM/yyyy") << horodatage.toString("HH:mm:ss");
200  donneesPoids.push_back(donnees);
201  }
202  else if(!pression.isNull())
203  {
204  donnees.clear();
205  QDateTime horodatagePression = QDateTime::fromString(objet.value(QString("time")).toString(), Qt::ISODate).toLocalTime();
206  donnees << horodatagePression.toString("HH") << QString::number(pression.toDouble()) << horodatagePression.toString("dd/MM/yyyy") << horodatagePression.toString("HH:mm:ss");
207  qDebug() << donnees;
208  donneesPression.push_back(donnees);
209 
210  donnees.clear();
211  QDateTime horodatageTemperatureExt = QDateTime::fromString(objet.value(QString("time")).toString(), Qt::ISODate).toLocalTime();
212  donnees << horodatageTemperatureExt.toString("HH") << QString::number(temperatureExt.toDouble()) << horodatageTemperatureExt.toString("dd/MM/yyyy") << horodatageTemperatureExt.toString("HH:mm:ss");
213  donneesTemperatureExterieure.push_back(donnees);
214 
215  donnees.clear();
216  QDateTime horodatageTemperatureInt = QDateTime::fromString(objet.value(QString("time")).toString(), Qt::ISODate).toLocalTime();
217  donnees << horodatageTemperatureInt.toString("HH") << QString::number(temperatureInt.toDouble()) << horodatageTemperatureInt.toString("dd/MM/yyyy") << horodatageTemperatureInt.toString("HH:mm:ss");
218  donneesTemperatureInterieure.push_back(donnees);
219 
220  donnees.clear();
221  QDateTime horodatageHumiditeExt = QDateTime::fromString(objet.value(QString("time")).toString(), Qt::ISODate).toLocalTime();
222  donnees << horodatageHumiditeExt.toString("HH") << QString::number(humiditeExt.toDouble()) << horodatageHumiditeExt.toString("dd/MM/yyyy") << horodatageHumiditeExt.toString("HH:mm:ss");
223  donneesHumiditeExterieure.push_back(donnees);
224 
225  donnees.clear();
226  QDateTime horodatageHumiditeInt = QDateTime::fromString(objet.value(QString("time")).toString(), Qt::ISODate).toLocalTime();
227  donnees << horodatageHumiditeInt.toString("HH") << QString::number(humiditeInt.toDouble()) << horodatageHumiditeInt.toString("dd/MM/yyyy") << horodatageHumiditeInt.toString("HH:mm:ss");
228  donneesHumiditeInterieure.push_back(donnees);
229  }
230  }
231  }
232  }
233 
234  //qDebug() << Q_FUNC_INFO << donneesTemperatureExterieure;
235  //qDebug() << Q_FUNC_INFO << "Nb mesures temperature exterieure" << donneesTemperatureExterieure.size();
236 
243 
244  emit recuperationTerminee();
245  }
246 }
252 {
253  if(donneesPoids.isEmpty())
254  return;
255 
256  QStringList mesure;
257  double somme = 0.;
258  int nbMesures = 0;
259 
260  mesuresPoids.clear();
261  for(int heure = 0; heure < 24; heure++)
262  {
263  somme = 0.;
264  nbMesures = 0;
265  for(QVector<QStringList>::iterator it = donneesPoids.begin(); it != donneesPoids.end(); it++)
266  {
267 
268  if((*it).at(0).toInt() == heure)
269  {
270  //qDebug() << Q_FUNC_INFO << heure << (*it).at(0) << (*it).at(1).toDouble();
271  somme += (*it).at(1).toDouble();
272  nbMesures++;
273  }
274  else if((*it).at(0).toInt() < heure)
275  {
276  if(donneesPoids.erase(it) == donneesPoids.end())
277  break;
278  }
279  }
280  if(nbMesures > 0)
281  {
282  //qDebug() << Q_FUNC_INFO << "heure" << heure << "Nb mesures" << nbMesures << "somme" << somme << "moyenne" << (somme/(double)nbMesures);
283  mesure.clear();
284  mesure << QString::number(heure) << QString::number((somme/(double)nbMesures));
285  mesuresPoids.push_back(mesure);
286  }
287  }
288 
289  //qDebug() << Q_FUNC_INFO << mesuresPoids;
290  //qDebug() << Q_FUNC_INFO << "Nb mesures" << mesuresPoids.size();
291  //qDebug() << Q_FUNC_INFO << "Nb mesures poids" << donneesPoids.size();
292 }
298 {
299  if(donneesPression.isEmpty())
300  return;
301 
302  QStringList mesure;
303  double somme = 0.;
304  int nbMesures = 0;
305 
306  mesuresPression.clear();
307  for(int heure = 0; heure < 24; heure++)
308  {
309  somme = 0.;
310  nbMesures = 0;
311  for(QVector<QStringList>::iterator it = donneesPression.begin(); it != donneesPression.end(); it++)
312  {
313 
314  if((*it).at(0).toInt() == heure)
315  {
316  //qDebug() << Q_FUNC_INFO << heure << (*it).at(0) << (*it).at(1).toDouble();
317  somme += (*it).at(1).toDouble();
318  nbMesures++;
319  }
320  else if((*it).at(0).toInt() < heure)
321  {
322  if(donneesPression.erase(it) == donneesPression.end())
323  break;
324  }
325  }
326  if(nbMesures > 0)
327  {
328  //qDebug() << Q_FUNC_INFO << "heure" << heure << "Nb mesures" << nbMesures << "somme" << somme << "moyenne" << (somme/(double)nbMesures);
329  mesure.clear();
330  mesure << QString::number(heure) << QString::number((somme/(double)nbMesures));
331  mesuresPression.push_back(mesure);
332  }
333  }
334 
335  //qDebug() << Q_FUNC_INFO << mesuresPression;
336  //qDebug() << Q_FUNC_INFO << "Nb mesures" << mesuresPression.size();
337  //qDebug() << Q_FUNC_INFO << "Nb mesures pression" << donneesPression.size();
338 }
344 {
345  if(donneesTemperatureExterieure.isEmpty())
346  return;
347 
348  QStringList mesure;
349  double somme = 0.;
350  int nbMesures = 0;
351 
353  for(int heure = 0; heure < 24; heure++)
354  {
355  somme = 0.;
356  nbMesures = 0;
357  for(QVector<QStringList>::iterator it = donneesTemperatureExterieure.begin(); it != donneesTemperatureExterieure.end(); it++)
358  {
359 
360  if((*it).at(0).toInt() == heure)
361  {
362  //qDebug() << Q_FUNC_INFO << heure << (*it).at(0) << (*it).at(1).toDouble();
363  somme += (*it).at(1).toDouble();
364  nbMesures++;
365  }
366  else if((*it).at(0).toInt() < heure)
367  {
369  break;
370  }
371  }
372  if(nbMesures > 0)
373  {
374  //qDebug() << Q_FUNC_INFO << "heure" << heure << "Nb mesures" << nbMesures << "somme" << somme << "moyenne" << (somme/(double)nbMesures);
375  mesure.clear();
376  mesure << QString::number(heure) << QString::number((somme/(double)nbMesures));
377  mesuresTemperatureExterieure.push_back(mesure);
378  }
379  }
380 
381  //qDebug() << Q_FUNC_INFO << mesuresTemperatureExterieure;
382  qDebug() << Q_FUNC_INFO << "Nb mesures" << mesuresTemperatureExterieure.size();
383  //qDebug() << Q_FUNC_INFO << "Nb mesures temperature exterieure" << donneesTemperatureExterieure.size();
384 }
390 {
391  if(donneesTemperatureInterieure.isEmpty())
392  return;
393 
394  QStringList mesure;
395  double somme = 0.;
396  int nbMesures = 0;
397 
399  for(int heure = 0; heure < 24; heure++)
400  {
401  somme = 0.;
402  nbMesures = 0;
403  for(QVector<QStringList>::iterator it = donneesTemperatureInterieure.begin(); it != donneesTemperatureInterieure.end(); it++)
404  {
405 
406  if((*it).at(0).toInt() == heure)
407  {
408  //qDebug() << Q_FUNC_INFO << heure << (*it).at(0) << (*it).at(1).toDouble();
409  somme += (*it).at(1).toDouble();
410  nbMesures++;
411  }
412  else if((*it).at(0).toInt() < heure)
413  {
415  break;
416  }
417  }
418  if(nbMesures > 0)
419  {
420  //qDebug() << Q_FUNC_INFO << "heure" << heure << "Nb mesures" << nbMesures << "somme" << somme << "moyenne" << (somme/(double)nbMesures);
421  mesure.clear();
422  mesure << QString::number(heure) << QString::number((somme/(double)nbMesures));
423  mesuresTemperatureInterieure.push_back(mesure);
424  }
425  }
426 
427  //qDebug() << Q_FUNC_INFO << mesuresTemperatureInterieure;
428  //qDebug() << Q_FUNC_INFO << "Nb mesures" << mesuresTemperatureInterieure.size();
429  //qDebug() << Q_FUNC_INFO << "Nb mesures temeperature interieure" << donneesTemperatureInterieure.size();
430 }
436 {
437  if(donneesHumiditeExterieure.isEmpty())
438  return;
439 
440  QStringList mesure;
441  double somme = 0.;
442  int nbMesures = 0;
443 
445  for(int heure = 0; heure < 24; heure++)
446  {
447  somme = 0.;
448  nbMesures = 0;
449  for(QVector<QStringList>::iterator it = donneesHumiditeExterieure.begin(); it != donneesHumiditeExterieure.end(); it++)
450  {
451  if((*it).at(0).toInt() == heure)
452  {
453  //qDebug() << Q_FUNC_INFO << heure << (*it).at(0) << (*it).at(1).toDouble();
454  somme += (*it).at(1).toDouble();
455  nbMesures++;
456  }
457  else if((*it).at(0).toInt() < heure)
458  {
460  break;
461  }
462  }
463  if(nbMesures > 0)
464  {
465  //qDebug() << Q_FUNC_INFO << "heure" << heure << "Nb mesures" << nbMesures << "somme" << somme << "moyenne" << (somme/(double)nbMesures);
466  mesure.clear();
467  mesure << QString::number(heure) << QString::number((somme/(double)nbMesures));
468  mesuresHumiditeExterieure.push_back(mesure);
469  }
470  }
471 
472  //qDebug() << Q_FUNC_INFO << mesuresHumiditeExterieure;
473  //qDebug() << Q_FUNC_INFO << "Nb mesures" << mesuresHumiditeExterieure.size();
474  //qDebug() << Q_FUNC_INFO << "Nb mesures humidite exterieure" << donneesHumiditeExterieure.size();
475 }
481 {
482  if(donneesHumiditeInterieure.isEmpty())
483  return;
484 
485  QStringList mesure;
486  double somme = 0.;
487  int nbMesures = 0;
488 
490  for(int heure = 0; heure < 24; heure++)
491  {
492  somme = 0.;
493  nbMesures = 0;
494  for(QVector<QStringList>::iterator it = donneesHumiditeInterieure.begin(); it != donneesHumiditeInterieure.end(); it++)
495  {
496 
497  if((*it).at(0).toInt() == heure)
498  {
499  //qDebug() << Q_FUNC_INFO << heure << (*it).at(0) << (*it).at(1).toDouble();
500  somme += (*it).at(1).toDouble();
501  nbMesures++;
502  }
503  else if((*it).at(0).toInt() < heure)
504  {
506  break;
507  }
508  }
509  if(nbMesures > 0)
510  {
511  //qDebug() << Q_FUNC_INFO << "heure" << heure << "Nb mesures" << nbMesures << "somme" << somme << "moyenne" << (somme/(double)nbMesures);
512  mesure.clear();
513  mesure << QString::number(heure) << QString::number((somme/(double)nbMesures));
514  mesuresHumiditeInterieure.push_back(mesure);
515  }
516  }
517 
518  //qDebug() << Q_FUNC_INFO << mesuresHumiditeInterieure;
519  //qDebug() << Q_FUNC_INFO << "Nb mesures" << mesuresHumiditeInterieure.size();
520  //qDebug() << Q_FUNC_INFO << "Nb mesures humidite interieure" << donneesHumiditeInterieure.size();
521 }
La déclaration de la classe Historique.
void replyFinished(QNetworkReply *reply)
Methode qui traite les donnees et emet un signal afin de generer des graphique a partor des mesures r...
Definition: historique.cpp:133
void recuperationTerminee()
QVector< QStringList > mesuresTemperatureExterieure
Definition: historique.h:52
QString url
Definition: historique.h:42
QVector< QStringList > donneesTemperatureExterieure
Definition: historique.h:51
QVector< QStringList > getMesuresHumiditeExterieure() const
Methode qui retourne un conteneur dynamique, contenant les mesures de l&#39;humidite exterieure.
Definition: historique.cpp:115
QVector< QStringList > getMesuresTemperatureExterieure() const
Methode qui retourne un conteneur dynamique, contenant les mesures de la temperature exterieure...
Definition: historique.cpp:97
QString deviceID
Definition: historique.h:44
QString cle
Definition: historique.h:43
Historique(QObject *parent=nullptr)
Definition: historique.cpp:23
QVector< QStringList > mesuresPression
Definition: historique.h:50
QVector< QStringList > mesuresHumiditeExterieure
Definition: historique.h:56
QVector< QStringList > getMesuresTemperatureInterieure() const
Methode qui retourne un conteneur dynamique, contenant les mesures de la temperature interieure...
Definition: historique.cpp:106
void traiterDonneesPression()
Methode qui traite les donnees de la pression.
Definition: historique.cpp:297
QVector< QStringList > mesuresHumiditeInterieure
Definition: historique.h:58
void traiterDonneesHumiditeExterieure()
Methode qui traite les donnees de l&#39;humidite exterieure.
Definition: historique.cpp:435
void messageJournal(QString message)
void traiterDonneesTemperatureInterieure()
Methode qui traite les donnees de la temperature interieure.
Definition: historique.cpp:389
void recupererDonnees(QString deviceID, QString duree="")
Methode qui recupère toutes les donnees (mesures des capteurs) de la ruche selectionnee (deviceID) ...
Definition: historique.cpp:46
QNetworkReply * reply
Definition: historique.h:46
QVector< QStringList > getMesuresPoids() const
Methode qui retourne un conteneur dynamique, contenant les mesures du poids.
Definition: historique.cpp:79
QVector< QStringList > donneesPression
Definition: historique.h:49
QVector< QStringList > donneesTemperatureInterieure
Definition: historique.h:53
QVector< QStringList > mesuresTemperatureInterieure
Definition: historique.h:54
void traiterDonneesHumiditeInterieure()
Methode qui traite les donnees de l&#39;humidite interieure.
Definition: historique.cpp:480
QVector< QStringList > getMesuresHumiditeInterieure() const
Methode qui retourne un conteneur dynamique, contenant les mesures de l&#39;humidite interieure.
Definition: historique.cpp:124
QVector< QStringList > donneesHumiditeInterieure
Definition: historique.h:57
void traiterDonneesPoids()
Methode qui traite les donnees du poids.
Definition: historique.cpp:251
void setAuthentification(QString url, QString cle)
Methode qui modifie l&#39;URL et la clé
Definition: historique.cpp:34
QVector< QStringList > getMesuresPression() const
Methode qui retourne un conteneur dynamique, contenant les mesures de la pression.
Definition: historique.cpp:88
QVector< QStringList > donneesHumiditeExterieure
Definition: historique.h:55
QVector< QStringList > mesuresPoids
Definition: historique.h:48
QVector< QStringList > donneesPoids
Definition: historique.h:47
QNetworkAccessManager * manager
Definition: historique.h:45
void traiterDonneesTemperatureExterieure()
Methode qui traite les donnees de la temperature exterieure.
Definition: historique.cpp:343