humidité mensuelle

Vous créez vos graphiques à partir d'une base de données et vous avez une question, un problème, c'est ici

Modérateurs : jturlier, Météo Villarzel

Avatar du membre
jturlier
Administrateur du site
Messages : 393
Enregistré le : 10 déc. 2014, 10:20
Localisation : Sérignan 34410
Contact :

Re: humidité mensuelle

Message par jturlier » 24 déc. 2014, 13:26

Météo Villarzel a écrit :Non Jean
h_out_moy existe dans la table maximini, c'est toi qui la créée :roll:

humidité extérieure moyenne

A+
:oops: pourtant je n'avais pas bu encore !!!!
As-tu essayé de lancer ta requête seule dans query browser ou tout-autre client sql ?
Si c'est à 0 c'est que tu n'as pas de valeur correspondant à ta requête car elle est fausse et doit te donner une erreur dans le group by : tu ne peux pas à la fois chercher sur un tstamp qui correspond à chacune des lignes et chercher sur année/mois qui correspond à une trentaine de lignes. Donc soit tu enlèves le tstamp soit tu le rajoutes dans le group by.

C'est une règle, quand tu insères une requête dans un script, il est quasiment impératif de l'exécuter auparavant seule.
Jean

Station :
VP2pro + anémomètre ultrasons et console Vue
Cumulus 1.9.4 + Cumulus2SQL + MySQL

Audio :
FR
PC :
W10 64bits migré
http://meteoserignan.ddns.net
Image

muchistic
Messages : 142
Enregistré le : 17 févr. 2014, 20:20
Localisation : Canejan (33)
Contact :

Re: humidité mensuelle

Message par muchistic » 24 déc. 2014, 13:49

voici ce que j'ai rajouté :
$sql = "select round(AVG(h_out_moy),2) AS AnneeMois, FROM `MiniMaxidatavp2`";

Code : Tout sélectionner

<?php
// appel du script de connexion
require("mysql_connect.php");
$sql = "select round(AVG(h_out_moy),2) AS AnneeMois, FROM `MiniMaxidatavp2`";                   
// Rcupration des donnes en faisant la somme de t_out_moy en crant une variable AnneeMois et en groupant les donnes sur cette variable AnneeMois.
$sql = "SELECT tstamp, AVG(h_out_moy), substr(recdateTZ,1,6) AS AnneeMois FROM `MiniMaxidatavp2` GROUP BY AnneeMois";  
$query = mysql_query($sql);
$i=0;
while ($list = mysql_fetch_assoc($query)) {      
if (date("I",time())==0) { 
   $time[$i]=($list['tstamp']+7200)*1000;
   } 
else {
   $time[$i]=($list['tstamp']+7200)*1000;
  } 
$h_out_moy[$i]=$list['AVG(h_out_moy)']*1;
$i++;
}    
?>
<script type="text/javascript"> 
eval(<?php echo  "'var time =  ".json_encode($time)."'" ?>);
eval(<?php echo  "'var h_out_moy =  ".json_encode($h_out_moy)."'" ?>);
  
</script>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<HEAD>
<META NAME="SUBJECT" CONTENT="Graphique Vantage Pro Davis">
<META NAME="DESCRIPTION" CONTENT="graphique dynamique">
<META NAME="KEYWORDS" CONTENT=" M&#65533;t&#65533;o Jarny (54)">
<META NAME="REVISIT-AFTER" CONTENT="5 DAYS">
<meta http-equiv="X-UA-Compatible" content="IE=9; IE=9" >
<META NAME="LANGUAGE" CONTENT="FR">
<meta http-equiv="content-type" content="text/html;charset=UTF-8" />
<title>Météo Canéjan</title>


<!-- 1. Add these JavaScript inclusions in the head of your page -->
<script type="text/javascript" src="jquery/jquery.min.js"></script>
<script src="highstock/js/highstock.js"></script>
<script src="highstock/js//highcharts-more.js"></script>
<script src="highstock/js/modules/exporting.js"></script>
<script src="highstock/js/themes/grid.js"></script>

