start-stop

Un problème, une question sur la partie PHP des graphiques

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

JP54
Messages : 331
Enregistré le : 15 févr. 2014, 06:44
Localisation : JARNY Meurthe-et-Moselle (54) Région Lorraine
Contact :

start-stop

Message par JP54 » 12 avr. 2014, 11:34

Ayant des lacunes en PHP, j'ai du mal à comprendre certaines choses
J'aurais voulu des explications sur:

$start=$stop-(86400*730);
$start=$stop-(86400*31);

JP54
Station VP2 Weatherlink 5.8.1 VP2SQL 3.0.0.17 NOAAtable 1.0.0.30 Windows 7 Pro
http://www.meteo-jarny.com/

Avatar du membre
Météo Villarzel
Administrateur du site
Messages : 524
Enregistré le : 06 févr. 2014, 09:48
Contact :

Re: start-stop

Message par Météo Villarzel » 12 avr. 2014, 23:43

Salut Pascal,

C'est la plage que tu veux tracer

$start=$stop-(86400); = tracer les dernières 24 heures (60x60x24 =86400)
tu peux mettre tous les calculs que tu veux
$start=$stop-(86400);

est identique à
$start=$stop-(60*60*24);

Donc dans tes exemples
$start=$stop-(86400*730); = un graphique sur 730 jours ???
$start=$stop-(86400*31); = un graphique sur 31 jours

ceci étant la durée depuis le dernier enregistrement

A+
Station Vantage Pro2+ avec station agricole - Weatherlink - GraphWeather 3.0.15b - Cumulus 1.9.4 - Windows 7/64
Graphique dynamique à partir d'une bd MySql - VP2SQL

Image

JP54
Messages : 331
Enregistré le : 15 févr. 2014, 06:44
Localisation : JARNY Meurthe-et-Moselle (54) Région Lorraine
Contact :

Re: start-stop

Message par JP54 » 13 avr. 2014, 08:46

Bonjour Pierre André,
je pense avoir compris

Si je veux faire un graphique uniquement du mois d'avril 2014 qui commence le 1er et qui termine le 30

$start=$stop-(86400*31);

$start = mktime(0,0,0,date("n"),1,date("Y"));
$stop = mktime(23,59,59,date("n"),31,date("Y"));
Station VP2 Weatherlink 5.8.1 VP2SQL 3.0.0.17 NOAAtable 1.0.0.30 Windows 7 Pro
http://www.meteo-jarny.com/

Avatar du membre
helmain
Administrateur du site
Messages : 54
Enregistré le : 09 févr. 2014, 12:44
Localisation : FRANCE - Lagny-sur-Marne (77)
Contact :

Re: start-stop

Message par helmain » 14 avr. 2014, 09:31

Bonjour Pascal,

C'est presque ça !
Attention aux signes dans ta requête sql.
Pour $start = mktime(0,0,0,date("n"),1,date("Y")); il faudra mettre dans ta requête where tstamp > '$start' soit le signe strictement supérieur.
En effet, l'enregistrement de 00:00 concerne des évènements qui se sont produits antérieurement, donc qui n'appartiennent pas au 1er jour du mois mais au jour précédent.
Si tu mets $stop = mktime(23,59,59,date("n"),31,date("Y")); tu n'auras les enregistrements que jusqu'à 23:59:59 même avec un signe <= dans ta requête.
Comme le pas d'enregistrement le plus bas est la minute, ton dernier enregistrement sera celui de 23:59 il te manquera donc une minute. :!:
Pour la borne de fin il vaut mieux mettre : $stop = mktime(0,0,0,date("n")+1,1,date("Y")); et dans la requête and tstamp <= '$stop', là le signe doit être inférieur ou égal !
Ainsi tu as tous les enregistrements, y compris celui du 01/05 à 00:00, enregistrement qui contient les données comprises en 23:59 et 00:00 ou 23:55 et 00:00 du 30 avril si l'on a un pas d'enregistrement de 1 ou de 5 minutes.
Autre chose dans le mktime il faut toujours utiliser les paramètres sans les zéro initiaux date("n") pour le mois, date("j") pour le jour, si tu utilises les paramètre "m" ou "d" tu auras des surprises.
Il est également possible de faire suivre la fonction date() d'un nombre positif ou négatif qui correspondra à un nombre de d'heures, de minutes, de secondes, de mois, de jours ou d'années selon l'endroit et le paramètre utilisé.
Ainsi mktime(0,0,0,date("n")+1,1,date("Y")) correspond au 01/05/2014 à 00:00:00, mktime(0,0,0,date("n"),1,date("Y")-2) = 01/04/2012 à 00:00:00, mktime(0, 0, 0, 4, -31, 2000) = 29/02/2000 à 00:00:00 :mrgreen:
Fastoche !

