1 package com.example.bee_honeyt;
3 import android.content.Intent;
4 import android.graphics.Color;
5 import android.os.Bundle;
7 import androidx.appcompat.app.AppCompatActivity;
9 import android.util.Log;
10 import android.view.View;
11 import android.widget.Button;
12 import android.widget.TextView;
13 import android.widget.Toast;
15 import com.jjoe64.graphview.GraphView;
16 import com.jjoe64.graphview.GridLabelRenderer;
17 import com.jjoe64.graphview.series.DataPoint;
18 import com.jjoe64.graphview.series.LineGraphSeries;
20 import org.json.JSONArray;
21 import org.json.JSONException;
22 import org.json.JSONObject;
24 import java.text.ParseException;
25 import java.text.SimpleDateFormat;
26 import java.util.ArrayList;
27 import java.util.Date;
28 import java.util.List;
29 import java.util.Locale;
30 import java.util.TimeZone;
31 import java.util.Vector;
51 private static final String
TAG =
"_IHMGraphique";
149 super.onCreate(savedInstanceState);
150 setContentView(R.layout.activity_ihmgraphique);
151 Log.d(
TAG,
"onCreate()");
153 getSupportActionBar().setTitle(getString(R.string.app_name) +
" v" + BuildConfig.VERSION_NAME);
155 Intent intent = getIntent();
157 key = intent.getStringExtra(
"key");
158 deviceID = intent.getStringExtra(
"device");
180 public void onLoad(String contenuJSON)
209 public void onError()
211 Log.d(
TAG,
"onError()");
221 String url =
"https://" +
applicationID +
".data.thethingsnetwork.org";
222 Date date =
new Date();
224 Toast.makeText(
IHMGraphique.this,
"Chargement des données de l'historique", Toast.LENGTH_SHORT).show();
256 graphique = (GraphView) findViewById(R.id.graphique);
270 boutonPoids.setOnClickListener(
new View.OnClickListener()
273 public void onClick(View v)
275 graphique.removeAllSeries();
276 graphique.getViewport().setMaxY(MAX_POIDS);
277 graphique.getViewport().setMinY(0);
278 graphique.getGridLabelRenderer().setNumVerticalLabels((MAX_POIDS/10)+1);
279 changerChoix(CHOIX_GRAPHE_POIDS);
288 public void onClick(View v)
290 graphique.removeAllSeries();
291 graphique.getViewport().setMaxY(MAX_TEMPERATURE_INTERIEURE);
292 graphique.getViewport().setMinY(0);
293 graphique.getGridLabelRenderer().setNumVerticalLabels((MAX_TEMPERATURE_INTERIEURE/10)+1);
294 changerChoix(CHOIX_GRAPHE_TEMPERATURE_INTERIEURE);
300 boutonHumInt.setOnClickListener(
new View.OnClickListener()
303 public void onClick(View v)
305 graphique.removeAllSeries();
306 graphique.getViewport().setMaxY(MAX_HUMIDITE_INTERIEURE);
307 graphique.getViewport().setMinY(0);
308 graphique.getGridLabelRenderer().setNumVerticalLabels((MAX_HUMIDITE_INTERIEURE/10)+1);
309 changerChoix(CHOIX_GRAPHE_HUMIDITE_INTERIEURE);
315 boutonTempExt.setOnClickListener(
new View.OnClickListener()
318 public void onClick(View v)
320 graphique.removeAllSeries();
321 graphique.getViewport().setMaxY(MAX_TEMPERATURE_EXTERIEURE);
322 graphique.getViewport().setMinY(0);
323 graphique.getGridLabelRenderer().setNumVerticalLabels((MAX_TEMPERATURE_EXTERIEURE/10)+1);
324 changerChoix(CHOIX_GRAPHE_TEMPERATURE_EXTERIEURE);
330 boutonHumExt.setOnClickListener(
new View.OnClickListener()
333 public void onClick(View v)
335 graphique.removeAllSeries();
336 graphique.getViewport().setMaxY(MAX_HUMIDITE_EXTERIEURE);
337 graphique.getViewport().setMinY(0);
338 graphique.getGridLabelRenderer().setNumVerticalLabels((MAX_HUMIDITE_EXTERIEURE/10)+1);
339 changerChoix(CHOIX_GRAPHE_HUMIDITE_EXTERIEURE);
345 boutonPression.setOnClickListener(
new View.OnClickListener()
348 public void onClick(View v)
350 graphique.removeAllSeries();
351 graphique.getViewport().setMaxY(MAX_PRESSION);
352 graphique.getViewport().setMinY(900);
353 graphique.getGridLabelRenderer().setNumVerticalLabels((MAX_PRESSION/100)+1);
354 changerChoix(CHOIX_GRAPHE_PRESSION);
366 if(choix == choixGraphique)
368 deselectionnerChoix(choixGraphique);
369 selectionnerChoix(choix);
370 choixGraphique = choix;
380 case CHOIX_GRAPHE_POIDS:
381 boutonPoids.setBackgroundResource(R.color.selection_on);
383 case CHOIX_GRAPHE_TEMPERATURE_INTERIEURE:
384 boutonTempInt.setBackgroundResource(R.color.selection_on);
386 case CHOIX_GRAPHE_HUMIDITE_INTERIEURE:
387 boutonHumInt.setBackgroundResource(R.color.selection_on);
389 case CHOIX_GRAPHE_HUMIDITE_EXTERIEURE:
390 boutonHumExt.setBackgroundResource(R.color.selection_on);
392 case CHOIX_GRAPHE_TEMPERATURE_EXTERIEURE:
393 boutonTempExt.setBackgroundResource(R.color.selection_on);
395 case CHOIX_GRAPHE_PRESSION:
396 boutonPression.setBackgroundResource(R.color.selection_on);
408 case CHOIX_GRAPHE_POIDS:
409 boutonPoids.setBackgroundResource(R.color.selection_off);
411 case CHOIX_GRAPHE_TEMPERATURE_INTERIEURE:
412 boutonTempInt.setBackgroundResource(R.color.selection_off);
414 case CHOIX_GRAPHE_HUMIDITE_INTERIEURE:
415 boutonHumInt.setBackgroundResource(R.color.selection_off);
417 case CHOIX_GRAPHE_TEMPERATURE_EXTERIEURE:
418 boutonTempExt.setBackgroundResource(R.color.selection_off);
420 case CHOIX_GRAPHE_HUMIDITE_EXTERIEURE:
421 boutonHumExt.setBackgroundResource(R.color.selection_off);
423 case CHOIX_GRAPHE_PRESSION:
424 boutonPression.setBackgroundResource(R.color.selection_off);
435 graphique.getViewport().setMinY(0);
436 graphique.getViewport().setMaxY(MAX_POIDS);
437 graphique.getViewport().setYAxisBoundsManual(
true);
440 graphique.getViewport().setMinX(0);
441 graphique.getViewport().setMaxX(23);
442 graphique.getViewport().setXAxisBoundsManual(
true);
446 graphique.getGridLabelRenderer().setNumHorizontalLabels(12);
447 graphique.getGridLabelRenderer().setNumVerticalLabels((MAX_POIDS/10)+1);
448 graphique.getGridLabelRenderer().setGridColor(Color.BLACK);
449 graphique.getGridLabelRenderer().setVerticalLabelsColor(Color.BLACK);
450 graphique.getGridLabelRenderer().setHorizontalLabelsColor(Color.BLACK);
451 graphique.getGridLabelRenderer().setGridStyle(GridLabelRenderer.GridStyle.BOTH);
454 graphique.getLegendRenderer().setVisible(
true);
456 graphique.getLegendRenderer().setFixedPosition(1,48);
457 graphique.getLegendRenderer().setBackgroundColor(0);
460 graphique.removeAllSeries();
469 runOnUiThread(
new Runnable()
476 JSONArray tableauJSON =
new JSONArray(contenuHistorique);
477 JSONObject valeur =
null;
479 SimpleDateFormat sdfIn =
new SimpleDateFormat(
"yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
480 SimpleDateFormat sdfOutHeure =
new SimpleDateFormat(
"HH", Locale.FRENCH);
482 Log.d(TAG,
"extraireDonnees() Nb mesures récupérées = " + tableauJSON.length());
485 donneesPoids.clear();
486 for(
int i = 0; i < tableauJSON.length(); i++)
488 valeur = tableauJSON.getJSONObject(i);
501 if(valeur.getString(
"device_id").equals(deviceID))
503 if(!valeur.isNull(
"poids"))
505 Double poids = valeur.getDouble(
"poids");
506 String time = valeur.getString(
"time");
509 sdfIn.setTimeZone(TimeZone.getTimeZone(
"UTC"));
513 date = sdfIn.parse(time);
514 sdfOutHeure.setTimeZone(TimeZone.getDefault());
515 heure = sdfOutHeure.format(date);
517 catch (ParseException e)
520 Log.d(TAG,
"extraireDonnees() Erreur !");
522 List<String> donnees =
new ArrayList<>();
524 donnees.add(poids.toString());
525 donneesPoids.add(donnees);
534 Toast.makeText(
IHMGraphique.this,donneesPoids.size() +
" données de poids récupérées", Toast.LENGTH_SHORT).show();
536 catch (JSONException e)
541 traiterDonneesPoids();
543 afficherDonneesPoids();
553 double somme24h = 0.;
555 int nbMesures24h = 0;
565 mesuresPoids.clear();
566 boolean initMinMax =
false;
567 Date date =
new Date();
568 for(
int heure = 0; heure < date.getHours(); heure++)
572 for (List<String> donnees : donneesPoids)
574 if(Integer.parseInt(donnees.get(0)) == heure)
577 somme += Double.parseDouble(donnees.get(1));
585 double valeur = (somme/(double)nbMesures);
586 mesuresPoids.add(heure, valeur);
596 poidsCourant = valeur;
597 if(valeur > poidsMax)
599 if(valeur < poidsMin)
607 mesuresPoids.add(heure, 0.);
611 poidsMoyenne = (somme24h/(double)nbMesures24h);
621 DataPoint[] dataPoints =
new DataPoint[mesuresPoids.size()];
622 for (
int i = 0; i < mesuresPoids.size(); i++)
624 dataPoints[i] =
new DataPoint(i, mesuresPoids.get(i));
627 seriesPoids =
new LineGraphSeries<DataPoint>(dataPoints);
629 graphique.addSeries(seriesPoids);
630 seriesPoids.setColor(Color.GREEN);
631 seriesPoids.setTitle(
"Kg");
633 valeurCourante.setText(
"Dernière valeur : " + String.valueOf(arrondir(poidsCourant, 2)) +
" Kg");
634 donneesMin.setText(String.valueOf(arrondir(poidsMin, 1)) +
" Kg");
635 donneesMax.setText(String.valueOf(arrondir(poidsMax, 1)) +
" Kg");
636 donneesMoyenne.setText(String.valueOf(arrondir(poidsMoyenne, 1)) +
" Kg");
645 runOnUiThread(
new Runnable()
652 JSONArray tableauJSON =
new JSONArray(contenuHistorique);
653 JSONObject valeur =
null;
655 SimpleDateFormat sdfIn =
new SimpleDateFormat(
"yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
656 SimpleDateFormat sdfOutHeure =
new SimpleDateFormat(
"HH", Locale.FRENCH);
658 Log.d(TAG,
"extraireDonnees() Nb mesures récupérées = " + tableauJSON.length());
661 donneesPression.clear();
662 for(
int i = 0; i < tableauJSON.length(); i++)
664 valeur = tableauJSON.getJSONObject(i);
677 if(valeur.getString(
"device_id").equals(deviceID))
679 if(!valeur.isNull(
"pression"))
681 Double pression = valeur.getDouble(
"pression");
682 String time = valeur.getString(
"time");
685 sdfIn.setTimeZone(TimeZone.getTimeZone(
"UTC"));
689 date = sdfIn.parse(time);
690 sdfOutHeure.setTimeZone(TimeZone.getDefault());
691 heure = sdfOutHeure.format(date);
693 catch (ParseException e)
696 Log.d(TAG,
"extraireDonnees() Erreur !");
698 List<String> donnees =
new ArrayList<>();
700 donnees.add(pression.toString());
701 donneesPression.add(donnees);
710 Toast.makeText(
IHMGraphique.this,donneesPression.size() +
" données de la pression récupérées", Toast.LENGTH_SHORT).show();
712 catch (JSONException e)
717 traiterDonneesPression();
719 afficherDonneesPression();
729 double somme24h = 0.;
731 int nbMesures24h = 0;
741 mesuresPression.clear();
742 boolean initMinMax =
false;
743 Date date =
new Date();
744 for(
int heure = 0; heure < date.getHours(); heure++)
748 for (List<String> donnees : donneesPression)
750 if(Integer.parseInt(donnees.get(0)) == heure)
753 somme += Double.parseDouble(donnees.get(1));
761 double valeur = (somme/(double)nbMesures);
762 mesuresPression.add(heure, valeur);
766 pressionMax = valeur;
767 pressionMin = valeur;
772 pressionCourant = valeur;
773 if(valeur > pressionMax)
774 pressionMax = valeur;
775 if(valeur < pressionMin)
776 pressionMin = valeur;
780 mesuresPression.add(heure, 0.);
784 pressionMoyenne = (somme24h/(double)nbMesures24h);
793 DataPoint[] dataPoints =
new DataPoint[mesuresPression.size()];
794 for (
int i = 0; i < mesuresPression.size(); i++)
796 dataPoints[i] =
new DataPoint(i, mesuresPression.get(i));
799 seriesPression =
new LineGraphSeries<DataPoint>(dataPoints);
801 graphique.addSeries(seriesPression);
802 seriesPression.setColor(Color.rgb(217,87,255));
803 seriesPression.setTitle(
"hPA");
805 valeurCourante.setText(
"Dernière valeur : " + String.valueOf(arrondir(poidsCourant, 2)) +
" hPA");
806 donneesMin.setText(String.valueOf(arrondir(pressionMin, 1)) +
" hPA");
807 donneesMax.setText(String.valueOf(arrondir(pressionMax, 1)) +
" hPA");
808 donneesMoyenne.setText(String.valueOf(arrondir(pressionMoyenne, 1)) +
" hPA");
817 runOnUiThread(
new Runnable()
824 JSONArray tableauJSON =
new JSONArray(contenuHistorique);
825 JSONObject valeur =
null;
827 SimpleDateFormat sdfIn =
new SimpleDateFormat(
"yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
828 SimpleDateFormat sdfOutHeure =
new SimpleDateFormat(
"HH", Locale.FRENCH);
830 Log.d(TAG,
"extraireDonneesTemperatureInterieure() Nb mesures récupérées = " + tableauJSON.length());
833 donneeTemperatureInterieure.clear();
834 for(
int i = 0; i < tableauJSON.length(); i++)
836 valeur = tableauJSON.getJSONObject(i);
849 if(valeur.getString(
"device_id").equals(deviceID))
851 if(!valeur.isNull(
"temperatureInt"))
853 Double temperatureInterieure = valeur.getDouble(
"temperatureInt");
854 String time = valeur.getString(
"time");
857 sdfIn.setTimeZone(TimeZone.getTimeZone(
"UTC"));
861 date = sdfIn.parse(time);
862 sdfOutHeure.setTimeZone(TimeZone.getDefault());
863 heure = sdfOutHeure.format(date);
865 catch (ParseException e)
868 Log.d(TAG,
"extraireDonneesTemperatureInterieure() Erreur !");
870 List<String> donnees =
new ArrayList<>();
872 donnees.add(temperatureInterieure.toString());
873 donneeTemperatureInterieure.add(donnees);
882 Toast.makeText(
IHMGraphique.this,donneeTemperatureInterieure.size() +
" données de temperature intérireure récupérées", Toast.LENGTH_SHORT).show();
884 catch (JSONException e)
889 traiterDonneesTempetatureInteireure();
891 afficherDonneesTemperatureInterieure();
901 double somme24h = 0.;
903 int nbMesures24h = 0;
910 mesuresTemperatureInterieure.clear();
911 boolean initMinMax =
false;
912 Date date =
new Date();
913 for(
int heure = 0; heure < date.getHours(); heure++)
917 for (List<String> donnees : donneeTemperatureInterieure)
919 if(Integer.parseInt(donnees.get(0)) == heure)
922 somme += Double.parseDouble(donnees.get(1));
930 double valeur = (somme/(double)nbMesures);
931 mesuresTemperatureInterieure.add(heure, valeur);
935 temperatureInterieureMax = valeur;
936 temperatureInterieureMin = valeur;
941 temperatureInterieureCourante = valeur;
942 if(valeur > temperatureInterieureMax)
943 temperatureInterieureMax = valeur;
944 if(valeur < temperatureInterieureMin)
945 temperatureInterieureMin = valeur;
949 mesuresTemperatureInterieure.add(heure, 0.);
953 temperatureInterieureMoyenne = (somme24h/(double)nbMesures24h);
962 DataPoint[] dataPoints =
new DataPoint[mesuresTemperatureInterieure.size()];
963 for (
int i = 0; i < mesuresTemperatureInterieure.size(); i++)
965 dataPoints[i] =
new DataPoint(i, mesuresTemperatureInterieure.get(i));
968 seriesTemperatureInterieure =
new LineGraphSeries<DataPoint>(dataPoints);
970 graphique.addSeries(seriesTemperatureInterieure);
971 seriesTemperatureInterieure.setColor(Color.RED);
972 seriesTemperatureInterieure.setTitle(
"°C");
974 valeurCourante.setText(
"Dernière valeur : " + String.valueOf(arrondir(temperatureInterieureCourante, 2)) +
" °C");
975 donneesMin.setText(String.valueOf(arrondir(temperatureInterieureMin, 1)) +
" °C");
976 donneesMax.setText(String.valueOf(arrondir(temperatureInterieureMax, 1)) +
" °C");
977 donneesMoyenne.setText(String.valueOf(arrondir(temperatureInterieureMoyenne, 1)) +
" °C");
986 runOnUiThread(
new Runnable()
993 JSONArray tableauJSON =
new JSONArray(contenuHistorique);
994 JSONObject valeur =
null;
996 SimpleDateFormat sdfIn =
new SimpleDateFormat(
"yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
997 SimpleDateFormat sdfOutHeure =
new SimpleDateFormat(
"HH", Locale.FRENCH);
999 Log.d(TAG,
"extraireDonneesHumiditeInterieure() Nb mesures récupérées = " + tableauJSON.length());
1002 donneeHumiditeInterieure.clear();
1003 for(
int i = 0; i < tableauJSON.length(); i++)
1005 valeur = tableauJSON.getJSONObject(i);
1018 if(valeur.getString(
"device_id").equals(deviceID))
1020 if(!valeur.isNull(
"humiditeInt"))
1022 Double humiditeInterieure = valeur.getDouble(
"humiditeInt");
1023 String time = valeur.getString(
"time");
1026 sdfIn.setTimeZone(TimeZone.getTimeZone(
"UTC"));
1030 date = sdfIn.parse(time);
1031 sdfOutHeure.setTimeZone(TimeZone.getDefault());
1032 heure = sdfOutHeure.format(date);
1034 catch (ParseException e)
1036 e.printStackTrace();
1037 Log.d(TAG,
"extraireDonneesHumiditeInterieure() Erreur !");
1039 List<String> donnees =
new ArrayList<>();
1041 donnees.add(humiditeInterieure.toString());
1042 donneeHumiditeInterieure.add(donnees);
1051 Toast.makeText(
IHMGraphique.this,donneeHumiditeInterieure.size() +
" données de l'humidité intérireure récupérées", Toast.LENGTH_SHORT).show();
1053 catch (JSONException e)
1055 e.printStackTrace();
1058 traiterDonneesHumiditeInteireure();
1060 afficherDonneesHumiditeInterieure();
1070 double somme24h = 0.;
1072 int nbMesures24h = 0;
1079 mesuresHumiditeInterieure.clear();
1080 boolean initMinMax =
false;
1081 Date date =
new Date();
1082 for(
int heure = 0; heure < date.getHours(); heure++)
1086 for (List<String> donnees : donneeHumiditeInterieure)
1088 if(Integer.parseInt(donnees.get(0)) == heure)
1091 somme += Double.parseDouble(donnees.get(1));
1099 double valeur = (somme/(double)nbMesures);
1100 mesuresHumiditeInterieure.add(heure, valeur);
1104 humiditeInterieureMax = valeur;
1105 humiditeInterieureMin = valeur;
1110 humiditeInterieureCourante = valeur;
1111 if(valeur > humiditeInterieureMax)
1112 humiditeInterieureMax = valeur;
1113 if(valeur < humiditeInterieureMin)
1114 humiditeInterieureMin = valeur;
1118 mesuresHumiditeInterieure.add(heure, 0.);
1122 humiditeInterieureMoyenne = (somme24h/(double)nbMesures24h);
1131 DataPoint[] dataPoints =
new DataPoint[mesuresHumiditeInterieure.size()];
1132 for (
int i = 0; i < mesuresHumiditeInterieure.size(); i++)
1134 dataPoints[i] =
new DataPoint(i, mesuresHumiditeInterieure.get(i));
1137 seriesHumiditeInterieure =
new LineGraphSeries<DataPoint>(dataPoints);
1139 graphique.addSeries(seriesHumiditeInterieure);
1140 seriesHumiditeInterieure.setColor(Color.BLUE);
1141 seriesHumiditeInterieure.setTitle(
"%");
1143 valeurCourante.setText(
"Dernière valeur : " + String.valueOf(arrondir(humiditeInterieureCourante, 2)) +
" %");
1144 donneesMin.setText(String.valueOf(arrondir(humiditeInterieureMin, 1)) +
" %");
1145 donneesMax.setText(String.valueOf(arrondir(humiditeInterieureMax, 1)) +
" %");
1146 donneesMoyenne.setText(String.valueOf(arrondir(humiditeInterieureMoyenne, 1)) +
" %");
1155 runOnUiThread(
new Runnable()
1162 JSONArray tableauJSON =
new JSONArray(contenuHistorique);
1163 JSONObject valeur =
null;
1165 SimpleDateFormat sdfIn =
new SimpleDateFormat(
"yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
1166 SimpleDateFormat sdfOutHeure =
new SimpleDateFormat(
"HH", Locale.FRENCH);
1168 Log.d(TAG,
"extraireDonneesTemperatureExterieure() Nb mesures récupérées = " + tableauJSON.length());
1171 donneeTemperatureExterieure.clear();
1172 for(
int i = 0; i < tableauJSON.length(); i++)
1174 valeur = tableauJSON.getJSONObject(i);
1187 if(valeur.getString(
"device_id").equals(deviceID))
1189 if(!valeur.isNull(
"temperatureExt"))
1191 Double temperatureExterieure = valeur.getDouble(
"temperatureExt");
1192 String time = valeur.getString(
"time");
1195 sdfIn.setTimeZone(TimeZone.getTimeZone(
"UTC"));
1199 date = sdfIn.parse(time);
1200 sdfOutHeure.setTimeZone(TimeZone.getDefault());
1201 heure = sdfOutHeure.format(date);
1203 catch (ParseException e)
1205 e.printStackTrace();
1206 Log.d(TAG,
"extraireDonneesTemperatureExterieure() Erreur !");
1208 List<String> donnees =
new ArrayList<>();
1210 donnees.add(temperatureExterieure.toString());
1211 donneeTemperatureExterieure.add(donnees);
1220 Toast.makeText(
IHMGraphique.this,donneeTemperatureExterieure.size() +
" données de temperature extérieure récupérées", Toast.LENGTH_SHORT).show();
1222 catch (JSONException e)
1224 e.printStackTrace();
1227 traiterDonneesTempetatureExterieure();
1229 afficherDonneesTemperatureExterieure();
1239 double somme24h = 0.;
1241 int nbMesures24h = 0;
1248 mesuresTemperatureExterireure.clear();
1249 boolean initMinMax =
false;
1250 Date date =
new Date();
1251 for(
int heure = 0; heure < date.getHours(); heure++)
1255 for (List<String> donnees : donneeTemperatureExterieure)
1257 if(Integer.parseInt(donnees.get(0)) == heure)
1260 somme += Double.parseDouble(donnees.get(1));
1268 double valeur = (somme/(double)nbMesures);
1269 mesuresTemperatureExterireure.add(heure, valeur);
1273 temperatureExterireureMax = valeur;
1274 temperatureExterireureMin = valeur;
1279 temperatureExterireureCourante = valeur;
1280 if(valeur > temperatureExterireureMax)
1281 temperatureExterireureMax = valeur;
1282 if(valeur < temperatureExterireureMin)
1283 temperatureExterireureMin = valeur;
1287 mesuresTemperatureExterireure.add(heure, 0.);
1291 temperatureExterireureMoyenne = (somme24h/(double)nbMesures24h);
1300 DataPoint[] dataPoints =
new DataPoint[mesuresTemperatureExterireure.size()];
1301 for (
int i = 0; i < mesuresTemperatureExterireure.size(); i++)
1303 dataPoints[i] =
new DataPoint(i, mesuresTemperatureExterireure.get(i));
1306 seriesTemperatureExterieure =
new LineGraphSeries<DataPoint>(dataPoints);
1308 graphique.addSeries(seriesTemperatureExterieure);
1309 seriesTemperatureExterieure.setColor(Color.RED);
1310 seriesTemperatureExterieure.setTitle(
"°C");
1312 valeurCourante.setText(
"Dernière valeur : " + String.valueOf(arrondir(temperatureExterireureCourante, 2)) +
" °C");
1313 donneesMin.setText(String.valueOf(arrondir(temperatureExterireureMin, 1)) +
" °C");
1314 donneesMax.setText(String.valueOf(arrondir(temperatureExterireureMax, 1)) +
" °C");
1315 donneesMoyenne.setText(String.valueOf(arrondir(temperatureExterireureMoyenne, 1)) +
" °C");
1324 runOnUiThread(
new Runnable()
1331 JSONArray tableauJSON =
new JSONArray(contenuHistorique);
1332 JSONObject valeur =
null;
1334 SimpleDateFormat sdfIn =
new SimpleDateFormat(
"yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
1335 SimpleDateFormat sdfOutHeure =
new SimpleDateFormat(
"HH", Locale.FRENCH);
1337 Log.d(TAG,
"extraireDonneesHumiditeExterieure() Nb mesures récupérées = " + tableauJSON.length());
1340 donneeHumiditeExterireure.clear();
1341 for(
int i = 0; i < tableauJSON.length(); i++)
1343 valeur = tableauJSON.getJSONObject(i);
1356 if(valeur.getString(
"device_id").equals(deviceID))
1358 if(!valeur.isNull(
"humiditeInt"))
1360 Double humiditeExterieure = valeur.getDouble(
"humiditeInt");
1361 String time = valeur.getString(
"time");
1364 sdfIn.setTimeZone(TimeZone.getTimeZone(
"UTC"));
1368 date = sdfIn.parse(time);
1369 sdfOutHeure.setTimeZone(TimeZone.getDefault());
1370 heure = sdfOutHeure.format(date);
1372 catch (ParseException e)
1374 e.printStackTrace();
1375 Log.d(TAG,
"extraireDonneesHumiditeExterieure() Erreur !");
1377 List<String> donnees =
new ArrayList<>();
1379 donnees.add(humiditeExterieure.toString());
1380 donneeHumiditeExterireure.add(donnees);
1389 Toast.makeText(
IHMGraphique.this,donneeHumiditeExterireure.size() +
" données de l'humidité extérieure récupérées", Toast.LENGTH_SHORT).show();
1391 catch (JSONException e)
1393 e.printStackTrace();
1396 traiterDonneesHumiditeExterieure();
1398 afficherDonneesHumiditeExterieure();
1408 double somme24h = 0.;
1410 int nbMesures24h = 0;
1417 mesuresHumiditeExterireure.clear();
1418 boolean initMinMax =
false;
1419 Date date =
new Date();
1420 for(
int heure = 0; heure < date.getHours(); heure++)
1424 for (List<String> donnees : donneeHumiditeExterireure)
1426 if(Integer.parseInt(donnees.get(0)) == heure)
1429 somme += Double.parseDouble(donnees.get(1));
1437 double valeur = (somme/(double)nbMesures);
1438 mesuresHumiditeExterireure.add(heure, valeur);
1442 humiditeExterireureMax = valeur;
1443 humiditeExterireureMin = valeur;
1448 humiditeExterireureCourante = valeur;
1449 if(valeur > humiditeExterireureMax)
1450 humiditeExterireureMax = valeur;
1451 if(valeur < humiditeExterireureMin)
1452 humiditeExterireureMin = valeur;
1456 mesuresHumiditeExterireure.add(heure, 0.);
1460 humiditeExterireureMoyenne = (somme24h/(double)nbMesures24h);
1469 DataPoint[] dataPoints =
new DataPoint[mesuresHumiditeExterireure.size()];
1470 for (
int i = 0; i < mesuresHumiditeExterireure.size(); i++)
1472 dataPoints[i] =
new DataPoint(i, mesuresHumiditeExterireure.get(i));
1475 seriesHumiditeExterieure =
new LineGraphSeries<DataPoint>(dataPoints);
1477 graphique.addSeries(seriesHumiditeExterieure);
1478 seriesHumiditeExterieure.setColor(Color.BLUE);
1479 seriesHumiditeExterieure.setTitle(
"%");
1481 valeurCourante.setText(
"Dernière valeur : " + String.valueOf(arrondir(humiditeExterireureCourante, 2)) +
" %");
1482 donneesMin.setText(String.valueOf(arrondir(humiditeExterireureMin, 1)) +
" %");
1483 donneesMax.setText(String.valueOf(arrondir(humiditeExterireureMax, 1)) +
" %");
1484 donneesMoyenne.setText(String.valueOf(arrondir(humiditeExterireureMoyenne, 1)) +
" %");
1490 public static double arrondir(
double nombre,
double nbApresVirgule)
1492 return (
double)((int)(nombre * Math.pow(10, nbApresVirgule) + .5)) / Math.pow(10, nbApresVirgule);