<link rel="stylesheet" href="jquery/development-bundle/themes/base/jquery.ui.all.css">
<script src="jquery/js/jquery-1.9.1.js"></script>
<script src="jquery/development-bundle/ui/jquery.ui.core.js"></script>
<script src="jquery/development-bundle/ui/jquery.ui.widget.js"></script>
<script src="jquery/development-bundle/ui/jquery.ui.datepicker.js"></script>
<script src="jquery/development-bundle/demos/datepicker/jquery.ui.datepicker-fr.js"></script>
<link rel="stylesheet" href="jquery/development-bundle/demos/demos.css">	
<script type="text/javascript" src="jquery/overlib.js"></script>
<script type="text/javascript" src="jquery/overlib_fade.js"></script> 
<link href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/themes/base/jquery-ui.css" rel="stylesheet"/>
      <style type ='text/css'>
      </style>  <!--<script src="../highstock/js/themes/gray.js"></script>-->	
		
		
		
      <!-- 2. Add the JavaScript to initialize the chart on document ready -->
<script type="text/javascript"> 
    function comArr(unitsArray) { 
        var outarr = [];
        for (var i = 0; i < time.length; i++) {
         outarr[i] = [time[i], unitsArray[i]];
        }
      return outarr;
    } 
$(function () {
    var chart;        
         $(document).ready(function() { 
   var highchartsOptions = Highcharts.setOptions(Highcharts.theme);       
      Highcharts.setOptions({
         lang: {
            months: ["Janvier "," Février "," Mars "," Avril "," Mai "," Juin "," Juillet "," Août "," Septembre "," Octobre "," Novembre "," Décembre"],
            weekdays: ["Dim "," Lun "," Mar "," Mer "," Jeu "," Ven "," Sam"],
         shortMonths: ['Jan', 'Fev', 'Mar', 'Avr', 'Mai', 'Juin', 'Juil','Août', 'Sept', 'Oct', 'Nov', 'Déc'],
            decimalPoint: ',',
            resetZoom: 'Réinitialiser le zoom',
            resetZoomTitle: 'Réinitialiser le zoom à 1:1',
            downloadPNG: "Télécharger au format PNG image",
            downloadJPEG: "Télécharger au format JPEG image",
            downloadPDF: "Télécharger au format PDF document",
            downloadSVG: "Télécharger au format SVG vector image",
            exportButtonTitle: "Exporter image ou document",
            printButtonTitle: "Imprimer le graphique",
         printChart: "Imprimer le graphique",
            loading: "Chargement en cours...",
         rangeSelectorFrom: "Du",
         rangeSelectorTo: "Au"
            }
         });
         window.chart = new Highcharts.StockChart({
		    chart: {
		        renderTo: 'container',
				zoomType: 'x',
				 alignTicks: false,
				 type: 'spline',
				 marginRight: 20,
				 marginBottom: 10,
				 marginTop: 35,
				 plotBorderColor: '#ff6691',
				 plotBorderWidth: 1,
				 borderColor: '#EBBA95',
				 borderWidth: 1,
				 plotBackgroundColor: '#F7F8E0',
				 backgroundColor: '#67C9F1',
		    },
			navigator: {
            top: 475
        },
         title: {
                text: 'Humidité moyenne mensuelle',
                style:{font: 'bold 14px sans-serif', color: '#000000'},
            x: -20 //center
            },
            subtitle: {
                text: 'Source : Météo Canéjan',
                align: 'center',
                x: 0
            },
         credits: {
            text: ' Météo Canéjan',
            href: 'http://meteo-canejan.fr'
			},
rangeSelector : {
			buttonTheme: { // styles for the buttons
             width: 100,
            fill: 'white',
             stroke: 'none',
                'stroke-width': 1,
             r: 3,
             // style: {
                // color: '#0000A0',
                // fontWeight: 'bold'
             // },
             // states: {
                // hover: {
                   // fill: '#FF0000',
                   // style: {
                      // color: '#FFFF00'
                   // }
               // },
                // select: {
                   // fill: '#0000A0',
                   // style: {
                      // color: 'white'
                   // }
                // }
             // }
          },
         buttons: [{
                  enabled: false,
                  type: 'ytd',
                  count: 1,
                  text: 'Cette année'
               }],
            inputEnabled: false,
            selected : 0,   
         },
            legend: {
	    	enabled: true,
	    	align: 'top',
	    	layout: 'horizontal',
	    	// verticalAlign: 'top',
	    	// y: 25,
			x: 250,
	    	shadow: true
	    },
	    xAxis: {
            type: 'datetime',
            labels: {
            format: '{value: %b<br/>%Y}',
            align: 'center',
            }
         },
             yAxis: { // 1er yAxis (numero 0)
             opposite:false,
            showFirstLabel: true,
             showLastLabel: true,
            labels: {
                    formatter: function() {
                        return this.value +' %';
                    },
               align : 'right',
               x : -10,
               y : 3,
                    style: {
                        color: '#FF0000'
                    }
                },
                title: {
                    text: 'Humidité en %',
               style: {
                        color: '#000000'
                    }
                }
            },
          
             
          tooltip: {
            crosshairs: true,
            borderColor: 'royalblue',
            valueDecimals: 1,
            shared: true,
            backgroundColor: '#F5ECCE',            
            borderRadius: 5,
            formatter: function() {
                var s = '<b>'+ Highcharts.dateFormat('%B %Y', this.x) +'</b>';
                $.each(this.points, function(i, point) {
            var unit = {
                        'Humidité': ' %',
                  
                    }[this.point.series.name];
                s = s + '<br/>' + '<span style="color:'+ point.series.color +'">' + point.series.name + '</span> : '  +Highcharts.numberFormat(point.y,1,","," ")
                       + unit;
                });
                
                return s;
            },
         

            },
         plotOptions: {
            series: {
                borderWidth: 0.5,
                borderColor: 'black'
            },
            
         },
         series: [{
              name: 'Humidité',
            id :'Humidité',
            tooltip: {
            valueDecimals: 1
            },
            type: 'column',
            pointPadding: 0,
            pointWidth: 15,
            dataLabels: {
                    enabled: true,
                    format: '{y} %',
                    color:'#000000',
                    x: 0,
                    y: 0
                },
            color: '#3F36F2',
           
              data: comArr(h_out_moy),
          },
         ]
      }, 
      
      function(chart) {// on complete
                 chart.renderer.image('http://www.meteo-canejan.fr/graphique/blason1.png', 10, 3, 43, 50)
            .add();
                           
      });

    });
});

