23 qDebug() << Q_FUNC_INFO;
45 qDebug() << Q_FUNC_INFO;
103 ui->pushButton_ruches->setStyleSheet(
"background:#666666;");
104 ui->pushButton_mesures->setStyleSheet(
"");
105 ui->pushButton_graphiques->setStyleSheet(
"");
106 ui->pushButton_alertes->setStyleSheet(
"");
107 ui->pushButton_reglage_ttn->setStyleSheet(
"");
111 ui->pushButton_ruches->setStyleSheet(
"");
112 ui->pushButton_mesures->setStyleSheet(
"background:#666666;");
113 ui->pushButton_graphiques->setStyleSheet(
"");
114 ui->pushButton_alertes->setStyleSheet(
"");
115 ui->pushButton_reglage_ttn->setStyleSheet(
"");
119 ui->pushButton_ruches->setStyleSheet(
"");
120 ui->pushButton_mesures->setStyleSheet(
"");
121 ui->pushButton_graphiques->setStyleSheet(
"background:#666666;");
122 ui->pushButton_alertes->setStyleSheet(
"");
123 ui->pushButton_reglage_ttn->setStyleSheet(
"");
127 ui->pushButton_ruches->setStyleSheet(
"");
128 ui->pushButton_mesures->setStyleSheet(
"");
129 ui->pushButton_graphiques->setStyleSheet(
"");
130 ui->pushButton_alertes->setStyleSheet(
"background:#666666;");
131 ui->pushButton_reglage_ttn->setStyleSheet(
"");
135 ui->pushButton_ruches->setStyleSheet(
"");
136 ui->pushButton_mesures->setStyleSheet(
"");
137 ui->pushButton_graphiques->setStyleSheet(
"");
138 ui->pushButton_alertes->setStyleSheet(
"");
139 ui->pushButton_reglage_ttn->setStyleSheet(
"background:#666666;");
164 if(
ui->comboBox_liste_ruches->currentText() ==
nullptr)
166 QMessageBox::warning(
this,
"Erreur",
"Il n'y a pas de ruche.");
167 qDebug() << Q_FUNC_INFO <<
"Il n'y a pas de ruche.";
181 if(
ui->comboBox_liste_ruches->currentText() ==
nullptr |
ui->comboBox_liste_ruches->currentText() ==
"Nom de la ruche")
183 QMessageBox::warning(
this,
"Erreur",
"Il n'y a pas de ruche.");
184 qDebug() << Q_FUNC_INFO <<
"Il n'y a pas de ruche.";
188 QMessageBox::StandardButton reponse;
189 QString nom_ruche =
ui->comboBox_liste_ruches->currentText();
190 QString question =
"Êtes-vous sûr de vouloir supprimer la ruche '" + nom_ruche +
"' ?";
191 reponse = QMessageBox::question(
this,
"",question,QMessageBox::Yes|QMessageBox::No);
193 if(reponse == QMessageBox::Yes)
195 qDebug() << Q_FUNC_INFO <<
"reponse : Oui";
197 ruches.remove(
ui->comboBox_liste_ruches->currentIndex());
199 ui->comboBox_liste_ruches->removeItem(
ui->comboBox_liste_ruches->currentIndex());
203 qDebug() << Q_FUNC_INFO <<
"reponse : Non";
220 qDebug() << Q_FUNC_INFO;
243 QChart *chart =
new QChart();
244 chart->legend()->show();
248 chart->createDefaultAxes();
249 chart->setTitle(
"Températures");
250 ui->chartView_temperature->setChart(chart);
251 ui->chartView_temperature->setRenderHint(QPainter::Antialiasing);
256 QDateTimeAxis *axisX =
new QDateTimeAxis();
257 axisX->setTickCount(7);
258 axisX->setFormat(
"dd/MM");
259 axisX->setTitleText(
"Jours");
264 axisX->setMin(QDateTime::currentDateTime().addDays(-3));
265 axisX->setMax(QDateTime::currentDateTime().addDays(3));
267 QValueAxis *axisY =
new QValueAxis();
268 axisY->setTitleText(
"°C");
273 chart->setAxisY(axisY);
274 chart->setAxisX(axisX);
290 QChart *chart =
new QChart();
291 chart->legend()->hide();
293 chart->setTitle(
"Humidité");
294 ui->chartView_humidite->setChart(chart);
295 ui->chartView_humidite->setRenderHint(QPainter::Antialiasing);
297 QDateTimeAxis *axisX =
new QDateTimeAxis();
298 axisX->setTickCount(7);
299 axisX->setFormat(
"dd/MM");
300 axisX->setTitleText(
"Jours");
305 axisX->setMin(QDateTime::currentDateTime().addDays(-3));
306 axisX->setMax(QDateTime::currentDateTime().addDays(3));
308 QValueAxis *axisY =
new QValueAxis();
309 axisY->setTitleText(
"%");
314 chart->setAxisY(axisY);
315 chart->setAxisX(axisX);
325 QChart *chart =
new QChart();
326 chart->legend()->hide();
328 chart->setTitle(
"Ensoleillement");
330 ui->chartView_ensoleillement->setChart(chart);
331 ui->chartView_ensoleillement->setRenderHint(QPainter::Antialiasing);
333 QDateTimeAxis *axisX =
new QDateTimeAxis();
334 axisX->setTickCount(24);
335 axisX->setFormat(
"hh");
336 axisX->setTitleText(
"Heure");
338 qint64 msDepuisEpochMin = qdatetime.currentSecsSinceEpoch() - 43200;
339 qint64 msDepuisEpochMax = qdatetime.currentSecsSinceEpoch() + 43200;
341 qDebug() << msDepuisEpochMin << msDepuisEpochMax;
346 QValueAxis *axisY =
new QValueAxis();
347 axisY->setTitleText(
"lux");
354 chart->addAxis(axisX, Qt::AlignBottom);
355 chart->addAxis(axisY, Qt::AlignLeft);
375 QChart *chart =
new QChart();
376 chart->legend()->hide();
378 chart->setTitle(
"Pression");
379 ui->chartView_pression->setChart(chart);
380 ui->chartView_pression->setRenderHint(QPainter::Antialiasing);
382 QDateTimeAxis *axisX =
new QDateTimeAxis();
383 axisX->setTickCount(7);
384 axisX->setFormat(
"dd/MM");
385 axisX->setTitleText(
"Jours");
391 axisX->setMin(QDateTime::currentDateTime().addDays(-3));
392 axisX->setMax(QDateTime::currentDateTime().addDays(3));
394 QValueAxis *axisY =
new QValueAxis();
395 axisY->setTitleText(
"hPa");
399 chart->setAxisY(axisY);
400 chart->setAxisX(axisX);
408 poids =
new QLineSeries();
410 poids->append(0, 321);
411 poids->append(1, 354);
412 poids->append(2, 396);
413 poids->append(3, 348);
414 poids->append(4, 240);
416 QChart *chart =
new QChart();
417 chart->legend()->hide();
418 chart->addSeries(
poids);
419 chart->setTitle(
"Poids");
420 ui->chartView_poids->setChart(chart);
421 ui->chartView_poids->setRenderHint(QPainter::Antialiasing);
423 QDateTimeAxis *axisX =
new QDateTimeAxis();
424 axisX->setTickCount(7);
425 axisX->setFormat(
"dd/MM");
426 axisX->setTitleText(
"Jours");
432 axisX->setMin(QDateTime::currentDateTime().addDays(-3));
433 axisX->setMax(QDateTime::currentDateTime().addDays(3));
435 QValueAxis *axisY =
new QValueAxis();
436 axisY->setTitleText(
"Kg");
440 chart->setAxisY(axisY);
441 chart->setAxisX(axisX);
449 switch(
ui->comboBox_reglages_graphiques->currentIndex())
452 qDebug() << Q_FUNC_INFO <<
"reponse : 1j";
458 qDebug() << Q_FUNC_INFO <<
"reponse : 7j";
464 qDebug() << Q_FUNC_INFO <<
ui->comboBox_reglages_graphiques->currentIndex();
473 switch(
ui->comboBox_donnees_affiche->currentIndex())
476 qDebug() << Q_FUNC_INFO <<
"Temperature";
479 qDebug() << Q_FUNC_INFO <<
"Humidité";
482 qDebug() << Q_FUNC_INFO <<
ui->comboBox_reglages_graphiques->currentIndex();
496 ui->label_etat_connexion->setPixmap(QPixmap(
":/off.png"));
497 ui->pushButton_connexion_ttn->setText(
"Connecter");
500 ui->label_etat_connexion->setPixmap(QPixmap(
":/connexion.png"));
503 ui->label_etat_connexion->setPixmap(QPixmap(
":/on.png"));
504 ui->pushButton_connexion_ttn->setText(
"Déconnecter");
519 QMessageBox::information(
this,
NOM_APPLICATION,
"Utiliser le menu Quitter pour mettre fin à l'application.");
530 ui->pushButton_ruches->setIcon(QIcon(
":/ruche.png"));
531 ui->pushButton_graphiques->setIcon(QIcon(
":/graphiques.png"));
532 ui->pushButton_alertes->setIcon(QIcon(
":/alertes.png"));
533 ui->pushButton_reglage_ttn->setIcon(QIcon(
":/reglages.png"));
534 ui->pushButton_mesures->setIcon(QIcon(
":/vue_globale.png"));
545 ui->comboBox_liste_ruches->addItem(
"Nom de la ruche");
547 ui->comboBox_reglages_graphiques->addItem(
"1 jour");
548 ui->comboBox_reglages_graphiques->addItem(
"7 jours");
550 ui->comboBox_donnees_affiche->addItem(
"Température");
551 ui->comboBox_donnees_affiche->addItem(
"Humidité");
590 QAction *actionMinimiser =
new QAction(QString::fromUtf8(
"Minimiser"),
this);
591 QAction *actionMaximiser =
new QAction(QString::fromUtf8(
"Maximiser"),
this);
592 QAction *actionRestaurer =
new QAction(QString::fromUtf8(
"Restaurer"),
this);
593 QAction *actionQuitter =
new QAction(QString::fromUtf8(
"&Quitter"),
this);
596 connect(actionMinimiser, SIGNAL(triggered(
bool)),
this, SLOT(hide()));
597 connect(actionMaximiser, SIGNAL(triggered(
bool)),
this, SLOT(showMaximized()));
598 connect(actionRestaurer, SIGNAL(triggered(
bool)),
this, SLOT(showNormal()));
599 connect(actionQuitter, SIGNAL(triggered(
bool)), qApp, SLOT(quit()));
602 QMenu * menuEtatSysteme =
new QMenu(
this);
603 menuEtatSysteme->addAction(actionMinimiser);
604 menuEtatSysteme->addAction(actionMaximiser);
605 menuEtatSysteme->addAction(actionRestaurer);
606 menuEtatSysteme->addSeparator();
607 menuEtatSysteme->addAction(actionQuitter);
613 QIcon iconeRuche(
":/ruche.png");
615 setWindowIcon(iconeRuche);
627 if(
ruches[
ui->comboBox_liste_ruches->currentIndex()].topicTTN.contains(nomDeLaRuche))
629 ui->lcdNumber_temperature_interieure->display(temperatureInterieure);
630 QString temps = horodatage;
631 ui->label_maj_temp_int->setText(temps);
638 qDebug() << Q_FUNC_INFO << nomDeLaRuche <<
"Nouvelle température intérieure :" <<
temperatureInterieure;
650 if(
ruches[
ui->comboBox_liste_ruches->currentIndex()].topicTTN.contains(nomDeLaRuche))
652 ui->lcdNumber_temperature_exterieure->display(temperatureExterieure);
653 QString temps = horodatage;
654 ui->label_maj_temp_ext->setText(temps);
658 qDebug() << Q_FUNC_INFO << nomDeLaRuche <<
"Nouvelle température extérieure :" <<
temperatureExterieure;
671 if(
ruches[
ui->comboBox_liste_ruches->currentIndex()].topicTTN.contains(nomDeLaRuche))
673 ui->lcdNumber_humidite_interieure->display(humidite);
674 QString temps = horodatage;
675 ui->label_maj_humidite_interieure->setText(temps);
679 qDebug() << Q_FUNC_INFO << nomDeLaRuche <<
"Nouvelle humidité intérieure:" <<
humidite;
691 if(
ruches[
ui->comboBox_liste_ruches->currentIndex()].topicTTN.contains(nomDeLaRuche))
693 ui->lcdNumber_humidite_exterieure->display(humidite);
694 QString temps = horodatage;
695 ui->label_maj_humidite_exterieure->setText(temps);
699 qDebug() << Q_FUNC_INFO << nomDeLaRuche <<
"Nouvelle humidité extérieure:" <<
humidite;
711 if(
ruches[
ui->comboBox_liste_ruches->currentIndex()].topicTTN.contains(nomDeLaRuche))
713 ui->lcdNumber_ensoleillement->display(ensoleillement);
714 QString temps = horodatage;
715 ui->label_maj_ensoleillement->setText(temps);
718 qint64 msDepuisEpoch;
719 msDepuisEpoch = qdatetime.currentSecsSinceEpoch();
720 QPointF mesure(msDepuisEpoch, ensoleillement);
722 qDebug() << Q_FUNC_INFO << nomDeLaRuche <<
"Nouvelle ensoleillement :" <<
ensoleillement;
738 if(
ruches[
ui->comboBox_liste_ruches->currentIndex()].topicTTN.contains(nomDeLaRuche))
740 ui->lcdNumber_pression->display(pression);
741 QString temps = horodatage;
742 ui->label_maj_pression->setText(temps);
746 qDebug() << Q_FUNC_INFO << nomDeLaRuche <<
"Nouvelle pression :" <<
pression;
759 if(
ruches[
ui->comboBox_liste_ruches->currentIndex()].topicTTN.contains(nomDeLaRuche))
761 ui->lcdNumber_poids->display(poids);
762 QString temps = horodatage;
763 ui->label_maj_poids->setText(temps);
767 qDebug() << Q_FUNC_INFO << nomDeLaRuche <<
"Nouveau poids :" <<
poids;
779 if(
ruches[
ui->comboBox_liste_ruches->currentIndex()].topicTTN.contains(nomDeLaRuche))
781 ui->lcdNumber_charge->display(charge);
782 QString temps = horodatage;
783 ui->label_maj_charge->setText(temps);
787 qDebug() << Q_FUNC_INFO << nomDeLaRuche <<
"Nouvelle charge :" <<
charge;
805 qDebug() << Q_FUNC_INFO << ruche.
nom << ruche.
topicTTN;
806 if(
ui->comboBox_liste_ruches->currentText() ==
"Nom de la ruche")
807 ui->comboBox_liste_ruches->clear();
808 ui->comboBox_liste_ruches->addItem(ruche.
nom);
820 ui->lineEdit_host->setText(configurationTTN.
hostname);
821 ui->spinBox_port->setValue(configurationTTN.
port);
822 ui->lineEdit_username->setText(configurationTTN.
username);
823 ui->lineEdit_password->setText(configurationTTN.
password);
842 qDebug() << Q_FUNC_INFO <<
ruches.size();
844 ui->comboBox_liste_ruches->clear();
845 for(
int i = 0; i <
ruches.size(); i++)
847 qDebug() << Q_FUNC_INFO <<
ruches[i].nom <<
ruches[i].topicTTN;
849 ui->comboBox_liste_ruches->addItem(
ruches[i].nom);
898 qDebug() << Q_FUNC_INFO <<
"Nouvelle valeur sur le graphique d'ensoleillement";
923 return ui->comboBox_liste_ruches->currentText();
void afficherGraphiqueHumidite()
Méthode qui met à jour les mesures de l'humidité dans le graphique associée.
Configuration * configuration
association vers la classe Configuration
void on_pushButton_ruches_clicked()
Bouton/icône affichant l'onglet des données de la ruche selectionné
void setValeurPoids(QString nomDeLaRuche, double poids, QString horodatage)
Méthode pour définir le poids dans l'IHM.
Déclaration de la classe Communication.
void setValeurTemperatureInterieure(QString nomDeLaRuche, double temperatureInterieure, QString horodatage)
Méthode pour définir la température intérieure dans l'IHM.
QVector< QPointF > mesuresPression
Les mesures pour la courbe de la pression.
Communication * communication
association vers la classe Communication
void on_pushButton_supprimer_ruche_clicked()
Bouton qui permet de supprimer la ruche selectionné
QLineSeries * poids
La courbe du poids.
Déclaration de la classe IHMReglageRuche.
void setValeurCharge(QString nomDeLaRuche, int charge, QString horodatage)
Méthode pour définir la charge dans l'IHM.
QLineSeries * charge
La courbe de la charge.
PagesIHM
Définit les numéros de page de l'IHM.
void ajouterNouvelleRuche(Ruche ruche)
Méthode pour ajouter une nouvelle ruche.
void setValeurTemperatureExterieure(QString nomDeLaRuche, double temperatureExterieure, QString horodatage)
Méthode pour définir la température extérieure dans l'IHM.
QVector< Ruche > getRuches() const
Méthode pour récupérer une ruche.
Page des réglages de TTN.
void on_pushButton_nouvelle_ruche_clicked()
Bouton qui permet d'ouvrir la fenêtre de création du nouvelle ruche.
void setValeurHumiditeExterieure(QString nomDeLaRuche, double humiditeInterieure, QString horodatage)
Méthode pour définir l'humidite dans l'IHM.
void chargerConfiguration()
Méthode pour charger la configuration TTN.
QVector< QPointF > mesuresEnsoleillement
Les mesures pour la courbe de l'ensoleillement.
void on_pushButton_connexion_ttn_clicked()
Bouton qui permet de démarrer la connexion avec TTN.
ConfigurationTTN getConfigurationTTN() const
Méthode pour récupérer la configuration TTN.
QVector< Ruche > ruches
les ruches
void setValeurHumiditeInterieure(QString nomDeLaRuche, double humiditeExterieure, QString horodatage)
Méthode pour définir l'humidite dans l'IHM.
void setValeurPression(QString nomDeLaRuche, int pression, QString horodatage)
Méthode pour définir la pression dans l'IHM.
void initialiserEntreeBarreEtatSysteme()
Initialise l'entrée dans la barre d'état du système.
La fenêtre pour changer les réglages de la ruche.
void initialiserEvenements()
Assure la connexion signal/slot.
void desabonnerTopic(QString topic)
Méthode pour se désabonner d'un topic TTN.
void initialiserGraphiqueTemperatures()
Méthode qui initialise le graphique des températures.
void initialiserWidgets()
Initialise les différents widgets de l'IHM.
void setRuches(QVector< Ruche > ruches)
Méthode pour définir une ruche.
QLineSeries * temperatureInterieure
La courbe de la température intérieure.
void initialiserGraphiquePression()
Méthode qui initialise le graphique de la pression.
void on_pushButton_reglage_clicked()
Bouton qui permet d'ouvrir la fenêtre des réglages de la ruche.
void initialiserGraphiqueHumidite()
Méthode qui initialise le graphique d'humidité
Page des dernières alertes.
void changerApparenceBouton(PagesIHM)
Méthode pour changer l'apparence des bouton selon le bouton cliqué
~Ihm()
Destructeur de la classe Ihm.
QString topicTTN
le topic TTN associé à la ruche
QSystemTrayIcon * iconeEtatSysteme
entrée dans la barre d'état du système
Structure qui définit une ruche.
void afficherGraphiquePoids()
Méthode qui met à jour les mesures du poids dans le graphique associée.
QLineSeries * temperatureExterieure
La courbe de la température extérieure.
Déclaration de la classe Configuration.
QString username
le compte d'accès TTN
void souscrireTopic(QString topic)
Méthode pour s'abonner à un topic TTN.
void demarrerTTN()
Méthode pour démarrer TTN.
void afficherGraphiqueTemperatureExterieure()
Méthode qui met à jour les mesures de la température extérieure dans le graphique associée...
void actualiserGraphiqueEnsoleillement()
Méthode qui met à jour les mesures de l'ensoleillement dans le graphique associée.
void on_pushButton_alertes_clicked()
Bouton/icône affichant l'onglet des alertes.
QVector< QPointF > mesuresPoids
Les mesures pour la courbe du poids.
void connecterRuches()
Méthode pour s'abonner à un topic.
QString password
le mote de passe du compte TTN
void sauvegarderConfigurationTTN(QString hostname, int port, QString username, QString password)
void changerEtatConnexion(int etat)
Change l'état de connexion TTN dans l'IHM.
IHMReglageRuche * ihmReglageRuche
association vers l'IHM de réglage d'une ruche
Déclaration de la classe IHMNouvelleRuche.
QLineSeries * humidite
La courbe de l'humidite.
Structure qui définit la configuration MQTT pour se connecter au réseau TheThingsNetwork (TTN) ...
QLineSeries * ensoleillement
La courbe de l'ensoleillement.
void afficherGraphiqueTemperatureInterieure()
Méthode qui met à jour les mesures de la température intérieure dans le graphique associée...
void connecterTTN(QString hostname, int port, QString username, QString password)
Méthode pour se connecter à TTN.
void initialiserGraphiques()
Méthode qui initialise les graphiques.
void on_pushButton_reglage_ttn_clicked()
Bouton/icône affichant l'onglet des réglages de connexion TTN.
int port
le numero de port TTN
void chargerIconesBoutons()
Méthode pour charger les icônes des boutons.
#define AXE_TEMPERATURE_MAX
#define VERSION_APPLICATION
#define AXE_TEMPERATURE_MIN
void changerDonneesVueGlobale()
Méthode permettant de changer la données affiché sur la vue globale.
void closeEvent(QCloseEvent *event)
Méthode redéfinie qui s'exécute pour chaque évènement reçu par la fenêtre principale.
Permet de recevoir les données.
Déclaration de la classe Ihm.
QLineSeries * pression
La courbe de la pression.
void recupererInfoRuche(QString)
void changerAbscisseGraphiques()
Méthode qui permet de change l'abscisse des graphiques.
QString nom
le nom de la ruche
void afficherGraphiquePression()
Méthode qui met à jour les mesures de la pression dans le graphique associée.
void on_pushButton_mesures_clicked()
Bouton/icône affichant l'onglet des mesures.
Ui::ihm * ui
interface utilisateur
QVector< QPointF > mesuresTemperatureInterieure
Les mesures pour la courbe de la température intérieure.
void initialiserGraphiqueEnsoleillement()
Méthode qui initialise le graphique de l'ensoleillement.
IHMNouvelleRuche * ihmNouvelleRuche
association vers l'IHM de création d'une nouvelle ruche
QString hostname
le nom du serveur TTN
La fenêtre pour créer une nouvelle ruche.
QVector< QPointF > mesuresHumidite
Les mesures pour la courbe de l'humidité.
void initialiserGraphiquePoids()
Méthode qui initialise le graphique du poids.
void setValeurEnsoleillement(QString nomDeLaRuche, int ensoleillement, QString horodatage)
Méthode pour définir l'ensoleillement dans l'IHM.
QVector< QPointF > mesuresTemperatureExterieure
Les mesures pour la courbe de la température extérieure.
Ihm(QWidget *parent=nullptr)
Constructeur de la classe Ihm.
void on_pushButton_enregistrer_configuration_ttn_clicked()
Bouton pour enregistrer la configuration TTN dans le fichier INI.
QVector< QPointF > mesuresCharge
Les mesures pour la courbe de la charge.
void on_pushButton_graphiques_clicked()
Bouton/icône affichant l'onglet des graphiques.