Amuse toi bien !
Jean-Michel
Station Vantage Pro2 + Soil/Leaf + Anémomètre déporté - Weatherlink 6.0.3 - Weather Display 10.37S build 84 - Cumulus 1.9.4 build 1099 - GraphWeather 3.0.28 - Windows 10/64 - VP2SQL + WDTU 1.2 pour Envoy8x - Hébergé par o2switch (MySql/PgSql)

Image

JP54
Messages : 331
Enregistré le : 15 févr. 2014, 06:44
Localisation : JARNY Meurthe-et-Moselle (54) Région Lorraine
Contact :

Re: start-stop

Message par JP54 » 14 avr. 2014, 17:02

Pas si fastoche que ça :D
Merci pour tes explications que je vais mettre ne pratique, je reviens si je n'y arrive pas :?
Station VP2 Weatherlink 5.8.1 VP2SQL 3.0.0.17 NOAAtable 1.0.0.30 Windows 7 Pro
http://www.meteo-jarny.com/

JP54
Messages : 331
Enregistré le : 15 févr. 2014, 06:44
Localisation : JARNY Meurthe-et-Moselle (54) Région Lorraine
Contact :

Re: start-stop

Message par JP54 » 01 nov. 2014, 17:11

J'essaie de faire un graphique de la température moyenne des mois d'avril et uniquement des moi d'avril.
J'aimerais bien que les pros du PHP :D jette un coup d'oeil sur ma partie PHP. je ne suis absolument pas sur que ce soit coreect. De plus comment sélectionné juste les mois d'avril et pas les autres mois

Code : Tout sélectionner

<?php
require("mysql_connect.php");                     
$sql="select max(tstamp) from MiniMaxidata";
$query=mysql_query($sql);                  
$list=mysql_fetch_array($query);     

$stop=$list[0];
$start=$stop-(86400*31);

$start = mktime(0,0,0,date("n"),date("j"),date("Y"));
$stop =  mktime(23,59,59,date("n")+1,1,date("j"),date("Y"));
$sql = "SELECT tstamp, t_out_moy FROM MiniMaxidata where tstamp > '$start' and  tstamp <= '$stop' ORDER BY 1";  

$query=mysql_query($sql);                   
$i=0;
while ($list = mysql_fetch_assoc($query)) {  
if (date("I",time())==0) {                                                         
	$dtime[$i]=($list['tstamp']+3600)*1000;
	} 
else {
	$dtime[$i]=($list['tstamp']+7200)*1000;
  } 						
$dmean[$i]=$list['t_out_moy']*1;							
$i++;
} 
//echo json_encode($dtime);  
   	
  ?>
Station VP2 Weatherlink 5.8.1 VP2SQL 3.0.0.17 NOAAtable 1.0.0.30 Windows 7 Pro
http://www.meteo-jarny.com/

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

Re: start-stop

Message par PascalWMR » 02 nov. 2014, 08:02

Salut Pascal
JP54 a écrit :J'essaie de faire un graphique de la température moyenne des mois d'avril et uniquement des moi d'avril.
J'aimerais bien que les pros du PHP :D jette un coup d'oeil sur ma partie PHP. je ne suis absolument pas sur que ce soit coreect. De plus comment sélectionné juste les mois d'avril et pas les autres mois
Il y a un petit problème dans ton code :!: . Tu défini 2 fois les variables $Start et $Stop.
Ici
$sql="select max(tstamp) from MiniMaxidata";
$query=mysql_query($sql);
$list=mysql_fetch_array($query);