</script>
		
	</head>
   <body>
      <!-- 3. Add the container -->
      <table align="center">
    <tr>
    <td><div id="container" style="width: 800px; height: 400px; margin: 0 auto"></div>
      <div align="center"></div>
    </td>
  </tr>
</table>
   </body>
</html>
c'est toujours pareil, une question que je me pose, faut t'il que je laisse " AVG(h_out_moy)" dans cette requète vu que je l'ai déja appelé ? :
$sql = "SELECT tstamp, AVG(h_out_moy), substr(recdateTZ,1,6) AS AnneeMois FROM `MiniMaxidatavp2` GROUP BY AnneeMois";
https://www.meteo-canejan.fr/

ma config : VP2sql , Weaterlink 6.03 , NOAAtable, minimaxibis (sonde agricole), Windows 10 .

Avatar du membre
PascalWMR
Messages : 323
Enregistré le : 16 févr. 2014, 09:28
Localisation : CONFLANS EN JARNISY (F54800)
Contact :

Re: humidité mensuelle

Message par PascalWMR » 24 déc. 2014, 14:06

Salut Dominique

J'ai testé la requête

Code : Tout sélectionner

SELECT tstamp, ROUND(AVG(h_out_moy),2), substr(recdateTZ,1,6) AS AnneeMois FROM `MiniMaxidatavp2` GROUP BY AnneeMois
chez moi et elle marche très bien

J'ai bien la moyenne mensuelle de l'humidité pour tous les mois présents dans la BDD

Par contre ou il y a une erreur dans ton code, c'est ici

$h_out_moy[$i]=$list['AVG(h_out_moy)']*1;

Il faut mettre

$h_out_moy[$i]=$list['ROUND(AVG(h_out_moy),2)']*1;

A+
Pascal
Station VP2Plus, Windows 10 64 bits,WeatherLink 6.0.5, VP2SQL, Graphiques Dynamiques à partir d'une BDD MySQL
Météo Conflans-en-Jarnisy
Image

muchistic
Messages : 142
Enregistré le : 17 févr. 2014, 20:20
Localisation : Canejan (33)
Contact :

Re: humidité mensuelle

Message par muchistic » 24 déc. 2014, 14:15

magnifique !!! :D :D http://www.meteo-canejan.fr/graphique/h ... -annee.php

