...
 
Commits (2)
......@@ -9,6 +9,8 @@ class Controller extends MY_Controller {
protected $consigneMonitoring; // Localisation du fichier de consigne utiliser pour la maintenance
protected $idExtraitVisualisation ; // Tableau contenant les identifiants des capteurs utilisees pour generer l'extrait
protected $idAnalyse; // Tableau contenant les identifiants des capteurs utilisees dans l'analyse
public function __construct() {
parent::__construct();
$this->serveur_mqtt = 'icaging.com';
......@@ -17,6 +19,8 @@ class Controller extends MY_Controller {
$this->topicMQTT_Changes = "/system/changeCapteur";
$this->topicMQTT_Notif = "/system/notification/".$this->session->userdata('id');
$this->consigneMonitoring = python('ConsigneMonitoring.txt');
$this->idExtraitVisualisation = [168, 175, 176, 177, 178, 179]; // capteur labo : [181, 182, 183, 184, 185, 186];
$this->idAnalyse = [168, 175, 176, 177, 178, 179];
//$this->load->library('form_validation');
// charge les helpers pour les assets
......@@ -490,6 +494,15 @@ class Controller extends MY_Controller {
exec('python '.python("VisualisationComplexe.py").' '.$id.' "'.$debut.'" "'.$fin.'" '.$unite.' '.$limite.' '.$moyMob.' '.$uuidProcess.' "'.$nom.'" > /dev/null 2>&1 &');
}
/* Traitement : Execute un script python qui va generer une image et un fichier texte decrivant la progression */
public function executeExtraitPython() {
$uuidProcess = $this->input->post('uuid');
$debut = $this->valeurs->get_last_valeur($this->idExtraitVisualisation[0])[0]->temps;
exec('python '.python("ExtraitVisu.py").' "'.$uuidProcess.'" "'.$debut.'" '.$this->idExtraitVisualisation[0].' '.$this->idExtraitVisualisation[1].' '.$this->idExtraitVisualisation[2].' '.$this->idExtraitVisualisation[3].' '.$this->idExtraitVisualisation[4].' '.$this->idExtraitVisualisation[5].' > /dev/null 2>&1 &');
}
/* AJAX : Lecture du fichier texte generee par le script python pour connaitre la progression */
public function updatePython($uuid){
if (file_exists(python('log_'.$uuid.'.txt')) && filesize(python('log_'.$uuid.'.txt')) !== 0){
......@@ -615,5 +628,62 @@ class Controller extends MY_Controller {
redirect('controller/monitoring');
}
/* Page : Analyse des donnees */
public function analyse($idCapteur = null, $debut = null, $fin = null) {
$this->header() ;
$this->load->view('pages/analyse');
$this->load->view('fragment/footer');
}
/* Traitement : Execute un script python d'analyse qui va generer une image et un fichier texte decrivant la progression */
public function executeAnalysePython() {
$capteur0 = $this->input->post('capteur0');
if (empty($capteur0)) {
$capteur0 = $this->idAnalyse[0];
}
$capteur1 = $this->input->post('capteur1');
if (empty($capteur1)) {
$capteur1 = $this->idAnalyse[1];
}
$capteur2 = $this->input->post('capteur2');
if (empty($capteur2)) {
$capteur2 = $this->idAnalyse[2];
}
$capteur3 = $this->input->post('capteur3');
if (empty($capteur3)) {
$capteur3 = $this->idAnalyse[3];
}
$capteur4 = $this->input->post('capteur4');
if (empty($capteur4)) {
$capteur4 = $this->idAnalyse[4];
}
$capteur5 = $this->input->post('capteur5');
if (empty($capteur5)) {
$capteur5 = $this->idAnalyse[5];
}
$debut = $this->input->post('debut');
$fin = $this->input->post('fin');
$moyMob = $this->input->post('moyMob');
$variation = $this->input->post('variation');
$periode = $this->input->post('periode');
$synchro = $this->input->post('synchro');
$uuidProcess = $this->input->post('uuid');
exec('python '.python("Analyse.py").' '.$uuidProcess.' "'.$debut.'" "'.$fin.'" '.$moyMob.' "'.$variation.'" '.$periode.' '.$synchro.' '.$capteur0.' '.$capteur1.' '.$capteur2.' '.$capteur3.' '.$capteur4.' '.$capteur5.' > /dev/null 2>&1 &');
}
/* Page : Catalogue des enregistrements */
public function catalogue() {
$this->header() ;
$this->load->view('pages/catalogue');
$this->load->view('fragment/footer');
}
}
?>
......@@ -35,6 +35,121 @@
</a>
</div>
<div class="col-lg-6 animated fadeInDown" style="margin-bottom:10px;">
<a href= "#" id="extraitVisu">
<div id="menuPrinc5">
<div class="p-m">
<h1 class="m-xs">Prélèvement</h1>
<small class="font-bold no-margins">
Visualisation des données des <strong>6 dernières heures</strong>
</small>
</div>
<div class="flot-chart">
<svg width="100%" height="100%" viewBox="0 0 300 300" preserveAspectRatio="xMaxYMax meet" class="pull-right">
<g transform="translate(-30, 300) scale(0.023, -0.023)"
fill="#08af00" stroke="none">
<path d="M5565 12793 c-437 -20 -955 -111 -1410 -249 -859 -261 -1717 -753
-2352 -1348 -51 -47 -95 -86 -97 -86 -3 0 -122 149 -266 330 -144 182 -282
347 -307 368 -24 20 -68 60 -98 88 -74 70 -128 94 -212 94 -114 0 -208 -61
-264 -169 -33 -64 -36 -151 -43 -1161 -4 -481 -11 -1322 -17 -1869 -5 -546 -8
-995 -6 -997 4 -5 -24 -16 1912 766 270 109 738 298 1040 420 303 122 569 233
591 246 53 30 90 74 122 143 33 72 33 152 -2 262 -29 95 -66 146 -130 184 -36
21 -584 207 -858 292 -49 15 -88 30 -88 33 0 14 236 191 377 283 309 200 595
339 927 449 394 131 768 200 1181 217 512 22 983 -45 1478 -210 372 -123 711
-285 1020 -485 54 -35 100 -64 102 -64 3 0 16 18 30 40 l26 41 79 -56 79 -56
34 53 c231 364 837 1361 831 1367 -13 12 -246 160 -334 213 -431 259 -963 489
-1460 632 -642 185 -1242 258 -1885 229z"/>
<path d="M9310 10957 c0 -8 -16 -125 -35 -259 -36 -246 -187 -1284 -295 -2033
-132 -913 -161 -1115 -181 -1249 -30 -199 -29 -257 6 -329 34 -68 78 -110 152
-144 105 -48 201 -40 295 25 24 17 198 172 387 346 190 173 346 314 347 313 2
-1 10 -47 18 -102 98 -641 32 -1341 -189 -1985 -292 -851 -810 -1542 -1558
-2078 -146 -105 -276 -186 -464 -290 l-152 -84 19 -39 c11 -21 20 -42 20 -46
0 -5 -34 -25 -76 -46 -41 -21 -74 -41 -72 -45 6 -15 731 -1357 750 -1389 l19
-33 62 32 c391 197 862 515 1227 826 792 678 1366 1481 1720 2407 269 705 400
1415 400 2175 0 429 -36 796 -117 1190 -20 96 -38 187 -40 201 l-5 26 264 42
c521 83 548 89 623 125 39 18 90 39 115 46 109 30 184 99 215 196 34 107 -4
239 -88 308 -36 29 -3302 1884 -3349 1902 -12 4 -18 1 -18 -9z"/>
<path d="M4 7453 c-4 -49 -4 -214 0 -368 22 -980 241 -1847 696 -2755 431
-860 1128 -1639 1965 -2197 435 -289 894 -512 1450 -704 91 -32 139 -53 137
-61 -2 -7 -73 -195 -159 -418 -173 -450 -183 -480 -183 -564 0 -76 26 -131 88
-186 26 -23 72 -66 103 -96 96 -92 206 -124 311 -89 58 19 3339 1905 3335
1918 -6 19 -2978 2350 -3024 2372 -102 49 -253 26 -329 -50 -14 -14 -47 -36
-73 -49 -54 -28 -116 -92 -137 -142 -28 -68 -18 -148 77 -580 50 -229 88 -418
85 -421 -7 -7 -353 163 -481 237 -626 361 -1171 883 -1561 1497 -363 571 -573
1185 -660 1928 -14 113 -18 231 -18 476 l-1 326 -149 7 c-82 3 -445 6 -807 6
l-657 0 -8 -87z"/>
</g>
</svg>
</div>
</div>
</a>
</div>
<div class="col-lg-6 animated fadeInDown" style="margin-bottom:10px;">
<a href= "<?php echo base_url() ?>index.php/controller/analyse">
<div id="menuPrinc6">
<div class="p-m">
<h1 class="m-xs">Analyse</h1>
<small class="font-bold no-margins">
<strong>Étude</strong> des valeurs de la valvométrie
</small>
</div>
<div class="flot-chart">
<svg width="100%" height="100%" viewBox="0 0 1000 900" preserveAspectRatio="xMaxYMax meet" class="pull-right">
<g transform="translate(0,880) scale(0.1,-0.1)">
<path style="fill:#796900;" d="M3365 8390 c-611 -54 -1266 -312 -1790 -704 -137 -103 -409 -365
-557 -536 -364 -422 -636 -988 -749 -1555 -51 -255 -63 -383 -63 -675 -1 -344
23 -547 100 -859 258 -1046 987 -1912 1976 -2350 645 -285 1366 -367 2074
-235 522 97 1093 361 1522 703 56 45 105 81 109 81 5 0 425 -417 935 -927
l928 -928 175 175 175 175 -931 931 -931 931 87 109 c393 494 654 1113 741
1759 24 178 24 619 0 828 -47 412 -157 777 -352 1167 -240 479 -588 896 -1021
1222 -501 376 -1133 627 -1713 678 -164 14 -597 20 -715 10z m725 -515 c566
-82 1049 -290 1480 -636 123 -99 351 -322 437 -429 302 -375 507 -794 607
-1241 143 -642 75 -1307 -195 -1902 -394 -867 -1182 -1497 -2119 -1692 -397
-83 -843 -79 -1250 12 -557 123 -1068 402 -1470 803 -867 863 -1119 2176 -634
3300 224 519 617 992 1083 1303 416 278 893 449 1382 497 134 13 553 4 679
-15z"/>
<path style="fill:#796900;" d="M5770 5825 c-47 -13 -366 -98 -710 -189 -344 -92 -632 -169 -639
-172 -10 -3 46 -66 174 -194 l190 -190 -455 -455 -455 -455 -660 660 -660 660
-550 -550 -550 -550 177 -177 178 -178 365 365 c201 201 368 367 371 370 3 2
302 -293 664 -655 l660 -660 635 635 635 635 183 -183 183 -183 58 213 c32
117 91 335 131 483 109 402 205 768 205 782 0 18 -32 15 -130 -12z"/>
</g>
</svg>
</div>
</div>
</a>
</div>
<div class="col-lg-6 animated fadeInDown" style="margin-bottom:10px;">
<a href= "<?php echo base_url() ?>index.php/controller/catalogue">
<div id="menuPrinc7">
<div class="p-m">
<h1 class="m-xs">Catalogue</h1>
<small class="font-bold no-margins">
<strong>Répertoire</strong> des évenements valvométrique disponible
</small>
</div>
<div class="flot-chart">
<svg width="100%" height="100%" viewBox="0 0 1000 900" preserveAspectRatio="xMaxYMax meet" class="pull-right">
<g transform="translate(0,0) scale(2.2,2.2)" style="fill:#bfa3d8" >
<path d="M239.68,0H42.695v368.553h283.164V86.811L239.68,0z M244.057,25.7l56.288,56.701h-56.288V25.7z M57.695,353.553V15
h171.362v82.401h81.802v256.151H57.695V353.553z"/>
<rect x="86.435" y="82.401" width="121.875" height="15"/>
<rect x="86.435" y="151.122" width="195.685" height="15"/>
<rect x="86.435" y="219.843" width="195.685" height="15"/>
<rect x="86.435" y="288.563" width="195.685" height="15"/>
</g>
</svg>
</div>
</div>
</a>
</div>
<div class="col-lg-6 animated fadeInDown" style="margin-bottom:10px;">
<a href= "<?php echo base_url() ?>index.php/controller/monitoring">
<div id="menuPrinc4">
......@@ -101,7 +216,9 @@
</div>
</a>
</div>
</div>
</div>
<script>
/** Dessin des figures dans les boutons **/
......@@ -180,4 +297,34 @@ $(document).ready(function(){
}
});
});
$("#extraitVisu").click(function() {
var uuid = uuidv4();
// Execute le script python
$.ajax({
type: 'post',
data:{ uuid: uuid },
url: '<?php echo base_url();?>index.php/controller/executeExtraitPython',
success: function (results) {},
async: true
});
// Ouvre dans un nouvel onglet sans avoir le "bloque popup"
$.ajax({
url: '<?php echo base_url();?>',
success: function(){window.open('<?php echo base_url();?>index.php/controller/voirGraphique/'+uuid);},
async: false
});
return false;
});
// UUID aleatoire
function uuidv4() {
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
var r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8);
return v.toString(16);
});
}
</script>
<!-- Page : Visualisation des valeurs en base de donnes -->
<div class="row">
<div class="col-lg-12">
<div class="ibox float-e-margins">
<div class="ibox-title">
<h5>Recherche</h5>
</div>
<div class="ibox-content">
<div class="input-daterange input-group col-lg-12" id="datepicker">
<input type="date" class="input-sm form-control choix" id="startDate"/>
<input type="time" class="input-sm form-control choix" id="startTime" step="1" id="appt-time"/>
<span class="input-group-addon">à</span>
<input type="date" class="input-sm form-control choix" id="endDate" />
<input type="time" class="input-sm form-control choix" id="endTime" step="1" id="appt-time"/>
</div>
</div>
<div class="ibox-title">
<h5>Graphique Complet</h5>
</div>
<div class="ibox-content">
<div class="row"><h5 class="col-md-2 col-form-label">Moyenne Mobile<!-- (uniquement graphe complet) :--></h5><div class="col-md-2"><input type="number" class="form-control" value="30" id="moyMob"/></div></div>
</div>
<div class="ibox-content">
<div class="row"><h5 class="col-md-2 col-form-label">Variation</h5><div class="col-md-2"><input type="number" class="form-control" value="0.25" id="variation"/></div><div class ="col-md-8 col-sm-8 col-lg-8"><h5>Valeur utilisée pour définir une variation par rapport aux valeurs extrêmes. Par exemple, une valeur de 0.25 prendra en compte toutes les variations de +/- 25% de la différence entre la valeur maximale et la valeur minimale</h5></div></div>
</div>
<div class="ibox-content">
<div class="row"><h5 class="col-md-2 col-form-label">Periode</h5><div class="col-md-2"><input type="number" class="form-control" value="50" id="periode"/></div><div class ="col-md-8 col-sm-8 col-lg-8"><h5>Analyse de la variation sur le nombre de valeur definie (5 = 1 seconde)</h5></div></div>
</div>
<div class="ibox-content">
<div class="row"><h5 class="col-md-2 col-form-label">Synchronisation</h5><div class="col-md-2"><input type="number" class="form-control" value="3" id="synchro"/></div><div class ="col-md-8 col-sm-8 col-lg-8"><h5>Nombre de capteurs minimum synchronisées pour afficher un marqueur sur le graphe</h5></div></div>
</div>
<div class="ibox-content">
<div class="row"><button id="graphCompl" class="col-md-2 col-form-label btn btn-primary dim">Graphique Complet</button></div>
<div class="row col-md-3 col-form-label "><span class="col-md-1 col-form-label badge badge-warning">?</span><p class="col-md-11 text-warning">Limite de 7000000 valeurs (1 à 2 semaine)</p></div>
</div>
</div>
</div>
</div>
<script>
function valeurPresentes() {
return ($("#startDate").val() !== "" && $("#startTime").val() !== "" &&
$("#endDate").val() !== "" && $("#endTime").val() !== "" )
}
// UUID aleatoire
function uuidv4() {
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
var r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8);
return v.toString(16);
});
}
$("#graphCompl").click(function() {
if (valeurPresentes()) {
ajoutSecondesStart = ""; ajoutSecondesEnd = "";
if ($("#startTime").val().length < 6) { // pour chrome uniquement
ajoutSecondesStart = ':00';
} else {
ajoutSecondesStart = "";
}
if ($("#endTime").val().length < 6) { // pour chrome uniquement
ajoutSecondesEnd = ':00';
} else {
ajoutSecondesEnd = "";
}
var debut = $("#startDate").val()+" "+$("#startTime").val()+ajoutSecondesStart ;
var fin = $("#endDate").val()+" "+$("#endTime").val()+ajoutSecondesEnd ;
var moyMob = $("#moyMob").val();
if(!$.isNumeric(moyMob)){
moyMob = 30;
$("#moyMob").val("30");
}
else if (moyMob < 1){
moyMob = 1;
$("#moyMob").val("1");
}
var synchro = $("#synchro").val();
if(!$.isNumeric(synchro)){
synchro = 3;
$("#synchro").val("3");
}
else if ($("#synchro").val() > 6 || $("#synchro").val() < 1){
synchro = 3;
$("#synchro").val("3");
}
var variation = $("#variation").val();
if(!$.isNumeric(variation)){
variation = 0.25;
$("#variation").val("0.25");
}
else if ($("#variation").val() > 1 || $("#variation").val() < 0){
variation = 0.25;
$("#variation").val("0.25");
}
var periode = $("#periode").val();
if(!$.isNumeric(periode)){
periode = 50;
$("#periode").val("50");
}
else if ($("#periode").val() < 1) {
periode = 50;
$("#periode").val("50");
}
var uuid = uuidv4();
console.log("===========");
console.log(debut);
console.log(fin);
console.log(moyMob);
console.log(variation);
console.log(periode);
console.log(synchro);
// Execute le script python
$.ajax({
type: 'post',
data:{
debut: debut,
fin: fin,
moyMob: moyMob,
variation: variation,
periode: periode,
synchro: synchro,
uuid: uuid
},
url: '<?php echo base_url();?>index.php/controller/executeAnalysePython',
success: function (results) {},
async: true
});
// Ouvre dans un nouvel onglet sans avoir le "bloque popup"
$.ajax({
url: '<?php echo base_url();?>',
success: function(){window.open('<?php echo base_url();?>index.php/controller/voirGraphique/'+uuid);},
async: false
});
return false;
}
});
</script>
<div id="tableauDiv" class="wrapper wrapper-content animated fadeInRight">
<div class="row">
<div class="col-lg-12">
<div class="ibox float-e-margins">
<div class="ibox-title">
<h5>Catalogue évenementiel</h5>
</div>
<div class="ibox-content">
<div class="table-responsive">
<table id="tableau" class="table table-striped table-bordered table-hover dataTable" >
<thead>
<tr>
<th></th>
<th>Nom</th>
<th>Origine</th>
<th>Visualisation</th>
<th>Date de Début</th>
<th>Date de Fin</th>
<th>Durée</th>
<th>Observation</th>
</tr>
</thead>
<tbody>
<tr id="id1">
<td>1</td>
<td>Changement de casier</td>
<td>SAS Quinette</td>
<td>Analyse</td>
<td>2020-05-20 à 10h</td>
<td>2020-05-20 à 13h</td>
<td>3h</td>
<td><i class="fa fa-check text-navy">Mise a l'eau du casier au SAS Quinette. <br />
Etat des moules:<br />
- A5 morte.<br />
- A0 ouverture très rare.</i>
</td>
</tr>
<tr id="id2">
<td>2</td>
<td>Observation A0</td>
<td>SAS Quinette</td>
<td>Individuelle</td>
<td>2020-05-20 à 13h</td>
<td>2020-05-24 à 01h</td>
<td>84h</td>
<td><i class="fa fa-check text-navy">Mort de A0</i></td>
</tr>
<tr id="id3">
<td>3</td>
<td>Observation Batterie</td>
<td>SAS Quinette</td>
<td>Individuelle</td>
<td>2020-05-24 à 00h</td>
<td>2020-06-07 à 00h</td>
<td>336h</td>
<td><i class="fa fa-check text-navy">2 semaines dont 1 en plein ensoleillement <br />Peu de pertes d'énergie</i></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
</div>
<script>
$(document).ready(function(){
initTable();
});
function initTable() {
table = $('.dataTable').DataTable({
pageLength: 25,
responsive: true,
dom: '<"html5buttons"B>lTfgitp',
buttons: [
{extend: 'copy'},
{extend: 'csv'},
{extend: 'excel', title: 'Catalogue'},
{extend: 'pdf', title: 'Catalogue'},
{extend: 'print',
customize: function (win){
$(win.document.body).addClass('white-bg');
$(win.document.body).css('font-size', '10px');
$(win.document.body).find('table')
.addClass('compact')
.css('font-size', 'inherit');
}
}
]
});
}
// UUID aleatoire
function uuidv4() {
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
var r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8);
return v.toString(16);
});
}
$("#id1").click(function() {
analyse(168, 175, 176, 177, 178, 179, "2020-05-20 10:00:00.000", "2020-05-20 13:00:00.000", 7)
return false;
});
$("#id2").click(function() {
visualisation(168, "Moule A0", "2020-05-20 13:00:00.000", "2020-05-24 01:00:00.000", "G", 7000000, 100)
return false;
});
$("#id3").click(function() {
visualisation(172, "Batterie", "2020-05-24 00:00:00.000", "2020-06-07 00:00:00.000", "G", 7000000, 1)
return false;
});
function analyse(cpt0, cpt1, cpt2, cpt3, cpt4, cpt5, dateDeb, dateFin, syncro) {
var uuid = uuidv4();
$.ajax({
type: 'post',
data:{
capteur0: cpt0,
capteur1: cpt1,
capteur2: cpt2,
capteur3: cpt3,
capteur4: cpt4,
capteur5: cpt5,
debut: dateDeb,
fin: dateFin,
moyMob: 30,
variation: 0.25,
periode: 50,
synchro: syncro,
uuid: uuid
},
url: '<?php echo base_url();?>index.php/controller/executeAnalysePython',
success: function (results) {},
async: true
});
// Ouvre dans un nouvel onglet sans avoir le "bloque popup"
$.ajax({
url: '<?php echo base_url();?>',
success: function(){window.open('<?php echo base_url();?>index.php/controller/voirGraphique/'+uuid);},
async: false
});
return false;
}
function visualisation(id, nom, dateDeb, dateFin, unite, limite, moyMob) {
var uuid = uuidv4();
$.ajax({
type: 'post',
data:{
id: id,
nom: nom,
debut: dateDeb,
fin: dateFin,
unite: unite,
limite: limite,
moyMob: moyMob,
uuid: uuid
},
url: '<?php echo base_url();?>index.php/controller/executePython',
success: function (results) {},
async: true
});
// Ouvre dans un nouvel onglet sans avoir le "bloque popup"
$.ajax({
url: '<?php echo base_url();?>',
success: function(){window.open('<?php echo base_url();?>index.php/controller/voirGraphique/'+uuid);},
async: false
});
return false;
}
</script>
<!-- Page : Visualisation du graphe generee par le script python -->
<h1 id="titre">Visualisation complexe</h1>
<h1 id="titre">Graphique Complet</h1>
<div id="zone" class="progress">
<div id="progress" class="progress-bar progress-bar-striped progress-bar-animated progress-bar-warning" style="width: 0%" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100"></div>
</div>
......
......@@ -266,8 +266,8 @@ function majChart(idCapteur, debut, fin, limite=500) {
value = valeurs[val].trim();
var temps = parse.table[val].temps ;
var lat = value.split(",")[0];
var lon = value.split(",")[1];
var lat = value.split(",")[0].trim();
var lon = value.split(",")[1].trim();
if (lat != "-999" && lon != "-999"){
placeMarker(lat, lon, temps);
}
......
......@@ -80,6 +80,38 @@ h5 {
color: #ffffff;
}
#menuPrinc5 {
background-color: #068300;
color: #ffffff;
border-radius: 10px;
}
#menuPrinc5:hover{
background-color: #09bd00;
color: #ffffff;
}
#menuPrinc6 {
background-color: #A79000;
color: #ffffff;
border-radius: 10px;
}
#menuPrinc6:hover{
background-color: #cfc009;
color: #ffffff;
}
#menuPrinc7 {
background-color: #776587;
color: #ffffff;
border-radius: 10px;
}
#menuPrinc7:hover{
background-color: #a78ebd;
color: #ffffff;
}
div.barMenu:before {
content:url('../img/bars.png');
}
......
# Genere une image du graphe avec matplot. Le traitement est suivie dans un fichier texte.
# Argument =>
# 1 = Identifiant unique du processus
# 2 = Date de fin
# 3 = Id Capteur 1
# 4 = Id Capteur 2
# 5 = Id Capteur 3
# 6 = Id Capteur 4
# 7 = Id Capteur 5
# 8 = Id Capteur 6
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
import matplotlib.patches as mpatches
import csv
import sys
from datetime import datetime
from datetime import timedelta
import MySQLdb
import atexit
idProcess = sys.argv[1]
sys.stdout = open("/var/www/html/astreos/assets/python/log_"+idProcess+".txt", "w+")
sys.stdout.flush()
x = []
y = []
y1 = []
y2 = []
y3 = []
y4 = []
y5 = []
moy = []
moy1 = []
moy2 = []
moy3 = []
moy4 = []
moy5 = []
VARIATION = float(sys.argv[5]) #0.25 # Variation de 25% de l'intervalle maximale. Ex : valeur min/max du capteur = 150/650, les variations retenues seront des variations de 150 minimum
VARIATION_PERIODE = int(sys.argv[6]) #50 # Analyse de la variation sur le nombre de valeur definie (5 = 1seconde)
NBSYCRO = int(sys.argv[7]) #3 # Nombre de capteur minimum syncronisees pour afficher un Hightlight rouge
ID_CAPTEURS = [int(sys.argv[8]), int(sys.argv[9]), int(sys.argv[10]), int(sys.argv[11]), int(sys.argv[12]), int(sys.argv[13])]
#ID_CAPTEURS = [168, 175, 176, 177, 178, 179]
NOM = str("Valvometrie").decode("utf-8")
try:
DEBUT = datetime.strptime(sys.argv[2], '%Y-%m-%d %H:%M:%S.%f')
except:
DEBUT = datetime.strptime(sys.argv[2], '%Y-%m-%d %H:%M:%S')
try:
FIN = datetime.strptime(sys.argv[3], '%Y-%m-%d %H:%M:%S.%f')
except:
FIN = datetime.strptime(sys.argv[3], '%Y-%m-%d %H:%M:%S')
#FIN = datetime.strptime("2020-02-15 00:00:00", '%Y-%m-%d %H:%M:%S')
#FIN = datetime.strptime("2020-02-27 19:00:00", '%Y-%m-%d %H:%M:%S')
UNITE = "G"
LIMITE = 7000000 # Valeur sur 1 semaine par defaut
CONST_MOYENNE = int(sys.argv[4]) #30
axeMax = 0
axeMin = 999
axeMax1 = 0
axeMin1 = 999
axeMax2 = 0
axeMin2 = 999
axeMax3 = 0
axeMin3 = 999
axeMax4 = 0
axeMin4 = 999
axeMax5 = 0
axeMin5 = 999
# ================ CONNECTION BDD ================== #
try:
db = MySQLdb.connect(host="localhost",
user="astreos",
passwd="WoHvxE982brBdQG",
db="astreos");
print("msg0_Connexion-BDD")
except Exception as ex:
print("echec_"+str(ex));
sys.stdout.flush()
sys.exit(1)
# ================ RECUPERATION DONNEES ================== #
nbLigne = 0
try:
requete0 = "SELECT temps, valeur FROM valeur WHERE idCapteur = %s AND temps >= %s AND temps <= %s ORDER BY temps ASC LIMIT %s"
data0 = (ID_CAPTEURS[0], str(DEBUT), str(FIN), LIMITE, );
print("msg1_Recuperation-des-valeurs-(Cette-operation-peut-prendre-plusieurs-minutes)...")
sys.stdout.flush()
cursor0 = db.cursor();
nbLigne = cursor0.execute(requete0, data0)
requete1 = "SELECT valeur FROM valeur WHERE idCapteur = %s AND temps >= %s AND temps <= %s ORDER BY temps ASC LIMIT %s"
data1 = (ID_CAPTEURS[1], str(DEBUT), str(FIN), LIMITE, );
cursor1 = db.cursor();
cursor1.execute(requete1, data1)
#print("recup_10")
requete2 = "SELECT valeur FROM valeur WHERE idCapteur = %s AND temps >= %s AND temps <= %s ORDER BY temps ASC LIMIT %s"
data2 = (ID_CAPTEURS[2], str(DEBUT), str(FIN), LIMITE, );
cursor2 = db.cursor();
cursor2.execute(requete2, data2)
#print("recup_20")
requete3 = "SELECT valeur FROM valeur WHERE idCapteur = %s AND temps >= %s AND temps <= %s ORDER BY temps ASC LIMIT %s"
data3 = (ID_CAPTEURS[3], str(DEBUT), str(FIN), LIMITE, );
cursor3 = db.cursor();
cursor3.execute(requete3, data3)
#print("recup_30")
requete4 = "SELECT valeur FROM valeur WHERE idCapteur = %s AND temps >= %s AND temps <= %s ORDER BY temps ASC LIMIT %s"
data4 = (ID_CAPTEURS[4], str(DEBUT), str(FIN), LIMITE, );
cursor4 = db.cursor();
cursor4.execute(requete4, data4)
#print("recup_40")
requete5 = "SELECT valeur FROM valeur WHERE idCapteur = %s AND temps >= %s AND temps <= %s ORDER BY temps ASC LIMIT %s"
data5 = (ID_CAPTEURS[5], str(DEBUT), str(FIN), LIMITE, );
cursor5 = db.cursor();
cursor5.execute(requete5, data5)
#print("recup_50")
except Exception as ex:
print("echec_"+str(ex));
sys.stdout.flush()
db.close()
sys.exit(1)
print(datetime.now())
# ================ CALCUL DES MOYENNES ================== #
for i in range(nbLigne):
try:
row = cursor0.fetchone()
x.append(row[0])
y.append(float(row[1]))
y1.append(float(cursor1.fetchone()[0]))
y2.append(float(cursor2.fetchone()[0]))
y3.append(float(cursor3.fetchone()[0]))
y4.append(float(cursor4.fetchone()[0]))
y5.append(float(cursor5.fetchone()[0]))
if i % 10000 == 0:
#print("data_"+str(row[1]))
pourcentage = (i*100)/nbLigne
print("data_"+str(pourcentage))
sys.stdout.flush()
if i >= CONST_MOYENNE :
moyenne = 0
moyenne1 = 0
moyenne2 = 0
moyenne3 = 0
moyenne4 = 0
moyenne5 = 0
for j in range(i-CONST_MOYENNE, i, 1) :
moyenne = moyenne+y[j]
moyenne1 = moyenne1+y1[j]
moyenne2 = moyenne2+y2[j]
moyenne3 = moyenne3+y3[j]
moyenne4 = moyenne4+y4[j]
moyenne5 = moyenne5+y5[j]
moy.append(moyenne / CONST_MOYENNE)
moy1.append(moyenne1 / CONST_MOYENNE)
moy2.append(moyenne2 / CONST_MOYENNE)
moy3.append(moyenne3 / CONST_MOYENNE)
moy4.append(moyenne4 / CONST_MOYENNE)
moy5.append(moyenne5 / CONST_MOYENNE)
if (moyenne / CONST_MOYENNE) > axeMax: axeMax = (moyenne / CONST_MOYENNE)
if (moyenne / CONST_MOYENNE) < axeMin: axeMin = (moyenne / CONST_MOYENNE)
if (moyenne1 / CONST_MOYENNE) > axeMax1: axeMax1 = (moyenne1 / CONST_MOYENNE)
if (moyenne1 / CONST_MOYENNE) < axeMin1: axeMin1 = (moyenne1 / CONST_MOYENNE)
if (moyenne2 / CONST_MOYENNE) > axeMax2: axeMax2 = (moyenne2 / CONST_MOYENNE)
if (moyenne2 / CONST_MOYENNE) < axeMin2: axeMin2 = (moyenne2 / CONST_MOYENNE)
if (moyenne3 / CONST_MOYENNE) > axeMax3: axeMax3 = (moyenne3 / CONST_MOYENNE)
if (moyenne3 / CONST_MOYENNE) < axeMin3: axeMin3 = (moyenne3 / CONST_MOYENNE)
if (moyenne4 / CONST_MOYENNE) > axeMax4: axeMax4 = (moyenne4 / CONST_MOYENNE)
if (moyenne4 / CONST_MOYENNE) < axeMin4: axeMin4 = (moyenne4 / CONST_MOYENNE)
if (moyenne5 / CONST_MOYENNE) > axeMax5: axeMax5 = (moyenne5 / CONST_MOYENNE)
if (moyenne5 / CONST_MOYENNE) < axeMin5: axeMin5 = (moyenne5 / CONST_MOYENNE)
else:
moy.append(float(row[1]))
moy1.append(y1[i])
moy2.append(y2[i])
moy3.append(y3[i])
moy4.append(y4[i])
moy5.append(y5[i])
if float(row[1]) > axeMax: axeMax = float(row[1])
if float(row[1]) < axeMin: axeMin = float(row[1])
if y1[i] > axeMax1: axeMax1 = y1[i]
if y1[i] < axeMin1: axeMin1 = y1[i]
if y2[i] > axeMax2: axeMax2 = y2[i]
if y2[i] < axeMin2: axeMin2 = y2[i]
if y3[i] > axeMax3: axeMax3 = y3[i]
if y3[i] < axeMin3: axeMin3 = y3[i]
if y4[i] > axeMax4: axeMax4 = y4[i]
if y4[i] < axeMin4: axeMin4 = y4[i]
if y5[i] > axeMax5: axeMax5 = y5[i]
if y5[i] < axeMin5: axeMin5 = y5[i]
#i = i+1
except Exception as ex:
print("echec_"+str(ex));
sys.stdout.flush()
while (len(x) != len(moy)) and (len(x) != len(moy1)) and (len(x) != len(moy2)) and (len(x) != len(moy3)) and (len(x) != len(moy4)) and (len(x) != len(moy5)) :
if len(x) < len(moy) : moy.pop()
elif len(x) > len(moy): x.pop()
if len(x) < len(moy1): moy1.pop()
elif len(x) > len(moy1): x.pop()
if len(x) < len(moy2): moy2.pop()
elif len(x) > len(moy2): x.pop()
if len(x) < len(moy3): moy3.pop()
elif len(x) > len(moy3): x.pop()
if len(x) < len(moy4): moy4.pop()
elif len(x) > len(moy4): x.pop()
if len(x) < len(moy5): moy5.pop()
elif len(x) > len(moy5): x.pop()
# ================ CALCUL DES VARIATIONS ================== #
variationY = [None]*nbLigne
variationY1 = [None]*nbLigne
variationY2 = [None]*nbLigne
variationY3 = [None]*nbLigne
variationY4 = [None]*nbLigne
variationY5 = [None]*nbLigne
i = 0
for i in range(nbLigne):
if i <= VARIATION_PERIODE :
variationY[i] = 0
variationY1[i] = 0
variationY2[i] = 0
variationY3[i] = 0
variationY4[i] = 0
variationY5[i] = 0
continue
variation = (axeMax - axeMin)*VARIATION
variation1 = (axeMax1 - axeMin1)*VARIATION
variation2 = (axeMax2 - axeMin2)*VARIATION
variation3 = (axeMax3 - axeMin3)*VARIATION
variation4 = (axeMax4 - axeMin4)*VARIATION
variation5 = (axeMax5 - axeMin5)*VARIATION
vMin = axeMax
vMax = axeMin
vMin1 = axeMax1
vMax1 = axeMin1
vMin2 = axeMax2
vMax2 = axeMin2
vMin3 = axeMax3
vMax3 = axeMin3
vMin4 = axeMax4
vMax4 = axeMin4
vMin5 = axeMax5
vMax5 = axeMin5
for j in range(i-VARIATION_PERIODE, i, 1):
if y[j] > vMax: vMax = y[j]
if y[j] < vMin: vMin = y[j]
if y1[j] > vMax1: vMax1 = y1[j]
if y1[j] < vMin1: vMin1 = y1[j]
if y2[j] > vMax2: vMax2 = y2[j]
if y2[j] < vMin2: vMin2 = y2[j]
if y3[j] > vMax3: vMax3 = y3[j]
if y3[j] < vMin3: vMin3 = y3[j]
if y4[j] > vMax4: vMax4 = y4[j]
if y4[j] < vMin4: vMin4 = y4[j]
if y5[j] > vMax5: vMax5 = y5[j]
if y5[j] < vMin5: vMin5 = y5[j]
for j in range(i-VARIATION_PERIODE, i, 1):
if vMax-vMin >= variation:
variationY[j] = 1
if vMax1-vMin1 >= variation1:
variationY1[j] = 1
if vMax2-vMin2 >= variation2:
variationY2[j] = 1
if vMax3-vMin3 >= variation3:
variationY3[j] = 1
if vMax4-vMin4 >= variation4:
variationY4[j] = 1
if vMax5-vMin5 >= variation5:
variationY5[j] = 1
else :
#if vMax1 > 550:
# print(str(x[j])+" = "+str(vMax1)+" - "+str(vMin1)+" ("+str(vMax1-vMin1)+") > "+str(variation1))
if variationY[j] == None:
variationY[j] = 0
if variationY1[j] == None:
variationY1[j] = 0
if variationY2[j] == None:
variationY2[j] = 0
if variationY3[j] == None:
variationY3[j] = 0
if variationY4[j] == None:
variationY4[j] = 0
if variationY5[j] == None:
variationY5[j] = 0
# Trouve les variations simultannees entre plusieurs courbes
analyseVariation = []
analyseVariation1 = []
analyseVariation2 = []
analyseVariation3 = []
analyseVariation4 = []
analyseVariation5 = []
i = 0
for i in range(nbLigne):
nbSimultaneous = 0
if variationY[i] == 1:
nbSimultaneous+=1
if variationY1[i] == 1:
nbSimultaneous+=1
if variationY2[i] == 1:
nbSimultaneous+=1
if variationY3[i] == 1:
nbSimultaneous+=1
if variationY4[i] == 1:
nbSimultaneous+=1
if variationY5[i] == 1:
nbSimultaneous+=1
if nbSimultaneous >= NBSYCRO:
if variationY[i] == 1:
analyseVariation.append(x[i])
if variationY1[i] == 1:
analyseVariation1.append(x[i])
if variationY2[i] == 1:
analyseVariation2.append(x[i])
if variationY3[i] == 1:
analyseVariation3.append(x[i])
if variationY4[i] == 1:
analyseVariation4.append(x[i])
if variationY5[i] == 1:
analyseVariation5.append(x[i])
# ================ AFFICHAGE ================== #
print(datetime.now())
print("msg2_Creation-du-graphique")
sys.stdout.flush()
try:
plt.figure(figsize=(18.5, 20))
#plt.suptitle("Astreos")
plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m-%d %H:%M:%S.%f'))
plt.gca().xaxis.set_major_locator(mdates.DayLocator())
plt.subplot(621)
plt.plot(x, y, label = "Brut A0", color='green', alpha=0.2)
plt.plot(x, moy, label="Moyenne Mobile", color='blue', alpha=0.9)
plt.ylabel(UNITE)
plt.ylim((axeMin, axeMax))
plt.title('Moule A0')
plt.legend()
plt.subplot(623)
plt.plot(x, variationY, label = "Variation A0")
plt.ylabel("Variation A0")
plt.ylim((0, 2))
plt.title('Variation A0')
red_patch = mpatches.Patch(color='red', label='Syncronisation')
blue_patch = mpatches.Patch(color='#1f77b4', label='Variation A0')
plt.legend(handles=[red_patch, blue_patch])
for t in analyseVariation :
plt.axvspan(*mdates.datestr2num([str(t), str(t)]), color='red', alpha=0.5)
plt.subplot(625)
plt.plot(x, y1, label="Brut A1", color='green', alpha=0.2)
plt.plot(x, moy1, label="Moyenne Mobile", color='blue', alpha=0.9)
plt.ylabel(UNITE)
plt.ylim((axeMin1, axeMax1))
plt.title('Moule A1')
plt.legend()
plt.subplot(627)
plt.plot(x, variationY1, label = "Variation A2")
plt.ylabel("Variation")
plt.ylim((0, 2))
plt.title('Variation A1')
red_patch = mpatches.Patch(color='red', label='Syncronisation')
blue_patch = mpatches.Patch(color='#1f77b4', label='Variation A1')
plt.legend(handles=[red_patch, blue_patch])
for t in analyseVariation1 :
plt.axvspan(*mdates.datestr2num([str(t), str(t)]), color='red', alpha=0.5)
plt.subplot(629)
plt.plot(x, y2, label="Brut A2", color='green', alpha=0.2)
plt.plot(x, moy2, label="Moyenne Mobile", color='blue', alpha=0.9)
plt.ylabel(UNITE)
plt.ylim((axeMin2, axeMax2))
plt.title('Moule A2')
plt.legend()
plt.subplot(6, 2, 11)
plt.plot(x, variationY2, label = "Variation A2")
plt.ylabel("Variation")
plt.xlabel('Temps (heures)')
plt.ylim((0, 2))
plt.title('Variation A2')
red_patch = mpatches.Patch(color='red', label='Syncronisation')
blue_patch = mpatches.Patch(color='#1f77b4', label='Variation A2')
plt.legend(handles=[red_patch, blue_patch])
for t in analyseVariation2 :
plt.axvspan(*mdates.datestr2num([str(t), str(t)]), color='red', alpha=0.5)
plt.subplot(622)
plt.plot(x, y3, label="Brut A3", color='green', alpha=0.2)
plt.plot(x, moy3, label="Moyenne Mobile", color='blue', alpha=0.9)
plt.ylabel(UNITE)
plt.ylim((axeMin3, axeMax3))
plt.title('Moule A3')
plt.legend()
plt.subplot(624)
plt.plot(x, variationY3, label = "Variation A3")
plt.ylabel("Variation")
plt.ylim((0, 2))
plt.title('Variation A3')
red_patch = mpatches.Patch(color='red', label='Syncronisation')
blue_patch = mpatches.Patch(color='#1f77b4', label='Variation A3')
plt.legend(handles=[red_patch, blue_patch])
for t in analyseVariation3 :
plt.axvspan(*mdates.datestr2num([str(t), str(t)]), color='red', alpha=0.5)
plt.subplot(626)
plt.plot(x, y4, label="Brut A4", color='green', alpha=0.2)
plt.plot(x, moy4, label="Moyenne Mobile", color='blue', alpha=0.9)
plt.ylabel(UNITE)
plt.ylim((axeMin4, axeMax4))
plt.title('Moule A4')
plt.legend()
plt.subplot(628)
plt.plot(x, variationY4, label = "Variation A4")
plt.ylabel("Variation")
plt.ylim((0, 2))
plt.title('Variation A4')
red_patch = mpatches.Patch(color='red', label='Syncronisation')
blue_patch = mpatches.Patch(color='#1f77b4', label='Variation A4')
plt.legend(handles=[red_patch, blue_patch])
for t in analyseVariation4 :
plt.axvspan(*mdates.datestr2num([str(t), str(t)]), color='red', alpha=0.5)
plt.subplot(6, 2, 10)
plt.plot(x,y5, label="Brut A5", color='green', alpha=0.2)
plt.plot(x, moy5, label="Moyenne Mobile", color='blue', alpha=0.9)
plt.ylabel(UNITE)
plt.ylim((axeMin5, axeMax5))
plt.title('Moule A5')
plt.legend()
plt.subplot(6, 2, 12)
plt.plot(x, variationY5, label = "Variation A5")
plt.xlabel('Temps (heures)')
plt.ylabel("Variation")
plt.ylim((0, 2))
plt.title('Variation A5')
red_patch = mpatches.Patch(color='red', label='Syncronisation')
blue_patch = mpatches.Patch(color='#1f77b4', label='Variation A5')
plt.legend(handles=[red_patch, blue_patch])
for t in analyseVariation5 :
plt.axvspan(*mdates.datestr2num([str(t), str(t)]), color='red', alpha=0.5)
plt.savefig("/var/www/html/astreos/assets/python/"+str(idProcess)+".png", bbox_inches='tight')
print("close_"+str(idProcess))
sys.stdout.flush()
db.close()
except Exception as ex:
print("echec_"+str(ex));
sys.stdout.flush()
db.close()
sys.exit(1)
# Genere une image du graphe avec matplot. Le traitement est suivie dans un fichier texte.
# Argument =>
# 1 = Identifiant unique du processus
# 2 = Date de fin
# 3 = Id Capteur 1
# 4 = Id Capteur 2
# 5 = Id Capteur 3
# 6 = Id Capteur 4
# 7 = Id Capteur 5
# 8 = Id Capteur 6
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
import csv
import sys
from datetime import datetime
from datetime import timedelta
import MySQLdb
import atexit
idProcess = sys.argv[1]
sys.stdout = open("/var/www/html/astreos/assets/python/log_"+idProcess+".txt", "w+")
sys.stdout.flush()
x = []
y = []
y1 = []
y2 = []
y3 = []
y4 = []
y5 = []
moy = []
moy1 = []
moy2 = []
moy3 = []
moy4 = []
moy5 = []
#168, 175, 176, 177, 178, 179
ID_CAPTEURS = [int(sys.argv[3]), int(sys.argv[4]), int(sys.argv[5]), int(sys.argv[6]), int(sys.argv[7]), int(sys.argv[8])]
NOM = str("Valvometrie").decode("utf-8")
try:
FIN = datetime.strptime(sys.argv[2], '%Y-%m-%d %H:%M:%S.%f')
except:
FIN = datetime.strptime(sys.argv[2], '%Y-%m-%d %H:%M:%S')
DEBUT = FIN - timedelta(hours=6, minutes=00)
UNITE = "G"
LIMITE = 7000000 # Valeur sur 1 semaine par defaut
CONST_MOYENNE = 30
axeMax = 0
axeMin = 999
axeMax1 = 0
axeMin1 = 999
axeMax2 = 0
axeMin2 = 999
axeMax3 = 0
axeMin3 = 999
axeMax4 = 0
axeMin4 = 999
axeMax5 = 0
axeMin5 = 999
# ================ CONNECTION BDD ================== #
try:
db = MySQLdb.connect(host="localhost",
user="astreos",
passwd="WoHvxE982brBdQG",
db="astreos");
print("msg0_Connexion-BDD")
except Exception as ex:
print("echec_"+str(ex));
sys.stdout.flush()
sys.exit(1)
# ================ RECUPERATION DONNEES ================== #
nbLigne = 0
try:
requete0 = "SELECT temps, valeur FROM valeur WHERE idCapteur = %s AND temps >= %s AND temps <= %s ORDER BY temps ASC LIMIT %s"
data0 = (ID_CAPTEURS[0], str(DEBUT), str(FIN), LIMITE, );
print("msg1_Recuperation-des-valeurs-(Cette-operation-peut-prendre-plusieurs-minutes)...")
sys.stdout.flush()
cursor0 = db.cursor();
nbLigne = cursor0.execute(requete0, data0)
requete1 = "SELECT valeur FROM valeur WHERE idCapteur = %s AND temps >= %s AND temps <= %s ORDER BY temps ASC LIMIT %s"
data1 = (ID_CAPTEURS[1], str(DEBUT), str(FIN), LIMITE, );
cursor1 = db.cursor();
cursor1.execute(requete1, data1)
#print("recup_10")
requete2 = "SELECT valeur FROM valeur WHERE idCapteur = %s AND temps >= %s AND temps <= %s ORDER BY temps ASC LIMIT %s"
data2 = (ID_CAPTEURS[2], str(DEBUT), str(FIN), LIMITE, );
cursor2 = db.cursor();
cursor2.execute(requete2, data2)
#print("recup_20")
requete3 = "SELECT valeur FROM valeur WHERE idCapteur = %s AND temps >= %s AND temps <= %s ORDER BY temps ASC LIMIT %s"
data3 = (ID_CAPTEURS[3], str(DEBUT), str(FIN), LIMITE, );
cursor3 = db.cursor();
cursor3.execute(requete3, data3)
#print("recup_30")
requete4 = "SELECT valeur FROM valeur WHERE idCapteur = %s AND temps >= %s AND temps <= %s ORDER BY temps ASC LIMIT %s"
data4 = (ID_CAPTEURS[4], str(DEBUT), str(FIN), LIMITE, );
cursor4 = db.cursor();
cursor4.execute(requete4, data4)
#print("recup_40")
requete5 = "SELECT valeur FROM valeur WHERE idCapteur = %s AND temps >= %s AND temps <= %s ORDER BY temps ASC LIMIT %s"
data5 = (ID_CAPTEURS[5], str(DEBUT), str(FIN), LIMITE, );
cursor5 = db.cursor();
cursor5.execute(requete5, data5)
#print("recup_50")
except Exception as ex:
print("echec_"+str(ex));
sys.stdout.flush()
db.close()
sys.exit(1)
print(datetime.now())
for i in range(nbLigne):
try:
row = cursor0.fetchone()
x.append(row[0])
y.append(float(row[1]))
y1.append(float(cursor1.fetchone()[0]))
y2.append(float(cursor2.fetchone()[0]))
y3.append(float(cursor3.fetchone()[0]))
y4.append(float(cursor4.fetchone()[0]))
y5.append(float(cursor5.fetchone()[0]))
if i % 10000 == 0:
#print("data_"+str(row[1]))
pourcentage = (i*100)/nbLigne
print("data_"+str(pourcentage))
sys.stdout.flush()
if i >= CONST_MOYENNE :
moyenne = 0
moyenne1 = 0
moyenne2 = 0
moyenne3 = 0
moyenne4 = 0
moyenne5 = 0
for j in range(i-CONST_MOYENNE, i, 1) :
moyenne = moyenne+y[j]
moyenne1 = moyenne1+y1[j]
moyenne2 = moyenne2+y2[j]
moyenne3 = moyenne3+y3[j]
moyenne4 = moyenne4+y4[j]
moyenne5 = moyenne5+y5[j]
moy.append(moyenne / CONST_MOYENNE)
moy1.append(moyenne1 / CONST_MOYENNE)
moy2.append(moyenne2 / CONST_MOYENNE)
moy3.append(moyenne3 / CONST_MOYENNE)
moy4.append(moyenne4 / CONST_MOYENNE)
moy5.append(moyenne5 / CONST_MOYENNE)
if (moyenne / CONST_MOYENNE) > axeMax: axeMax = (moyenne / CONST_MOYENNE)
if (moyenne / CONST_MOYENNE) < axeMin: axeMin = (moyenne / CONST_MOYENNE)
if (moyenne1 / CONST_MOYENNE) > axeMax1: axeMax1 = (moyenne1 / CONST_MOYENNE)
if (moyenne1 / CONST_MOYENNE) < axeMin1: axeMin1 = (moyenne1 / CONST_MOYENNE)
if (moyenne2 / CONST_MOYENNE) > axeMax2: axeMax2 = (moyenne2 / CONST_MOYENNE)
if (moyenne2 / CONST_MOYENNE) < axeMin2: axeMin2 = (moyenne2 / CONST_MOYENNE)
if (moyenne3 / CONST_MOYENNE) > axeMax3: axeMax3 = (moyenne3 / CONST_MOYENNE)
if (moyenne3 / CONST_MOYENNE) < axeMin3: axeMin3 = (moyenne3 / CONST_MOYENNE)
if (moyenne4 / CONST_MOYENNE) > axeMax4: axeMax4 = (moyenne4 / CONST_MOYENNE)
if (moyenne4 / CONST_MOYENNE) < axeMin4: axeMin4 = (moyenne4 / CONST_MOYENNE)
if (moyenne5 / CONST_MOYENNE) > axeMax5: axeMax5 = (moyenne5 / CONST_MOYENNE)
if (moyenne5 / CONST_MOYENNE) < axeMin5: axeMin5 = (moyenne5 / CONST_MOYENNE)
else:
moy.append(float(row[1]))
moy1.append(y1[i])
moy2.append(y2[i])
moy3.append(y3[i])
moy4.append(y4[i])
moy5.append(y5[i])
if float(row[1]) > axeMax: axeMax = float(row[1])
if float(row[1]) < axeMin: axeMin = float(row[1])
if y1[i] > axeMax1: axeMax1 = y1[i]
if y1[i] < axeMin1: axeMin1 = y1[i]
if y2[i] > axeMax2: axeMax2 = y2[i]
if y2[i] < axeMin2: axeMin2 = y2[i]
if y3[i] > axeMax3: axeMax3 = y3[i]
if y3[i] < axeMin3: axeMin3 = y3[i]
if y4[i] > axeMax4: axeMax4 = y4[i]
if y4[i] < axeMin4: axeMin4 = y4[i]
if y5[i] > axeMax5: axeMax5 = y5[i]
if y5[i] < axeMin5: axeMin5 = y5[i]
#i = i+1
except Exception as ex:
print("echec_"+str(ex));
sys.stdout.flush()
while (len(x) != len(moy)) and (len(x) != len(moy1)) and (len(x) != len(moy2)) and (len(x) != len(moy3)) and (len(x) != len(moy4)) and (len(x) != len(moy5)) :
if len(x) < len(moy) : moy.pop()
elif len(x) > len(moy): x.pop()
if len(x) < len(moy1): moy1.pop()
elif len(x) > len(moy1): x.pop()
if len(x) < len(moy2): moy2.pop()
elif len(x) > len(moy2): x.pop()
if len(x) < len(moy3): moy3.pop()
elif len(x) > len(moy3): x.pop()
if len(x) < len(moy4): moy4.pop()
elif len(x) > len(moy4): x.pop()
if len(x) < len(moy5): moy5.pop()
elif len(x) > len(moy5): x.pop()
print(datetime.now())
print("msg2_Creation-du-graphique")
sys.stdout.flush()
try:
plt.figure(figsize=(18.5, 10.5))
plt.suptitle("Astreos")
plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m-%d %H:%M:%S.%f'))
plt.gca().xaxis.set_major_locator(mdates.DayLocator())
plt.subplot(321)
plt.plot(x, moy, label = NOM) # ancien moule Silicon
plt.ylabel(UNITE)
plt.ylim((axeMin, axeMax))
plt.title('Moule A0')
plt.legend()
plt.subplot(323)
plt.plot(x, moy1, label='Moyenne Mobile')
plt.ylabel(UNITE)
plt.ylim((axeMin1, axeMax1))
plt.title('Moule A1')
plt.subplot(325)
plt.plot(x, moy2, label='Moyenne Mobile')
plt.ylabel(UNITE)
plt.ylim((axeMin2, axeMax2))
plt.xlabel('Temps (heures)')
plt.title('Moule A2')
plt.subplot(322)
plt.plot(x, moy3, label='Moyenne Mobile')
plt.ylabel(UNITE)
plt.ylim((axeMin3, axeMax3))
plt.title('Moule A3')
plt.subplot(324)
plt.plot(x, moy4, label='Moyenne Mobile')
plt.ylabel(UNITE)
plt.ylim((axeMin4, axeMax4))
plt.title('Moule A4')
plt.subplot(326)
plt.plot(x,moy5, label='Moyenne Mobile')
plt.xlabel('Temps (heures)')
plt.ylabel(UNITE)
plt.ylim((axeMin5, axeMax5))
plt.title('Moule A5')
plt.savefig("/var/www/html/astreos/assets/python/"+str(idProcess)+".png", bbox_inches='tight')
print("close_"+str(idProcess))
sys.stdout.flush()
db.close()
except Exception as ex:
print("echec_"+str(ex));
sys.stdout.flush()
db.close()
sys.exit(1)
#plt.show()