$stop=$list[0];
$start=$stop-(86400*31);
tu récupère le $Stop à partir de la plus grande valeur de la table MiniMaxidata et tu dis que le $Start est égal à cette valeur - 31x86400 soit 31 jours.

Donc pour grapher uniquement les mois d'avril, cette partie de code est inutile.

Ensuite tu redéfini $Start et $Stop avec mktime ce qui est bon, mais c'est pas la bonne syntaxe.
Voici donc la bonne syntaxe.

Code : Tout sélectionner

<?php
require("mysql_connect.php");

$start = mktime(0,0,0,4,1,date("Y")); // 4 remplace date("n") puisque tu ne veux que les mois d'avril et il faut mettre 1 à la place de date("j") sinon date("j") extrait le jour en cours
$stop = mktime(0,0,0,5,1,date("Y")); // ici pour le mois de mktime, tu met 5 (mois de mai)
// Maintenant dans la requête sql, tu extrait les données qui sont supérieures ou égales à $Start (soit le 01/04/yyyy 00h00mn00s) et inférieures à $stop pour ne pas extraire le 1 mai
$sql = "SELECT tstamp, t_out_moy FROM MiniMaxidata where tstamp >= '$start' and  tstamp < '$stop' ORDER BY 1";
Nb dans la syntaxe de mktime, le paramètre date("Y") détermine l'année en cours. Si tu veux extraire une autre année, il faut remplacer date("Y") par l'année désirée sur 4 chiffres soit pour 2013, mktime(0,0,0,4,1,2013).

Bon dimanche (à priori pluvieux)

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

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

Re: start-stop

Message par PascalWMR » 02 nov. 2014, 08:32

Re bonjour

Je viens d'y penser

Cette requête exécutée sans start ni stop, extrait directement les températures moyennes des mois d'avril uniquement sur toute la base de donnée et les classe par année et mois.

SELECT substr(recdateTZ,1,6), avg(t_out_moy) FROM MiniMaxidata WHERE substr(recdateTZ,5,2)='04' group by substr(recdateTZ,1,6) order by 1

Si ça peut servir :mrgreen:

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

JP54
Messages : 331
Enregistré le : 15 févr. 2014, 06:44
Localisation : JARNY Meurthe-et-Moselle (54) Région Lorraine
Contact :

Re: start-stop

Message par JP54 » 02 nov. 2014, 09:27

Salut Pascal, merci pour ton aide,
J'ai mis ton premier code, ça fonctionne (je n'en doutais pas), mais ça graphe les températures moyenne des jours du mois d'avril du 1er au 30 et non la température moyenne du mois.
Avec la deuxième requête:
SELECT substr(recdateTZ,1,6), avg(t_out_moy) FROM MiniMaxidata WHERE substr(recdateTZ,5,2)='04' group by substr(recdateTZ,1,6) order by 1
Rien ne s'affiche dans le graphique, je pense que c'est normal vu qu'elle est prévue pour extraire les températures moyenne des mois d'avril
Je cherche afin de corriger le problème et d'avoir la température moyenne d'avril et non la température moyenne des jours d'avril
Station VP2 Weatherlink 5.8.1 VP2SQL 3.0.0.17 NOAAtable 1.0.0.30 Windows 7 Pro
http://www.meteo-jarny.com/

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

Re: start-stop

Message par PascalWMR » 02 nov. 2014, 09:38

Re JP¨

Essaie cette requête, c'est la même que l'autre sauf qu'elle extrait tstamp dont tu peux te servir pour faire ton graph.

SELECT tstamp, avg(t_out_moy) FROM MiniMaxidata WHERE substr(recdateTZ,5,2)='04' group by substr(recdateTZ,1,6) order by 1.

Pour comprendre, il faudrait que j'ai le restant de ton code php

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