MERCI à tous les trois, ça fonctionne trés bien .j'avais bien fait la requète comme me disais Jean mais d'après ce que je comprend il fallait que je fasse la même plus bas, sinon ça ne fonctionnais pas .

joyeux noel a tous, et maintenant au fourneaux ! :D
https://www.meteo-canejan.fr/

ma config : VP2sql , Weaterlink 6.03 , NOAAtable, minimaxibis (sonde agricole), Windows 10 .

Avatar du membre
jturlier
Administrateur du site
Messages : 393
Enregistré le : 10 déc. 2014, 10:20
Localisation : Sérignan 34410
Contact :

Re: humidité mensuelle

Message par jturlier » 24 déc. 2014, 15:47

SELECT tstamp, ROUND(AVG(h_out_moy),2), substr(recdateTZ,1,6) AS AnneeMois FROM `MiniMaxidatavp2` GROUP BY AnneeMois
je réitère, le tstamp ne doit pas être inclus dans le SELECT s'il n'est pas dans le GROUP BY
Le group by est utilisé quand on a des champs calculés pour pouvoir faire les regroupements nécessaires. Tous les champs non soumis à un calcul mathématique doivent y apparaitre.
Prenez l'habitude d'écrire les requêtes en conformité avec les standards sans quoi vous risquez des désagréments inexpliqués que vous aurez beaucoup de difficultés à retrouver "puisque ça fonctionnait avant" :cry: :cry: :cry: :cry:
Pour travailler sur un champ calculé, il est conseillé de le renommer :
SELECT ROUND(AVG(h_out_moy),2) as hum_moy, substr(recdateTZ,1,6) AS AnneeMois FROM `MiniMaxidatavp2` GROUP BY 2
C'est plus facile alors de l'utiliser par son nom
Jean

Station :
VP2pro + anémomètre ultrasons et console Vue
Cumulus 1.9.4 + Cumulus2SQL + MySQL

Audio :
FR
PC :
W10 64bits migré
http://meteoserignan.ddns.net
Image

Avatar du membre
PascalWMR
Messages : 323
Enregistré le : 16 févr. 2014, 09:28
Localisation : CONFLANS EN JARNISY (F54800)
Contact :

Re: humidité mensuelle

Message par PascalWMR » 24 déc. 2014, 16:45

Bonjour Jean

jturlier a écrit :je réitère, le tstamp ne doit pas être inclus dans le SELECT s'il n'est pas dans le GROUP BY

Pour travailler sur un champ calculé, il est conseillé de le renommer :
SELECT ROUND(AVG(h_out_moy),2) as hum_moy, substr(recdateTZ,1,6) AS AnneeMois FROM `MiniMaxidatavp2` GROUP BY 2
C'est plus facile alors de l'utiliser par son nom
Il est vrai et je suis d'accord avec toi il est plus facile de nommer un champ calculé pour l'utiliser.

Par contre ou je ne suit pas c'est dans l'extraction du tstamp.
Dans la requête en question, le tstamp extrait correspond au 1er à 00h00 de chaque mois de tous les mois présents dans la BDD
Si on ne l'extrait pas, quelle donnée va servir pour l'axe xAxis :?:
Le graphique ne s'affichera pas puisque justement, c'est le tstamp, encodé avec cette routine

Code : Tout sélectionner

if (date("I",time())==0) { 
   $time[$i]=($list['tstamp']+7200)*1000;
   } 
else {
   $time[$i]=($list['tstamp']+7200)*1000;
  }
qui sert d'échelle à cet axe :!:

Bon certe, il y a une autre façon de procéder. Je l'explique ici http://www.boock.ch/meteo/forum/viewtop ... rt=40#p949. Et encore cette solution n'est valable que s'il n'y a pas trop de données à afficher, car dans le cas contraire, on attend un certain temps pour que le graphique s'affiche.

Mais là, il faut revoir toute la conception des graphiques car l'encodage en json des données n'est plus le même, et le super tuto de Pierre-André ne sert plus à grand chose si je peut m'exprimer ainsi.

Bonne fêtes à tous
A+
Pascal
Station VP2Plus, Windows 10 64 bits,WeatherLink 6.0.5, VP2SQL, Graphiques Dynamiques à partir d'une BDD MySQL
Météo Conflans-en-Jarnisy
Image

Répondre